إنشاء جدول
Paimon* تفعيل allow_experimental_paimon_storage_engine (وهو معطّل افتراضيًا)، لذا قم بتمكينه قبل تشغيل CREATE TABLE.
وسائط المحرك
S3 وAzureBlobStorage وHDFS وFile، كلٌّ بحسبه.
يشير format إلى تنسيق ملفات البيانات في جدول Paimon.
يمكن تحديد معلمات المحرك باستخدام المجموعات المسماة
مثال
الإمكانات
- تتم عمليات قراءة اللقطات من أحدث لقطة للجدول.
- تتم عمليات القراءة التزايدية استنادًا إلى معرّف اللقطة المُعتمدة عند تفعيلها.
- استبعاد الأقسام عند تمكين
use_paimon_partition_pruning. - تحديث اختياري للبيانات الوصفية في الخلفية عند ضبطه.
- معرّف UUID ثابت للجدول عند استخدام قواعد بيانات Atomic/Replicated، مما يتيح وحدات الماكرو
{uuid}في مسارات Keeper.
الإعدادات
allow_experimental_paimon_storage_engine— يتيح إنشاء محركات الجداولPaimonوPaimonS3وPaimonAzureوPaimonHDFSوPaimonLocal. القيمة الافتراضية:0(معطّل).paimon_incremental_read— يفعّل وضع القراءة التزايدية.paimon_metadata_refresh_interval_sec— الفاصل الزمني لتحديث البيانات الوصفية في الخلفية، بالثواني. عند ضبطه على قيمة أكبر من 0، تسحب مهمة تعمل في الخلفية أحدث لقطة ومخطط دوريًا من تخزين الكائنات. القيمة الافتراضية: 30.paimon_keeper_path— مسار Keeper لحالة القراءة التزايدية. يجب ضبطه وأن يكون فريدًا لكل جدول؛ ويدعم وحدات الماكرو مثل{database}و{table}و{uuid}.paimon_replica_name— اسم النسخة المتماثلة لحالة القراءة التزايدية. يجب ضبطه وأن يكون فريدًا لكل نسخة متماثلة؛ ويدعم وحدات الماكرو مثل{replica}.
أمثلة على القراءة التزايدية
إعدادات على مستوى الاستعلام للقراءة التزايدية
SELECT ... SETTINGS، وليس ضمن CREATE TABLE). وهي تتحكم في سلوك كل استعلام على حدة لعمليات القراءة التزايدية:
paimon_target_snapshot_id— يقرأ فقط التغييرات الخاصة باللقطة المحددة. لا تتقدّم العلامة المائية المُعتمدة في Keeper، لذا يمكن إعادة قراءة اللقطة نفسها أي عدد من المرات. القيمة الافتراضية:-1(معطّل).max_consume_snapshots— الحد الأقصى لعدد اللقطات التي يمكن استهلاكها في قراءة تزايدية واحدة. عندما يكون المصدر قد راكم عددًا كبيرًا من اللقطات غير المقروءة، يحدّ هذا الإعداد من عدد اللقطات التي تُستهلك في كل استعلام للتحكم في حجم الدفعة.0تعني عدم وجود حد. القيمة الافتراضية:0.
من Paimon إلى MergeTree عبر عرض مادي قابل للتحديث
APPEND. في كل دورة تحديث، لا تُقرأ من Paimon إلا البيانات التزايدية الجديدة، ثم تُلحَق بجدول الوجهة.
الخطوة 1 — أنشئ جدول مصدر Paimon مع تمكين القراءة التزايدية وتحديث البيانات الوصفية.
يستخدم المثال أدناه PaimonLocal. استبدل المحرك بـ PaimonS3 أو PaimonAzure أو PaimonHDFS أو المحرك Paimon الذي يكتشف الإعدادات تلقائيًا، بحسب ما يناسب الواجهة الخلفية للتخزين لديك:
paimon_metadata_refresh_interval_sec الفاصل الزمني لتحديث البيانات الوصفية في الخلفية، بالثواني. وعندما تكون قيمته أكبر من 0، تسحب مهمة تعمل في الخلفية أحدث لقطة ومخطط من تخزين الكائنات بشكل دوري، بحيث تتمكن دورة تحديث MV من رؤية البيانات المُعتمدة حديثًا دون انتظار أن يؤدّي استعلام إلى تشغيل تحديث البيانات الوصفية. القيمة الافتراضية هي 30. استخدمه بحذر عند التعامل مع عدد كبير من الجداول لتجنّب الإفراط في استخدام تخزين الكائنات وعمليات الإدخال/الإخراج الخاصة بـ Keeper.
الخطوة 2 — أنشئ جدول الوجهة من نوع MergeTree (مع استنساخ المخطط من جدول Paimon):
SELECT * FROM paimon_mv_source، الذي يعيد فقط الصفوف المُضافة منذ آخر لقطة تم اعتمادها، ويضيفها إلى paimon_mv_dest.
التنظيف:
أوقِف الـ MV قبل حذفها لمنع التحديث في الخلفية من تعطيل عمليات DDL.
القيود
- تتطلب القراءة التزايدية تهيئة Keeper (ZooKeeper).
- تتطلب القراءة التزايدية ضبط
paimon_keeper_pathبحيث يكون فريدًا لكل جدول. - يجب أن يكون
paimon_replica_nameفريدًا لكل نسخة متماثلة ضمن مسار Keeper نفسه. - تستخدم القراءة التزايدية آلية تسليم من نوع at-most-once: إذ تُقدَّم اللقطة المعتمدة عند جمع ملفات البيانات، قبل استهلاك البيانات فعليًا. وإذا فشل الاستعلام بعد جمع الملفات، فلن تُعاد قراءة اللقطات التي تم تجاوزها عند إعادة المحاولة.
- محرك الجدول للقراءة فقط؛ ولا يدعم تعديل البيانات.
- لا تتعامل القراءة التزايدية مع حذف البيانات التاريخية من مصدر Paimon. إذا حُذفت بيانات Paimon من المصدر الأصلي أو جرى تحديثها، فلن تُزال تلقائيًا الصفوف المقابلة التي كُتبت بالفعل إلى جدول وجهة من نوع ClickHouse MergeTree. يجب عليك إصدار
ALTER TABLE ... DELETEيدويًا على جدول MergeTree لتنظيف البيانات القديمة.
الأسماء البديلة
Paimon تلقائيًا الواجهة الخلفية للتخزين من إعداد disk، ثم يوجّه إلى PaimonS3 أو PaimonAzure أو PaimonLocal وفقًا لذلك. وعند عدم تحديد disk، يُستخدَم PaimonS3 افتراضيًا.
الأعمدة الافتراضية
_path— مسار الملف. النوع:LowCardinality(String)._file— اسم الملف. النوع:LowCardinality(String)._size— حجم الملف بالبايت. النوع:Nullable(UInt64). إذا كان حجم الملف غير معروف، تكون القيمةNULL._time— وقت آخر تعديل للملف. النوع:Nullable(DateTime). إذا كان الوقت غير معروف، تكون القيمةNULL._etag— قيمة etag للملف. النوع:LowCardinality(String). إذا كانت قيمة etag غير معروفة، تكون القيمةNULL.
أنواع البيانات المدعومة
| نوع البيانات في Paimon | نوع البيانات في ClickHouse |
|---|---|
| BOOLEAN | Int8 |
| TINYINT | Int8 |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| STRING,VARCHAR,BYTES,VARBINARY | String |
| DATE | Date |
| TIME(p),TIME | Time(‘UTC’) |
| TIMESTAMP(p) WITH LOCAL TIME ZONE | DateTime64 |
| TIMESTAMP(p) | DateTime64(‘UTC’) |
| CHAR | FixedString(1) |
| BINARY(n) | FixedString(n) |
| DECIMAL(P,S) | Decimal(P,S) |
| ARRAY | Array |
| MAP | Map |
التقسيم المدعوم
CHARVARCHARBOOLEANDECIMALTINYINTSMALLINTINTEGERDATETIMETIMESTAMPTIMESTAMP WITH LOCAL TIME ZONEBIGINTFLOATDOUBLE