Sintaxis
Argumentos
s3, azureBlobStorage, HDFS y file, respectivamente.
format se refiere al formato de los archivos de datos de la tabla Iceberg.
Para icebergS3, se puede usar un parámetro opcional extra_credentials para pasar un role_arn para acceso basado en roles en ClickHouse Cloud. Consulte Secure S3 para ver los pasos de configuración.
Valor devuelto
Ejemplo
Definir una colección con nombre
Uso de un catálogo de datos
IcebergS3 y proporcione la configuración necesaria.
Por ejemplo, al usar REST Catalog con almacenamiento MinIO:
Evolución del esquema
- int -> long
- float -> double
- decimal(P, S) -> decimal(P’, S) donde P’ > P.
Poda de particiones
use_iceberg_partition_pruning = 1. Para obtener más información sobre la poda de particiones de Iceberg, consulta https://iceberg.apache.org/spec/#partitioning
Viaje en el tiempo
Procesamiento de tablas con filas eliminadas
- Eliminaciones por igualdad
- Vectores de eliminación (introducidos en v3)
Uso básico
iceberg_timestamp_ms e iceberg_snapshot_id en la misma consulta.
Consideraciones importantes
- Las instantáneas suelen crearse cuando:
- Se escriben datos nuevos en la tabla
- Se realiza algún tipo de compactación de datos
- Los cambios en el esquema normalmente no crean instantáneas - Esto da lugar a comportamientos importantes al usar viaje en el tiempo con tablas que han pasado por una evolución del esquema.
Escenarios de ejemplo
Escenario 1: Cambios de esquema sin nuevas instantáneas
- En ts1 & ts2: Solo se muestran las dos columnas originales
- En ts3: Se muestran las tres columnas, con NULL en el precio de la primera fila
Escenario 2: Diferencias entre el esquema histórico y el actual
ALTER TABLE no crea una nueva instantánea, sino que, para la tabla actual, Spark toma el valor de schema_id del archivo de metadatos más reciente, no de una instantánea.
Escenario 3: Diferencias entre el esquema histórico y el actual
Resolución del archivo de metadatos
función de tabla iceberg en ClickHouse, el sistema necesita localizar el archivo metadata.json correcto que describe la estructura de la tabla Iceberg. A continuación, se explica cómo funciona este proceso de resolución:
Búsqueda de candidatos (por orden de prioridad)
- Especificación directa de la ruta:
*Si establece
iceberg_metadata_file_path, el sistema usará esta ruta exacta combinándola con la ruta del directorio de la tabla Iceberg.
- Cuando se proporciona este ajuste, se ignoran todos los demás ajustes de resolución.
-
Coincidencia del UUID de la tabla:
*Si se especifica
iceberg_metadata_table_uuid, el sistema: *Buscará solo archivos.metadata.jsonen el directoriometadata*Filtrará los archivos que contengan un campotable-uuidque coincida con el UUID especificado (sin distinguir entre mayúsculas y minúsculas) -
Búsqueda predeterminada:
*Si no se proporciona ninguno de los ajustes anteriores, todos los archivos
.metadata.jsondel directoriometadatapasan a ser candidatos
Selección del archivo más reciente
-
Si
iceberg_recent_metadata_file_by_last_updated_ms_fieldestá habilitado: -
Se selecciona el archivo con el valor
last-updated-msmás alto - En caso contrario:
- Se selecciona el archivo con el número de versión más alto
-
(La versión aparece como
Ven nombres de archivo con formatoV.metadata.jsonoV-uuid.metadata.json)
iceberg de ClickHouse interpreta directamente los archivos almacenados en S3 como tablas de Iceberg, por lo que es importante entender estas reglas de resolución.
Caché de metadatos
Iceberg admiten una caché de metadatos para almacenar la información de los archivos de manifiesto, la lista de manifiestos y el JSON de metadatos. La caché se guarda en memoria. Esta función está controlada por la configuración use_iceberg_metadata_files_cache, que está habilitada de forma predeterminada.
Alias
iceberg ahora es un alias de icebergS3.
Columnas virtuales
_path— Ruta del archivo. Tipo:LowCardinality(String)._file— Nombre del archivo. Tipo:LowCardinality(String)._size— Tamaño del archivo en bytes. Tipo:Nullable(UInt64). Si se desconoce el tamaño del archivo, el valor esNULL._time— Hora de la última modificación del archivo. Tipo:Nullable(DateTime). Si se desconoce la hora, el valor esNULL._etag— El etag del archivo. Tipo:LowCardinality(String). Si se desconoce el etag, el valor esNULL.
Escrituras en tablas Iceberg
Crear una tabla
Ejemplo
iceberg_use_version_hint.
Si desea comprimir el archivo metadata.json, especifique el nombre del códec en la configuración iceberg_metadata_compression_method.
INSERT
Ejemplo
DELETE
Ejemplo
Evolución del esquema
Ejemplo
Compactación
Expiración de instantáneas
INSERT, DELETE o UPDATE. Con el tiempo, esto puede dar lugar a una gran cantidad de instantáneas y archivos de datos asociados. El comando expire_snapshots elimina las instantáneas antiguas y limpia los archivos de datos que ya no están referenciados por ninguna instantánea conservada.
Sintaxis:
min-snapshots-to-keep, max-snapshot-age-ms y las anulaciones por referencia). Cuando se especifica snapshot_ids, se omite la política de retención y solo las instantáneas indicadas se consideran para su expiración.
Argumentos:
'timestamp'(posicional) oexpire_before = 'timestamp'— una cadena de fecha y hora (p. ej.,'2024-06-01 00:00:00') interpretada en la zona horaria del servidor. Actúa como mecanismo de seguridad: las instantáneas cuyotimestamp-mssea igual o posterior a este valor quedan protegidas frente a la expiración, incluso si la política de retención normalmente las expiraría. Puede combinarse consnapshot_ids; en ese caso, las instantáneas indicadas con esa marca de tiempo o una posterior no expiran.retention_period = '<duration>'— anulahistory.expire.max-snapshot-age-msa nivel de tabla solo para esta invocación. Las instantáneas anteriores a esta duración (medida desde ahora) pasan a ser candidatas para la expiración. El valor es una cadena de duración compuesta por uno o más pares{number}{unit}concatenados. Unidades admitidas:y(365 días),w(7 días),d(24 horas),h(60 minutos),m(60 segundos),s(1 segundo),ms(1 milisegundo). Las unidades pueden combinarse, p. ej.,'3d','12h','1d12h30m','500ms'.retain_last = N— anulahistory.expire.min-snapshots-to-keepa nivel de tabla solo para esta invocación. Siempre se conservan al menosNinstantáneas, independientemente de su antigüedad.snapshot_ids = [id1, id2, ...]— expira exactamente los ID de instantánea indicados (excepto las instantáneas a las que hace referencia la instantánea actual, las ramas o las etiquetas). Este modo omite por completo la política de retención y no puede combinarse conretention_periodni conretain_last.dry_run = 1— calcula qué expiraría y devuelve métricas sin escribir metadatos nuevos ni eliminar archivos.
retention_period y retain_last anulan solo los valores predeterminados de retención a nivel de tabla. Las anulaciones de retención por referencia (rama/etiqueta) configuradas en las propiedades de la tabla Iceberg (p. ej., refs.<branch>.min-snapshots-to-keep) nunca se anulan; siempre se aplican tal como se especifican en los metadatos de la tabla.metric_name String, metric_value Int64) que contiene una fila por cada métrica. Los nombres de las métricas siguen la especificación de Iceberg:
El comando realiza los siguientes pasos:
- Evalúa la política de retención (consulte a continuación) para determinar qué instantáneas deben conservarse
- Si se proporcionó un argumento de marca de tiempo, también protege todas las instantáneas en esa marca de tiempo o posteriores
- Expira las instantáneas que no se conservan según la política ni están protegidas por la salvaguarda de marca de tiempo
- Calcula qué archivos están asociados exclusivamente a instantáneas expiradas
- En modo normal: genera metadatos nuevos sin las instantáneas expiradas
- En modo normal: elimina físicamente las listas de manifiestos, los archivos de manifiesto y los archivos de datos inaccesibles
- En el modo
dry_run = 1: omite los pasos 5 y 6 y solo devuelve las métricas calculadas
Política de retención de instantáneas
expire_snapshots respeta la política de retención de instantáneas de Iceberg. La retención se configura mediante propiedades de tabla de Iceberg y anulaciones por referencia:
Cada referencia de instantánea (
refs en los metadatos de Iceberg) puede sobrescribir estos valores con campos por referencia: min-snapshots-to-keep, max-snapshot-age-ms y max-ref-age-ms.
Evaluación de la retención:
- Para cada rama (incluida
main): se recorre la cadena de ancestros a partir de la cabecera de la rama. Las instantáneas se conservan mientras se cumpla cualquiera de estas condiciones:- La instantánea es una de las primeras
min-snapshots-to-keepde la cadena - La antigüedad de la instantánea está dentro de
max-snapshot-age-ms(es decir,now - timestamp-ms <= max-snapshot-age-ms)
- La instantánea es una de las primeras
- Para las etiquetas: la instantánea etiquetada se conserva, salvo que la etiqueta haya superado su
max-ref-age-ms, en cuyo caso se elimina la referencia de la etiqueta - Las referencias distintas de
maincuya antigüedad superamax-ref-age-msse eliminan por completo (la ramamainnunca se elimina) - Las referencias colgantes que apuntan a instantáneas inexistentes se eliminan con una advertencia
- La instantánea actual siempre se conserva, independientemente de la configuración de retención
ALTER TABLE EXECUTE, que es un privilegio secundario de ALTER TABLE en la jerarquía de control de acceso de ClickHouse. Puede concederlo específicamente o a través del privilegio principal:
- Solo se admiten tablas Iceberg format version 2 (las instantáneas v1 no garantizan
manifest-list, que es necesario para identificar de forma segura los archivos que deben limpiarse) - La instantánea actual siempre se conserva, incluso si es anterior a la marca de tiempo especificada
- Requiere que la configuración
allow_insert_into_icebergesté habilitada - Requiere que la configuración
allow_experimental_expire_snapshotsesté habilitada - La autorización propia del catalog (autenticación del REST catalog, AWS Glue IAM, etc.) se aplica de forma independiente cuando ClickHouse actualiza los metadatos
Eliminar archivos huérfanos
remove_orphan_files identifica y elimina estos archivos huérfanos.
Sintaxis:
Ejemplos:
metric_name y metric_value, que muestran el número de archivos eliminados (o que se eliminarían en el modo dry_run) por categoría. Las categorías de archivos se clasifican mediante heurísticas basadas en convenciones de nomenclatura; los archivos que no coinciden con ningún patrón específico se asignan por defecto a deleted_data_files_count:
Configuración:
- Requiere Iceberg format version 2 (o superior). Las tablas de la versión 1 se rechazan porque no tienen punteros
manifest-listen las instantáneas, que son necesarios para determinar de forma segura el conjunto de archivos accesibles. Ejecutar el comando en una tabla v1 devuelve un errorBAD_ARGUMENTS. - Requiere que estén habilitadas tanto la configuración
allow_insert_into_icebergcomoallow_iceberg_remove_orphan_files - Se recomienda ejecutar
expire_snapshotsantes deremove_orphan_filespara que los archivos referenciados exclusivamente por instantáneas expiradas se limpien primero - Use
dry_run = 1para ver los orphan files antes de eliminarlos - El umbral
older_thanprotege contra la eliminación de archivos de escrituras en curso; el umbral predeterminado de 3 días proporciona un amplio margen de seguridad