إعدادات ملف Profile.yml
profiles.yml. ويتبع ملف تعريف ClickHouse البنية التالية:
schema مقابل قاعدة البيانات
database.schema.table، غير متوافق مع ClickHouse لأن ClickHouse لا يدعم
schema.
لذلك نستخدم نهجًا مبسّطًا هو schema.table، حيث يشير schema هنا إلى قاعدة بيانات ClickHouse. ولا يُنصح باستخدام قاعدة البيانات default.
تحذير بشأن عبارة SET
تعيين quote_columns
quote_columns بشكل صريح في ملف dbt_project.yml. راجع التوثيق الخاص بـ quote_columns لمزيد من المعلومات.
نبذة عن عنقود ClickHouse
- ضبط إعداد
cluster. - ضمان اتساق القراءة بعد الكتابة، خاصةً إذا كنت تستخدم أكثر من
threads.
إعداد العنقود
cluster في ملف تعريف لـ dbt-clickhouse التشغيل على عنقود ClickHouse. وإذا تم تعيين cluster في ملف تعريف، فسيتم إنشاء جميع النماذج باستخدام العبارة ON CLUSTER افتراضيًا—باستثناء النماذج التي تستخدم محرّك Replicated. ويشمل ذلك:
- إنشاء قاعدة البيانات
- عمليات تجسيد للعروض
- عمليات تجسيد للجداول وIncremental
- عمليات تجسيد الموزعة
ON CLUSTER، لأنها مصممة لإدارة النسخ المتماثل داخليًا.
لـ تعطيل الإنشاء المستند إلى العنقود لنموذج معيّن، أضِف config disable_on_cluster:
cluster (إذ لن يُنشأ النموذج إلا على العقدة المتصل بها).
التوافق
إذا كان النموذج قد أُنشئ من دون إعداد cluster، فسيكتشف dbt-clickhouse هذه الحالة ويشغّل جميع أوامر DDL/DML لهذا النموذج من دون بند on cluster.
اتساق القراءة بعد الكتابة
- إذا كنت تستخدم عنقود ClickHouse Cloud، فما عليك سوى تعيين
select_sequential_consistency: 1في خاصيةcustom_settingsضمن ملف التعريف الخاص بك. يمكنك العثور على مزيد من المعلومات حول هذا الإعداد هنا. - إذا كنت تستخدم عنقودًا ذاتي الاستضافة، فتأكد من إرسال جميع طلبات dbt إلى النسخة المتماثلة نفسها في ClickHouse. وإذا كان لديك موازن تحميل أمامه، فحاول استخدام آلية
replica aware routing/sticky sessionsحتى تتمكن دائمًا من الوصول إلى النسخة المتماثلة نفسها. ولا يُنصح بإضافة الإعدادselect_sequential_consistency = 1في العناقيد خارج ClickHouse Cloud غير موصى بها.
وحدات الماكرو الإضافية لـ ClickHouse
وحدات ماكرو مساعدة لتجسيد النماذج
engine_clause— تستخدم خاصيةengineفي تهيئة النموذج لتعيين محرك جدول في ClickHouse. يستخدم dbt-clickhouse المحركMergeTreeافتراضيًا.partition_cols— تستخدم خاصيةpartition_byفي تهيئة النموذج لتعيين مفتاح تقسيم في ClickHouse. لا يتم تعيين مفتاح تقسيم افتراضيًا.order_cols— تستخدم تهيئة النموذجorder_byلتعيين مفتاح ORDER BY/الترتيب في ClickHouse. إذا لم يتم تحديده، فسيستخدم ClickHouse القيمة tuple() الفارغة وسيكون الجدول غير مرتبprimary_key_clause— تستخدم خاصيةprimary_keyفي تهيئة النموذج لتعيين مفتاح أساسي في ClickHouse. بشكل افتراضي، يتم تعيين مفتاح أساسي، ويستخدم ClickHouse عبارة ORDER BY بوصفها المفتاح الأساسي.on_cluster_clause— تستخدم خاصيةclusterفي ملف تعريف لإضافة عبارةON CLUSTERإلى بعض عمليات dbt: التجسيدات الموزعة، وإنشاء العروض، وإنشاء قاعدة البيانات.ttl_config— تستخدم خاصيةttlفي تهيئة النموذج لتعيين expression خاصة بـ table TTL في ClickHouse. لا يتم تعيين TTL افتراضيًا.
الماكرو المساعد s3source
s3source عملية تحديد بيانات ClickHouse مباشرةً من S3 باستخدام دالة الجدول S3 في ClickHouse.
ويعمل ذلك من خلال
تعبئة مُعاملات دالة الجدول S3 انطلاقًا من قاموس تهيئة مُسمّى (يجب أن ينتهي اسم القاموس
بـ s3). يبحث الماكرو
أولًا عن القاموس في vars الخاصة بالملف التعريفي، ثم في تهيئة النموذج. ويمكن أن يحتوي القاموس على
أيٍّ من المفاتيح التالية
المستخدمة لتعبئة مُعاملات دالة الجدول S3:
راجع
ملف اختبار S3
للاطّلاع على أمثلة حول كيفية استخدام هذا الماكرو.
دعم الماكرو عبر قواعد البيانات
dbt Core، مع الاستثناءات التالية:
- تُنفَّذ دالة SQL
split_partفي ClickHouse باستخدام الدالة splitByChar. وتتطلب هذه الدالة استخدام سلسلة نصية ثابتة بوصفها الفاصل لـ “split”، لذا ستُفسَّر المعلَمةdelimeterالمستخدمة مع هذا الماكرو على أنها سلسلة نصية، لا اسم عمود - وبالمثل، تتطلب دالة SQL
replaceفي ClickHouse سلاسل نصية ثابتة للمعلَمتينold_charsوnew_chars، لذا ستُفسَّر هاتان المعلَمتان على أنهما سلاسل نصية بدلًا من أسماء أعمدة عند استدعاء هذا الماكرو.
دعم الكتالوج
حالة تكامل الكتالوج في dbt
دعم ClickHouse للكتالوجات
experimental، لكن يمكنك استخدامها بالفعل إذا كنت تستخدم إصدارًا حديثًا من ClickHouse.
- يمكنك استخدام ClickHouse للاستعلام عن جداول Iceberg المخزّنة في تخزين الكائنات (S3 وAzure Blob Storage وGoogle Cloud Storage) باستخدام محرك جدول Iceberg ودالة الجدول Iceberg.
- بالإضافة إلى ذلك، يوفّر ClickHouse محرك قاعدة البيانات DataLakeCatalog، الذي يتيح الاتصال بكتالوجات بيانات خارجية، بما في ذلك AWS Glue Catalog وDatabricks Unity Catalog وHive Metastore وREST Catalogs. ويتيح لك ذلك الاستعلام مباشرةً عن بيانات تنسيقات الجداول المفتوحة (Iceberg وDelta Lake) من الكتالوجات الخارجية من دون تكرار البيانات.
حلول بديلة للعمل مع Iceberg والكتالوجات
source في dbt للإشارة إلى هذه الجداول في مشاريع dbt الخاصة بك. على سبيل المثال، إذا كنت تريد الوصول إلى جداولك في كتالوج REST، فيمكنك:
- إنشاء قاعدة بيانات تشير إلى كتالوج خارجي:
- عرِّف قاعدة بيانات كتالوج وجداولها كمصادر في dbt: تذكَّر أن الجداول يجب أن تكون متاحة بالفعل في ClickHouse
- استخدم جداول الكتالوج في نماذج dbt:
ملاحظات حول الحلول البديلة
- ستحصل على وصول فوري إلى أنواع مختلفة من الجداول الخارجية والكتالوجات الخارجية دون الحاجة إلى انتظار توفر تكامل كتالوج dbt الأصلي.
- سيتوفر لك مسار ترحيل سلس عند إتاحة دعم الكتالوج الأصلي.
- إعداد يدوي: يجب إنشاء جداول Iceberg وقواعد بيانات الكتالوج يدويًا في ClickHouse قبل أن يمكن الرجوع إليها في dbt.
- لا توجد DDL على مستوى الكتالوج: لا يمكن لـ dbt إدارة العمليات على مستوى الكتالوج، مثل إنشاء جداول Iceberg أو حذفها في الكتالوجات الخارجية. لذلك، لن تتمكن حاليًا من إنشائها من خلال موصل dbt. وقد تُضاف في المستقبل إمكانية إنشاء الجداول باستخدام محركات Iceberg().
- عمليات الكتابة: حاليًا، تكون الكتابة إلى جداول Iceberg/Data Catalog محدودة. راجع وثائق ClickHouse لمعرفة الخيارات المتاحة.