Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Interroger directement les formats de table ouverts

ClickHouse fournit des fonctions de table pour interroger des données stockées dans des formats de table ouverts directement dans le stockage objet. Cela ne nécessite pas de connexion à un catalogue externe : les données sont interrogées sur place, de la même manière qu’AWS Athena lit depuis S3.

Vous transmettez le chemin de stockage et les identifiants directement dans l’appel de fonction, et ClickHouse s’occupe du reste. Toute la syntaxe et toutes les fonctions de ClickHouse SQL sont disponibles, et les requêtes bénéficient de l’exécution parallélisée de ClickHouse et de son lecteur Parquet natif performant.

Les exemples suivants utilisent le dataset hits stocké au format lakehouse sur S3. Pour chaque format lakehouse, des fonctions dédiées existent pour chaque fournisseur de stockage objet.

La fonction de table iceberg (alias de icebergS3) lit les tables Iceberg directement depuis l'object storage. Des variantes existent pour chaque backend de stockage : icebergS3, icebergAzure, icebergHDFS et icebergLocal.

Exemple de syntaxe :

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])

Exemple :

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 cluster

La fonction icebergS3Cluster distribue les lectures sur plusieurs nœuds d'un cluster ClickHouse. Le nœud initiateur établit des connexions vers tous les nœuds et distribue dynamiquement les fichiers de données. Chaque nœud worker demande et traite des tâches jusqu'à ce que tous les fichiers aient été lus. icebergCluster est un alias de icebergS3Cluster. Des variantes existent également pour Azure (icebergAzureCluster) et HDFS (icebergHDFSCluster).

Exemple de syntaxe :

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])

Exemple (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

Moteur de table

Plutôt que d'utiliser la fonction de table dans chaque requête, vous pouvez créer une table persistante à l'aide du moteur de table Iceberg. Les données résident toujours dans le stockage d'objets et sont lues à la demande - aucune donnée n'est copiée dans ClickHouse. L'avantage est que la définition de la table est stockée dans ClickHouse et peut être partagée entre utilisateurs et sessions sans que chaque utilisateur ait à spécifier le chemin de stockage et les identifiants. Des variantes du moteur existent pour chaque backend de stockage : IcebergS3 (ou l'alias Iceberg), IcebergAzure, IcebergHDFS et IcebergLocal.

Le table engine et la table function prennent tous deux en charge la mise en cache des données, en utilisant le même mécanisme de mise en cache que les moteurs de stockage S3, AzureBlobStorage et HDFS. De plus, un metadata cache stocke les informations des fichiers manifest en mémoire, réduisant ainsi les lectures répétées des métadonnées Iceberg. Ce cache est activé par défaut via le paramètre use_iceberg_metadata_files_cache.

Exemple de syntaxe :

Le moteur de table Iceberg est 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])

Exemple :

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.

Pour les fonctionnalités prises en charge, notamment le partition pruning, la schema evolution, le time travel, le caching et bien d'autres, consultez la matrice de compatibilité. Pour la référence complète, consultez la documentation de la fonction de table iceberg et du moteur de table Iceberg.

Navigation