تثبيت dlt مع ClickHouse
لتثبيت مكتبة dlt مع تبعيات ClickHouse:
دليل الإعداد
1
تهيئة مشروع dlt
ابدأ بتهيئة مشروع يُنشئ الأمر أعلاه عدة ملفات ودلائل، بما في ذلك أو باستخدام
dlt جديد كما يلي:سيُهيّئ هذا الأمر مسار البيانات لديك باستخدام chess كمصدر وClickHouse كوجهة.
.dlt/secrets.toml وملف متطلبات خاص بـ ClickHouse. يمكنك تثبيت التبعيات اللازمة المحددة في ملف المتطلبات بتنفيذ الأمر التالي:pip install dlt[clickhouse]، والذي يثبّت مكتبة dlt والتبعيات اللازمة للعمل مع ClickHouse كوجهة.2
إعداد قاعدة بيانات ClickHouse
لتحميل البيانات إلى ClickHouse، تحتاج إلى إنشاء قاعدة بيانات ClickHouse. في ما يلي مخطط عام لما ينبغي عليك فعله:
- يمكنك استخدام قاعدة بيانات ClickHouse موجودة أو إنشاء قاعدة بيانات جديدة.
-
لإنشاء قاعدة بيانات جديدة، اتصل بخادم ClickHouse باستخدام أداة سطر الأوامر
clickhouse-clientأو عميل SQL من اختيارك. - شغّل أوامر SQL التالية لإنشاء قاعدة بيانات جديدة ومستخدم جديد ومنح الأذونات اللازمة:
3
إضافة بيانات الاعتماد
بعد ذلك، أضف بيانات اعتماد ClickHouse في ملف يمكنك تمرير connection string لقاعدة البيانات مماثلًا لذلك الذي تستخدمه مكتبة
.dlt/secrets.toml كما هو موضح أدناه:HTTP_PORTتحدد المعلمة
http_port رقم المنفذ الذي سيُستخدم عند الاتصال بواجهة HTTP الخاصة بخادم ClickHouse. وهذا يختلف عن المنفذ الافتراضي 9000، الذي يُستخدم للبروتوكول native TCP.يجب عليك تعيين http_port إذا كنت لا تستخدم التخزين المرحلي خارجيًا (أي إذا كنت لا تعيّن المعلمة التخزين المرحلي في مسار البيانات لديك). ويعود ذلك إلى أن التخزين المرحلي المدمج للتخزين المحلي في ClickHouse يستخدم مكتبة clickhouse content، التي تتواصل مع ClickHouse عبر HTTP.تأكد من أن خادم ClickHouse لديك مُعدّ لقبول اتصالات HTTP على المنفذ المحدد بواسطة http_port. على سبيل المثال، إذا عيّنت http_port = 8443، فيجب أن يكون ClickHouse في وضع الاستماع لطلبات HTTP على المنفذ 8443. وإذا كنت تستخدم التخزين المرحلي خارجيًا، يمكنك حذف المعلمة http_port، لأن clickhouse-connect لن يُستخدم في هذه الحالة.clickhouse-driver. ستبدو بيانات الاعتماد أعلاه كما يلي:آلية الكتابة
merge، ستحتاج إلى تحديد primary_key للمورد. يمكنك معرفة المزيد عنها هنا.
الإلحاق: هذه هي الآلية الافتراضية. ستُلحق البيانات بالبيانات الموجودة بالفعل في الوجهة، مع تجاهل الحقل primary_key.
تحميل البيانات
- بالنسبة إلى الملفات المحلية، تُستخدم مكتبة
clickhouse-connectلتحميل الملفات مباشرةً إلى جداول ClickHouse باستخدام الأمرINSERT. - بالنسبة إلى الملفات الموجودة في التخزين البعيد مثل
S3وGoogle Cloud StorageوAzure Blob Storage، تُستخدم وظائف الجداول في ClickHouse مثل s3 وgcs وazureBlobStorage لقراءة الملفات وإدخال البيانات إلى الجداول.
مجموعات البيانات
ClickHouse وجود مجموعات بيانات متعددة داخل قاعدة بيانات واحدة، بينما يعتمد dlt على مجموعات البيانات لعدة أسباب. ولكي يعمل ClickHouse مع dlt، ستُضاف بادئة اسم مجموعة البيانات إلى أسماء الجداول التي ينشئها dlt في قاعدة بيانات ClickHouse لديك، مع فصلها باستخدام dataset_table_separator القابل للتهيئة. بالإضافة إلى ذلك، سيُنشأ جدول حارس خاص لا يحتوي على أي بيانات، ما يتيح لـ dlt التعرّف على مجموعات البيانات الافتراضية الموجودة بالفعل في وجهة ClickHouse.
تنسيقات الملفات المدعومة
- يُعدّ jsonl التنسيق المفضّل لكلٍّ من التحميل المباشر والتخزين المرحلي.
- يدعم parquet كلاً من التحميل المباشر والتخزين المرحلي.
clickhouse بعض الاختلافات الخاصة عن وجهات sql الافتراضية:
- يوفّر
ClickHouseنوع البيانات التجريبيobject، لكننا وجدناه غير مستقر إلى حدٍّ ما، لذلك ستقوم وجهة dlt لـ clickhouse بتحميل نوع البيانات المعقّد في عمود نصي. إذا كنت بحاجة إلى هذه الميزة، فتواصل مع مجتمعنا على Slack، وسننظر في إضافتها. - لا يدعم
ClickHouseنوع البياناتtime. لذلك ستُحمَّل قيم الوقت في عمودtext. - لا يدعم
ClickHouseنوع البياناتbinary. وبدلاً من ذلك، ستُحمَّل البيانات الثنائية في عمودtext. عند التحميل منjsonl، ستكون البيانات الثنائية سلسلة base64، وعند التحميل من parquet، سيُحوَّل الكائنbinaryإلىtext. - يدعم
ClickHouseإضافة أعمدة غير قابلة لأن تكون null إلى جدول يحتوي بالفعل على بيانات. - قد ينتج
ClickHouseأخطاء تقريب في ظروف معيّنة عند استخدام نوع البيانات float أو double. إذا لم يكن بإمكانك تحمّل أخطاء التقريب، فتأكد من استخدام نوع البيانات decimal. على سبيل المثال، فإن تحميل القيمة 12.7001 إلى عمود double مع ضبط تنسيق ملف المُحمِّل علىjsonlسيؤدي بشكل متوقّع إلى خطأ تقريب.
تلميحات الأعمدة المدعومة
primary_key- يحدّد هذا العمود كجزء من المفتاح الأساسي. ويمكن أن تحمل عدة أعمدة هذا التلميح لإنشاء مفتاح أساسي مركب.
محرك الجدول
ReplicatedMergeTree. يمكنك تحديد محرك جدول بديل باستخدام table_engine_type مع المهايئ ClickHouse:
merge_tree- يُنشئ جداول باستخدام المحركMergeTreereplicated_merge_tree(الافتراضي) - يُنشئ جداول باستخدام المحركReplicatedMergeTree
دعم التخزين المرحلي
dlt برفع ملفات Parquet أو jsonl إلى موقع التخزين المرحلي، ثم استخدام وظائف الجدول في ClickHouse لتحميل البيانات مباشرةً من الملفات المخزنة مرحليًا.
يُرجى الرجوع إلى وثائق filesystem لمعرفة كيفية تهيئة بيانات الاعتماد لوجهات التخزين المرحلي:
لتشغيل مسار بيانات مع تمكين التخزين المرحلي:
استخدام Google Cloud Storage كتخزين مرحلي
- أنشئ مفاتيح HMAC لحساب الخدمة الخاص بك في GCS باتباع دليل Google Cloud.
-
اضبط مفاتيح HMAC، بالإضافة إلى
client_emailوproject_idوprivate_keyالخاصة بحساب الخدمة، في إعدادات وجهة ClickHouse ضمن مشروع dlt فيconfig.toml:
bashgcp_access_key_id و gcp_secret_access_key)، تحتاج الآن أيضًا إلى تقديم client_email و project_id و private_key الخاصة بحساب الخدمة ضمن [destination.filesystem.credentials]. ويرجع ذلك إلى أن دعم التخزين المرحلي لـ GCS مُنفَّذ حاليًا كحل بديل مؤقت، ولا يزال غير مُحسَّن.
سيمرّر dlt بيانات الاعتماد هذه إلى ClickHouse، الذي سيتولى المصادقة والوصول إلى GCS.
يجري العمل حاليًا وبشكل نشط على تبسيط إعداد التخزين المرحلي لـ GCS وتحسينه لوجهة ClickHouse dlt مستقبلًا. ويجري تتبّع دعم التخزين المرحلي الكامل لـ GCS في مشكلات GitHub التالية:
- جعل وجهة filesystem تعمل مع gcs في وضع التوافق مع s3
- دعم التخزين المرحلي لـ Google Cloud Storage