الانتقال إلى المحتوى الرئيسي
يدعم ClickHouse التكامل مع عدة كتالوجات (Unity وGlue وPolaris وغيرها). يوضح هذا الدليل الخطوات اللازمة للاستعلام عن بياناتك المُدارة في Databricks باستخدام ClickHouse وUnity Catalog. يدعم Databricks عدة تنسيقات بيانات في بيئة lakehouse الخاصة به. وباستخدام ClickHouse، يمكنك الاستعلام عن جداول Unity Catalog بصيغتَي Delta وIceberg.
نظرًا إلى أن هذه الميزة تجريبية، ستحتاج إلى تفعيلها باستخدام: SET allow_experimental_database_unity_catalog = 1;

تهيئة Unity في Databricks

للسماح لـ ClickHouse بالتفاعل مع Unity Catalog، عليك التأكد من أن Unity Catalog مُعَدّ للسماح بالتفاعل مع قارئ خارجي. ويمكن تحقيق ذلك باتباع دليل «تمكين الوصول إلى البيانات الخارجية في Unity Catalog». بعد تهيئة الكتالوج، يجب إنشاء بيانات اعتماد لـ ClickHouse. ويمكن استخدام طريقتين مختلفتين بحسب نمط التفاعل مع Unity:
  • بالنسبة إلى عملاء Iceberg، استخدم المصادقة عبر service principal.
  • بالنسبة إلى عملاء Delta، استخدم رمز وصول شخصي (PAT).

أذونات رمز PAT المطلوبة

عند استخدام PAT للوصول للقراءة، يجب أن يمتلك الرمز المميز أذونات تتيح لـ ClickHouse إدراج البيانات الوصفية في Unity Catalog وقراءتها. تأكد من أن PAT يمتلك على الأقل امتياز EXTERNAL USE SCHEMA، بالإضافة إلى إذن SELECT على الجدول، وUSE CATALOG على الكتالوج الأصل، وUSE SCHEMA على المخطط الأصل.

إنشاء connection بين Unity Catalog وClickHouse

بعد إعداد Unity Catalog وتفعيل authentication، أنشئ connection بين ClickHouse وUnity Catalog.

قراءة Delta

CREATE DATABASE unity
ENGINE = DataLakeCatalog('https://<workspace-id>.cloud.databricks.com/api/2.1/unity-catalog')
SETTINGS warehouse = 'CATALOG_NAME', catalog_credential = '<PAT>', catalog_type = 'unity'

قراءة جداول Iceberg

للوصول إلى جداول Iceberg المُدارة:
CREATE DATABASE unity
ENGINE = DataLakeCatalog('https://<workspace-id>.cloud.databricks.com/api/2.1/unity-catalog/iceberg-rest')
SETTINGS catalog_type = 'rest', catalog_credential = '<client-id>:<client-secret>', warehouse = 'workspace', 
oauth_server_uri = 'https://<workspace-id>.cloud.databricks.com/oidc/v1/token', auth_scope = 'all-apis,sql'

الاستعلام عن جداول Unity Catalog باستخدام ClickHouse

الآن وبعد إعداد الاتصال، يمكنك البدء في الاستعلام عبر Unity Catalog. على سبيل المثال:
USE unity;

SHOW TABLES;
┌─name───────────────────────────────────────────────┐
│ clickbench.delta_hits                              │
│ demo.fake_user                                     │
│ information_schema.catalog_privileges              │
│ information_schema.catalog_tags                    │
│ information_schema.catalogs                        │
│ information_schema.check_constraints               │
│ information_schema.column_masks                    │
│ information_schema.column_tags                     │
│ information_schema.columns                         │
│ information_schema.constraint_column_usage         │
│ information_schema.constraint_table_usage          │
│ information_schema.information_schema_catalog_name │
│ information_schema.key_column_usage                │
│ information_schema.parameters                      │
│ information_schema.referential_constraints         │
│ information_schema.routine_columns                 │
│ information_schema.routine_privileges              │
│ information_schema.routines                        │
│ information_schema.row_filters                     │
│ information_schema.schema_privileges               │
│ information_schema.schema_tags                     │
│ information_schema.schemata                        │
│ information_schema.table_constraints               │
│ information_schema.table_privileges                │
│ information_schema.table_tags                      │
│ information_schema.tables                          │
│ information_schema.views                           │
│ information_schema.volume_privileges               │
│ information_schema.volume_tags                     │
│ information_schema.volumes                         │
│ uniform.delta_hits                                 │
└────────────────────────────────────────────────────┘
SHOW TABLES
┌─name───────────────┐
│ uniform.delta_hits │
└────────────────────┘
للاستعلام عن جدول:
SELECT count(*) FROM `uniform.delta_hits`
العلامات (`) مطلوبةالعلامات (`) مطلوبة لأن ClickHouse لا يدعم سوى مساحة اسم واحدة.
لفحص DDL الخاص بالجدول:
SHOW CREATE TABLE `uniform.delta_hits`

CREATE TABLE unity_uniform.`uniform.delta_hits`
(
    `WatchID` Int64,
    `JavaEnable` Int32,
    `Title` String,
    `GoodEvent` Int32,
    `EventTime` DateTime64(6, 'UTC'),
    `EventDate` Date,
    `CounterID` Int32,
    `ClientIP` Int32,
    ...
    `FromTag` String,
    `HasGCLID` Int32,
    `RefererHash` Int64,
    `URLHash` Int64,
    `CLID` Int32
)
ENGINE = Iceberg('s3://<path>);

تحميل البيانات من بحيرة البيانات لديك إلى ClickHouse

إذا كنت بحاجة إلى تحميل البيانات من Databricks إلى ClickHouse، فابدأ بإنشاء جدول محلي في ClickHouse:
CREATE TABLE hits
(
    `WatchID` Int64,
    `JavaEnable` Int32,
    `Title` String,
    `GoodEvent` Int32,
    `EventTime` DateTime64(6, 'UTC'),
    `EventDate` Date,
    `CounterID` Int32,
    `ClientIP` Int32,
    ...
    `FromTag` String,
    `HasGCLID` Int32,
    `RefererHash` Int64,
    `URLHash` Int64,
    `CLID` Int32
)
PRIMARY KEY (CounterID, EventDate, UserID, EventTime, WatchID);
ثم حمّل البيانات من جدول Unity Catalog لديك باستخدام INSERT INTO SELECT:
INSERT INTO hits SELECT * FROM unity_uniform.`uniform.delta_hits`;
آخر تعديل في ٢٩ يونيو ٢٠٢٦