Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

الاستعلام عن تنسيقات الجداول المفتوحة مباشرةً

يوفّر ClickHouse دوال الجداول للاستعلام عن البيانات المخزّنة بتنسيقات الجداول المفتوحة مباشرةً من التخزين الكائني. ولا يتطلّب ذلك الاتصال بكتالوج خارجي، إذ يتم الاستعلام عن البيانات في موقعها مباشرةً، على غرار الطريقة التي يقرأ بها AWS Athena من S3.

يمكنك تمرير مسار التخزين وبيانات الاعتماد مباشرةً ضمن استدعاء الدالة، ويتولّى ClickHouse الباقي. تتوفر جميع صيغ ClickHouse SQL ودواله، كما تستفيد الاستعلامات من التنفيذ المتوازي في ClickHouse وقارئ Parquet الأصلي عالي الكفاءة.

تستخدم الأمثلة التالية مجموعة البيانات hits المخزّنة بكل تنسيق من تنسيقات lakehouse على S3. ولكل تنسيق lake، تتوفر دوال مخصّصة لكل موفّر من موفّري التخزين الكائني.

تقرأ دالة الجدول iceberg (اسم مستعار لـ icebergS3) جداول Iceberg مباشرةً من وحدة تخزين الكائنات. وتتوفر متغيرات لكل واجهة خلفية للتخزين: icebergS3 وicebergAzure وicebergHDFS وicebergLocal.

مثال على الصياغة:

icebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])

icebergAzure(connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])

icebergLocal(path_to_table, [,format] [,compression_method])

مثال:

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
┌─url────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │ -- 3.29 million
│ http://kinopoisk.ru                                │ 1625250 │ -- 1.63 million
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 3.375 sec. Processed 100.00 million rows, 9.98 GB (29.63 million rows/s., 2.96 GB/s.)
Peak memory usage: 10.48 GiB.

متغاير المجموعة

تُوزّع الدالة icebergS3Cluster عمليات القراءة على عدة عقد في مجموعة ClickHouse. تُنشئ عقدة المُبادِر اتصالات بجميع العقد وتُوزّع ملفات البيانات ديناميكيًا. تطلب كل عقدة عاملة المهام وتعالجها حتى تُقرأ جميع الملفات. icebergCluster هو اسم مستعار لـ icebergS3Cluster. كما تتوفر متغيرات لـ Azure (icebergAzureCluster) ولـ HDFS (icebergHDFSCluster).

مثال على الصياغة:

icebergS3Cluster(cluster_name, url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])
-- icebergCluster is an alias for icebergS3Cluster

icebergAzureCluster(cluster_name, connection_string|storage_account_url, container_name, blobpath, [,account_name], [,account_key] [,format] [,compression_method])

مثال (ClickHouse Cloud):

SELECT
    url,
    count() AS cnt
FROM icebergS3Cluster(
    'default',
    'https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/'
)
GROUP BY url
ORDER BY cnt DESC
LIMIT 5

محرك الجدول

كبديل عن استخدام دالة الجدول في كل استعلام، يمكنك إنشاء جدول دائم باستخدام محرك جدول Iceberg. تبقى البيانات مخزّنة في object storage وتُقرأ عند الطلب، دون نسخ أي بيانات إلى ClickHouse. تكمن الميزة في أن تعريف الجدول يُخزَّن في ClickHouse ويمكن مشاركته بين المستخدمين والجلسات دون الحاجة إلى أن يحدّد كل مستخدم مسار التخزين وبيانات الاعتماد. تتوفر متغيرات المحرك لكل backend تخزين: IcebergS3 (أو الاسم المستعار Iceberg)، وIcebergAzure، وIcebergHDFS، وIcebergLocal.

يدعم كلٌّ من محرك الجدول ودالة الجدول تخزين البيانات مؤقتًا، مستخدِمَين آليةَ التخزين المؤقت ذاتها المعتمدة في محركات التخزين S3 وAzureBlobStorage وHDFS. علاوةً على ذلك، تقوم ذاكرة التخزين المؤقت للبيانات الوصفية بتخزين معلومات ملف البيان في الذاكرة، مما يُقلّل من عمليات القراءة المتكررة لبيانات Iceberg الوصفية. هذا التخزين المؤقت مُفعَّل افتراضيًا عبر الإعداد use_iceberg_metadata_files_cache.

مثال على الصياغة:

محرك الجدول Iceberg هو اسم مستعار لـ IcebergS3.

CREATE TABLE iceberg_table
    ENGINE = IcebergS3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,compression_method])

CREATE TABLE iceberg_table
    ENGINE = IcebergAzure(connection_string|storage_account_url, container_name, blobpath, [account_name, account_key, format, compression])

CREATE TABLE iceberg_table
    ENGINE = IcebergLocal(path_to_table, [,format] [,compression_method])

مثال:

CREATE TABLE hits_iceberg
    ENGINE = IcebergS3('https://datasets-documentation.s3.amazonaws.com/lake_formats/iceberg/')

SELECT
    url,
    count() AS cnt
FROM hits_iceberg
GROUP BY url
ORDER BY cnt DESC
LIMIT 5
┌─url────────────────────────────────────────────────┬─────cnt─┐
│ http://liver.ru/belgorod/page/1006.jки/доп_приборы │ 3288173 │
│ http://kinopoisk.ru                                │ 1625250 │
│ http://bdsm_po_yers=0&with_video                   │  791465 │
│ http://video.yandex                                │  582400 │
│ http://smeshariki.ru/region                        │  514984 │
└────────────────────────────────────────────────────┴─────────┘

5 rows in set. Elapsed: 2.737 sec. Processed 100.00 million rows, 9.98 GB (36.53 million rows/s., 3.64 GB/s.)
Peak memory usage: 10.53 GiB.

للاطلاع على الميزات المدعومة، بما فيها تقليص الأقسام، وتطور المخطط، والتنقل عبر الزمن، والتخزين المؤقت، وغيرها، راجع مصفوفة الدعم. للاطلاع على المرجع الكامل، راجع توثيق دالة الجدول iceberg ومحرك الجدول Iceberg.

Navigation