OneLake 카탈로그

OneLake 카탈로그 (OneLake catalog)

Microsoft OneLake에 저장된 데이터를 ClickHouse로 조회하는 방법을 살펴봐요.

출처: 문서

본문

ClickHouse는 여러 카탈로그(OneLake, Unity, Glue, Polaris 등)와의 통합을 지원해요. 이 가이드에서는 ClickHouse와 OneLake를 사용해 Microsoft OneLake에 저장된 데이터를 조회하는 단계를 안내할게요. Microsoft OneLake는 lakehouse에 여러 테이블 포맷을 지원해요. ClickHouse를 사용하면 Iceberg 테이블을 조회할 수 있어요.

이 기능은 베타이므로 SET allow_database_iceberg = 1;을 사용해 활성화해야 해요.

OneLake 요구 사항 수집하기

Microsoft Fabric에서 테이블을 조회하기 전에 다음 정보를 수집해야 해요:

  • OneLake 테넌트 ID(여러분의 Entra ID)
  • 애플리케이션(클라이언트) ID
  • 클라이언트 시크릿
  • 웨어하우스 ID와 데이터 항목 ID

여러분의 웨어하우스 ID는 워크스페이스 ID예요. 데이터 항목 ID의 경우 Lakehouse ID를 권장해요. 테스트에서 Warehouse ID로는 작동하지 않았어요. 이 값을 찾는 데 도움이 필요하면 Microsoft OneLake 문서를 참고하세요.

OneLake와 ClickHouse 사이의 연결 만들기

위의 필요한 정보가 있으면 Microsoft OneLake와 ClickHouse 사이의 연결을 만들 수 있어요. 하지만 그 전에 카탈로그를 활성화해야 해요:

SET allow_database_iceberg=1

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>'

ClickHouse로 OneLake 조회하기

이제 연결이 있으니 OneLake를 조회할 수 있어요:

SHOW TABLES FROM onelake_catalog
   ┌─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 │
   └───────────────────────────────┘

Iceberg 클라이언트를 사용한다면 Uniform이 활성화된 Delta 테이블만 표시돼요. 테이블을 조회하려면:

SELECT *
FROM onelake_catalog.`year_2017.green_tripdata_2017`
LIMIT 1
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.parquet

백틱 필요 ClickHouse는 네임스페이스를 하나 이상 지원하지 않기 때문에 백틱이 필요해요.

테이블 DDL을 검사하려면:

SHOW CREATE TABLE onelake_catalog.`year_2017.green_tripdata_2017`
   ┌─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') │
   └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

데이터 레이크에서 ClickHouse로 데이터 로드하기

OneLake에서 ClickHouse로 데이터를 로드해야 한다면:

CREATE TABLE trips
ENGINE = MergeTree
ORDER BY coalesce(VendorID, 0)
AS SELECT *
FROM onelake_catalog.`year_2017.green_tripdata_2017`
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.

더 알아보기 (Learn more)