For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/data-analytics/analytics/clickhouse-iceberg-delta-s3queue.md.

ClickHouse - Interroger des tables Iceberg et Delta Lake et ingérer des fichiers en continu

Voir en Markdown

Découvrez comment interroger des tables Iceberg et Delta Lake stockées dans OVHcloud Object Storage depuis ClickHouse et charger les nouveaux fichiers en continu

Objectif

Si votre plateforme de données stocke des tables dans des formats ouverts comme Apache Iceberg ou Delta Lake dans un bucket OVHcloud Object Storage, ClickHouse peut les interroger sur place, sans les copier. ClickHouse peut aussi surveiller un bucket et charger automatiquement chaque nouveau fichier dans une table.

Ce guide explique comment interroger des tables Iceberg et Delta Lake, et comment ingérer des fichiers en continu avec le moteur S3Queue, depuis un cluster Public Cloud Analytics avec ClickHouse.

Prérequis

En pratique

Avant de commencer - Bucket et utilisateur S3

  • Créez le bucket avec l'API compatible S3.
  • Vous pouvez activer le chiffrement côté serveur avec des clés gérées par OVHcloud (SSE-OMK) sur le bucket : il est transparent pour ClickHouse et pour les outils qui écrivent vos tables.
  • Donnez à l'utilisateur S3 l'accès au bucket. Les outils qui écrivent des tables Iceberg et Delta Lake (par exemple PyIceberg ou delta-rs) ont besoin d'autres droits que la lecture et l'écriture d'objets, comme les envois en plusieurs parties. S'ils échouent avec Access Denied, donnez à l'utilisateur S3 toutes les actions sur ce seul bucket :
{
  "Statement": [
    {
      "Sid": "LakehouseBucket",
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Resource": [
        "arn:aws:s3:::<bucket>",
        "arn:aws:s3:::<bucket>/*"
      ]
    }
  ]
}

Dans les exemples de moteurs de table IcebergS3 et DeltaLake ci-dessous, lake_s3 est une named collection qui pointe vers un dossier de votre bucket :

CREATE NAMED COLLECTION lake_s3 AS
    url = 'https://s3.<region>.io.cloud.ovh.net/<bucket>/lakehouse/',
    access_key_id = '<cle_acces>',
    secret_access_key = '<cle_secrete>';

Interroger une table Iceberg

Indiquez l'URL du dossier de la table Iceberg (celui qui contient ses dossiers metadata et data) et vos clés S3 à la fonction de table icebergS3. ClickHouse lit la dernière version de la table et détecte son schéma :

SELECT city, count(), sum(amount)
FROM icebergS3('https://s3.<region>.io.cloud.ovh.net/<bucket>/lakehouse/warehouse/demo/sales/', '<cle_acces>', '<cle_secrete>')
GROUP BY city;

Pour interroger la table régulièrement, créez une table avec le moteur IcebergS3 :

CREATE TABLE sales_iceberg
ENGINE = IcebergS3(lake_s3, filename = 'warehouse/demo/sales/');

SELECT count() FROM sales_iceberg;
Warning

Utilisez les tables Iceberg en lecture seule depuis ClickHouse. L'écriture dans une table Iceberg depuis ClickHouse est une fonctionnalité bêta : elle est refusée par défaut et ne doit pas être activée. Continuez à écrire vos tables Iceberg avec les outils de votre plateforme de données.

ClickHouse lit la table directement dans son dossier du bucket. La connexion de ClickHouse à un catalogue Iceberg (moteur de base de données DataLakeCatalog) n'est pas disponible.

Interroger une table Delta Lake

Indiquez l'URL du dossier de la table Delta Lake (celui qui contient son dossier _delta_log) et vos clés S3 à la fonction de table deltaLakeS3, ou créez une table avec le moteur DeltaLake :

SELECT day, round(sum(amount), 1)
FROM deltaLakeS3('https://s3.<region>.io.cloud.ovh.net/<bucket>/lakehouse/delta/sales/', '<cle_acces>', '<cle_secrete>')
GROUP BY day
ORDER BY day;

CREATE TABLE sales_delta
ENGINE = DeltaLake(lake_s3, filename = 'delta/sales/');

Ingérer de nouveaux fichiers en continu avec S3Queue

Le moteur S3Queue surveille un dossier de votre bucket et traite chaque nouveau fichier une seule fois. Associé à une vue matérialisée, il charge dans une table ClickHouse chaque fichier déposé dans le dossier, sans tâche externe.

  1. Créez la table qui reçoit les données :

    CREATE TABLE events (id UInt64, kind String)
    ENGINE = MergeTree
    ORDER BY id;
  2. Créez la file d'attente sur le dossier à surveiller. mode = 'unordered' traite les fichiers dans n'importe quel ordre, chacun une seule fois :

    CREATE TABLE events_queue (id UInt64, kind String)
    ENGINE = S3Queue('https://s3.<region>.io.cloud.ovh.net/<bucket>/queue/*.csv', '<cle_acces>', '<cle_secrete>', 'CSVWithNames')
    SETTINGS mode = 'unordered';
  3. Créez une vue matérialisée qui déplace les lignes de la file d'attente vers la table :

    CREATE MATERIALIZED VIEW events_mv TO events
    AS SELECT * FROM events_queue;

Désormais, chaque fichier CSV écrit dans le dossier queue est chargé automatiquement dans events :

SELECT kind, count() FROM events GROUP BY kind;

Résolution des problèmes

ErreurCause et solution
Access Denied lorsque votre plateforme de données écrit la tableL'utilisateur S3 ne dispose pas de toutes les actions nécessaires à l'outil d'écriture. Reportez-vous à la section « Avant de commencer » ci-dessus.
Insert into iceberg is in betaL'écriture dans des tables Iceberg depuis ClickHouse n'est pas prise en charge. Écrivez la table avec votre plateforme de données.
Only Replicated database can be created through SQLLes moteurs de base de données comme DataLakeCatalog ne sont pas disponibles. Utilisez les fonctions de table icebergS3 et deltaLakeS3 ou les moteurs de table IcebergS3 et DeltaLake.
HTTP response code: 403 … Please check your AWS credentials and permissionsClé d'accès ou clé secrète incorrecte, ou l'utilisateur S3 n'a pas accès au bucket.

Aller plus loin

Nous serions ravis de répondre à vos questions et apprécions tout retour que vous pourriez nous faire.

Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Vous êtes sur Discord ? Rejoignez notre chaîne via https://discord.gg/ovhcloud et interagissez directement avec l'équipe qui développe notre service Analytics !

Rejoignez notre communauté d'utilisateurs.

1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.

Cette page vous a-t-elle aidé ?