ClickHouse prend en charge l’intégration avec plusieurs catalogues (OneLake, Unity, Glue, Polaris, etc.). Ce guide vous explique comment interroger, avec ClickHouse et OneLake, les données stockées dans Microsoft OneLake.
Microsoft OneLake prend en charge plusieurs formats de table pour son lakehouse. Avec ClickHouse, vous pouvez interroger des tables Iceberg.
Collecte des prérequis OneLake
Avant d'interroger votre table dans Microsoft Fabric, vous devrez rassembler les informations suivantes :
- Un ID de locataire OneLake (votre ID Entra)
- Un ID d'application (client)
- Un secret client
- Un ID de warehouse et un ID d'élément de données
Votre ID de warehouse correspond à votre Workspace ID.
Pour l'ID d'élément de données, nous vous recommandons d'utiliser votre ID Lakehouse. Lors de nos tests, cela ne fonctionne pas avec un ID de warehouse.
Consultez la documentation Microsoft OneLake pour savoir comment trouver ces valeurs.
Créer une connexion entre OneLake et ClickHouse
Avec les informations requises ci-dessus, vous pouvez désormais créer une connexion entre Microsoft OneLake et ClickHouse, mais vous devez d’abord activer les catalogues :
SET allow_database_iceberg=1Se connecter à OneLake
CREATE DATABASE onelake_catalog
ENGINE = DataLakeCatalog('https://onelake.table.fabric.microsoft.com/iceberg')
SETTINGS
catalog_type = 'onelake',
warehouse = 'warehouse_id/data_item_id',
onelake_tenant_id = '<tenant_id>',
oauth_server_uri = 'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token',
auth_scope = 'https://storage.azure.com/.default',
onelake_client_id = '<client_id>',
onelake_client_secret = '<client_secret>'Interroger OneLake avec ClickHouse
Maintenant que la connexion est établie, vous pouvez commencer à interroger OneLake :
SHOW TABLES FROM onelake_catalogQuery id: 8f6124c4-45c2-4351-b49a-89dc13e548a7
┌─name──────────────────────────┐
1. │ year_2017.green_tripdata_2017 │
2. │ year_2018.green_tripdata_2018 │
3. │ year_2019.green_tripdata_2019 │
4. │ year_2020.green_tripdata_2020 │
5. │ year_2022.green_tripdata_2022 │
└───────────────────────────────┘Si vous utilisez le client Iceberg, seules les tables Delta pour lesquelles Uniform est activé seront affichées :
Pour exécuter une requête sur une table :
SELECT *
FROM onelake_catalog.`year_2017.green_tripdata_2017`
LIMIT 1Query id: db6b4bda-cc58-4ca1-8891-e0d14f02c890
Row 1:
──────
VendorID: 2
lpep_pickup_datetime: 2017-05-18 16:55:43.000000
lpep_dropoff_datetime: 2017-05-18 18:04:11.000000
store_and_fwd_flag: N
RatecodeID: 2
PULocationID: 130
DOLocationID: 48
passenger_count: 2
trip_distance: 12.43
fare_amount: 52
extra: 4.5
mta_tax: 0.5
tip_amount: 0
tolls_amount: 33
ehail_fee: ᴺᵁᴸᴸ
improvement_surcharge: 0.3
total_amount: 90.3
payment_type: 2
trip_type: 1
congestion_surcharge: ᴺᵁᴸᴸ
source_file: green_tripdata_2017-05.parquetPour examiner le DDL de la table :
SHOW CREATE TABLE onelake_catalog.`year_2017.green_tripdata_2017`Query id: 8bd5bd8e-83be-453e-9a88-32de12ba7f24
┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
1. │ CREATE TABLE onelake_catalog.`year_2017.green_tripdata_2017` ↴│
│↳( ↴│
│↳ `VendorID` Nullable(Int64), ↴│
│↳ `lpep_pickup_datetime` Nullable(DateTime64(6, 'UTC')), ↴│
│↳ `lpep_dropoff_datetime` Nullable(DateTime64(6, 'UTC')), ↴│
│↳ `store_and_fwd_flag` Nullable(String), ↴│
│↳ `RatecodeID` Nullable(Int64), ↴│
│↳ `PULocationID` Nullable(Int64), ↴│
│↳ `DOLocationID` Nullable(Int64), ↴│
│↳ `passenger_count` Nullable(Int64), ↴│
│↳ `trip_distance` Nullable(Float64), ↴│
│↳ `fare_amount` Nullable(Float64), ↴│
│↳ `extra` Nullable(Float64), ↴│
│↳ `mta_tax` Nullable(Float64), ↴│
│↳ `tip_amount` Nullable(Float64), ↴│
│↳ `tolls_amount` Nullable(Float64), ↴│
│↳ `ehail_fee` Nullable(Float64), ↴│
│↳ `improvement_surcharge` Nullable(Float64), ↴│
│↳ `total_amount` Nullable(Float64), ↴│
│↳ `payment_type` Nullable(Int64), ↴│
│↳ `trip_type` Nullable(Int64), ↴│
│↳ `congestion_surcharge` Nullable(Float64), ↴│
│↳ `source_file` Nullable(String) ↴│
│↳) ↴│
│↳ENGINE = Iceberg('abfss://<warehouse_id>@onelake.dfs.fabric.microsoft.com/<data_item_id>/Tables/year_2017/green_tripdata_2017') │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘Charger des données depuis votre data lake vers ClickHouse
Si vous devez charger des données depuis OneLake vers ClickHouse :
CREATE TABLE trips
ENGINE = MergeTree
ORDER BY coalesce(VendorID, 0)
AS SELECT *
FROM onelake_catalog.`year_2017.green_tripdata_2017`Query id: d15983a6-ef6a-40fe-80d5-19274b9fe328
Ok.
0 rows in set. Elapsed: 32.570 sec. Processed 11.74 million rows, 275.37 MB (360.36 thousand rows/s., 8.45 MB/s.)
Peak memory usage: 1.31 GiB.