Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Consulta directa de formatos de tabla abiertos

ClickHouse proporciona funciones de tabla para consultar datos almacenados en formatos de tabla abiertos directamente en el almacenamiento de objetos. No es necesario conectarse a un catálogo externo: los datos se consultan in situ, de forma similar a como AWS Athena lee desde S3.

Se especifican directamente en la llamada a la función la ruta de almacenamiento y las credenciales, y ClickHouse se encarga del resto. Toda la sintaxis y las funciones de ClickHouse SQL están disponibles, y las consultas se benefician de la ejecución en paralelo de ClickHouse y de su eficiente lector nativo de Parquet.

Los siguientes ejemplos usan el dataset hits almacenado en cada formato de lakehouse en S3. Para cada formato de lakehouse, existen funciones específicas para cada proveedor de almacenamiento de objetos.

La función de tabla iceberg (alias de icebergS3) lee tablas Iceberg directamente desde el almacenamiento de objetos. Existen variantes para cada backend de almacenamiento: icebergS3, icebergAzure, icebergHDFS e icebergLocal.

Sintaxis de ejemplo:

icebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])

icebergAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])

icebergLocal(path_to_table, [,format] [,compression_method])

Ejemplo:

SELECT
    url,
    count() AS cnt
FROM icebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
┌─url────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │ -- 3.29 million
│ http://kinopoisk.ru                                │ 1625250 │ -- 1.63 million
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 3.375 sec. Processed 100.00 million rows, 9.98 GB (29.63 million rows/s., 2.96 GB/s.)
Peak memory usage: 10.48 GiB.

Variante de clúster

La función icebergS3Cluster distribuye las lecturas entre múltiples nodos en un clúster de ClickHouse. El nodo iniciador establece conexiones con todos los nodos y distribuye los archivos de datos de forma dinámica. Cada nodo worker solicita y procesa tareas hasta que todos los archivos han sido leídos. icebergCluster es un alias de icebergS3Cluster. También existen variantes para Azure (icebergAzureCluster) y HDFS (icebergHDFSCluster).

Sintaxis de ejemplo:

icebergS3Cluster(cluster_name, url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])
-- icebergCluster is an alias for icebergS3Cluster

icebergAzureCluster(cluster_name, connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])

Ejemplo (ClickHouse Cloud):

SELECT
    url,
    count() AS cnt
FROM icebergS3Cluster(
    'default',
    'https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/'
)
GROUP BY url
ORDER BY cnt DESC
LIMIT 5

Motor de tabla

Como alternativa al uso de la función de tabla en cada consulta, puede crear una tabla persistente mediante el motor de tabla Iceberg. Los datos siguen residiendo en object storage y se leen bajo demanda; no se copia ningún dato en ClickHouse. La ventaja es que la definición de tabla se almacena en ClickHouse y puede compartirse entre usuarios y sesiones sin que cada usuario tenga que especificar la ruta de almacenamiento ni las credenciales. Existen variantes del motor para cada backend de almacenamiento: IcebergS3 (o el alias Iceberg), IcebergAzure, IcebergHDFS e IcebergLocal.

Tanto el motor de tabla como la función de tabla admiten caché de datos, utilizando el mismo mecanismo de caché que los motores de almacenamiento S3, AzureBlobStorage y HDFS. Además, un caché de metadatos almacena en memoria la información de los archivos de manifiesto, lo que reduce las lecturas repetidas de metadatos de Iceberg. Este caché está habilitado de forma predeterminada mediante la configuración use_iceberg_metadata_files_cache.

Sintaxis de ejemplo:

El motor de tabla Iceberg es un alias de IcebergS3.

CREATE TABLE iceberg_table
    ENGINE = IcebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])

CREATE TABLE iceberg_table
    ENGINE = IcebergAzure(connection_string|storage_account_url, container_name, blobpath, [account_name, account_key, format, compression])

CREATE TABLE iceberg_table
    ENGINE = IcebergLocal(path_to_table, [,format] [,compression_method])

Ejemplo:

CREATE TABLE hits_iceberg
    ENGINE = IcebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')

SELECT
    url,
    count() AS cnt
FROM hits_iceberg
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
┌─url────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │
│ http://kinopoisk.ru                                │ 1625250 │
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 2.737 sec. Processed 100.00 million rows, 9.98 GB (36.53 million rows/s., 3.64 GB/s.)
Peak memory usage: 10.53 GiB.

Para ver las funcionalidades compatibles, incluidas la poda de particiones, la evolución de esquemas, el viaje en el tiempo, el almacenamiento en caché y más, consulte la matriz de compatibilidad. Para obtener la referencia completa, consulte la documentación de la función de tabla iceberg y del motor de tabla Iceberg.

Navigation