الانتقال إلى المحتوى الرئيسي
باختصاردليل عملي للاستعلام عن جداول بحيرة البيانات، وتسريع أدائها باستخدام MergeTree، ثم كتابة النتائج مجددًا إلى Iceberg. تستخدم جميع الخطوات مجموعات بيانات عامة، وتعمل على كلٍّ من Cloud وOSS.
لقطات الشاشة في هذا الدليل مأخوذة من ClickHouse Cloud وحدة تحكم SQL. تعمل جميع الاستعلامات على كلٍّ من Cloud وعمليات النشر المُدارة ذاتيًا.
1

استعلم عن بيانات Iceberg مباشرة

أسرع طريقة للبدء هي استخدام دالة الجدول icebergS3() — وجّهها إلى جدول Iceberg في S3 ونفّذ استعلامًا فورًا، من دون أي إعداد.افحص المخطط:
DESCRIBE icebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
نفّذ استعلامًا:
SELECT
    url,
    count() AS cnt
FROM icebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
يقرأ ClickHouse البيانات الوصفية لـ Iceberg مباشرةً من S3 ويستنتج المخطط تلقائيًا. وينطبق النهج نفسه على deltaLake() وhudi() وpaimon().تعرّف على المزيد: يتناول الاستعلام عن تنسيقات الجداول المفتوحة مباشرةً التنسيقات الأربعة، ومتغيرات cluster للقراءة الموزعة، وخيارات الواجهة الخلفية للتخزين (S3 وAzure وHDFS وlocal).
2

أنشئ جدولًا دائمًا باستخدام محرك جدول Iceberg

للوصول المتكرر، أنشئ جدولًا باستخدام محرك جدول Iceberg حتى لا تحتاج إلى تمرير المسار في كل مرة. تبقى البيانات في S3 — ولا تُنسخ أي بيانات:
CREATE TABLE hits_iceberg
    ENGINE = IcebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
يمكنك الآن الاستعلام عنه كما تفعل مع أي جدول في ClickHouse:
SELECT
    url,
    count() AS cnt
FROM hits_iceberg
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
يدعم محرك الجدول التخزين المؤقت للبيانات، والتخزين المؤقت للبيانات الوصفية، وتطوّر المخطط، والسفر عبر الزمن. راجع دليل الاستعلام مباشرةً للحصول على تفاصيل حول ميزات محرك الجدول، ومصفوفة الدعم للاطلاع على مقارنة شاملة للميزات.
3

الاتصال بكتالوج

تدير معظم المؤسسات جداول Iceberg عبر كتالوج بيانات لتجميع البيانات الوصفية للجداول واكتشاف البيانات في مكان مركزي. يدعم ClickHouse الاتصال بكتالوجك باستخدام محرك قاعدة البيانات DataLakeCatalog، مما يعرِض جميع جداول الكتالوج كقاعدة بيانات في ClickHouse. وهذا هو المسار الأكثر قابلية للتوسع، لذا عند إنشاء جداول Iceberg جديدة تظل متاحة دائمًا في ClickHouse دون أي عمل إضافي.إليك مثالاً على الاتصال بـ AWS Glue:
CREATE DATABASE my_lake
ENGINE = DataLakeCatalog
SETTINGS
    catalog_type = 'glue',
    region = '<your-region>',
    aws_access_key_id = '<your-access-key>',
    aws_secret_access_key = '<your-secret-key>'
يتطلب كل نوع من أنواع الكتالوجات إعدادات اتصال خاصة به — راجع أدلة الكتالوجات للاطّلاع على القائمة الكاملة بالكتالوجات المدعومة وخيارات تهيئتها.تصفّح الجداول ونفّذ استعلامًا:
SHOW TABLES FROM my_lake;
SELECT count(*) FROM my_lake.`<database>.<table>`
علامات الاقتباس المعكوسة مطلوبة حول <database>.<table> لأن ClickHouse لا يدعم بشكل أصلي أكثر من نطاق أسماء واحد.
تعرّف على المزيد: يشرح الاتصال بـ Data Catalog إعداد Unity Catalog كاملًا مع أمثلة على Delta وIceberg.
4

نفِّذ استعلامًا

بصرف النظر عن الطريقة التي استخدمتها أعلاه — دالة الجدول أو محرك الجدول أو catalog — فإن ClickHouse SQL نفسه يعمل في جميعها:
-- Table function
SELECT url, count() AS cnt
FROM icebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')
GROUP BY url ORDER BY cnt DESC LIMIT 5

