اختر طريقة الوصول
دوال الجداول
icebergAzure وicebergLocal، وما يقابلهما للتنسيقات الأخرى). راجع الاستعلام مباشرةً للاطلاع على القائمة الكاملة.
يوفّر Paimon دوال جداول فقط.
محركات الجداول
محرك قاعدة البيانات DataLakeCatalog
backticks لأسماء الجداول متعددة الأجزاءتستخدم الكتالوجات غالبًا تسمية
database.table. أَحِط الاسم المؤهَّل بقاعدة البيانات بعلامات backticks، كما في المثال أعلاه.الإعدادات المطلوبة
CREATE DATABASE بسبب خطأ في الأذونات.
بالنسبة إلى اتصالات الكتالوج، لكل نوع من أنواع الكتالوج علامة خاصة به. راجع الاتصال بالكتالوجات للحصول على نظرة عامة، ومرجع DataLakeCatalog للاطّلاع على تفاصيل الإعدادات. أما إعداد كل كتالوج على حدة، فتجده في أدلة الكتالوج.
بالنسبة إلى عمليات الكتابة، يتطلب Iceberg allow_insert_into_iceberg (25.7+، وBeta بدءًا من 26.2). راجع الكتابة إلى بحيرات البيانات. ويتطلب Delta Lake allow_delta_lake_writes (25.9+). وتوضّح مصفوفة الدعم العلامات التي تنطبق على كل تنسيق وكل عملية.
حسّن أداء الاستعلامات
عادات الاستعلام
WHERE. تخزّن Iceberg وDelta Lake البيانات الوصفية للتقسيم، مما يتيح لـ ClickHouse تخطي الملفات غير ذات الصلة أثناء تخطيط الاستعلام. وإذا كان عامل التصفية يستهدف عمودًا خارج مواصفات التقسيم، فسيفحص ClickHouse كل ملف مطابق.
بالنسبة إلى جداول Iceberg التي تستخدم التقسيم المخفي، قم بالتصفية حسب العمود المصدر في مخطط الجدول، وليس حسب عمود تقسيم منفصل أو اسم حقل مُحوَّل. إذا كان الجدول مُقسَّمًا حسب day(event_time)، فأضف شرطًا على event_time. ويستنتج ClickHouse استبعاد الأقسام من هذا الشرط باستخدام مواصفات تقسيم Iceberg. راجع استبعاد الأقسام ومواصفة Iceberg.
SELECT *. يقرأ ClickHouse تنسيق Parquet عمودًا بعمود من تخزين الكائنات، لذا فإن عمليات SELECT الأضيق تقلّل عدد البايتات المنقولة والمفكوك ضغطها.
ضع عوامل التصفية الانتقائية في WHERE. بدءًا من ClickHouse 26.2+، أصبح PREWHERE مدعومًا أيضًا مع Iceberg وعمليات قراءة جداول البحيرات الأخرى، إذ يُجري التصفية على مستوى Parquet قبل قراءة الأعمدة المتبقية. ولا يزال استبعاد الأقسام يعتمد على تصفية الأعمدة المستخدمة في التقسيم، وليس على PREWHERE وحده.
تُطبّق جداول Iceberg التي تتضمن position or equality deletes بكثافة تصفية merge-on-read أثناء الفحص. لذا توقّع عملًا أكبر لكل ملف مما قد يوحي به تشذيب manifest وحده.
في عمليات النشر متعددة العقد، استخدم دوال الجداول الخاصة بـ cluster لتوزيع قراءات الملفات عبر النسخ المتماثلة.
القراءة المتوازية على العناقيد متعددة العقد
'default' على ClickHouse Cloud). تتوفر إصدارات العناقيد لجميع التنسيقات المدعومة:
يمكنك دمج قراءات العناقيد مع إعدادات أداء أخرى.
قيّد قراءات الدُفعات بنطاق اللقطات
- بالنسبة إلى Iceberg، اقرأ عرضًا عند نقطة زمنية محددة باستخدام iceberg_snapshot_id أو iceberg_timestamp_ms (25.4+). وبالنسبة إلى الجداول من نوع append-only، ادمج إعدادات اللقطة مع عوامل تصفية التقسيم في
WHERE. استخدم system.iceberg_history (25.6+) للعثور على معرّفات اللقطات بين مرات التشغيل. - بالنسبة إلى Delta Lake، اقرأ التغييرات بين إصدارين باستخدام delta_lake_snapshot_start_version وdelta_lake_snapshot_end_version (25.12+). واقرأ لقطة واحدة باستخدام delta_lake_snapshot_version (25.8+). راجع Delta change data feed للاطلاع على مثال على CDF.
تخزين ملفات Parquet مؤقتًا محليًا
enable_filesystem_cache = 0 عند إجراء اختبارات الأداء حتى لا تُخفي نتائج التخزين المؤقت التغييرات بين مرات التشغيل.
Apache Iceberg
إعدادات القراءة
تقليل زمن وصول الكتالوج
- اضبط iceberg_metadata_async_prefetch_period_ms عند إنشاء الجدول لإجراء الجلب المسبق للبيانات الوصفية في الخلفية.
- اضبط iceberg_metadata_staleness_ms (26.3+) على الاستعلامات لقبول بيانات وصفية قديمة قليلًا مقابل تجنب رحلة الذهاب والإياب إلى الكتالوج.
0 لـ staleness دائمًا أحدث البيانات الوصفية. زِد هذه النافذة لأعباء العمل كثيفة القراءة التي تتغير فيها الجداول على فترات متباعدة.
عندما يختار ClickHouse ملف البيانات الوصفية غير الصحيح (توجد عدة ملفات .metadata.json في path الجدول)، ثبّت اختيار الملف باستخدام iceberg_metadata_file_path (25.4+) أو iceberg_metadata_table_uuid عند إنشاء الجدول. راجع تحديد ملف البيانات الوصفية.
السفر عبر الزمن
عمليات الكتابة في Iceberg
راجع الكتابة إلى بحيرات البيانات ومرجع محرك Iceberg.
Delta Lake
Delta Kernel
إعدادات القراءة
تُطبِّق الجداول التي تحتوي على متجهات الحذف (26.2+) تصفية على مستوى الصفوف أثناء القراءة. يتعامل ClickHouse مع ذلك تلقائيًا، لكن المسح في الجداول التي تكثر فيها DV يتطلب عملاً أكبر لكل ملف.
تغذية بيانات التغيير في Delta
delta.enableChangeDataFeed). عيّن كلاً من إصدارَي البداية والنهاية في إعدادات الاستعلام. سيؤدي تعيين إصدار النهاية فقط إلى حدوث خطأ.
_change_type, _commit_version, _commit_timestamp). تعامل مع هذه الأعمدة قبل تحميل البيانات إلى الجدول الهدف. للاطلاع على النمط العام للّقطات، راجع تقييد قراءات الدفعات باللقطات.
عمليات الكتابة في Delta Lake
استكشاف أخطاء استعلامات بحيرة البيانات وإصلاحها
التحقق من اتصال الكتالوج
CREATE DATABASE مع DataLakeCatalog من بيانات الاعتماد. يمكن أن تظل قاعدة البيانات موجودة حتى إذا كان الاتصال بالكتالوج معطّلًا. اعتبارًا من ClickHouse 26.4، شغّل فحصًا صحيًا خفيفًا:
SHOW TABLES FROM my_lake وافحص رسالة الخطأ. استخدم SHOW CREATE TABLE مع اسم جدول محاط بعلامتَي الاقتباس المائلتين للتحقّق من مسار التخزين الذي تم تحديده ونوع المحرّك:
system.tables، ففعِّل show_remote_databases_in_system_tables (25.8+). تُخفى جداول كتالوج افتراضيًا عن استبطان النظام. في الإصدارات السابقة لـ 26.6، استخدم اسمها السابق، show_data_lake_catalogs_in_system_tables.
اعرف الملفات التي تتم قراءتها
_path, _file, _size, _time, _etag) في كل عملية قراءة. نفّذ التجميع حسب _path لمعرفة ما إذا كان استبعاد الأقسام يعمل كما ينبغي، أو ما إذا كان الاستعلام يفحص ملفات أكثر من المتوقع. بالنسبة إلى جداول Iceberg ذات التقسيم المخفي، طبّق عامل التصفية على العمود المصدر (مثل event_time) لا على عمود قسم منفصل:
تحقّق من حجم المسح
read_rows وread_bytes في system.query_log قبل إضافة عوامل التصفية أو ضبط الإعدادات وبعدها. تُظهر ProfileEvents مثل ReadBufferFromS3Bytes وCachedReadBufferReadFromCacheBytes مقدار البيانات التي جاءت من التخزين الكائني مقابل ذاكرة التخزين المؤقت المحلية. راجع تحسين الاستعلام للحصول على شرح كامل لـ query_log وEXPLAIN.
عطّل enable_filesystem_cache عند إجراء اختبارات الأداء حتى لا تُخفي مرات الوصول الناجح إلى ذاكرة التخزين المؤقت الفروق بين التشغيلات.
سجلات البيانات الوصفية
شغّل استعلامًا مع تمكين التسجيل، ثم نفّذ عملية flush للسجل، وبعد ذلك افحص السجلات الخاصة بذلك
query_id:
clusterAllReplicas لرؤية الصورة الكاملة عبر النسخ المتماثلة.
تؤدي مستويات السجل التفصيلية في Iceberg إلى تعطيل التخزين المؤقت للبيانات الوصفية لقوائم manifest والملفات، مما يبطئ الاستعلامات اللاحقة على الجدول نفسه. استخدم مستوى تفصيلاً عاليًا فقط أثناء التحقيق الفعلي. بالنسبة إلى مشكلات predicate في Delta Lake، فعّل delta_lake_throw_on_engine_predicate_error (25.8+) للإخفاق فورًا عندما يتعذر على النواة دفع عامل التصفية إلى الأسفل.
راجع صفحتي المرجع iceberg_metadata_log وdelta_lake_metadata_log للاطلاع على تفاصيل الأعمدة وخيارات مستوى التفصيل.
الخطوات التالية
- البدء — شرح متكامل من الاستعلام المباشر إلى إعادة الكتابة إلى المصدر
- الاستعلام المباشر — دوال الجداول، والمحركات، وإصدارات العناقيد لمختلف التنسيقات الأربعة
- الاتصال بالكتالوجات — إعداد
DataLakeCatalogباستخدام Unity Catalog - الكتابة إلى بحيرات البيانات — كتابة البيانات مجددًا إلى Iceberg وDelta Lake
- مصفوفة الدعم — مقارنة الميزات عبر التنسيقات، والكتالوجات، وأنظمة التخزين الخلفية