في القسم السابق، أجريتَ استعلامات على صيغ الجداول المفتوحة من خلال تمرير مسارات التخزين مباشرةً. عمليًا، تدير معظم المؤسسات البيانات الوصفية للجداول عبر كتالوج بيانات — وهو سجل مركزي يتتبّع مواقع الجداول، والمخططات، والأقسام. عند توصيل ClickHouse بكتالوج باستخدام محرك قاعدة البيانات DataLakeCatalog، يُعرَض الكتالوج بالكامل كقاعدة بيانات في ClickHouse. ويظهر كل جدول في الكتالوج تلقائيًا، ويمكن الاستعلام عنه باستخدام ClickHouse SQL بالكامل، من دون الحاجة إلى معرفة مسارات الجداول الفردية أو إدارة بيانات الاعتماد لكل جدول.
يشرح هذا الدليل كيفية الاتصال بـ Databricks Unity Catalog. كما يدعم ClickHouse الكتالوجات التالية أيضًا — راجع الدليل المرجعي الخاص بكل منها للحصول على تعليمات الإعداد الكاملة:
| الكتالوج | الدليل المرجعي |
|---|---|
| AWS Glue | كتالوج AWS Glue |
| Iceberg REST Catalog | كتالوج REST |
| Lakekeeper | كتالوج Lakekeeper |
| Project Nessie | كتالوج Nessie |
| Microsoft OneLake | Fabric OneLake |
| SeaweedFS | كتالوج SeaweedFS |
الاتصال بـ Unity Catalog
لأغراض هذا المثال، سنستخدم Unity Catalog.
يوفّر Databricks Unity Catalog حوكمة مركزية لبيانات lakehouse في Databricks.
يدعم Databricks عدة تنسيقات بيانات في بيئة lakehouse الخاصة به. ومع ClickHouse، يمكنك الاستعلام من جداول Delta وIceberg في Unity Catalog التي تستخدم مواقع external storage.
إعداد Unity في Databricks
للسماح لـ ClickHouse بالتفاعل مع Unity Catalog، عليك التأكد من أن Unity Catalog مهيأ للسماح بالتفاعل مع قارئ خارجي. ويمكن تحقيق ذلك باتباع الدليل "Enable external data access to Unity Catalog".
بالإضافة إلى تمكين الوصول الخارجي، تأكد من أن الجهة التي تُعِدّ التكامل لديها امتياز EXTERNAL USE SCHEMA امتياز على المخطط الذي يحتوي على الجداول.
بمجرد تهيئة الكتالوج، يجب إنشاء بيانات اعتماد لـ ClickHouse. ويمكن استخدام طريقتين مختلفتين، وذلك بحسب نمط التفاعل مع Unity:
-
بالنسبة إلى عملاء Iceberg، صادِق باستخدام service principal.
-
بالنسبة إلى عملاء Delta، استخدم رمز وصول شخصيًا (PAT).
الاتصال بالكتالوج
باستخدام بيانات الاعتماد، يمكنك الاتصال بنقطة النهاية المناسبة للاستعلام عن جداول Iceberg أو Delta.
ينبغي استخدام Unity catalog للوصول إلى البيانات بصيغة Delta.
SET allow_experimental_database_unity_catalog = 1;
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';SET allow_database_iceberg = 1;
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';عرض الجداول
بمجرد إنشاء اتصال بالكتالوج الخاص بك، يمكنك عرض الجداول.
SHOW TABLES FROM unity┌─name───────────────────────────────────────────────┐
│ unity.logs │
│ unity.single_day_log │
└────────────────────────────────────────────────────┘
31 rows in set.استكشاف مخططات الجداول
يمكننا استخدام الأمر القياسي SHOW CREATE TABLE لمعرفة كيفية إنشاء الجداول.
يفترض ما يلي أنك تستعلم من كتالوج Iceberg عبر REST:
SHOW CREATE TABLE unity.`icebench.single_day_log`
CREATE TABLE unity.`icebench.single_day_log`
(
`pull_request_number` Nullable(Int64),
`commit_sha` Nullable(String),
`check_start_time` Nullable(DateTime64(6, 'UTC')),
`check_name` Nullable(String),
`instance_type` Nullable(String),
`instance_id` Nullable(String),
`event_date` Nullable(Date32),
`event_time` Nullable(DateTime64(6, 'UTC')),
`event_time_microseconds` Nullable(DateTime64(6, 'UTC')),
`thread_name` Nullable(String),
`thread_id` Nullable(Decimal(20, 0)),
`level` Nullable(String),
`query_id` Nullable(String),
`logger_name` Nullable(String),
`message` Nullable(String),
`revision` Nullable(Int64),
`source_file` Nullable(String),
`source_line` Nullable(Decimal(20, 0)),
`message_format_string` Nullable(String)
)
ENGINE = Iceberg('s3://...')الاستعلام عن جدول
جميع دوال ClickHouse مدعومة. ومرة أخرى، يجب وضع مساحة الأسماء واسم الجدول بين علامتَي اقتباس خلفيتين.
SELECT count()
FROM unity.`icebench.single_day_log`┌───count()─┐
│ 282634391 │ -- 282.63 million
└───────────┘
1 row in set. Elapsed: 1.265 sec.للحصول على تعليمات الإعداد الكاملة، راجع الدليل المرجعي لـ Unity Catalog.