-- Table engine
SELECT url, count() AS cnt
FROM hits_iceberg
GROUP BY url ORDER BY cnt DESC LIMIT 5

-- Catalog
SELECT url, count() AS cnt
FROM my_lake.`<database>.<table>`
GROUP BY url ORDER BY cnt DESC LIMIT 5
صياغة الاستعلام متطابقة — والتغيير الوحيد يكون في عبارة FROM. تعمل جميع الدوال وعمليات JOIN وعمليات التجميع في ClickHouse SQL بالطريقة نفسها بغضّ النظر عن مصدر البيانات.
5

حمّل مجموعة فرعية إلى ClickHouse

يُعد الاستعلام عن Iceberg مباشرةً أمرًا مناسبًا، لكن الأداء يظل محدودًا بمعدل نقل الشبكة وتخطيط الملفات. بالنسبة إلى أعباء العمل التحليلية، حمّل البيانات إلى جدول MergeTree أصلي.أولًا، شغّل استعلامًا مُرشَّحًا على جدول Iceberg للحصول على خط أساس:
SELECT
    url,
    count() AS cnt
FROM hits_iceberg
WHERE counterid = 38
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
يفحص هذا الاستعلام مجموعة البيانات بالكامل في S3 لأن Iceberg لا يراعي عامل التصفية counterid — لذا توقّع أن يستغرق ذلك عدة ثوانٍ.الآن أنشئ جدول MergeTree وحمّل البيانات:
CREATE TABLE hits_clickhouse
(
    url String,
    eventtime DateTime,
    counterid UInt32
)
ENGINE = MergeTree()
ORDER BY (counterid, eventtime);
INSERT INTO hits_clickhouse
SELECT url, eventtime, counterid
FROM hits_iceberg
أعِد تنفيذ الاستعلام نفسه على جدول MergeTree:
SELECT
    url,
    count() AS cnt
FROM hits_clickhouse
WHERE counterid = 38
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
نظرًا لأن counterid هو العمود الأول في مفتاح ORDER BY، فإن الفهرس الأساسي المتناثر في ClickHouse يتخطّى مباشرةً إلى وحدات granule ذات الصلة، فلا يقرأ إلا الصفوف الخاصة بـ counterid = 38 بدلًا من فحص جميع الصفوف المئة مليون. والنتيجة هي تسارع كبير جدًا.يمضي دليل تسريع التحليلات إلى ما هو أبعد من ذلك باستخدام الأنواع LowCardinality، وفهارس النص الكامل، ومفاتيح ترتيب محسّنة، مع عرض تحسّن بنحو ~40x على مجموعة بيانات تضم 283 مليون صف.اعرف المزيد: يغطّي تسريع التحليلات باستخدام MergeTree تحسين المخطط، وفهرسة النص الكامل، ومقارنة كاملة للأداء قبل وبعد.
6

الكتابة مرة أخرى إلى Iceberg

يمكن لـ ClickHouse أيضًا كتابة البيانات مرة أخرى إلى جداول Iceberg، مما يتيح سير عمل ETL العكسي — من خلال نشر النتائج المُجمَّعة أو مجموعات فرعية لتستخدمها أدوات أخرى (Spark وTrino وDuckDB وغيرها).أنشئ جدول Iceberg للمخرجات:
CREATE TABLE output_iceberg
(
    url String,
    cnt UInt64
)
ENGINE = IcebergS3('https://your-bucket.s3.amazonaws.com/output/', 'access_key', 'secret_key')
اكتب النتائج المجمَّعة:
SET allow_experimental_insert_into_iceberg = 1;

INSERT INTO output_iceberg
SELECT
    url,
    count() AS cnt
FROM hits_clickhouse
GROUP BY url
ORDER BY cnt DESC
يمكن لأي محرّك متوافق مع Iceberg قراءة جدول Iceberg الناتج.تعرّف على المزيد: يشرح كتابة البيانات إلى تنسيقات الجداول المفتوحة كيفية كتابة البيانات الخام والنتائج المجمّعة باستخدام مجموعة بيانات UK Price Paid، بما في ذلك اعتبارات المخطط عند مواءمة أنواع ClickHouse مع Iceberg.

الخطوات التالية

الآن بعد أن اطّلعت على سير العمل الكامل، تعمّق أكثر في كل جانب:
آخر تعديل في ٢٩ يونيو ٢٠٢٦