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 5Moteur 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.
La fonction de table deltaLake (alias de deltaLakeS3) lit les tables Delta Lake depuis l'object storage. Des variantes existent pour d'autres backends : deltaLakeAzure et deltaLakeLocal.
Exemple de syntaxe :
deltaLakeS3(url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])
deltaLakeAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
deltaLakeLocal(path, [,format])Exemple :
SELECT
URL,
count() AS cnt
FROM deltaLake('https://datasets-documentation.s3.amazonaws.com/lake_formats/delta_lake/')
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.878 sec. Processed 100.00 million rows, 14.82 GB (25.78 million rows/s., 3.82 GB/s.)
Peak memory usage: 9.16 GiB.Variante de cluster
La fonction deltaLakeCluster distribue les lectures sur plusieurs nœuds d'un cluster ClickHouse. Le nœud initiateur répartit dynamiquement les fichiers de données vers les nœuds worker pour un traitement parallèle. deltaLakeS3Cluster est un alias de deltaLakeCluster. Une variante Azure (deltaLakeAzureCluster) est également disponible.
Exemple de syntaxe :
deltaLakeCluster(cluster_name, url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])
-- deltaLakeS3Cluster is an alias for deltaLakeCluster
deltaLakeAzureCluster(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 deltaLakeCluster(
'default',
'https://datasets-documentation.s3.amazonaws.com/lake_formats/delta_lake/'
)
GROUP BY URL
ORDER BY cnt DESC
LIMIT 5Moteur de table
Comme alternative à l'utilisation de la fonction de table dans chaque requête, vous pouvez créer une table persistante à l'aide du moteur de table DeltaLake si vous utilisez un stockage compatible S3. 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 les utilisateurs et les sessions sans que chaque utilisateur ait besoin de spécifier le chemin de stockage et les identifiants.
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.
Exemple de syntaxe :
CREATE TABLE delta_table
ENGINE = DeltaLake(url [,aws_access_key_id, aws_secret_access_key])Exemple :
CREATE TABLE hits_delta
ENGINE = DeltaLake('https://datasets-documentation.s3.amazonaws.com/lake_formats/delta_lake/')
SELECT
URL,
count() AS cnt
FROM hits_delta
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: 3.608 sec. Processed 100.00 million rows, 14.82 GB (27.72 million rows/s., 4.11 GB/s.)
Peak memory usage: 9.27 GiB.Pour les fonctionnalités prises en charge, notamment les backends de stockage, la mise en cache et bien d'autres, consultez la matrice de compatibilité. Pour une référence complète, consultez la documentation de la table function deltaLake et du table engine DeltaLake.
La fonction de table hudi lit des tables Hudi à partir de S3.
Syntaxe :
hudi(url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])Variante cluster
La fonction hudiCluster répartit les opérations de lecture entre plusieurs nœuds d’un cluster ClickHouse. Le nœud initiateur répartit dynamiquement les fichiers de données entre les nœuds worker afin d’en paralléliser le traitement.
hudiCluster(cluster_name, url [,aws_access_key_id, aws_secret_access_key] [,format] [,structure] [,compression])Moteur de table
Au lieu d’utiliser la fonction de table dans chaque requête, vous pouvez créer une table persistante à l’aide du moteur de table Hudi. Les données restent dans le stockage objet 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 à préciser le chemin de stockage et les informations d’authentification.
Syntaxe :
CREATE TABLE hudi_table
ENGINE = Hudi(url [,aws_access_key_id, aws_secret_access_key])Pour les fonctionnalités prises en charge, notamment les backends de stockage, consultez la matrice de prise en charge. Pour une référence complète, consultez la documentation de la fonction de table hudi et du moteur de table Hudi.
La fonction de table paimon (alias de paimonS3) lit des tables Paimon à partir du stockage d’objets. Il existe des variantes pour chaque backend de stockage : paimonS3, paimonAzure, paimonHDFS et paimonLocal.
Syntaxe :
paimon(url [,access_key_id, secret_access_key] [,format] [,structure] [,compression])
paimonS3(url [,access_key_id, secret_access_key] [,format] [,structure] [,compression])
paimonAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
paimonHDFS(path_to_table, [,format] [,compression_method])
paimonLocal(path_to_table, [,format] [,compression_method])Variante pour cluster
La fonction paimonS3Cluster répartit les lectures entre plusieurs nœuds d’un cluster ClickHouse. Le nœud initiateur répartit dynamiquement les fichiers de données entre des nœuds worker pour un traitement parallèle. paimonCluster est un alias de paimonS3Cluster. Il existe également des variantes pour Azure (paimonAzureCluster) et HDFS (paimonHDFSCluster).
paimonS3Cluster(cluster_name, url [,access_key_id, secret_access_key] [,format] [,structure] [,compression])
-- paimonCluster is an alias for paimonS3Cluster
paimonAzureCluster(cluster_name, connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])
paimonHDFSCluster(cluster_name, path_to_table, [,format] [,compression_method])Moteur de table
ClickHouse fournit des moteurs de table PaimonS3, PaimonAzure, PaimonHDFS et PaimonLocal expérimentaux. Activez-les avec allow_experimental_paimon_storage_engine = 1.
Pour connaître les fonctionnalités prises en charge, notamment les backends de stockage et autres, consultez la matrice de prise en charge. Pour une référence complète, consultez la documentation de la fonction de table paimon.