Crear tabla
Argumentos del motor
S3, AzureBlobStorage, HDFS y File, respectivamente.
format indica el formato de los archivos de datos de la tabla Iceberg.
Para IcebergS3, se puede usar el parámetro opcional extra_credentials para pasar un role_arn para acceso basado en roles en ClickHouse Cloud. Consulta Secure S3 para ver los pasos de configuración.
Los parámetros del motor pueden especificarse mediante colecciones con nombre
Ejemplo
Alias
Iceberg ahora es un alias de IcebergS3.
Tipos de datos
Tipos primitivos
| Tipo de Iceberg | Tipo de ClickHouse | Notas |
|---|---|---|
boolean | Bool | |
int | Int32 | |
long, bigint | Int64 | |
float | Float32 | |
double | Float64 | |
date | Date32 | |
time | Int64 | Microsegundos desde la medianoche |
timestamp | DateTime64(6) | Microsegundos, sin zona horaria |
timestamptz | DateTime64(6, 'UTC') | Microsegundos, zona horaria UTC |
timestamp_ns | DateTime64(9) | Nanosegundos, sin zona horaria (solo a partir de Iceberg v3) |
timestamptz_ns | DateTime64(9, 'UTC') | Nanosegundos, zona horaria UTC (solo a partir de Iceberg v3) |
string, binary | String | |
uuid | UUID | |
fixed(N) | FixedString(N) | |
decimal(P, S) | Decimal(P, S) |
Tipos complejos
| Tipo de Iceberg | Tipo de ClickHouse |
|---|---|
list | Array |
map | Map |
struct | Tuple |
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, consulte https://iceberg.apache.org/spec/#partitioning
Viaje en el tiempo
Procesamiento de tablas con filas eliminadas
- Eliminaciones por posición
- Eliminaciones por igualdad (compatibles a partir de la versión 25.8+)
- Vectores de eliminación (introducido en la v3)
Uso básico
iceberg_timestamp_ms e iceberg_snapshot_id en la misma consulta.
Consideraciones importantes
-
Normalmente, las instantáneas se crean cuando:
- Se escriben datos nuevos en la tabla
- Se realiza algún tipo de compactación de datos
- Los cambios de 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 aparecen las dos columnas originales
- En ts3: Aparecen 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
Iceberg en ClickHouse, el sistema necesita localizar el archivo metadata.json correcto que describe la estructura de la tabla Iceberg. Así funciona este proceso de resolución:
Búsqueda de candidatos
- Especificación directa de la ruta:
- Si estableces
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:- Solo examinará los archivos
.metadata.jsondel directoriometadata - Filtrará los archivos que contengan un campo
table-uuidque coincida con el UUID especificado (sin distinguir entre mayúsculas y minúsculas)
- Solo examinará los archivos
- 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
- Se selecciona el archivo con el valor
-
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 el formatoV.metadata.jsonoV-uuid.metadata.json)
Iceberg de ClickHouse interpreta directamente los archivos almacenados en S3 como tablas Iceberg, por lo que es importante comprender estas reglas de resolución.
Caché de datos
Iceberg admiten el caché de datos, al igual que los almacenamientos S3, AzureBlobStorage y HDFS. Consulte aquí.
Caché de metadatos
Iceberg admiten una caché de metadatos que almacena información de los archivos de manifiesto, la lista de manifiestos y el JSON de metadatos. La caché reside en memoria. Esta funcionalidad se controla mediante la configuración use_iceberg_metadata_files_cache, habilitada de forma predeterminada.
Precarga asíncrona de metadatos
Iceberg configurando iceberg_metadata_async_prefetch_period_ms. Si se establece en 0 (valor predeterminado) o si la caché de metadatos no está habilitada, la precarga asíncrona se desactiva.
Para habilitar esta función, debe proporcionarse un valor distinto de cero en milisegundos. Este valor representa el intervalo entre los ciclos de precarga.
Si está habilitada, el servidor ejecutará una operación recurrente en segundo plano para listar el catálogo remoto y detectar una nueva versión de los metadatos. A continuación, los analizará y recorrerá recursivamente la instantánea, obteniendo los archivos activos de lista de manifiestos y los archivos de manifiesto.
Los archivos que ya estén disponibles en la caché de metadatos no se volverán a descargar. Al final de cada ciclo de precarga, la instantánea de metadatos más reciente estará disponible en la caché de metadatos.
iceberg_metadata_staleness_ms debe especificarse como parámetro de consulta o de sesión. De forma predeterminada (0, no especificado), en el contexto de cada consulta, el servidor obtendrá los metadatos más recientes del catálogo remoto.
Al especificar una tolerancia a la desactualización de los metadatos, se permite que el servidor use la versión en caché de la instantánea de metadatos sin consultar el catálogo remoto. Si hay una versión de metadatos en caché y se descargó dentro de la ventana de desactualización indicada, se usará para procesar la consulta.
De lo contrario, se obtendrá la versión más reciente del catálogo remoto.
ICEBERG_SCEDULE_POOL, que es el threadpool del servidor para operaciones en segundo plano en tablas Iceberg activas. El tamaño de este threadpool se controla mediante el parámetro de configuración del servidor iceberg_background_schedule_pool_size (el valor predeterminado es 10).
Nota: Actualmente se espera que el tamaño de la caché de metadatos sea suficiente para alojar por completo la instantánea de metadatos más reciente de todas las tablas activas, si la precarga asíncrona está habilitada.