MATERIALIZED VIEW بالمحرك، يبدأ محرك الجدول S3Queue في جمع البيانات في الخلفية.
إنشاء جدول
S3Queue هي نفسها المعلمات التي يدعمها محرك الجدول S3. راجع قسم المعلمات هنا.
مثال
الإعدادات
system.s3_queue_settings. وهو متاح بدءًا من 24.10.
أسماء الإعدادات (24.7+)بدءًا من الإصدار 24.7، يمكن تحديد إعدادات S3Queue مع البادئة
s3queue_ أو بدونها:- الصياغة الحديثة (24.7+):
processing_threads_num,tracked_file_ttl_sec، إلخ. - الصياغة القديمة (جميع الإصدارات):
s3queue_processing_threads_num,s3queue_tracked_file_ttl_sec، إلخ.
الوضع
- unordered — في الوضع
unordered، تُتَابَع مجموعة جميع الملفات التي تمت معالجتها بالفعل باستخدام عُقد دائمة في ZooKeeper. - ordered — في الوضع
ordered، تُعالَج الملفات بترتيب معجمي. وهذا يعني أنه إذا تمت معالجة ملف باسم ‘BBB’ في وقت ما ثم أُضيف لاحقًا ملف باسم ‘AA’ إلى الحاوية، فسيتم تجاهله. ولا يُخزَّن في ZooKeeper إلا أكبر اسم (بالمعنى المعجمي) للملف الذي تم استهلاكه بنجاح، وأسماء الملفات التي ستُعاد محاولة معالجتها بعد محاولة تحميل غير ناجحة.
ordered في الإصدارات السابقة لـ 24.6. واعتبارًا من 24.6، لم تعد هناك قيمة افتراضية، وأصبح من اللازم تحديد هذا الإعداد يدويًا. أما بالنسبة إلى الجداول التي أُنشئت على إصدارات أقدم، فستظل القيمة الافتراضية Ordered لأغراض التوافق.
after_processing
- keep.
- delete.
- move.
- tag.
keep.
يتطلب النقل إعدادات إضافية. في حالة النقل داخل حاوية bucket نفسها، يجب توفير بادئة مسار جديدة في after_processing_move_prefix.
يتطلب النقل إلى حاوية S3 bucket أخرى تحديد URI لحاوية bucket الهدف في after_processing_move_uri، وبيانات اعتماد S3 في after_processing_move_access_key_id وafter_processing_move_secret_access_key.
مثال:
after_processing_move_connection_string، واسم الحاوية في after_processing_move_container. راجع إعدادات AzureQueue.
يتطلب وضع العلامات توفير مفتاح العلامة وقيمتها في after_processing_tag_key وafter_processing_tag_value.
after_processing_retries
- عدد صحيح غير سالب.
10.
after_processing_move_access_key_id
- String.
after_processing_move_prefix
- String.
after_processing_move_preserve_path
true، فسيُضاف مسار كائن المصدر الكامل إلى after_processing_move_prefix عند نقل ملف تمت معالجته بنجاح، بحيث يُحفَظ هيكل دليل المصدر داخل الـ حاوية في الوجهة. وإذا كانت القيمة false، فسيُستخدم اسم الملف فقط، ويُسطَّح هيكل دليل المصدر.
القيم الممكنة:
true/false.
false.
after_processing_move_secret_access_key
- String.
after_processing_move_uri
- سلسلة نصية.
after_processing_tag_key
after_processing='tag'.
القيم الممكنة:
- سلسلة نصية.
after_processing_tag_value
after_processing='tag'.
القيم الممكنة:
- String.
keeper_path
s3queue_default_zookeeper_path وUUID قاعدة البيانات وUUID الجدول. تُستخدم القيم المطلقة (التي تبدأ بـ /) كما هي، بينما تُلحَق القيم النسبية بالبادئة المُعدّة. تُوسَّع وحدات الماكرو مثل {database} أو {uuid} قبل أن يتصل محرك بـ ZooKeeper.
لاستهداف auxiliary ZooKeeper cluster، أضِف إلى القيمة الاسم المُعدّ كبادئة، على سبيل المثال analytics_keeper:/clickhouse/queue/orders. يجب أن يكون الاسم موجودًا في <auxiliary_zookeepers>؛ وإلا فسيُبلغ محرك عن Unknown auxiliary ZooKeeper name .... ويُحتفَظ بالسلسلة الكاملة (بما في ذلك البادئة) في SHOW CREATE TABLE بحيث يمكن تكرار التعليمة حرفيًا.
Possible values:
- String.
/.
loading_retries
- عدد صحيح غير سالب.
10.
processing_threads_num
Unordered.
القيمة الافتراضية: عدد وحدات المعالجة المركزية (CPU) أو 16.
parallel_inserts
processing_threads_num عملية INSERT واحدة، لذا سيقتصر الأمر على تنزيل الملفات وتحليلها باستخدام عدة خيوط.
لكن هذا يحدّ من مستوى التوازي، لذلك للحصول على إنتاجية أفضل استخدم parallel_inserts=true، إذ يتيح ذلك إدراج البيانات بالتوازي (مع الانتباه إلى أن هذا سيؤدي إلى زيادة عدد أجزاء البيانات المُنشأة لمحركات عائلة MergeTree).
سيتم إنشاء عمليات
INSERT وفقًا لإعدادات max_process*_before_commit.false.
enable_logging_to_queue_log
system.s3queue_log.
القيمة الافتراضية: 1.
polling_min_timeout_ms
- عدد صحيح موجب.
1000.
polling_max_timeout_ms
- عدد صحيح موجب.
600000.
polling_backoff_ms
- عدد صحيح موجب.
30000.
tracked_files_limit
- عدد صحيح موجب.
1000.
tracked_file_ttl_sec
- عدد صحيح موجب.
0.
cleanup_interval_min_ms
60000.
cleanup_interval_max_ms
Ordered. يحدِّد الحد الأقصى للفاصل الزمني لإعادة جدولة مهمة تعمل في الخلفية، والمسؤولة عن إدارة TTL للملفات المتتبعة والحد الأقصى لمجموعة الملفات المتتبعة.
القيمة الافتراضية: 60000.
buckets
24.6. إذا كانت هناك عدة نُسخ متماثلة لجدول S3Queue، وكانت جميعها تعمل مع دليل البيانات الوصفية نفسه في Keeper، فيجب أن تكون قيمة buckets مساويةً على الأقل لعدد النُسخ المتماثلة. وإذا استُخدم أيضًا الإعداد processing_threads، فمن المنطقي زيادة قيمة الإعداد buckets أكثر، لأنه يحدد درجة التوازي الفعلية لمعالجة S3Queue.
use_persistent_processing_nodes
persistent_processing_node_ttl_seconds
use_persistent_processing_nodes ممكّنًا، فستبقى بعض عقد المعالجة بدون إزالة. يحدّد هذا الإعداد فترة زمنية يمكن خلالها تنظيف عقد المعالجة هذه بأمان. ويُستخدم TTL نفسه أيضًا لقفل الحاوية في وضع Ordered، وقد يبقى هذا القفل لمدة أطول من عقدة معالجة واحدة، لذا ينبغي أن تراعي القيمة ذلك أيضًا.
القيمة الافتراضية: 21600 (6 ساعات).
الإعدادات المتعلّقة بـ S3
الوصول المستند إلى الأدوار في S3
roleARN عبر المعلَمة extra_credentials كما هو موضح أدناه:
وضع S3Queue المرتّب
S3Queue تخزين قدر أقل من البيانات الوصفية في ZooKeeper، لكنه يفرض قيدًا يتمثل في أن الملفات التي تُضاف لاحقًا زمنيًا يجب أن تكون أسماؤها أكبر أبجديًا رقميًا.
يدعم وضع S3Queue ordered، وكذلك unordered، الإعداد (s3queue_)processing_threads_num (تكون البادئة s3queue_ اختيارية)، والذي يتيح التحكم في عدد الخيوط التي ستتولى معالجة ملفات S3 محليًا على الخادم.
بالنسبة إلى وضع ordered من دون تقسيم، قد يستأنف ClickHouse سرد عناصر S3 من آخر مفتاح تمت معالجته لتجنب إعادة سرد السجل الكامل للبادئة. وفي الوضع المرتّب المعتمد على buckets، تُحدَّد نقطة الاستئناف بشكل متحفّظ باعتبارها أصغر مفتاح تمت معالجته عبر جميع buckets لتجنب تخطي الملفات غير المعالجة.
لا يُستخدم تحسين استئناف السرد هذا إلا مع قوائم الانتظار المستندة إلى S3 في وضع ordered من دون تقسيم (وليس مع AzureQueue أو عند ضبط partitioning_mode).
إضافةً إلى ذلك، يقدّم وضع ordered أيضًا إعدادًا آخر يسمى (s3queue_)buckets ويعني “الخيوط المنطقية”. ويعني هذا أنه في السيناريو الموزّع، عندما تكون هناك عدة خوادم تحتوي على نسخ متماثلة لجدول S3Queue، فإن هذا الإعداد يحدّد عدد وحدات المعالجة. على سبيل المثال، سيحاول كل خيط معالجة على كل نسخة متماثلة من S3Queue قفل حاوية معيّن للمعالجة، ويُسنَد كل حاوية إلى ملفات معيّنة استنادًا إلى hash اسم الملف. لذلك، في السيناريو الموزّع، يُوصى بشدة بأن تكون قيمة الإعداد (s3queue_)buckets مساوية على الأقل لعدد النسخ المتماثلة أو أكبر منه. ولا توجد مشكلة في أن يكون عدد buckets أكبر من عدد النسخ المتماثلة. أما السيناريو الأمثل فهو أن تكون قيمة الإعداد (s3queue_)buckets مساوية لحاصل ضرب number_of_replicas و(s3queue_)processing_threads_num.
لا يُنصح باستخدام الإعداد (s3queue_)processing_threads_num قبل الإصدار 24.6.
يتوفر الإعداد (s3queue_)buckets بدءًا من الإصدار 24.6.
SELECT من محرك الجدول S3Queue
stream_like_engine_allow_direct_select على True.
يحتوي محرك S3Queue على إعداد خاص لاستعلامات SELECT: commit_on_select. اضبطه على False للاحتفاظ بالبيانات في قائمة الانتظار بعد قراءتها، أو على True لإزالتها.
الوصف
SELECT مفيدًا كثيرًا في الاستيراد المتدفق (إلا لأغراض استكشاف الأخطاء وإصلاحها)، لأن كل ملف لا يمكن استيراده إلا مرة واحدة. ومن الأكثر عملية إنشاء تدفقات آنية باستخدام العروض المادية. للقيام بذلك:
- استخدم المحرّك لإنشاء جدول للاستهلاك من المسار المحدد في S3، واعتبره تدفق بيانات.
- أنشئ جدولًا بالبنية المطلوبة.
- أنشئ عرضًا ماديًا يحوّل البيانات من المحرّك ويضعها في جدول تم إنشاؤه مسبقًا.
MATERIALIZED VIEW بالمحرّك، يبدأ في جمع البيانات في الخلفية.
مثال:
الأعمدة الافتراضية
_path— مسار الملف._file— اسم الملف._size— حجم الملف._time— وقت إنشاء الملف.
أحرف البدل في path
path تحديد عدة ملفات باستخدام أحرف بدل شبيهة بتلك المستخدمة في bash. ولكي يُعالَج الملف، يجب أن يكون موجودًا وأن يطابق نمط المسار بالكامل. وتُحدَّد قائمة الملفات أثناء SELECT (وليس وقت CREATE).
*— يستبدل أي عدد من المحارف، باستثناء/، بما في ذلك السلسلة الفارغة.**— يستبدل أي عدد من المحارف، بما في ذلك/، بما في ذلك السلسلة الفارغة.?— يستبدل أي محرف واحد.{some_string,another_string,yet_another_one}— يستبدل أيًّا من السلاسل'some_string', 'another_string', 'yet_another_one'.{N..M}— يستبدل أي رقم ضمن النطاق من N إلى M، بما في ذلك الحدّان. ويمكن أن تحتوي N وM على أصفار بادئة، مثل000..078.
{} مشابهة لدالة الجدول remote.
القيود
- قد تنتج الصفوف المكررة بسبب:
-
حدوث استثناء أثناء parsing في منتصف معالجة الملف، مع تفعيل retries عبر
s3queue_loading_retries; -
إعداد
S3Queueعلى عدة خوادم تشير إلى المسار نفسه في ZooKeeper، وانتهاء session الخاصة بـ Keeper قبل أن يتمكن أحد الخوادم من commit الملف المُعالَج، مما قد يؤدي إلى أن يتولى خادم آخر معالجة الملف، رغم أن الخادم الأول قد يكون عالجه جزئيًا أو بالكامل؛ ومع ذلك، لم يعد هذا ينطبق اعتبارًا من الإصدار 25.8 إذا كانتuse_persistent_processing_nodes = 1. - إنهاء غير طبيعي للخادم.
- إذا كان
S3Queueمُعدًّا على عدة خوادم تشير إلى المسار نفسه في ZooKeeper، وكان وضعOrderedمستخدمًا، فلن تعملs3queue_loading_retries. سيُصلَح هذا قريبًا.
الاستقصاء الداخلي
system.s3queue_metadata_cache والجدول الدائم system.s3queue_log.
system.s3queue_metadata_cache. هذا الجدول غير دائم ويعرض الحالة المخزنة في الذاكرة لـS3Queue: الملفات التي تجري معالجتها حاليًا، والملفات التي تمت معالجتها أو التي فشلت.
-
system.s3queue_log. جدول دائم. يتضمن المعلومات نفسها الموجودة فيsystem.s3queue_metadata_cache، ولكن لملفاتprocessedوfailed.
system.s3queue_log، حدِّد إعداده في ملف إعدادات الخادم: