الانتقال إلى المحتوى الرئيسي

جدول المحتويات

إصدار ClickHouse v23.12، 2023-12-28
إصدار ClickHouse v23.11، 2023-12-06
إصدار ClickHouse v23.10، 2023-11-02
إصدار ClickHouse v23.9، 2023-09-28
إصدار ClickHouse v23.8 LTS، 2023-08-31
إصدار ClickHouse v23.7، 2023-07-27
إصدار ClickHouse v23.6، 2023-06-30
إصدار ClickHouse v23.5، 2023-06-08
إصدار ClickHouse v23.4، 2023-04-26
إصدار ClickHouse v23.3 LTS، 2023-03-30
إصدار ClickHouse v23.2، 2023-02-23
إصدار ClickHouse v23.1، 2023-01-25
سجل التغييرات لعام 2022

إصدار ClickHouse 23.12، 2023-12-28. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • إصلاح التحقق من الدوال غير الحتمية في تعبيرات TTL. سابقًا، كان بإمكانك في بعض الحالات إنشاء تعبير TTL يتضمن دوال غير حتمية، ما قد يؤدي لاحقًا إلى سلوك غير معرّف. يُصلح هذا #37250. كما تُمنع افتراضيًا تعبيرات TTL التي لا تعتمد على أي عمود في الجدول. ويمكن السماح بها مجددًا باستخدام SET allow_suspicious_ttl_expressions = 1 أو SET compatibility = '23.11'. يُغلق هذا #37286. #51858 (Alexey Milovidov).
  • تم إهمال إعداد MergeTree ‏clean_deleted_rows، ولم يعد له أي تأثير. ولم تعد الكلمة المفتاحية CLEANUP في OPTIMIZE مسموحًا بها افتراضيًا (ويمكن إعادة تفعيلها باستخدام الإعداد allow_experimental_replacing_merge_with_cleanup). #58267 (Alexander Tokmakov). يُصلح هذا #57930. ويُغلق هذا #54988. ويُغلق هذا #54570. ويُغلق هذا #50346. ويُغلق هذا #47579. يجب إزالة هذه الميزة لأنها غير مناسبة. وعلينا إزالتها في أقرب وقت ممكن، إذ لا يوجد خيار آخر. #57932 (Alexey Milovidov).

ميزة جديدة

  • تنفيذ Refreshable Materialized Views، بناءً على الطلب في #33919. #56946 (Michael Kolupaev، Michael Guzov).
  • تقديم PASTE JOIN، الذي يتيح للمستخدمين ربط الجداول من دون عبارة ON، وذلك ببساطة بالاعتماد على أرقام الصفوف. مثال: SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2. #57995 (Yarik Briukhovetskyi).
  • أصبحت عبارة ORDER BY تدعم الآن تحديد ALL، ما يعني أن ClickHouse يرتّب حسب جميع الأعمدة في عبارة SELECT. مثال: SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL. #57875 (zhongyuankai).
  • أُضيف أمر mutation جديد هو ALTER TABLE <table> APPLY DELETED MASK، ويتيح فرض تطبيق القناع الذي يكتبه lightweight delete وإزالة الصفوف المعلَّمة على أنها محذوفة من القرص. #57433 (Anton Popov).
  • يفتح المعالج /binary عارضًا مرئيًا للرموز داخل الملف التنفيذي الثنائي لـ ClickHouse. #58211 (Alexey Milovidov).
  • أُضيفت دالة SQL جديدة sqid لتوليد Sqids ‏(https://sqids.org/)، مثال: SELECT sqid(125, 126). #57512 (Robert Schulze).
  • أُضيفت دالة جديدة seriesPeriodDetectFFT لاكتشاف period السلسلة باستخدام FFT. #57574 (Bhavna Jindal).
  • أُضيفت نقطة نهاية HTTP للتحقق مما إذا كان Keeper جاهزًا لاستقبال الطلبات. #55876 (Konstantin Bogdanov).
  • أُضيف وضع ‘union’ لاستدلال المخطط. في هذا الوضع، يكون مخطط الجدول الناتج هو اتحاد جميع مخططات الملفات (أي يُستدل على المخطط من كل ملف). ويتحكم في وضع استدلال المخطط الإعداد schema_inference_mode، وله قيمتان محتملتان هما default و union. يُغلق #55428. #55892 (Kruglov Pavel).
  • أُضيف إعداد جديد input_format_csv_try_infer_numbers_from_strings يتيح استدلال الأرقام من السلاسل النصية في CSV format. يُغلق #56455. #56859 (Kruglov Pavel).
  • عند تجاوز عدد قواعد البيانات أو الجداول عتبة قابلة للضبط، يُعرَض تحذير للمستخدم. #57375 (凌涛).
  • يدعم Dictionary ذو layout ‏HASHED_ARRAYCOMPLEX_KEY_HASHED_ARRAY) ‎SHARDS‎ على نحو مماثل لـ HASHED. #57544 (vdimir).
  • أُضيفت metrics غير متزامنة لإجمالي بايتات primary key وإجمالي بايتات primary key المخصَّصة في الذاكرة. #57551 (Bharat Nallan).
  • أُضيفت الدالة SHA512_256. #57645 (Bharat Nallan).
  • أضِف FORMAT_BYTES كاسم بديل لـ formatReadableSize. #57592 (Bharat Nallan).
  • اسمح بتمرير رمز جلسة اختياري إلى دالة الجدول s3. #57850 (Shani Elharrar).
  • قدِّم إعدادًا جديدًا http_make_head_request. إذا كان معطّلًا، فلن يُجري محرك الجدول URL طلب HEAD لتحديد حجم الملف. وهذا مطلوب لدعم خوادم HTTP غير الفعّالة أو سيئة الإعداد أو غير القادرة على ذلك. #54602 (Fionera).
  • أصبح من الممكن الآن الإشارة إلى عمود ALIAS في تعريفات الفهرس (غير المفتاح الأساسي) (issue #55650). مثال: CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;. #57546 (Robert Schulze).
  • أُضيف إعداد جديد readonly يمكن استخدامه لتحديد أن قرص S3 للقراءة فقط. وقد يكون ذلك مفيدًا لإنشاء جدول على قرص من النوع s3_plain، مع امتلاك وصول للقراءة فقط إلى حاوية S3 الأساسية. #57977 (Pengyuan Bian).
  • سيُطبَّق الآن تحليل المفتاح الأساسي في جداول MergeTree على شروط التصفية التي تتضمن العمود الافتراضي _part_offset (واختياريًا مع _part). ويمكن أن تؤدي هذه الميزة دور نوع خاص من الفهرس الثانوي. #58224 (Amos Bird).

تحسين الأداء

  • استخراج نطاقات الأجزاء غير المتقاطعة من جدول MergeTree أثناء معالجة FINAL. وبهذه الطريقة يمكن تجنّب منطق FINAL الإضافي لهذه النطاقات من الأجزاء غير المتقاطعة. وعندما يكون عدد القيم المكررة ذات المفتاح الأساسي نفسه منخفضًا، يصبح الأداء مماثلًا تقريبًا للأداء بدون FINAL. تحسين أداء القراءة في MergeTree FINAL عند ضبط الإعداد do_not_merge_across_partitions_select_final. #58120 (Maksim Kita).
  • أصبح النسخ بين أقراص S3 يستخدم نسخ S3 من جهة الخادم بدلًا من النسخ عبر المخزن المؤقت. وهذا يحسّن عمليات BACKUP/RESTORE والأمر clickhouse-disks copy. #56744 (MikhailBurdukov).
  • أصبح Hash JOIN يراعي الإعداد max_joined_block_size_rows ولا يُنتج كتلًا كبيرة في ALL JOIN. #56996 (vdimir).
  • تحرير الذاكرة الخاصة بالتجميع في وقت أبكر. وقد يجنّب ذلك اللجوء غير الضروري إلى external aggregation. #57691 (Nikolai Kochetov).
  • تحسين أداء تسلسل السلاسل النصية. #57717 (Maksim Kita).
  • دعم تحسين العدّ البسيط لجداول المحرك Merge. #57867 (skyoct).
  • تحسين التجميع في بعض الحالات. #57872 (Anton Popov).
  • يمكن للدالة hasAny الآن الاستفادة من فهارس التخطي للنص الكامل. #57878 (Jpnock).
  • جرى تحسين الدالة if(cond, then, else) (واسمها البديل cond ? then : else) لاستخدام تقييم بلا تفرعات. #57885 (zhanglistar).
  • أصبح MergeTree يستنتج تلقائيًا الإعداد do_not_merge_across_partitions_select_final إذا كان تعبير مفتاح partition يحتوي فقط على أعمدة من تعبير المفتاح الأساسي. #58218 (Maksim Kita).
  • تسريع MIN وMAX للأنواع native. #58231 (Raúl Marín).
  • تنفيذ سياسة cache SLRU لذاكرة filesystem cache. #57076 (Kseniia Sumarokova).
  • رُفع الحد الأقصى لعدد connections لكل endpoint لعمليات background fetches من 15 إلى قيمة الإعداد background_fetches_pool_size. - أصبح الإعداد على مستوى MergeTree replicated_max_parallel_fetches_for_host متقادمًا - نُقلت الإعدادات replicated_fetches_http_connection_timeout وreplicated_fetches_http_send_timeout وreplicated_fetches_http_receive_timeout من مستوى MergeTree إلى مستوى الخادم. - أُضيف الإعداد keep_alive_timeout إلى قائمة الإعدادات على مستوى الخادم. #57523 (Nikita Mikhaylov).
  • جعل الاستعلام عن system.filesystem_cache أقل استهلاكًا للذاكرة. #57687 (Kseniia Sumarokova).
  • تقليل استخدام الذاكرة عند إلغاء تسلسل السلاسل النصية. #57787 (Maksim Kita).
  • مُنشئ أكثر كفاءة لـ Enum، ويكون ذلك مفيدًا عندما يحتوي Enum على عدد هائل من القيم. #57887 (Duc Canh Le).
  • تحسين في قراءة البيانات من ذاكرة التخزين المؤقت لنظام الملفات: استخدام طريقة pread دائمًا. #57970 (Nikita Taranov).
  • أُضيف تحسين لسلسلة AND notEquals في مُحسِّن التعبيرات المنطقية. هذا التحسين متاح فقط عند تفعيل المحلّل التجريبي. #58214 (Kevin Mingtarja).

تحسينات

  • إضافة دعم حد الذاكرة المرن في Keeper. سيرفض الطلبات إذا اقترب استخدام الذاكرة من الحد الأقصى. #57271 (Han Fei). #57699 (Han Fei).
  • جعل عمليات insert إلى الجداول الموزعة تتعامل بشكل صحيح مع تحديثات تهيئة العنقود. وعند تحديث قائمة عُقد العنقود ديناميكيًا، سيحدّث Directory Monitor الخاص بجدول التوزيع هذه القائمة. #42826 (zhongyuankai).
  • عدم السماح بإنشاء جدول مكرَّر بمعلمات merge غير متسقة. #56833 (Duc Canh Le).
  • إظهار الحجم غير المضغوط في system.tables. #56618. #57186 (Chen Lixiang).
  • إضافة skip_unavailable_shards كإعداد لجداول Distributed، مماثل للإعداد المناظر على مستوى الاستعلام. يُغلق #43666. #57218 (Gagan Goel).
  • يمكن الآن استخدام الدالة substring (الأسماء البديلة: substr، mid) مع أنواع Enum. سابقًا، كان يجب أن تكون الوسيطة الأولى للدالة قيمة من النوع String أو FixedString. وهذا يحسّن التوافق مع أدوات الطرف الثالث مثل Tableau عبر واجهة MySQL. #57277 (Serge Klochkov).
  • تدعم الدالة format الآن أي نوع من الوسائط (بدلًا من الاقتصار على الوسائط String وFixedString فقط). وهذا مهم لحساب SELECT format('The {0} to all questions is {1}', 'answer', 42). #57549 (Robert Schulze).
  • أصبح بالإمكان الآن استخدام الدالة date_trunc مع وسيطة أولى غير حساسة لحالة الأحرف. وكلتا الصيغتين مدعومتان الآن: SELECT date_trunc('day', now()) وSELECT date_trunc('DAY', now()). #57624 (Yarik Briukhovetskyi).
  • تلميحات أفضل عند عدم وجود جدول. #57342 (Bharat Nallan).
  • السماح بتجاوز إعدادَي الخادم max_partition_size_to_drop وmax_table_size_to_drop وقت تنفيذ الاستعلام. #57452 (Jordi Villar).
  • تحسين طفيف في استدلال tuples غير المسماة في تنسيقات JSON. #57751 (Kruglov Pavel).
  • إضافة دعم لعلامة القراءة فقط عند الاتصال بـ Keeper (إصلاح #53749). #57479 (Mikhail Koviazin).
  • إصلاح احتمال تعطل الإرسال الموزع بسبب “No such file or directory” (أثناء استعادة batch من القرص). وإصلاح مشكلات محتملة في error_count من system.distribution_queue (في حال كان distributed_directory_monitor_max_sleep_time_ms >5min). وإضافة حدث profile لتتبّع حالات فشل INSERT غير المتزامنة - DistributedAsyncInsertionFailures. #57480 (Azat Khuzhin).
  • دعم الأعمدة المُولَّدة في PostgreSQL وقيم الأعمدة الافتراضية للأعمدة في MaterializedPostgreSQL (ميزة تجريبية). يُغلق #40449. #57568 (Kseniia Sumarokova).
  • السماح بتطبيق بعض تغييرات إعدادات تهيئة ذاكرة التخزين المؤقت لنظام الملفات دون إعادة تشغيل الخادم. #57578 (Kseniia Sumarokova).
  • التعامل بشكل صحيح مع بنية جدول PostgreSQL التي تحتوي على مصفوفة فارغة. #57618 (Mike Kot).
  • إتاحة العدد الإجمالي للأخطاء التي حدثت منذ آخر إعادة تشغيل للخادم كمقياس ClickHouseErrorMetric_ALL. #57627 (Nikita Mikhaylov).
  • السماح بالعُقد في ملف التهيئة التي تحتوي على مرجع from_env/from_zk وعنصر غير فارغ مع replace=1. #57628 (Azat Khuzhin).
  • دالة جدول fuzzJSON تتيح توليد كمية كبيرة من JSON غير الصحيح لاستخدامه في fuzzing. #57646 (Julia Kartseva).
  • السماح بالتحويل من IPv6 إلى UInt128 وبالعمليات الحسابية الثنائية. #57707 (Yakov Olkhovskiy).
  • إضافة إعداد لـ async inserts deduplication cache يحدد مدة الانتظار لتحديث ذاكرة التخزين المؤقت. وإهمال الإعداد async_block_ids_cache_min_update_interval_ms. والآن لا تُحدَّث ذاكرة التخزين المؤقت إلا في حالة وجود تعارضات. #57743 (alesapin).
  • يمكن الآن إلغاء الدالة sleep() باستخدام KILL QUERY. #57746 (Vitaly Baranov).
  • منع استعلامات CREATE TABLE ... AS SELECT لمحركات الجداول Replicated في قاعدة البيانات التجريبية Replicated لأنها غير مدعومة. مرجع #35408. #57796 (Nikolay Degterinsky).
  • إصلاح وتحسين تحويل الاستعلامات لقواعد البيانات الخارجية، للحصول بشكل تكراري على جميع شروط التصفية المتوافقة. #57888 (flynn).
  • دعم إعادة تحميل حجم ذاكرة التخزين المؤقت لنظام الملفات ديناميكيًا. يُغلق #57866. #57897 (Kseniia Sumarokova).
  • دعم system.stack_trace بشكل صحيح للخيوط التي يكون فيها SIGRTMIN محظورًا (قد توجد هذه الخيوط في مكتبات خارجية منخفضة الجودة مثل Apache rdkafka). #57907 (Azat Khuzhin). وكذلك إرسال الإشارة إلى الخيوط فقط إذا لم تكن محظورة، لتجنب انتظار storage_system_stack_trace_pipe_read_timeout_ms عندما لا يكون لذلك أي جدوى. #58136 (Azat Khuzhin).
  • تحمّل إخفاقات Keeper عند التحقق من quorum inserts. #57986 (Raúl Marín).
  • إضافة قيمة RSS القصوى/الذروية (MemoryResidentMax) إلى system.asynchronous_metrics. #58095 (Azat Khuzhin).
  • يتيح لك طلب السحب هذا استخدام روابط بأسلوب S3 (https:// و s3://) من دون ذكر المنطقة إذا لم تكن افتراضية. كما يعثر أيضًا على المنطقة الصحيحة إذا ذكر المستخدم منطقة غير صحيحة. #58148 (Yarik Briukhovetskyi).
  • سيصبح clickhouse-format --obfuscate على دراية بكل من Settings و MergeTreeSettings والمناطق الزمنية، وسيُبقي أسماءها دون تغيير. #58179 (Alexey Milovidov).
  • أُضيفت الدالة finalize() صراحةً إلى ZipArchiveWriter. كما جرى تبسيط الشيفرة شديدة التعقيد في ZipArchiveWriter. ويُصلح هذا #58074. #58202 (Vitaly Baranov).
  • ستستخدم الذواكر المؤقتة التي لها المسار نفسه كائنات cache نفسها. كان هذا السلوك موجودًا سابقًا، لكنه تعطّل في 23.4. وإذا كانت هذه الذواكر المؤقتة ذات المسار نفسه تملك مجموعات مختلفة من إعدادات cache، فسيُطرح استثناء يفيد بأن ذلك غير مسموح. #58264 (Kseniia Sumarokova).
  • النسخ المتماثلة المتوازية (ميزة تجريبية): إعدادات أكثر سهولة #57542 (Igor Nikonov).
  • النسخ المتماثلة المتوازية (ميزة تجريبية): تحسين معالجة استجابة announcement #57749 (Igor Nikonov).
  • النسخ المتماثلة المتوازية (ميزة تجريبية): زيادة مراعاة min_number_of_marks في ParallelReplicasReadingCoordinator #57763 (Nikita Taranov).
  • النسخ المتماثلة المتوازية (ميزة تجريبية): تعطيل النسخ المتماثلة المتوازية مع IN (استعلام فرعي) #58133 (Igor Nikonov).
  • النسخ المتماثلة المتوازية (ميزة تجريبية): إضافة حدث profile باسم ‘ParallelReplicasUsedCount’ #58173 (Igor Nikonov).
  • ستصبح الطلبات غير POST مثل HEAD readonly على غرار GET. #58060 (San).
  • إضافة العمود bytes_uncompressed إلى system.part_log #58167 (Jordi Villar).
  • إضافة اسم base backup إلى الجدولين system.backups و system.backup_log #58178 (Pradeep Chhetri).
  • إضافة دعم لتحديد معلمات الاستعلام في سطر الأوامر في clickhouse-local #58210 (Pradeep Chhetri).

تحسينات البناء/الاختبار/التغليف

  • إضفاء العشوائية على مزيد من الإعدادات #39663 (Anton Popov).
  • إضفاء العشوائية على التحسينات المعطّلة في CI #57315 (Raúl Marín).
  • السماح باستخدام table engines/functions المرتبطة بـ Azure على macOS. #51866 (Alexey Milovidov).
  • يستخدم ClickHouse Fast Test الآن Musl بدلًا من GLibc. #57711 (Alexey Milovidov). ويتوفر build ثابت بالكامل باستخدام Musl للتنزيل من CI.
  • تشغيل ClickBench مع كل commit. وبذلك أُغلقت #57708. #57712 (Alexey Milovidov).
  • إزالة استخدام الدالة الضارة select من C/POSIX في المكتبات الخارجية. #57467 (Igor Nikonov).
  • ستتوفر أيضًا الإعدادات المتاحة حصريًا في ClickHouse Cloud ضمن build ClickHouse مفتوح المصدر، تسهيلًا للاستخدام. #57638 (Nikita Mikhaylov).

إصلاح خلل (سلوك غير صحيح يمكن للمستخدم ملاحظته في إصدار مستقر رسمي)

  • أُصلِح احتمال حدوث خلل في ترتيب الفرز ضمن TTL GROUP BY #49103 (Nikita Mikhaylov).
  • إصلاح: تقسيم استراتيجية bucket في lttb، بحيث يجب أن يحتوي الـ bucket الأول والأخير على نقطة واحدة فقط #57003 (FFish).
  • إصلاح احتمال حدوث deadlock في تنسيق Template أثناء المزامنة بعد وقوع خطأ #57004 (Kruglov Pavel).
  • إصلاح التوقف المبكر أثناء parsing ملف مع تخطي عدد كبير من الأخطاء #57006 (Kruglov Pavel).
  • منع تجاوز ACL الخاص بـ dictionary عبر table function ‏dictionary #57362 (Salvatore Mesoraca).
  • إصلاح حالة أخرى من الخطأ “non-ready set” اكتشفها Fuzzer. #57423 (Nikolai Kochetov).
  • إصلاح عدة مشكلات متعلقة باستخدام PostgreSQL ‏array_ndims. #57436 (Ryan Jacobs).
  • إصلاح عدم اتساق RWLock بعد timeout لقفل الكتابة #57454 (Vitaly Baranov). إصلاح عدم اتساق RWLock بعد timeout لقفل الكتابة (مرة أخرى) #57733 (Vitaly Baranov).
  • إصلاح: عدم استبعاد العمود ephemeral عند بناء سلسلة الدفع إلى العرض #57461 (Yakov Olkhovskiy).
  • MaterializedPostgreSQL (مشكلة Experimental): إصلاح المشكلة #41922، وإضافة اختبار لـ #41923 #57515 (Kseniia Sumarokova).
  • تجاهل عبارة ON CLUSTER في استعلامات grant/revoke الخاصة بإدارة كيانات الوصول replicated. #57538 (MikhailBurdukov).
  • إصلاح crash في clickhouse-local #57553 (Nikolay Degterinsky).
  • إصلاح لـ Hash JOIN. #57564 (vdimir).
  • إصلاح خطأ محتمل في مصدر PostgreSQL #57567 (Kseniia Sumarokova).
  • إصلاح تصحيح النوع في Hash JOIN لـ LowCardinality المتداخل. #57614 (vdimir).
  • تجنب حالات التعليق في system.stack_trace عبر منع القراءة المتوازية منه على نحو صحيح. #57641 (Azat Khuzhin).
  • إصلاح خطأ في aggregation للأعمدة sparse مع any(...) RESPECT NULL #57710 (Azat Khuzhin).
  • إصلاح parsing للـ operators الأحادية #57713 (Nikolay Degterinsky).
  • إصلاح تحميل التبعيات لمحرك الجداول التجريبي MaterializedPostgreSQL. #57754 (Kseniia Sumarokova).
  • إصلاح عمليات إعادة المحاولة للعُقد غير المتصلة في BACKUP/RESTORE ON CLUSTER #57764 (Vitaly Baranov).
  • إصلاح نتيجة التجميع الخارجي في حالة وجود projection مُجسَّد جزئيًا #57790 (Anton Popov).
  • إصلاح الدمج في دوال التجميع مع combinator ‏*Map #57795 (Anton Popov).
  • تعطيل system.kafka_consumers لأنه يحتوي على خطأ. #57822 (Azat Khuzhin).
  • إصلاح دعم مفاتيح LowCardinality في Merge JOIN. #57827 (vdimir).
  • إصلاح في InterpreterCreateQuery مرتبط بكتلة العينة. #57855 (Maksim Kita).
  • تم تجاهل addresses_expr للمجموعات المسماة من PostgreSQL. #57874 (joelynch).
  • إصلاح وصول غير صالح إلى الذاكرة في BLAKE3 ‏(Rust) #57876 (Raúl Marín). ثم أُعيدت كتابته من Rust إلى C++ لتحسين سلامة الذاكرة. #57994 (Raúl Marín).
  • توحيد أسماء الدوال في CREATE INDEX #57906 (Alexander Tokmakov).
  • إصلاح التعامل مع النسخ المتماثلة غير المتاحة قبل حدوث أول طلب #57933 (Nikita Taranov).
  • إصلاح التصنيف الخاطئ للاسم المستعار الحرفي #57988 (Chen768959).
  • إصلاح المعالجة التمهيدية غير الصحيحة في Keeper #58069 (Antonio Andelic).
  • إصلاح تجاوز سعة الأعداد الصحيحة في مكتبة Poco، والمتعلق بـ UTF32Encoding #58073 (Andrey Fedotov).
  • إصلاح النسخ المتماثلة المتوازية (ميزة تجريبية) عند وجود استعلام فرعي scalar يحتوي على قيمة عدد صحيح كبيرة #58118 (Alexey Milovidov).
  • إصلاح accurateCastOrNull لقيم DateTime الخارجة عن النطاق #58139 (Andrey Zvonov).
  • إصلاح احتمال ظهور الخطأ PARAMETER_OUT_OF_BOUND أثناء قراءة الأعمدة الفرعية من جزء Wide في MergeTree #58175 (Kruglov Pavel).
  • إصلاح التباطؤ في CREATE VIEW عند وجود عدد هائل من الاستعلامات الفرعية #58220 (Tao Wang).
  • إصلاح التحليل المتوازي لتنسيق JSONCompactEachRow #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).

إصدار ClickHouse 23.11، بتاريخ 2023-12-06. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • أصبح ملف تكوين خادم ClickHouse الافتراضي يفعّل كلاً من access_management (إدارة المستخدمين عبر استعلامات SQL) وnamed_collection_control (إدارة المجموعات المسماة عبر استعلامات SQL) للمستخدم default بشكل افتراضي. ويغلق هذا #56482. #56619 (Alexey Milovidov).
  • عدة تحسينات على RESPECT NULLS/IGNORE NULLS في دوال النوافذ. إذا كنت تستخدمها كدوال تجميعية وتخزّن حالات الدوال التجميعية مع هذه المُعدِّلات، فقد تصبح غير متوافقة. #57189 (Raúl Marín).
  • إزالة التحسين optimize_move_functions_out_of_any. #57190 (Raúl Marín).
  • أصبحت المُنسِّقات %l/%k/%c في الدالة parseDateTime قادرة الآن على تحليل الساعات/الأشهر من دون أصفار بادئة. على سبيل المثال، أصبح select parseDateTime('2023-11-26 8:14', '%F %k:%i') يعمل الآن. اضبط parsedatetime_parse_without_leading_zeros = 0 لاستعادة السلوك السابق الذي كان يتطلب رقمين. وأصبحت الدالة formatDateTime الآن أيضًا قادرة على إخراج الساعات/الأشهر من دون أصفار بادئة. ويتم التحكم في هذا عبر الإعداد formatdatetime_format_without_leading_zeros، لكنه معطّل افتراضيًا حتى لا تتعطل حالات الاستخدام الحالية. #55872 (Azat Khuzhin).
  • لم يعد بإمكانك استخدام الدالة التجميعية avgWeighted مع وسيطات من النوع Decimal. الحل البديل: حوّل الوسيطات إلى Float64. ويغلق هذا #43928. ويغلق هذا #31768. ويغلق هذا #56435. إذا كنت قد استخدمت هذه الدالة داخل العروض المادية أو الإسقاطات مع وسيطات Decimal، فيرجى التواصل مع support@clickhouse.com. تم إصلاح خطأ في الدالة التجميعية sumMap، لكن ذلك جعلها أبطأ بنحو 1.5..2 مرة. ولا يهم ذلك لأن هذه الدالة رديئة على أي حال. ويغلق هذا #54955. ويغلق هذا #53134. ويغلق هذا #55148. كما تم إصلاح خطأ في الدالة groupArraySample — إذ كانت تستخدم نفس البذرة العشوائية عند توليد أكثر من حالة تجميعية واحدة في استعلام. #56350 (Alexey Milovidov).

ميزة جديدة

  • تمت إضافة إعداد الخادم async_load_databases للتحميل غير المتزامن لقواعد البيانات والجداول. يسرّع هذا وقت بدء تشغيل الخادم. وينطبق على قواعد البيانات ذات المحركات Ordinary وAtomic وReplicated. وتُحمَّل البيانات الوصفية لجداولها بشكل غير متزامن. ويؤدي تنفيذ query على جدول إلى رفع أولوية مهمة التحميل والانتظار حتى اكتمالها. كما تمت إضافة جدول نظام جديد system.asynchronous_loader لأغراض الفحص الداخلي. #49351 (Sergei Trifonov).
  • أُضيف جدول نظام blob_storage_log. ويتيح تدقيق جميع البيانات المكتوبة إلى S3 وغيرها من مخازن الكائنات. #52918 (vdimir).
  • استخدام الإحصاءات لتحسين ترتيب شروط prewhere. #53240 (Han Fei).
  • تمت إضافة دعم الضغط إلى بروتوكول Keeper. ويمكن تمكينه من جانب ClickHouse باستخدام هذا الخيار use_compression داخل قسم zookeeper. ضع في اعتبارك أن ClickHouse Keeper وحده يدعم الضغط، بينما Apache ZooKeeper لا يدعمه. يحل المشكلة #49507. #54957 (SmitaRKulkarni).
  • تقديم الميزة storage_metadata_write_full_object_key. إذا ضُبطت على true، فستُكتب ملفات البيانات الوصفية بالتنسيق الجديد. وبهذا التنسيق، يخزّن ClickHouse مفتاح الكائن البعيد الكامل في ملف البيانات الوصفية، مما يوفّر مرونة أكبر وإمكانات أفضل للتحسين. #55566 (Sema Checherinda).
  • إضافة Settings وSyntax جديدين لحماية حقول named collections من التجاوز. ويهدف ذلك إلى منع مستخدم خبيث من الحصول على وصول غير مصرّح به إلى secrets. #55782 (Salvatore Mesoraca).
  • إضافة عمود hostname إلى جميع جداول سجلات النظام — وهو مفيد إذا جعلت system tables مكررة أو مشتركة أو موزعة. #55894 (Bharat Nallan).
  • إضافة query ‏CHECK ALL TABLES. #56022 (vdimir).
  • تمت إضافة الدالة fromDaysSinceYearZero، وهي مشابهة لـ FROM_DAYS في MySQL. على سبيل المثال، تعيد SELECT fromDaysSinceYearZero(739136) القيمة 2023-09-08. #56088 (Joanna Hulboj).
  • إضافة أداة خارجية بلغة بايثون لعرض النسخ الاحتياطية واستخراج المعلومات منها دون استخدام ClickHouse. #56268 (Vitaly Baranov).
  • تنفيذ إعداد جديد باسم preferred_optimize_projection_name. إذا ضُبط على سلسلة غير فارغة، فسيُستخدم الإسقاط المحدد إن أمكن بدلًا من الاختيار من بين جميع الخيارات المرشحة. #56309 (Yarik Briukhovetskyi).
  • إضافة أمر مكوَّن من 4 أحرف للتخلي عن دور القائد/التنازل عنه (https://github.com/ClickHouse/ClickHouse/issues/56352). #56354 (Pradeep Chhetri). #56620 (Pradeep Chhetri).
  • أُضيفت دالة SQL جديدة، arrayRandomSample(arr, k) تُرجع عيّنة من k عناصر من المصفوفة المُدخلة. وكان يمكن سابقًا تحقيق وظيفة مشابهة فقط بصياغة أقل ملاءمة، مثل SELECT arrayReduce('groupArraySample(3)', range(10)). #56416 (Robert Schulze).
  • أُضيف دعم لبيانات النوع Float16 لاستخدامها في ملفات .npy. يُغلق #56344. #56424 (Yarik Briukhovetskyi).
  • أُضيف عرض نظامي information_schema.statistics لتحسين التوافق مع Tableau Online. #56425 (Serge Klochkov).
  • أُضيف جدول system.symbols، وهو مفيد لاستبطان الملف التنفيذي. #56548 (Alexey Milovidov).
  • لوحات معلومات قابلة للتهيئة. أصبح الآن تحميل الاستعلامات الخاصة بالمخططات عبر استعلام، والذي يستخدم افتراضيًا جدولًا جديدًا هو system.dashboards. #56771 (Sergei Trifonov).
  • تقديم table function fileCluster — وهي مفيدة إذا قمتَ بربط نظام ملفات مشترك (مثل NFS وما شابه) داخل الدليل user_files. #56868 (Andrey Zvonov).
  • أُضيف العمود الافتراضي _size الذي يعرض حجم الملف بالبايت إلى المحرّكات s3/file/hdfs/url/azureBlobStorage. #57126 (Kruglov Pavel).
  • أُتيح من خلال Prometheus endpoint عدد الأخطاء لكل رمز خطأ حدث على الخادم منذ آخر إعادة تشغيل. #57209 (Nikita Mikhaylov).
  • يبلّغ ClickHouse Keeper عن منطقة التوفّر التي يعمل فيها عند المسار /keeper/availability-zone. ويمكن تهيئة ذلك عبر <availability_zone><value>us-west-1a</value></availability_zone>. #56715 (Jianfei Hu).
  • أصبح ALTER materialized_view MODIFY QUERY غير تجريبي، مع إهمال الإعداد allow_experimental_alter_materialized_view_structure. يُصلح #15206. #57311 (alesapin).
  • أصبح الإعداد join_algorithm يراعي الترتيب المحدد #51745 (vdimir).
  • أُضيف دعم أنواع Protobuf المعروفة جيدًا في Protobuf format. #56741 (János Benjamin Antal).

تحسين الأداء

  • مهلات زمنية تكيفية للتعامل مع S3. تُجرى المحاولة الأولى بمهلات منخفضة للإرسال والاستقبال. #56314 (Sema Checherinda).
  • زيادة القيمة الافتراضية لـ max_concurrent_queries من 100 إلى 1000. ويكون هذا منطقيًا عند وجود عدد كبير من العملاء المتصلين الذين يرسلون البيانات أو يستقبلونها ببطء، بحيث لا يكون الخادم مقيّدًا بـ CPU، أو عندما يتجاوز عدد نوى CPU حاجز 100. كذلك، جرى تفعيل التحكم في التزامن افتراضيًا، وضبط العدد الإجمالي المطلوب من خيوط query processing ليكون ضعف عدد نوى CPU. وهذا يحسّن الأداء في السيناريوهات التي تتضمن عددًا كبيرًا جدًا من queries المتزامنة. #46927 (Alexey Milovidov).
  • دعم التقييم المتوازي لـ window functions. يُصلح #34688. #39631 (Dmitry Novik).
  • أصبح table engine Numbers (لجدول system.numbers) الآن يحلّل الشرط لتوليد subset البيانات المطلوب، على غرار index الجدول. #50909 (JackyWoo).
  • تحسين أداء Filtering بشرط IN (...) لمحرك الجداول Merge. #54905 (Nikita Taranov).
  • تحسين عند امتلاء filesystem cache ووجود reads كبيرة. #55158 (Kseniia Sumarokova).
  • إضافة إمكانية تعطيل checksums لـ S3 لتجنّب المرور الزائد على الملف (ويُتحكم في ذلك عبر الإعداد s3_disable_checksum). #55559 (Azat Khuzhin).
  • نقرأ الآن بشكل متزامن من الجداول البعيدة عندما تكون البيانات موجودة في page cache (كما نفعل مع الجداول المحلية). وهذا أسرع، ولا يتطلب مزامنة داخل thread pool، ولا يتردد في إجراء عمليات seek على نظام الملفات المحلي، كما يقلّل انتظار CPU. #55841 (Nikita Taranov).
  • تحسين لاستخراج القيم من map وarrayElement. يوفّر ذلك تسريعًا بنحو 30%. - تقليل الذاكرة المحجوزة - تقليل استدعاءات resize. #55957 (lgbo).
  • تحسين filtering متعدد المراحل باستخدام AVX-512. تُظهر تجارب الأداء على مجموعة بيانات OnTime على جهاز ICX ‏(Intel Xeon Platinum 8380 CPU، ‏80 نواة، ‏160 خيطًا) أن هذا التغيير قد يحقق تحسينات بنسبة 7.4% و5.9% و4.7% و3.0% و4.6% في QPS للاستعلامات Q2 وQ3 وQ4 وQ5 وQ6 على التوالي، دون أي تأثير على غيرها. #56079 (Zhiguo Zhou).
  • تقييد عدد الخيوط المشغولة داخل query profiler. وإذا زاد عددها على ذلك، فستتجاوز profiling. #56105 (Alexey Milovidov).
  • تقليل عدد استدعاءات الدوال الافتراضية في window functions. #56120 (Maksim Kita).
  • السماح بإجراء pruning متكرر لحقول Tuple في format بيانات ORC لتسريع الفحص. #56122 (李扬).
  • تحسين بسيط لعملية العدّ في تنسيق البيانات Npy: ستصبح الاستعلامات مثل select count() from 'data.npy' أسرع بكثير بفضل التخزين المؤقت للنتائج. #56304 (Yarik Briukhovetskyi).
  • ستستهلك الاستعلامات التي تتضمن aggregation وعددًا كبيرًا من التدفقات قدرًا أقل من الذاكرة أثناء إنشاء الخطة. #57074 (Alexey Milovidov).
  • تحسين أداء تنفيذ الاستعلامات في حالات الاستخدام التي تضم عددًا كبيرًا من المستخدمين واستعلامات عالية التزامن (>2000 QPS)، وذلك عبر تحسين الوصول إلى ProcessList. #57106 (Andrej Hoos).
  • تحسين بسيط في ARRAY JOIN مع إعادة استخدام بعض النتائج الوسيطة. #57183 (李扬).
  • كانت هناك حالات كان فيها فكّ المكدس بطيئًا. لم يعد الأمر كذلك. #57221 (Alexey Milovidov).
  • نستخدم الآن مجمّع القراءة الافتراضي للقراءة من external storage عندما تكون max_streams = 1. ويكون ذلك مفيدًا عندما تكون عمليات الجلب المسبق للقراءة مُمكّنة. #57334 (Nikita Taranov).
  • تحسين في Keeper: تحسين استهلاك الذاكرة أثناء بدء التشغيل عبر تأخير المعالجة المسبقة للسجل. #55660 (Antonio Andelic).
  • تحسين أداء مطابقة glob لمحركي التخزين File وHDFS. #56141 (Andrey Zvonov).
  • أصبحت posting lists في الفهارس النصية الكاملة التجريبية مضغوطة الآن، مما يقلّل حجمها بنسبة 10-30%. #56226 (Harry Lee).
  • تنفيذ BackupEntriesCollector بالتوازي في النسخ الاحتياطية. #56312 (Kseniia Sumarokova).

تحسينات

  • أُضيف إعداد جديد في MergeTree باسم add_implicit_sign_column_constraint_for_collapsing_engine (معطّل افتراضيًا). عند تمكينه، يضيف قيد CHECK ضمنيًا إلى جداول CollapsingMergeTree بحيث يقيّد قيمة العمود Sign لتكون -1 أو 1 فقط. #56701. #56986 (Kevin Mingtarja).
  • أصبح من الممكن إضافة قرص جديد إلى إعدادات التخزين دون إعادة تشغيل. #56367 (Duc Canh Le).
  • دعم إنشاء index وتجسيده في استعلام alter نفسه، مع دعم “modify TTL” و”materialize TTL” أيضًا ضمن الاستعلام نفسه. يغلق #55651. #56331 (flynn).
  • أُضيفت table function جديدة باسم fuzzJSON تُرجع صفوفًا تحتوي على نُسخ معدّلة من سلسلة JSON المصدر مع تغييرات عشوائية. #56490 (Julia Kartseva).
  • بات المحرك Merge يرشّح السجلات وفقًا لـ row policies الخاصة بالجداول الأساسية، لذلك لا تحتاج إلى إنشاء row policy أخرى على جدول Merge. #50209 (Ilya Golshtein).
  • أُضيف إعداد في ClickHouse باسم max_execution_time_leaf للحد من زمن التنفيذ على shard في distributed query، وtimeout_overflow_mode_leaf للتحكم في السلوك عند حدوث timeout. #51823 (Duc Canh Le).
  • أُضيف إعداد في ClickHouse لتعطيل tunneling لطلبات HTTPS عبر HTTP proxy. #55033 (Arthur Passos).
  • ضُبط background_fetches_pool_size على 16، وbackground_schedule_pool_size على 512، وهو ما يعدّ أفضل لبيئات production التي تتضمن عمليات insert صغيرة ومتكررة. #54327 (Denny Crane).
  • عند read data من ملف بتنسيق CSV format، إذا كان السطر ينتهي بـ \r من دون أن يتبعه \n، فسيظهر الاستثناء التالي: Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r. في ClickHouse، يجب أن تكون نهاية السطر في CSV هي \n أو \r\n أو \n\r، لذا يجب أن يتبع \r الحرف \n. لكن في بعض الحالات، قد تكون بيانات CSV المُدخلة غير سليمة، كما في المثال أعلاه حيث يأتي \r في نهاية السطر. #54340 (KevinyhZou).
  • حُدّثت مكتبة Arrow إلى release-13.0.0، الذي يدعم ترميزات جديدة. يغلق #44505. #54800 (Kruglov Pavel).
  • تحسّن أداء استعلامات ON CLUSTER من خلال إزالة استدعاءات النظام الثقيلة اللازمة للحصول على جميع network interfaces عند البحث عن عنوان IP المحلي في قائمة المضيفين الخاصة بـ DDL entry. #54909 (Duc Canh Le).
  • تم إصلاح احتساب الذاكرة المخصّصة قبل ربط thread باستعلام أو مستخدم. #56089 (Nikita Taranov).
  • إضافة دعم LARGE_LIST في تنسيقات Apache Arrow. #56118 (edef).
  • إتاحة إجراء الدمج يدويًا لـ EmbeddedRocksDB عبر استعلام OPTIMIZE. #56225 (Azat Khuzhin).
  • إضافة إمكانية تحديد BlockBasedTableOptions لجداول EmbeddedRocksDB. #56264 (Azat Khuzhin).
  • يعرض SHOW COLUMNS الآن اسم نوع البيانات المقابل في MySQL عند إنشاء الاتصال عبر بروتوكول MySQL. في السابق، كان ذلك يحدث عند ضبط use_mysql_types_in_show_columns = 1. لا يزال هذا الإعداد موجودًا، لكنه أصبح مهجورًا. #56277 (Robert Schulze).
  • تم إصلاح الخطأ المحتمل The local set of parts of table doesn't look like the set of parts in ZooKeeper إذا أُعيد تشغيل الخادم مباشرةً بعد TRUNCATE أو DROP PARTITION. #56282 (Alexander Tokmakov).
  • تم إصلاح التعامل مع query string غير الثابتة في الدالتين formatQuery/ formatQuerySingleLine. كما أُضيفت صيغتا OrNull لكلتا الدالتين، بحيث تعيدان NULL عندما يتعذر parse الاستعلام بدلًا من إطلاق استثناء. #56327 (Robert Schulze).
  • السماح بإنشاء نسخة احتياطية من العرض المادي حتى عند حذف الجدول الداخلي، بدلًا من فشل النسخة الاحتياطية. #56387 (Kseniia Sumarokova).
  • تؤدي الاستعلامات على system.replicas إلى إرسال طلبات إلى ZooKeeper عند الاستعلام عن أعمدة معيّنة. وعند وجود آلاف الجداول، قد تتسبب هذه الطلبات في حمل كبير على ZooKeeper. وإذا كانت هناك عدة استعلامات متزامنة على system.replicas، فإنها تكرر الطلبات نفسها عدة مرات. يهدف هذا التغيير إلى “إزالة التكرار” من الطلبات الناتجة عن الاستعلامات المتزامنة. #56420 (Alexander Gololobov).
  • إصلاح التحويل إلى استعلام متوافق مع MySQL عند الاستعلام عن قواعد بيانات خارجية. #56456 (flynn).
  • إضافة دعم لنسخ الجداول احتياطيًا واستعادتها باستخدام المحرك KeeperMap. #56460 (Antonio Andelic).
  • يجب إعادة التحقق من استجابة 404 لعملية CompleteMultipartUpload. فقد تكون العملية قد نُفذت على الخادم حتى إذا واجه client مهلة timeout أو أخطاء أخرى في الشبكة. وتتلقى إعادة المحاولة التالية لـ CompleteMultipartUpload استجابة 404. وإذا كان مفتاح object موجودًا، فتُعد العملية ناجحة. #56475 (Sema Checherinda).
  • تفعيل الأسلوب HTTP OPTIONS افتراضيًا، ما يسهّل إرسال الطلبات إلى ClickHouse من متصفح ويب. #56483 (Alexey Milovidov).
  • تم تغيير قيمة dns_max_consecutive_failures عن طريق الخطأ في #46550 - وتم التراجع عن ذلك وضبطها على قيمة أفضل. كذلك، تمت زيادة مهلة HTTP keep-alive إلى قيمة معقولة مأخوذة من بيئات production. #56485 (Alexey Milovidov).
  • تحميل base backups عند الحاجة فقط (لن يتم تحميل base backup إلا عند الحاجة إليه). كما أُضيفت بعض رسائل السجل وأحداث profile الخاصة بالنسخ الاحتياطية. #56516 (Vitaly Baranov).
  • وُسِم الإعداد query_cache_store_results_of_queries_with_nondeterministic_functions (بالقيمتين false أو true) بأنه مهمل. وقد استُبدل بالإعداد query_cache_nondeterministic_function_handling، وهو تعداد بثلاث قيم يتحكم في كيفية تعامل ذاكرة التخزين المؤقت للاستعلامات مع الاستعلامات التي تحتوي على دوال غير حتمية: أ) طرح استثناء (السلوك الافتراضي)، ب) حفظ نتيجة الاستعلام غير الحتمي بغض النظر عن ذلك، أو ج) التجاهل، أي عدم طرح استثناء وعدم تخزين النتيجة مؤقتًا. #56519 (Robert Schulze).
  • إعادة كتابة المساواة مع فحص is null في قسم JOIN ON. للمحلل التجريبي فقط. #56538 (vdimir).
  • أصبحت الدالة concat تدعم الآن أنواعًا عشوائية من الوسائط (بدلًا من الاكتفاء بوسائط String وFixedString فقط). وهذا يجعل سلوكها أقرب إلى تنفيذ MySQL للدالة concat. على سبيل المثال، أصبحت SELECT concat('ab', 42) تُرجع الآن ab42. #56540 (Serge Klochkov).
  • السماح بالحصول على إعدادات cache من قسم ‘named_collection’ في config أو من المجموعات المسماة المُنشأة عبر SQL. #56541 (Kseniia Sumarokova).
  • محرك قاعدة بيانات PostgreSQL: جعل إزالة الجداول القديمة أقل شدة عند فشل الاتصال بـ postgres. #56609 (jsc0218).
  • كان الاتصال بـ PG يستغرق وقتًا طويلًا جدًا عندما يكون URL غير صحيح، لذا كان الاستعلام المعني يعلق هناك ثم يُلغى. #56648 (jsc0218).
  • تحسين في Keeper: تعطيل السجلات المضغوطة افتراضيًا في Keeper. #56763 (Antonio Andelic).
  • إضافة إعداد config باسم wait_dictionaries_load_at_startup. #56782 (Vitaly Baranov).
  • كانت هناك ثغرة أمنية محتملة في إصدارات ClickHouse السابقة: إذا اتصل مستخدم وحاول المصادقة دون نجاح باستخدام طريقة “interserver secret”، فإن الخادم لم يكن يُنهي الاتصال فورًا، بل كان يواصل تلقي الحزم المتبقية من العميل وتجاهلها. ومع أن هذه الحزم يجري تجاهلها، فإنها تظل تُحلَّل، وإذا كانت تستخدم طريقة ضغط تتضمن ثغرة معروفة أخرى، فسيؤدي ذلك إلى استغلالها دون مصادقة. وقد اكتُشفت هذه المشكلة عبر ClickHouse Bug Bounty Program بواسطة https://twitter.com/malacupa. #56794 (Alexey Milovidov).
  • ينتظر جلب الجزء إلى أن يصبح هذا الجزء معتمدًا بالكامل على النسخة المتماثلة البعيدة. ومن الأفضل عدم إرسال الجزء وهو في حالة PreActive. وفي حالة zero copy يُعد هذا قيدًا إلزاميًا. #56808 (Sema Checherinda).
  • إصلاح خطأ محتمل في تحويل logical replication الخاصة بـ postgresql عند استخدام MaterializedPostgreSQL التجريبية. #53721 (takakawa).
  • تنفيذ إعداد على مستوى المستخدم باسم alter_move_to_space_execute_async يتيح تنفيذ الاستعلامات ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME بشكل غير متزامن. ويتم التحكم في حجم المجمّع الخاص بالتنفيذات الخلفية عبر background_move_pool_size. أما السلوك الافتراضي فهو التنفيذ المتزامن. إصلاح #47643. #56809 (alesapin).
  • إمكانية التصفية حسب المحرّك عند فحص system.tables، لتجنّب إنشاء اتصال غير ضروري (قد يستغرق وقتًا). #56813 (jsc0218).
  • عرض total_bytes وtotal_rows في جداول النظام الخاصة بتخزين RocksDB. #56816 (Aleksandr Musorin).
  • السماح بالأوامر الأساسية ضمن ALTER للجداول TEMPORARY. #56892 (Sergey).
  • ضغط LZ4. تخزين الكتلة المضغوطة مؤقتًا في الحالات النادرة التي لا تكفي فيها سعة out buffer لكتابة الكتلة المضغوطة مباشرةً إلى buffer الخاصة بـ out. #56938 (Sema Checherinda).
  • إضافة مقاييس لعدد المهام الموجودة في queue، وهو ما يفيد في IO thread pool. #56958 (Alexey Milovidov).
  • إضافة إعداد خاص بـ PostgreSQL table engine في ملف الإعدادات. كما أُضيف تحقّق من هذا الإعداد، وأُضيف توثيق للإعداد الإضافي. #56959 (Peignon Melvyn).
  • يمكن الآن استدعاء الدالة concat باستخدام وسيطة واحدة، مثل: SELECT concat('abc'). وهذا يجعل سلوكها أكثر اتساقًا مع تنفيذ concat في MySQL. #57000 (Serge Klochkov).
  • توقيع جميع headers من نوع x-amz-* كما تتطلب وثائق AWS S3. #57001 (Arthur Passos).
  • يمكن الآن استخدام الدالة fromDaysSinceYearZero (الاسم المستعار: FROM_DAYS) مع الأنواع الصحيحة الموقّعة وغير الموقّعة (إذ كانت سابقًا تتطلب عددًا صحيحًا غير موقّع). وهذا يحسّن التوافق مع أدوات خارجية مثل Tableau Online. #57002 (Serge Klochkov).
  • إضافة system.s3queue_log إلى الإعدادات الافتراضية. #57036 (Kseniia Sumarokova).
  • تغيير القيمة الافتراضية لـ wait_dictionaries_load_at_startup إلى true، واستخدام هذا الإعداد فقط إذا كانت dictionaries_lazy_load تساوي false. #57133 (Vitaly Baranov).
  • التحقق من نوع مصدر القاموس عند الإنشاء حتى إذا كانت dictionaries_lazy_load مفعّلة. #57134 (Vitaly Baranov).
  • يمكن الآن تمكين/تعطيل تحسينات مستوى plan بشكل منفصل. وكان سابقًا من الممكن فقط تعطيلها كلها. ولا يزال الإعداد الذي كان يقوم بذلك سابقًا (query_plan_enable_optimizations) موجودًا، ويمكن استخدامه لتعطيل جميع التحسينات. #57152 (Robert Schulze).
  • سيتوافق رمز خروج server مع رمز Exception. فعلى سبيل المثال، إذا تعذّر على server بدء التشغيل بسبب memory limit، فسيخرج بالرمز 241 = MEMORY_LIMIT_EXCEEDED. وفي الإصدارات السابقة، كان رمز الخروج الخاص بالاستثناءات دائمًا 70 = Poco::Util::ExitCode::EXIT_SOFTWARE. #57153 (Alexey Milovidov).
  • عدم إجراء demangle وsymbolize لأُطر المكدس من ترويسة C++ الخاصة بـ functional. #57201 (Mike Kot).
  • أصبحت صفحة خادم HTTP /dashboard تدعم الآن المخططات متعددة الخطوط. #57236 (Sergei Trifonov).
  • يدعم خيار سطر الأوامر max_memory_usage_in_client قيمة نصية مع لاحقة (K وM وG وما إلى ذلك). يُغلق #56879. #57273 (Yarik Briukhovetskyi).
  • تمت ترقية Intel QPL (المستخدم بواسطة codec DEFLATE_QPL) من v1.2.0 إلى v1.3.1. كما أُصلِح خلل في حالة BOF (Block On Fault) = 0، بحيث أصبحت معالجة أخطاء الصفحة تتم عبر الرجوع إلى مسار SW. #57291 (jasperzhu).
  • زيادة القيمة الافتراضية للإعداد replicated_deduplication_window ضمن إعدادات MergeTree من 100 إلى 1k. #57335 (sichenzhao).
  • تقليل استخدام INCONSISTENT_METADATA_FOR_BACKUP بهذا القدر. وإذا أمكن، يُفضَّل مواصلة الفحص بدلًا من إيقافه ثم إعادة بدء فحص النسخة الاحتياطية من البداية. #57385 (Vitaly Baranov).

تحسينات البناء/الاختبار/التغليف

  • أُضيف اختبار SQLLogic. #56078 (Han Fei).
  • أُتيح clickhouse-local وclickhouse-client بأسماء مختصرة (ch, chl, chc) لتحسين سهولة الاستخدام. #56634 (Alexey Milovidov).
  • جرى تقليص حجم build أكثر عبر إزالة الشيفرة غير المستخدمة من المكتبات الخارجية. #56786 (Alexey Milovidov).
  • أُضيف check تلقائي للتحقق من عدم وجود وحدات ترجمة كبيرة. #56559 (Alexey Milovidov).
  • جرى تقليل حجم التوزيعة أحادية الملف التنفيذي. وهذا يُغلق #55181. #56617 (Alexey Milovidov).
  • ستُرسل معلومات عن أحجام كل وحدة ترجمة وكل ملف ثنائي بعد كل build إلى قاعدة بيانات CI في ClickHouse Cloud. وهذا يُغلق #56107. #56636 (Alexey Milovidov).
  • كانت بعض ملفات مكتبة “Apache Arrow” (التي نستخدمها فقط لأمور غير أساسية مثل parsing تنسيق Arrow) تُعاد بناؤها باستمرار بغض النظر عن cache الخاصة بالـ build. وقد أُصلح ذلك. #56657 (Alexey Milovidov).
  • تجنّب إعادة ترجمة وحدات الترجمة التي تعتمد على ملف source مُولَّد تلقائيًا خاص بالإصدار. #56660 (Alexey Milovidov).
  • ستُرسل بيانات tracing الخاصة باستدعاءات الرابط إلى قاعدة بيانات CI في ClickHouse Cloud. #56725 (Alexey Milovidov).
  • استُخدمت رموز Debug من DWARF 5 لملف clickhouse التنفيذي (وكان DWARF 4 مستخدمًا سابقًا). #56770 (Michael Kolupaev).
  • أُضيف خيار build جديد SANITIZE_COVERAGE. إذا كان مُمكّنًا، فستُضاف أدوات القياس إلى الشيفرة لتتبّع التغطية. وتتوفر المعلومات المُجمّعة داخل ClickHouse عبر: (1) دالة جديدة coverage تُرجع Array من العناوين الفريدة في الشيفرة التي عُثر عليها بعد آخر إعادة تعيين للتغطية؛ (2) query ‏SYSTEM RESET COVERAGE التي تعيد تعيين البيانات المتراكمة. يتيح لنا ذلك مقارنة التغطية بين الاختبارات المختلفة، بما في ذلك التغطية التفاضلية للشيفرة. استكمالًا لـ #20539. #56102 (Alexey Milovidov).
  • قد لا يمكن تحليل بعض إطارات stack عند جمع الـ stacks. وفي مثل هذه الحالات، قد يكون العنوان الخام مفيدًا. #56267 (Alexander Gololobov).
  • أُضيف خيار لتعطيل libssh. #56333 (Alexey Milovidov).
  • فُعّل temporary_data_in_cache في اختبارات S3 ضمن CI. #48425 (vdimir).
  • ضُبط الحد الأقصى لاستخدام الذاكرة لـ clickhouse-client (1G) في CI. #56873 (Nikita Mikhaylov).

إصلاح خلل

  • إصلاح analyzer التجريبي: يجب أن تعالج عملية insert from select مع استعلام فرعي يشير إلى جدول الإدراج كتلةَ الإدراج فقط. #50857 (Yakov Olkhovskiy).
  • إصلاح خطأ في الدالة str_to_map. #56423 (Arthur Passos).
  • في Keeper reconfig: إضافة timeout قبل التنازل عن القيادة أو تولّيها #53481 (Mike Kot).
  • إصلاح header غير صحيح في grace hash join وfilter pushdown #53922 (vdimir).
  • تنفيذ select من system tables عندما يكون الجدول مبنيًا على table function. #55540 (MikhailBurdukov).
  • RFC: إصلاح “Cannot find column X in source stream” في distributed queries مع LIMIT BY #55836 (Azat Khuzhin).
  • إصلاح ‘Cannot read from file:’ عند تشغيل client في الخلفية #55976 (Kruglov Pavel).
  • إصلاح خروج clickhouse-local عند وجود setting غير صالح لـ send_logs_level #55994 (Kruglov Pavel).
  • إصلاح خطأ في explain ast مع parameterized view #56004 (SmitaRKulkarni).
  • إصلاح crash أثناء تحميل الجدول عند بدء التشغيل #56232 (Nikolay Degterinsky).
  • إصلاح Dictionaries المستندة إلى ClickHouse مع استعلام صريح #56236 (Nikolay Degterinsky).
  • إصلاح segfault في signal handler لـ Keeper #56266 (Antonio Andelic).
  • إصلاح نتيجة query غير مكتملة لـ UNION في الدالة view(). #56274 (Nikolai Kochetov).
  • إصلاح عدم الاتساق بين “cast(‘0’ as DateTime64(3))” و”cast(‘0’ as Nullable(DateTime64(3)))” #56286 (李扬).
  • إصلاح race condition نادرة مرتبطة بفشل تخصيص الذاكرة في Memory #56303 (alesapin).
  • إصلاح restore from backup مع flatten_nested وdata_type_default_nullable #56306 (Kseniia Sumarokova).
  • إصلاح crash عند إضافة column من النوع Object(JSON) #56307 (Nikita Mikhaylov).
  • إصلاح crash في filterPushDown #56380 (vdimir).
  • إصلاح restore from backup مع mat view وجدول المصدر المحذوف #56383 (Kseniia Sumarokova).
  • إصلاح خطأ segfault أثناء تهيئة Kerberos #56401 (Nikolay Degterinsky).
  • إصلاح تجاوز سعة المخزن المؤقت في T64 #56434 (Alexey Milovidov).
  • إصلاح المفتاح الأساسي Nullable في final (2) #56452 (Amos Bird).
  • إصلاح استعلامات ON CLUSTER من دون database على العقدة الأولية #56484 (Nikolay Degterinsky).
  • إصلاح فشل بدء التشغيل بسبب تبعية TTL #56489 (Nikolay Degterinsky).
  • إصلاح استعلامات ALTER COMMENT ON CLUSTER #56491 (Nikolay Degterinsky).
  • إصلاح ALTER COLUMN مع ALIAS #56493 (Nikolay Degterinsky).
  • إصلاح مجموعات NAMED COLLECTION الفارغة #56494 (Nikolay Degterinsky).
  • إصلاح حالتين في تحليل projection. #56502 (Amos Bird).
  • إصلاح التعامل مع الأسماء المستعارة في query cache #56545 (Robert Schulze).
  • إصلاح التحويل من Nullable(Enum) إلى Nullable(String) #56644 (Nikolay Degterinsky).
  • جعل التعامل مع Log أكثر موثوقية في Keeper #56670 (Antonio Andelic).
  • إصلاح دمج الإعدادات للعقد التي تحتوي على سمات substitution #56694 (Konstantin Bogdanov).
  • إصلاح الاستخدام المكرر لـ table function input(). #56695 (Nikolai Kochetov).
  • إصلاح: مشكلة التحميل الديناميكي لـ RabbitMQ OpenSSL #56703 (Igor Nikonov).
  • إصلاح crash في codec ‏GCD عند وجود أصفار في البيانات #56704 (Nikita Mikhaylov).
  • إصلاح ‘mutex lock failed: Invalid argument’ في clickhouse-local أثناء insert into function #56710 (Kruglov Pavel).
  • إصلاح parsing نصوص Date في المسار التفاؤلي #56765 (Kruglov Pavel).
  • إصلاح crash في codec ‏FPC #56795 (Alexey Milovidov).
  • DatabaseReplicated: إصلاح timeout استعلام DDL بعد استعادة replica #56796 (Alexander Tokmakov).
  • إصلاح الإبلاغ غير الصحيح عن الأعمدة Nullable في بروتوكول MySQL الثنائي #56799 (Serge Klochkov).
  • دعم ملفات بيانات التعريف لـ Iceberg لجداول metastore #56810 (Kruglov Pavel).
  • إصلاح تقرير TSAN في transform #56817 (Raúl Marín).
  • إصلاح استعلام SET وتنسيق SETTINGS #56825 (Nikolay Degterinsky).
  • إصلاح تعذّر البدء بسبب اعتمادية جدول في joinGet #56828 (Nikolay Degterinsky).
  • إصلاح تسطيح أعمدة Nested الموجودة أثناء ADD COLUMN #56830 (Nikolay Degterinsky).
  • إصلاح السماح بـ CR في نهاية السطر لملفات CSV #56901 (KevinyhZou).
  • إصلاح tryBase64Decode مع مُدخل غير صالح #56913 (Robert Schulze).
  • إصلاح توليد الأعمدة المتداخلة بعمق في مخططات CapnProto/Protobuf #56941 (Kruglov Pavel).
  • منع ALTER غير المتوافق لأعمدة projection #56948 (Amos Bird).
  • إصلاح التحقق من صحة مسار ملف sqlite #56984 (San).
  • ‏S3Queue: إصلاح زيادة مرجع بيانات التعريف #56990 (Kseniia Sumarokova).
  • إصلاح طفيف في S3Queue #56999 (Kseniia Sumarokova).
  • إصلاح التحقق من صحة مسار الملف في DatabaseFileSystem #57029 (San).
  • إصلاح fuzzBits مع ARRAY JOIN #57033 (Antonio Andelic).
  • إصلاح إلغاء مرجعية nullptr في partial merge join مع joined_subquery_re… #57048 (vdimir).
  • إصلاح حالة تسابق في RemoteSource #57052 (Raúl Marín).
  • تنفيذ bitHammingDistance للأعداد الصحيحة الكبيرة #57073 (Alexey Milovidov).
  • إصلاح خلل في الروابط بنمط S3 #57075 (Yarik Briukhovetskyi).
  • إصلاح الدالة JSON_QUERY مع عدة مسارات رقمية #57096 (KevinyhZou).
  • إصلاح تجاوز سعة المخزن المؤقت في مرمّز Gorilla #57107 (Nikolay Degterinsky).
  • إغلاق الاتصال بين الخوادم عند أي استثناء قبل المصادقة #57142 (Antonio Andelic).
  • إصلاح segfault يحدث بعد ALTER UPDATE مع عمود Nullable MATERIALIZED #57147 (Nikolay Degterinsky).
  • إصلاح التحسين غير الصحيح لخطة JOIN مع projection عادي مُجسَّد جزئيًا #57196 (Amos Bird).
  • تجاهل التعليقات عند مقارنة أوصاف الأعمدة #57259 (Antonio Andelic).
  • إصلاح المقياس ReadonlyReplica في جميع الحالات #57267 (Antonio Andelic).
  • تستخدم عمليات الدمج في الخلفية تخزين البيانات المؤقت في cache بشكل صحيح #57275 (vdimir).
  • إصلاح في Keeper لسجل التغييرات واللقطات #57299 (Antonio Andelic).
  • تجاهل مهام ON CLUSTER المكتملة إذا تغيّر اسم المضيف #57339 (Alexander Tokmakov).
  • تعيد mutations في MergeTree استخدام index granularity لجزء المصدر #57352 (Maksim Kita).
  • FS cache: إضافة حدّ للتنزيل في الخلفية #57424 (Kseniia Sumarokova).

إصدار ClickHouse 23.10، بتاريخ 2023-11-02. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • لم يعد هناك خيار لإزالة أجزاء البيانات المعطوبة تلقائيًا. هذا يُغلق #55174. #55184 (Alexey Milovidov). #55557 (Jihyuk Bok).
  • لم يعد بالإمكان قراءة أجزاء البيانات القديمة الموجودة في الذاكرة من سجل الكتابة المسبقة. إذا كنت قد هيّأت الأجزاء الموجودة في الذاكرة سابقًا، فيجب إزالتها قبل الترقية. #55186 (Alexey Milovidov).
  • أُزيل التكامل مع Meilisearch. السبب: كان متوافقًا فقط مع الإصدار القديم 0.18. غيّر الإصدار الأحدث من Meilisearch البروتوكول ولم يعد يعمل. ملاحظة: سنقدّر مساعدتك إذا أردت المساهمة في إعادته. #55189 (Alexey Milovidov).
  • أُعيدت تسمية مفهوم مراقبة الدليل إلى background INSERT. وأُعيدت تسمية جميع الإعدادات *directory_monitor* إلى distributed_background_insert*. يجب الحفاظ على التوافق مع الإصدارات السابقة (لأن الإعدادات القديمة أُضيفت كاسم مستعار). #55978 (Azat Khuzhin).
  • لا تفسّر send_timeout المضبوط على جانب العميل على أنه receive_timeout على جانب الخادم، ولا العكس. #56035 (Azat Khuzhin).
  • ستؤدي مقارنة الفترات الزمنية ذات الوحدات المختلفة إلى رفع استثناء. هذا يُغلق #55942. وربما كنت تعتمد أحيانًا على السلوك السابق، حيث كانت القيم الرقمية الأساسية تُقارَن بغض النظر عن الوحدات. #56090 (Alexey Milovidov).
  • أُعيدت كتابة محرك الجداول التجريبي S3Queue بالكامل: تغيّرت طريقة الاحتفاظ بالمعلومات في ZooKeeper، ما يسمح بتقليل عدد طلبات ZooKeeper، وأُضيف التخزين المؤقت لحالة ZooKeeper في الحالات التي نعلم فيها أن الحالة لن تتغير، كما حُسّنت عملية polling من S3 لتصبح أقل كثافة، وتغيّرت طريقة الحفاظ على ttl وmax المضبوطين للملفات المتعقبة، وأصبحت الآن عملية تعمل في الخلفية. أُضيف جدولان هما system.s3queue وsystem.s3queue_log. يُغلق #54998. #54422 (Kseniia Sumarokova).
  • لم تعد المسارات العشوائية على نقطة نهاية HTTP تُفسَّر على أنها طلب إلى نقطة النهاية /query. #55521 (Konstantin Bogdanov).

ميزة جديدة

  • تمت إضافة الدالة arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn) التي تطبّق دالة lambda على عدة Arrays لها نفس عدد العناصر، وتجمع النتيجة في مُجمِّع. #49794 (Lirikl).
  • دعم التنسيق Npy. ‏SELECT * FROM file('example_array.npy', Npy). #55982 (Yarik Briukhovetskyi).
  • إذا كان لدى جدول منحنى ملء للمساحة في مفتاحه، مثل ORDER BY mortonEncode(x, y)، فيمكن استخدام الشروط على وسائطه، مثل x >= 10 AND x <= 20 AND y >= 20 AND y <= 30، في الفهرسة. تمت إضافة الإعداد analyze_index_with_space_filling_curves لتمكين هذا التحليل أو تعطيله. هذا يُغلق #41195. استكمالًا لـ #4538. استكمالًا لـ #6286. استكمالًا لـ #28130. استكمالًا لـ #41753. #55642 (Alexey Milovidov).
  • تمت إضافة إعداد جديد باسم force_optimize_projection_name، ويأخذ اسم projection كوسيط. إذا كانت قيمته مضبوطة على سلسلة غير فارغة، فسيتحقق ClickHouse من استخدام هذا الـprojection في query مرة واحدة على الأقل. يُغلق #55331. #56134 (Yarik Briukhovetskyi).
  • دعم asynchronous inserts مع البيانات الخارجية عبر native protocol. كان ذلك يعمل سابقًا فقط إذا كانت البيانات مضمنة مباشرةً داخل query. #54730 (Anton Popov).
  • تمت إضافة دالة aggregation باسم lttb، وتستخدم خوارزمية Largest-Triangle-Three-Buckets لخفض أخذ عينات البيانات من أجل التصور. #53145 (Sinan).
  • يتمتع الاستعلام CHECK TABLE بأداء أفضل وسهولة استخدام أكبر (يرسل تحديثات progress، وهو قابل للإلغاء). كما يدعم التحقق من part معيّن باستخدام CHECK TABLE ... PART 'part_name'. #53404 (vdimir).
  • تمت إضافة الدالة jsonMergePatch. عند العمل مع بيانات JSON كسلاسل نصية، فإنها توفّر طريقة لدمج هذه السلاسل (من JSON objects) معًا لتكوين سلسلة واحدة تحتوي على JSON object واحد. #54364 (Memo).
  • الجزء الثاني من دعم لهجة Kusto Query Language. تم دمج تنفيذ المرحلة 1. #42510 (larryluogit).
  • تمت إضافة دالة SQL جديدة، arrayRandomSample(arr, k)، تُرجع sample من k عناصر من Array الإدخال. وكان لا يمكن تحقيق وظيفة مماثلة سابقًا إلا باستخدام صياغة أقل ملاءمة، مثل “SELECT arrayReduce(‘groupArraySample(3)’, range(10))”. #54391 (itayisraelov).
  • تقديم مُبدِّلات التجميع -ArgMin/-ArgMax التي تتيح التجميع حسب قيمتي الحد الأدنى/الحد الأقصى فقط. يمكن الاطلاع على إحدى حالات الاستخدام في #54818. كما يعيد طلب السحب هذا تنظيم الـ combinators في مجلد مخصّص. #54947 (Amos Bird).
  • السماح بإسقاط cache الخاصة بـ Protobuf format باستخدام SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]. #55064 (Aleksandr Musorin).
  • إضافة مُصدّق HTTP Basic خارجي. #55199 (Aleksei Filatov).
  • إضافة الدالة byteSwap التي تعكس بايتات الأعداد الصحيحة غير الموقعة. وهذا مفيد بشكل خاص لعكس قيم الأنواع التي تُمثَّل داخليًا كأعداد صحيحة غير موقعة، مثل IPv4. #55211 (Priyansh Agrawal).
  • إضافة الدالة formatQuery التي تُرجع نسخة منسّقة من سلسلة SQL query (وقد تمتد عبر عدة أسطر). كما أُضيفت الدالة formatQuerySingleLine التي تؤدي الغرض نفسه، لكن السلسلة المُعادة لن تحتوي على فواصل أسطر. #55239 (Salvatore Mesoraca).
  • إضافة input format ‏DWARF الذي يقرأ رموز التصحيح من ملف ELF executable/library/object file. #55450 (Michael Kolupaev).
  • السماح بحفظ السجلات غير المُحلَّلة والأخطاء في engines ‏RabbitMQ وNATS وFileLog. وإضافة virtual columns ‏_error و_raw_message (لـ NATS وRabbitMQ) و_raw_record (لـ FileLog)، والتي تُملأ عندما يفشل ClickHouse في parse سجل جديد. يُتحكَّم في هذا السلوك ضمن إعدادات التخزين nats_handle_error_mode لـ NATS، وrabbitmq_handle_error_mode لـ RabbitMQ، وhandle_error_mode لـ FileLog، على نحو مماثل لـ kafka_handle_error_mode. إذا ضُبطت القيمة على default، فسيتم طرح Exception عند فشل ClickHouse في parse سجل، وإذا ضُبطت على stream، فسيتم حفظ الخطأ والسجل الخام في virtual columns. يُغلق #36035. #55477 (Kruglov Pavel).
  • تحسين لعميل Keeper: إضافة الأمر get_all_children_number الذي يُرجع عدد جميع العقد الفرعية تحت path محدد. #55485 (guoxiaolong).
  • تحسين لعميل Keeper: إضافة الأمر get_direct_children_number الذي يُرجع عدد العقد الفرعية المباشرة تحت path. #55898 (xuzifu666).
  • إضافة statement ‏SHOW SETTING setting_name، وهي نسخة أبسط من statement الحالية SHOW SETTINGS. #55979 (Maksim Kita).
  • إضافة الحقلين substreams وfilenames إلى table ‏system.parts_columns. #55108 (Anton Popov).
  • إضافة دعم للاستعلام SHOW MERGES. #55815 (megao).
  • تقديم الإعداد create_table_empty_primary_key_by_default لتعيين ORDER BY () افتراضيًا. #55899 (Srikanth Chekuri).

تحسين الأداء

  • إضافة الخيار query_plan_preserve_num_streams_after_window_functions للحفاظ على عدد التدفقات بعد تقييم window functions، بما يتيح معالجة التدفقات بالتوازي. #50771 (frinkr).
  • إتاحة المزيد من التدفقات إذا كان حجم البيانات صغيرًا. #53867 (Jiebin Sun).
  • تحسين RoaringBitmaps قبل serialization. #55044 (UnamedRus).
  • أصبحت posting lists في inverted indexes مُحسّنة الآن لاستخدام أصغر تمثيل ممكن للـ bitmap الداخلية. وبحسب مدى تكرار البيانات، قد يؤدي ذلك إلى تقليل استهلاك المساحة في inverted indexes بشكل كبير. #55069 (Harry Lee).
  • إصلاح التزاحم على قفل Context، ما يحسّن الأداء بشكل ملحوظ لعدد كبير من queries القصيرة والمتزامنة. #55121 (Maksim Kita).
  • تحسين أداء إنشاء inverted index بنسبة 30%. وقد تحقق ذلك عبر استبدال std::unordered_map بـ absl::flat_hash_map. #55210 (Harry Lee).
  • دعم push down لمرشحات ORC (على مستوى rowgroup). #55330 (李扬).
  • تحسين أداء external aggregation عند وجود عدد كبير من temporary files. #55489 (Maksim Kita).
  • تعيين حجم افتراضي مناسب لذاكرة marks cache الخاصة بالفهارس الثانوية لتجنّب تحميل marks مرارًا وتكرارًا. #55654 (Alexey Milovidov).
  • تجنّب إعادة إنشاء index granules دون داعٍ عند قراءة skip indexes. ويعالج هذا #55653. #55683 (Amos Bird).
  • تخزين دالة CAST مؤقتًا في Set أثناء التنفيذ لتحسين أداء الدالة IN عندما لا يتطابق element type في Set تمامًا مع column type. #55712 (Duc Canh Le).
  • تحسين الأداء في ColumnVector::insertMany و ColumnVector::insertManyFrom. #55714 (frinkr).
  • تحسين عمليات الفهرسة الفرعية في Map عبر التنبؤ بموضع مفتاح الصف التالي وتقليل عدد المقارنات. #55929 (lgbo).
  • دعم pruning لحقول struct في Parquet (في الإصدارات السابقة، لم يكن ذلك يعمل في بعض الحالات). #56117 (lgbo).
  • إضافة إمكانية ضبط عدد parallel replicas المستخدمة في تنفيذ query استنادًا إلى تقدير عدد rows المطلوب قراءتها. #51692 (Raúl Marín).
  • تحسين استهلاك الذاكرة في external aggregation عند توليد عدد كبير من temporary files. #54798 (Nikita Taranov).
  • أصبحت distributed queries التي تُنفَّذ في وضع async_socket_for_remote (الافتراضي) تراعي الآن حد max_threads. في السابق، كان يمكن لبعض queries إنشاء عدد مفرط من threads (يصل إلى max_distributed_connections)، ما كان يسبب مشكلات في أداء server. #53504 (filimonov).
  • تخزين الإدخالات القابلة للتخطي مؤقتًا أثناء تنفيذ DDL من قائمة انتظار distributed DDL في ZooKeeper. #54828 (Duc Canh Le).
  • لم تعد inverted indexes المصنفة Experimental تخزّن tokens التي لها عدد كبير جدًا من المطابقات (أي معرّفات row في posting list). وهذا يوفّر مساحة ويتجنب عمليات lookup غير الفعّالة على الفهرس عندما يكون الفحص التسلسلي مساويًا لها في السرعة أو أسرع منها. كانت الاستدلالات السابقة (المعلمة density المُمرَّرة إلى تعريف الفهرس) التي تحدد متى لا تُخزَّن tokens مربكة جدًا للمستخدمين. وقد أُضيفت آلية أبسط بكثير تعتمد على المعلمة max_rows_per_postings_list (القيمة الافتراضية: 64k)، وتتحكم مباشرةً في الحد الأقصى المسموح به لعدد معرّفات row في postings list. #55616 (Harry Lee).
  • تحسين أداء الكتابة إلى جداول EmbeddedRocksDB. #55732 (Duc Canh Le).
  • تحسين المتانة العامة لـ ClickHouse عند وجود عدد كبير من الأجزاء داخل partition (أكثر من 1000). وقد يقلل ذلك من عدد أخطاء TOO_MANY_PARTS. #55526 (Nikita Mikhaylov).
  • تقليل استهلاك الذاكرة أثناء تحميل القواميس الهرمية. #55838 (Nikita Taranov).
  • تدعم جميع Dictionaries الإعداد dictionary_use_async_executor. #55839 (vdimir).
  • منع الاستخدام المفرط للذاكرة عند إلغاء تسلسل AggregateFunctionTopKGenericData. #55947 (Raúl Marín).
  • في Keeper الذي يحتوي على عدد كبير من watches، قد تستهلك threads الخاصة بـ AsyncMetrics نسبة 100% من CPU لمدة ملحوظة داخل DB::KeeperStorage::getSessionsWithWatchesCount. ويتمثل الإصلاح في تجنب اجتياز مجموعات watches و list_watches الكبيرة. #56054 (Alexander Gololobov).
  • إضافة الإعداد optimize_trivial_approximate_count_query لاستخدام تقريب count مع Storage EmbeddedRocksDB. وتمكين العدّ البسيط لـ StorageJoin. #55806 (Duc Canh Le).

تحسينات

  • أصبحت الدوال toDayOfWeek (الاسم البديل في MySQL: DAYOFWEEK) وtoYearWeek (YEARWEEK) وtoWeek (WEEK) تدعم الآن الوسائط من النوع String. وهذا يجعل سلوكها متسقًا مع سلوك MySQL. #55589 (Robert Schulze).
  • استُحدث الإعداد date_time_overflow_behavior بالقيم الممكنة ignore وthrow وsaturate للتحكم في سلوك تجاوز السعة عند التحويل من Date أو Date32 أو DateTime64 أو Integer أو Float إلى Date أو Date32 أو DateTime أو DateTime64. #55696 (Andrey Zvonov).
  • تنفيذ دعم معلمات الاستعلام لـ ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}. يدمج #49516. يغلق #49449. #55604 (alesapin).
  • طباعة معرّفات المعالجات بأسلوب أفضل في EXPLAIN. #48852 (Vlad Seliverstov).
  • سيُرفض إنشاء قاموس direct يتضمن حقل lifetime عند الإنشاء (لأن lifetime لا معنى له في قواميس direct). إصلاح: #27861. #49043 (Rory Crispin).
  • السماح باستخدام المعلمات في الاستعلامات التي تتضمن partitions مثل ALTER TABLE t DROP PARTITION. يغلق #49449. #49516 (Nikolay Degterinsky).
  • إضافة عمود جديد xid إلى system.zookeeper_connection. #50702 (helifu).
  • عرض إعدادات الخادم الصحيحة في system.server_settings بعد إعادة تحميل الإعدادات. #53774 (helifu).
  • إضافة دعم لرمز الطرح الرياضي في الاستعلامات، على غرار -. #54100 (Alexey Milovidov).
  • إضافة مجموعات replica إلى محرك قاعدة البيانات التجريبي Replicated. يغلق #53620. #54421 (Nikolay Degterinsky).
  • من الأفضل إعادة المحاولة عند حدوث أخطاء S3 القابلة لإعادة المحاولة بدلًا من أن يفشل الاستعلام بالكامل. وضُبطت قيمة أكبر افتراضيًا للإعداد s3_retry_attempts. #54770 (Sema Checherinda).
  • إضافة وضع load balancing hostname_levenshtein_distance. #54826 (JackyWoo).
  • تحسين إخفاء البيانات الحساسة في السجلات. #55089 (Vitaly Baranov).
  • في الوقت الحالي، سيُجرى تحليل projection فقط على مستوى query plan. وأصبح الإعداد query_plan_optimize_projection متقادماً (إذ كان مُمكّنًا افتراضيًا منذ وقت طويل). #55112 (Nikita Mikhaylov).
  • عند استدعاء الدالة untuple الآن على Tuple بعناصر مسماة وكان لها alias أيضًا (مثل select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias)، يُولَّد اسم عمود النتيجة الآن من alias الخاص بـ untuple وalias عنصر الـ Tuple (في المثال: “untuple_alias.element_alias”). #55123 (garcher22).
  • تمت إضافة الإعداد describe_include_virtual_columns، الذي يتيح تضمين virtual columns للجدول في نتيجة الاستعلام DESCRIBE. كما تمت إضافة الإعداد describe_compact_output. وإذا كان مضبوطًا على true، فسيُرجع الاستعلام DESCRIBE أسماء الأعمدة وأنواعها فقط من دون معلومات إضافية. #55129 (Anton Popov).
  • قد يفشل OPTIMIZE أحيانًا مع optimize_throw_if_noop=1 برسالة الخطأ unknown reason، بينما يكون السبب الفعلي هو وجود projections مختلفة في parts مختلفة. وقد تم إصلاح هذا السلوك. #55130 (Nikita Mikhaylov).
  • أصبح من الممكن وجود عدة جداول MaterializedPostgreSQL تتبع جدول Postgres نفسه. وهذا السلوك غير مفعّل افتراضيًا (لأسباب تتعلق بالتوافق، لأنه تغيير غير متوافق مع الإصدارات السابقة)، لكن يمكن تفعيله باستخدام الإعداد materialized_postgresql_use_unique_replication_consumer_identifier. يغلق #54918. #55145 (Kseniia Sumarokova).
  • أصبح من الممكن تحليل قيم DateTime64 وDateTime السالبة ذات الجزء الكسري من سلاسل قصيرة. #55146 (Andrey Zvonov).
  • لتحسين التوافق مع MySQL: 1. يتضمن information_schema.tables الآن الحقل الجديد table_rows، و2. يتضمن information_schema.columns الآن الحقل الجديد extra. #55215 (Robert Schulze).
  • لن يعرض clickhouse-client العبارة “0 rows in set” إذا كانت القيمة صفرًا وتم طرح Exception. #55240 (Salvatore Mesoraca).
  • دعم إعادة تسمية table من دون الكلمة المفتاحية TABLE، مثل RENAME db.t1 to db.t2. #55373 (凌涛).
  • تمت إضافة internal_replication إلى system.clusters. #55377 (Konstantin Morozov).
  • اختيار remote proxy resolver استنادًا إلى protocol الخاص بالطلب، مع إضافة توثيق لميزة proxy وإزالة DB::ProxyConfiguration::Protocol::ANY. #55430 (Arthur Passos).
  • تجنّب إعادة محاولة keeper operations عند INSERT بعد إيقاف table. #55519 (Azat Khuzhin).
  • يعرض SHOW COLUMNS الآن النوع FixedString بشكل صحيح على أنه BLOB إذا كان الإعداد use_mysql_types_in_show_columns مفعّلًا. كما تمت إضافة إعدادين جديدين، mysql_map_string_to_text_in_show_columns وmysql_map_fixed_string_to_text_in_show_columns، للتبديل في المخرجات للنوعين String وFixedString بين TEXT وBLOB. #55617 (Serge Klochkov).
  • أثناء بدء تشغيل جداول ReplicatedMergeTree، يتحقق خادم ClickHouse من مجموعة الأجزاء بحثًا عن الأجزاء غير المتوقعة (الموجودة محليًا ولكنها غير موجودة في ZooKeeper). تُنقل جميع الأجزاء غير المتوقعة إلى الدليل detached، وبدلًا منها يحاول الخادم استعادة بعض الأجزاء السلفية (المغطاة). والآن يحاول الخادم استعادة أقرب الأسلاف بدلًا من الأجزاء المغطاة العشوائية. #55645 (alesapin).
  • أصبحت لوحة المعلومات المتقدمة تدعم الآن المخططات القابلة للسحب على الأجهزة اللمسية. وهذا يُغلق #54206. #55649 (Alexey Milovidov).
  • استخدم تنسيق الاستعلام الافتراضي إذا كان مُعلنًا عند إخراج الاستثناء باستخدام http_write_exception_in_output_format. #55739 (Raúl Marín).
  • توفير رسالة أفضل للمشكلات الشائعة المتعلقة بـ MATERIALIZED VIEW. #55826 (Raúl Marín).
  • إذا حذفت قاعدة البيانات الحالية، فسيظل بإمكانك تشغيل بعض الاستعلامات في clickhouse-local والتبديل إلى قاعدة بيانات أخرى. وهذا يجعل السلوك متسقًا مع clickhouse-client. وهذا يُغلق #55834. #55853 (Alexey Milovidov).
  • تدعم الدوال (add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond) الآن وسيطات تاريخ مرمّزة كسلاسل نصية، مثل SELECT addDays('2023-10-22', 1). وهذا يزيد التوافق مع MySQL وهو مطلوب لـ Tableau Online. #55869 (Robert Schulze).
  • يتيح الإعداد apply_deleted_mask عند تعطيله قراءة الصفوف التي وُسِمت كمحذوفة بواسطة استعلامات DELETE الخفيفة. وهذا مفيد لاستكشاف الأخطاء وإصلاحها. #55952 (Alexander Gololobov).
  • السماح بتخطي القيم null عند إجراء التسلسل لـ Tuple إلى كائنات JSON، مما يتيح الحفاظ على التوافق مع الدالة to_json الخاصة بـ Spark، وهو مفيد أيضًا لـ gluten. #55956 (李扬).
  • تدعم الدوال (add|sub)Date الآن وسيطات تاريخ مرمّزة كسلاسل نصية، مثل SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE). وقد أُضيف الدعم نفسه لوسيطات التاريخ المرمّزة كسلاسل نصية إلى معاملي الجمع والطرح، مثل SELECT '2023-10-23' + INTERVAL 1 DAY. وهذا يزيد التوافق مع MySQL وهو مطلوب لـ Tableau Online. #55960 (Robert Schulze).
  • السماح بالسلاسل النصية غير الموضوعة بين علامتي اقتباس التي تحتوي على CR (\r) في تنسيق CSV. يُغلق هذا #39930. #56046 (Kruglov Pavel).
  • السماح بتشغيل clickhouse-keeper باستخدام تهيئة مضمنة. #56086 (Maksim Kita).
  • تعيين حد أقصى لقيمة التهيئة الخاصة بـ queued.min.messages لتجنب مشكلة بدء جلب البيانات باستخدام Kafka. #56121 (Stas Morozov).
  • تم إصلاح خطأ مطبعي في دالة SQL ‏minSampleSizeContinous (أُعيدت تسميتها إلى minSampleSizeContinuous). وقد تم الإبقاء على الاسم القديم حفاظًا على التوافق مع الإصدارات السابقة. يُغلق هذا التغيير: #56139. #56143 (Dorota Szeremeta).
  • طباعة المسار الخاص بالأجزاء التالفة على القرص قبل إيقاف server. قبل هذا التغيير، إذا كان أحد الأجزاء تالفًا على القرص وتعذّر على server بدء التشغيل، كان من شبه المستحيل معرفة أي جزء تالف. تم إصلاح ذلك. #56181 (Duc Canh Le).

تحسينات البناء/الاختبار/التغليف

  • إذا كانت قاعدة البيانات في Docker قد هُيئت بالفعل، فلا حاجة إلى تهيئتها مرة أخرى عند عمليات التشغيل اللاحقة. قد يساعد ذلك في حل مشكلة إعادة تشغيل الحاوية بلا توقف عندما تفشل قاعدة البيانات في التحميل خلال 1000 محاولة (وهذا مهم خصوصًا لقواعد البيانات الكبيرة جدًا والإعدادات متعددة العقد). #50724 (Alexander Nikolaev).
  • يُبنى المورد الذي يتضمن الشيفرة المصدرية، بما في ذلك الوحدات الفرعية، ضمن مهمة build خاصة بـ Darwin. ويمكن استخدامه لبناء ClickHouse من دون تنفيذ checkout للوحدات الفرعية. #51435 (Ilya Yatsishin).
  • كان يحدث خطأ عند بناء ClickHouse مع تفعيل سلسلة تعليمات AVX على مستوى عام (وهو أمر غير موصى به). والسبب هو أن snappy لا يفعّل SNAPPY_HAVE_X86_CRC32. #55049 (monchickey).
  • حلّ مشكلة تشغيل clickhouse-keeper بشكل مستقل من حزمة clickhouse-server. #55226 (Mikhail f. Shiryaev).
  • في الاختبارات، جرى تحديث إصدار RabbitMQ إلى 3.12.6. كما جرى تحسين جمع السجلات لاختبارات RabbitMQ. #55424 (Ilya Yatsishin).
  • عُدّل الاختلاف في رسالة الخطأ بين openssl وboringssl لإصلاح الاختبار الوظيفي. #55975 (MeenaRenganathan22).
  • استخدام المستودع الأصلي لـ apache datasketches. #55787 (Nikita Taranov).

إصلاح خلل (سلوك غير صحيح يلاحظه المستخدم في إصدار مستقر رسمي)

  • تخطّي إنشاء الروابط الصلبة لملفات الفهرس المعكوس أثناء عملية mutation #47663 (cangyin).
  • إصلاح خلل في الدالة match ‏(regex) حيث يؤدي النمط الذي يحتوي على alternation إلى توليد شرط مفتاح غير صحيح. يغلق #53222. #54696 (Yakov Olkhovskiy).
  • إصلاح الخطأ ‘Cannot find column’ في تحسين read-in-order مع ARRAY JOIN #51746 (Nikolai Kochetov).
  • دعم subcolumns المفقودة من Object(Nullable(json)) التجريبية في الاستعلام. #54052 (zps).
  • إعادة إضافة الإصلاح الخاص بـ accurateCastOrNull #54629 (Salvatore Mesoraca).
  • إصلاح اكتشاف DEFAULT للأعمدة في جدول Distributed أُنشئ من دون AS #55060 (Vitaly Baranov).
  • تنظيف سليم في حال حدوث استثناء في ctor الخاص بـ ShellCommandSource #55103 (Alexander Gololobov).
  • إصلاح حالة deadlock عند تحديث الدور المعيّن عبر LDAP #55119 (Julian Maicher).
  • منع تحديث إحصاءات الأخطاء للاستثناءات الداخلية #55128 (Robert Schulze).
  • إصلاح حالة deadlock في النسخ الاحتياطية #55132 (alesapin).
  • إصلاح استرجاع ملفات تخزين Iceberg #55144 (Kseniia Sumarokova).
  • إصلاح partition pruning للأعمدة الإضافية في Set. #55172 (Amos Bird).
  • إصلاح إعادة حساب skip indexes في استعلامات ALTER UPDATE عندما يكون الجدول ذا adaptive granularity #55202 (Duc Canh Le).
  • إصلاح التنزيل في الخلفية في fs cache #55252 (Kseniia Sumarokova).
  • تجنّب احتمال حدوث تسرّب للذاكرة في الضواغط عند غياب الإنهاء النهائي لـ buffer #55262 (Azat Khuzhin).
  • إصلاح تنفيذ الدوال على الأعمدة sparse #55275 (Azat Khuzhin).
  • إصلاح الدمج غير الصحيح لـ Nested في SELECT FINAL FROM SummingMergeTree #55276 (Azat Khuzhin).
  • إصلاح خلل يمنع حذف partition منفصلة في replicated merge tree فوق S3 من دون zero copy #55309 (alesapin).
  • إصلاح تعطل في MergeSortingPartialResultTransform (بسبب وجود chunks صفرية بعد remerge) #55335 (Azat Khuzhin).
  • إصلاح data race في CreatingSetsTransform (عند الأخطاء) بسبب رمي استثناء مشترك #55338 (Azat Khuzhin).
  • إصلاح تحسين trash (إلى حدٍّ ما) #55353 (Alexey Milovidov).
  • إصلاح تسرّب في StorageHDFS #55370 (Azat Khuzhin).
  • إصلاح تحليل Arrays في عامل CAST #55417 (Anton Popov).
  • إصلاح التصفية حسب virtual columns باستخدام مرشح OR في query #55418 (Azat Khuzhin).
  • إصلاح مشكلات الاتصال بـ MongoDB #55419 (Nikolay Degterinsky).
  • إصلاح تمثيل Boolean في MySQL interface #55427 (Serge Klochkov).
  • إصلاح تنسيق DateTime في بروتوكول MySQL النصي والإبلاغ عن الأنواع LowCardinality(Nullable(T)) #55479 (Serge Klochkov).
  • جعل use_mysql_types_in_show_columns يؤثر فقط في SHOW COLUMNS #55481 (Robert Schulze).
  • إصلاح التحليل غير الصحيح لـ DW_FORM_ref_addr في مُرمِّز رموز المكدس، والذي كان يتسبب أحيانًا في crash #55483 (Michael Kolupaev).
  • إتلاف fiber عند حدوث Exception في cancelBefore ضمن AsyncTaskExecutor #55516 (Kruglov Pavel).
  • إصلاح عدم عمل Query Parameters مع HTTP handlers مخصّصة #55521 (Konstantin Bogdanov).
  • إصلاح التحقق من البيانات غير المُعالَجة في Values format #55527 (Azat Khuzhin).
  • إصلاح ‘Invalid cursor state’ في ODBC عند التفاعل مع MS SQL Server #55558 (vdimir).
  • إصلاح الحد الأقصى لوقت التنفيذ ووضع overflow ‘break’ #55577 (Alexander Gololobov).
  • إصلاح crash في QueryNormalizer مع aliases دورية #55602 (vdimir).
  • تعطيل تحسين خاطئ وإضافة اختبار #55609 (Alexey Milovidov).
  • الدمج #52352 #55621 (Alexey Milovidov).
  • إضافة اختبار لتجنّب الفرز غير الصحيح لقيم Decimal #55662 (Amos Bird).
  • إصلاح شريط التقدّم لوظائف Cluster في S3 وAzure مع URL بدون globs #55666 (Kruglov Pavel).
  • إصلاح التصفية حسب virtual columns باستخدام مرشح OR في query (إعادة إرسال) #55678 (Azat Khuzhin).
  • إصلاحات وتحسينات على وحدة تخزين Iceberg #55695 (Kruglov Pavel).
  • إصلاح data race في CreatingSetsTransform ‏(v2) #55786 (Azat Khuzhin).
  • طرح استثناء عند تحليل سلسلة غير صالحة كقيمة float إذا كانت precise_float_parsing تساوي true #55861 (李扬).
  • تعطيل predicate pushdown إذا كان CTE يحتوي على دوال stateful #55871 (Raúl Marín).
  • إصلاح normalize ASTSelectWithUnionQuery، إذ كان يجرّد الاستعلام من FORMAT #55887 (flynn).
  • محاولة إصلاح segfault محتمل في Native ORC input format #55891 (Kruglov Pavel).
  • إصلاح window functions في حالة الأعمدة sparse #55895 (János Benjamin Antal).
  • إصلاح: أصبح StorageNull يدعم الحقول الفرعية #55912 (FFish).
  • عدم كتابة الأخطاء القابلة لإعادة المحاولة لعمليات mutate/merge في Replicated في سجل الأخطاء #55944 (Azat Khuzhin).
  • إصلاح SHOW DATABASES LIMIT <N> #55962 (Raúl Marín).
  • إصلاح Protobuf schema المُولَّد تلقائيًا للحقول التي تحتوي على شرطة سفلية #55974 (Kruglov Pavel).
  • إصلاح dateTime64ToSnowflake64() عند استخدام scale غير default #55983 (Robert Schulze).
  • إصلاح الإخراج/الإدخال لعمود Dictionary في Arrow #55989 (Kruglov Pavel).
  • إصلاح جلب schema من schema registry في AvroConfluent #55991 (Kruglov Pavel).
  • إصلاح الخطأ ‘Block structure mismatch’ عند تنفيذ ALTER وINSERTs بشكل متزامن في Buffer table #55995 (Michael Kolupaev).
  • إصلاح احتساب free space غير الصحيح لسياسة JBOD الأقل استخدامًا #56030 (Azat Khuzhin).
  • إصلاح مشكلة scalar المفقود عند تقييم الاستعلامات الفرعية داخل table functions #56057 (Amos Bird).
  • إصلاح نتيجة query غير الصحيحة عندما يكون http_write_exception_in_output_format=1 #56135 (Kruglov Pavel).
  • إصلاح schema cache في حالة fallback من JSON->JSONEachRow مع settings مُعدّلة #56172 (Kruglov Pavel).
  • إضافة معالج أخطاء إلى odbc-bridge #56185 (Yakov Olkhovskiy).

إصدار ClickHouse 23.9 بتاريخ 2023-09-28. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • إزالة خيار التكوين status_info وحالة القواميس من معالج Prometheus الافتراضي. #54090 (Alexey Milovidov).
  • أُزيلت ذاكرة التخزين المؤقت التجريبية للبيانات الوصفية للأجزاء من الشيفرة المصدرية. #54215 (Alexey Milovidov).
  • تعطيل الإعداد input_format_json_try_infer_numbers_from_strings افتراضيًا، بحيث لا نحاول افتراضيًا استدلال الأرقام من السلاسل النصية في تنسيقات JSON، وذلك لتجنب أخطاء التحليل المحتملة عندما تحتوي البيانات النموذجية على سلاسل نصية تبدو كأنها أرقام. #55099 (Kruglov Pavel).

ميزة جديدة

  • تحسين schema inference من JSON formats: 1) أصبح من الممكن الآن استنتاج named Tuples من JSON objects من دون JSON type التجريبي، وذلك عبر الإعداد input_format_json_try_infer_named_tuples_from_objects في JSON formats. سابقًا، من دون JSON type التجريبي، لم يكن بالإمكان استنتاج JSON objects إلا على أنها Strings أو Maps، أما الآن فأصبح بالإمكان استنتاج named Tuple. وسيحتوي النوع Tuple الناتج على جميع مفاتيح الكائنات التي قُرئت في عينة البيانات أثناء schema inference. وقد يكون ذلك مفيدًا عند قراءة بيانات JSON المهيكلة من دون كائنات sparse. هذا الإعداد مُمكَّن افتراضيًا. 2) السماح بتحليل JSON array إلى column من النوع String عبر الإعداد input_format_json_read_arrays_as_strings. ويمكن أن يساعد ذلك في قراءة Arrays التي تحتوي على قيم من types مختلفة. 3) السماح باستخدام النوع String لمفاتيح JSON ذات types غير المعروفة (null/[]/{}) في بيانات العينة عبر الإعداد input_format_json_infer_incomplete_types_as_strings. أصبح بإمكاننا الآن في JSON formats قراءة أي قيمة في column من النوع String، كما يمكن تجنب الخطأ Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps أثناء schema inference باستخدام النوع String للأنواع غير المعروفة، وبذلك ستُقرأ البيانات بنجاح. #54427 (Kruglov Pavel).
  • أُضيف دعم IO scheduling للأقراص البعيدة. ويمكن أن يتضمن Storage configuration لأنواع disk s3 وs3_plain وhdfs وazure_blob_storage الآن العنصرين read_resource وwrite_resource اللذين يحتويان على أسماء الموارد. كما يمكن ضبط سياسات scheduling لهذه الموارد في قسم منفصل من server configuration باسم resources. ويمكن تمييز queries باستخدام الإعداد workload وتصنيفها باستخدام قسم server configuration المسمى workload_classifiers لتحقيق أهداف متنوعة لجدولة الموارد. لمزيد من التفاصيل، راجع التوثيق. #47009 (Sergei Trifonov). وأُضيف أيضًا نوع عقدة IO scheduling باسم “bandwidth_limit”. ويتيح لك ذلك تحديد القيدين max_speed وmax_burst على حركة المرور المارة عبر هذه العقدة. #54618 (Sergei Trifonov).
  • أُضيف نوع جديد من authentication يعتمد على SSH keys. وهو يعمل فقط مع native TCP protocol. #41109 (George Gamezardashvili).
  • أُضيف column جديد باسم _block_number إلى MergeTree tables. #44532. #47532 (SmitaRKulkarni).
  • أُضيفت العبارة IF EMPTY إلى استعلامات DROP TABLE. #48915 (Pavel Novitskiy).
  • أصبحت دالتا SQL ‏toString(datetime, timezone) وformatDateTime(datetime, format, timezone) تدعمان الآن وسائط timezone غير الثابتة. #53680 (Yarik Briukhovetskyi).
  • أُضيف دعم ALTER TABLE MODIFY COMMENT. ملاحظة: أُضيف شيء مشابه منذ وقت طويل بواسطة contributor خارجي، لكن هذه الميزة لم تكن تعمل إطلاقًا ولم تسبّب إلا في إرباك المستخدمين. هذا يُغلق #36377. #51304 (Alexey Milovidov). ملاحظة: هذا الأمر لا ينتشر بين replicas، لذلك قد تكون لدى replicas الخاصة بالجدول comments مختلفة.
  • تمت إضافة GCD، المعروف أيضًا باسم “أكبر قاسم مشترك”، بوصفه codec جديدًا لضغط البيانات. يحسب هذا الـ codec قيمة GCD لجميع قيم العمود، ثم يقسم كل قيمة على GCD. ويُعد codec ‏GCD codec لإعداد البيانات (على غرار Delta وDoubleDelta) ولا يمكن استخدامه بمفرده. وهو يعمل مع أنواع البيانات الصحيحة والعشرية وأنواع التاريخ/الوقت. ومن حالات الاستخدام المناسبة لـ codec ‏GCD قيم الأعمدة التي تتغير (زيادةً أو نقصانًا) بمضاعفات GCD، مثل 24 - 28 - 16 - 24 - 8 - 24 (على افتراض أن GCD = 4). #53149 (Alexander Nam).
  • تمت إضافة اسمين مستعارين جديدين للنوع: DECIMAL(P) (كاختصار لـ DECIMAL(P, 0)) وDECIMAL (كاختصار لـ DECIMAL(10, 0)). وهذا يجعل ClickHouse أكثر توافقًا مع SQL dialect في MySQL. #53328 (Val Doroshchuk).
  • تمت إضافة جدول سجل نظام جديد backup_log لتتبّع جميع عمليات BACKUP وRESTORE. #53638 (Victor Krasnov).
  • تمت إضافة إعداد format باسم output_format_markdown_escape_special_characters (الافتراضي: false). يتحكم هذا الإعداد في ما إذا كانت الأحرف الخاصة مثل ! و# و$ وغيرها تُهرَّب (أي تُسبق بعلامة backslash) في output format ‏Markdown. #53860 (irenjj).
  • تمت إضافة الدالة decodeHTMLComponent. #54097 (Bharat Nallan).
  • تمت إضافة peak_threads_usage إلى جدول query_log. #54335 (Alexey Gerasimchuck).
  • تمت إضافة دعم SHOW FUNCTIONS إلى clickhouse-client. #54337 (Julia Kartseva).
  • تمت إضافة الدالة toDaysSinceYearZero مع الاسم المستعار TO_DAYS (للتوافق مع MySQL)، والتي تُرجع عدد الأيام المنقضية منذ 0001-01-01 (في التقويم الميلادي الاستباقي). #54479 (Robert Schulze). كما تدعم الدالة toDaysSinceYearZero الآن الوسائط من النوع DateTime وDateTime64. #54856 (Serge Klochkov).
  • تمت إضافة الدوال YYYYMMDDtoDate وYYYYMMDDtoDate32 وYYYYMMDDhhmmssToDateTime وYYYYMMDDhhmmssToDateTime64. وهي تحوّل تاريخًا أو تاريخًا مع وقت، مُرمّزًا كعدد صحيح (مثل 20230911)، إلى تاريخ أصلي أو تاريخ مع وقت أصلي. وبذلك، فهي توفّر الوظيفة المعاكسة للدوال الموجودة YYYYMMDDToDate وYYYYMMDDToDateTime وYYYYMMDDhhmmddToDateTime وYYYYMMDDhhmmddToDateTime64. #54509 (Quanfa Fu) (Robert Schulze).
  • تمت إضافة عدة دوال لمسافة السلاسل النصية، بما في ذلك byteHammingDistance وeditDistance. #54935 (flynn).
  • أصبح من الممكن تحديد تاريخ انتهاء الصلاحية، والوقت اختياريًا، لبيانات اعتماد المستخدم باستخدام clause ‏VALID UNTIL datetime. #51261 (Nikolay Degterinsky).
  • السماح باستخدام عناوين URL بنمط S3 مع دوال الجداول s3 وgcs وoss. ويُحوَّل عنوان URL تلقائيًا إلى HTTP. مثال: يُحوَّل 's3://clickhouse-public-datasets/hits.csv' إلى 'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'. #54931 (Yarik Briukhovetskyi).
  • إضافة إعداد جديد print_pretty_type_names لطباعة أسماء الأنواع المتداخلة العميقة بتنسيق Pretty، مثل Tuple/Maps/Arrays. #55095 (Kruglov Pavel).

تحسين الأداء

  • تسريع القراءة من S3 عبر تفعيل عمليات الجلب المسبق افتراضيًا. #53709 (Alexey Milovidov).
  • عدم قراءة PK وعمود version ضمنيًا في الأجزاء المنفردة ما لم يكن ذلك ضروريًا للاستعلامات التي تستخدم FINAL. #53919 (Duc Canh Le).
  • تحسين GROUP BY للمفاتيح الثابتة. سيؤدي ذلك إلى تحسين الاستعلامات التي تستخدم GROUP BY _file/_path بعد https://github.com/ClickHouse/ClickHouse/pull/53529. #53549 (Kruglov Pavel).
  • تحسين أداء الفرز لأعمدة Decimal. وتحسين أداء الإدراج في MergeTree إذا كان ORDER BY يحتوي على عمود Decimal. وتحسين أداء الفرز عندما تكون البيانات مرتبة بالفعل أو شبه مرتبة. #35961 (Maksim Kita).
  • تحسين الأداء عند تحليل الاستعلامات الضخمة. يعالج #51224. #51469 (frinkr).
  • تحسين لإعادة كتابة COUNT(DISTINCT ...) ومختلف صيغ uniq إلى count إذا كان الاختيار من استعلام فرعي يحتوي على GROUP BY. #52082 #52645 (JackyWoo).
  • إزالة الاستدعاءات اليدوية إلى mmap/mremap/munmap وإسناد هذا العمل بالكامل إلى jemalloc، ما يحسّن الأداء قليلًا. #52792 (Nikita Taranov).
  • إصلاح الارتفاع الكبير في استهلاك CPU عند العمل مع NATS. #54399 (Vasilev Pyotr).
  • بما أننا نستخدم تعليمات منفصلة لتنفيذ toString مع وسيط datetime، أصبح من الممكن تحسين الأداء قليلًا للوسائط غير datetime وجعل بعض أجزاء الشيفرة أنظف. متابعة لـ #53680. #54443 (Yarik Briukhovetskyi).
  • بدلًا من إجراء serialization لعناصر json إلى std::stringstream، يحاول هذا PR وضع ناتج serialization مباشرةً في ColumnString. #54613 (lgbo).
  • تمكين تحسين ORDER BY لقراءة البيانات بالترتيب المقابل من جدول MergeTree عندما يكون الجدول خلف view. #54628 (Vitaly Baranov).
  • تحسين دوال JSON في SQL عبر إعادة استخدام GeneratorJSONPath وإزالة عدة مؤشرات مشتركة. #54735 (lgbo).
  • يحاول Keeper تجميع طلبات flush على دفعات لتحسين الأداء. #53049 (Antonio Andelic).
  • يعالج clickhouse-client الآن الملفات بالتوازي في حالة INFILE 'glob_expression'. يغلق #54218. #54533 (Max K.).
  • السماح باستخدام المفتاح الأساسي مع الدالة IN حتى عندما تختلف أنواع أعمدة المفتاح الأساسي عن أنواع الأعمدة في الطرف الأيمن من الدالة IN. مثال: SELECT id FROM test_table WHERE id IN (SELECT '5'). يُغلق #48936. #54544 (Maksim Kita).
  • يحاول Hash JOIN تقليص المخازن المؤقتة الداخلية التي تستهلك نصف الحد الأقصى المتاح من الذاكرة (كما يحدده max_bytes_in_join). #54584 (vdimir).
  • مراعاة max_block_size في array join لتجنّب احتمال حدوث OOM. يُغلق #54290. #54664 (李扬).
  • إعادة استخدام اتصالات HTTP في دالة الجدول s3. #54812 (Michael Kolupaev).
  • استبدال البحث الخطي في MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules ببحث ثنائي. #54869 (usurai).

الميزة التجريبية

  • أصبح الآن من الممكن تنفيذ إنشاء فهارس Annoy بالتوازي باستخدام الإعداد max_threads_for_annoy_index_creation. #54047 (Robert Schulze).
  • لا تقرأ ميزة النسخ المتماثلة المتوازية عبر Distributed من جميع النسخ المتماثلة #54199 (Igor Nikonov).

تحسينات

  • السماح باستبدال أسماء ملفات الأعمدة الطويلة في أجزاء بيانات MergeTree ببصمات تجزئة للأسماء. يساعد ذلك على تجنّب الخطأ File name too long في بعض الحالات. #50612 (Anton Popov).
  • تحليل البيانات بتنسيق JSON على أنها JSONEachRow إذا تعذّر تحليل البيانات الوصفية. يتيح ذلك قراءة الملفات ذات الامتداد .json حتى إذا كان التنسيق الفعلي هو JSONEachRow. يغلق #45740. #54405 (Kruglov Pavel).
  • إخراج JSON/XML صالح عند حدوث استثناء أثناء تنفيذ استعلام HTTP. تمت إضافة الإعداد http_write_exception_in_output_format لتمكين هذا السلوك أو تعطيله (وهو مُمكّن افتراضيًا). #52853 (Kruglov Pavel).
  • تحتوي الواجهة information_schema.tables الآن على حقل جديد data_length يعرض الحجم التقريبي للبيانات على القرص. وهذا مطلوب لتشغيل الاستعلامات التي يُنشئها Amazon QuickSight. #55037 (Robert Schulze).
  • حصلت واجهة MySQL على تنفيذ أولي محدود للعبارات المُحضّرة، وهو كافٍ فقط للسماح بإنشاء اتصال من Tableau Online إلى ClickHouse عبر موصل MySQL. #54115 (Serge Klochkov). يُرجى ملاحظة ما يلي: تنفيذ العبارات المُحضّرة محدود جدًا، ولا ندعم بعد ربط الوسائط، إذ لا يلزم ذلك في حالة استخدام Tableau Online هذه تحديدًا. وسيُنفَّذ ذلك لاحقًا عند الحاجة، بعد اختبار Tableau Online على نطاق واسع إذا تبيّن وجود مشكلات.
  • دعم أنماط المطابقة غير الحساسة لحالة الأحرف وdot-all في قواميس regexp_tree. #50906 (Johann Gan).
  • تحسين في Keeper: إضافة أمر Keeper باسم createIfNotExists. #48855 (Konstantin Bogdanov).
  • استدلال أكثر دقة لأنواع الأعداد الصحيحة، مع إصلاح #51236. #53003 (Chen768959).
  • إضافة دعم تحليل مجموعات المحارف في القيم النصية الحرفية في MaterializedMySQL. #53220 (Val Doroshchuk).
  • إصلاح مشكلة دقيقة تتعلق بمحرك الجداول EmbeddedRocksDB قليل الاستخدام في سيناريو نادر للغاية: أحيانًا لا يُغلق محرك الجداول EmbeddedRocksDB الملفات بشكل صحيح على NFS بعد تنفيذ DROP TABLE. #53502 (Mingliang Pan).
  • يجب أن يُنشئ RESTORE TABLE ON CLUSTER الجداول المكررة مع UUID مطابق على المضيفين. وإلا فلن تعمل الماكرو {uuid} في مسار ZooKeeper بشكل صحيح بعد RESTORE. ينفّذ هذا الطلب ذلك. #53765 (Vitaly Baranov).
  • تمت إضافة إعداد restore باسم restore_broken_parts_as_detached: إذا كانت قيمته true فلن تتوقف عملية RESTORE عند الأجزاء التالفة أثناء الاستعادة، وبدلًا من ذلك ستُنسخ جميع الأجزاء التالفة إلى مجلد detached مع البادئة `broken-from-backup’. وإذا كانت قيمته false فستتوقف عملية RESTORE عند أول جزء تالف (إن وُجد). القيمة الافتراضية هي false. #53877 (Vitaly Baranov).
  • إضافة الحقل elapsed_ns إلى ترويسات HTTP ‏X-ClickHouse-Progress و X-ClickHouse-Summary. #54179 (joelynch).
  • تنفيذ أوامر reconfig ‏(https://github.com/ClickHouse/ClickHouse/pull/49450) وsync وexists في keeper-client. #54201 (pufit).
  • يتيح clickhouse-local وclickhouse-client الآن تحديد المعامل --query عدة مرات، على سبيل المثال ./clickhouse-client --query "SELECT 1" --query "SELECT 2". هذه الصياغة أكثر سهولةً في الفهم قليلًا من ./clickhouse-client --multiquery "SELECT 1;S ELECT 2"، كما أنها أسهل قليلًا في كتابة السكربتات (مثلًا queries.push_back('--query "$q"')) وأكثر اتساقًا مع سلوك المعامل الحالي --queries-file (مثلًا ./clickhouse client --queries-file queries1.sql --queries-file queries2.sql). #54249 (Robert Schulze).
  • إضافة دقة دون الثانية إلى formatReadableTimeDelta. #54250 (Andrey Zvonov).
  • تفعيل allow_remove_stale_moving_parts افتراضيًا. #54260 (vdimir).
  • إصلاح استخدام العدد من cache وتحسين شريط التقدم عند القراءة من الأرشيفات. #54271 (Kruglov Pavel).
  • إضافة دعم بيانات اعتماد S3 باستخدام SSO. لتحديد profile لاستخدامه مع SSO، اضبط متغير البيئة AWS_PROFILE. #54347 (Antonio Andelic).
  • دعم NULL كقيمة افتراضية للأنواع المتداخلة Array/Tuple/Map في input formats. يُغلق #51100. #54351 (Kruglov Pavel).
  • السماح بقراءة بعض تكوينات chunks غير المعتادة من تنسيقات Arrow/Parquet. #54370 (Arthur Passos).
  • إضافة alias ‏STD إلى الدالة stddevPop للتوافق مع MySQL. يُغلق #54274. #54382 (Nikolay Degterinsky).
  • إضافة الدالة addDate للتوافق مع MySQL وsubDate لتحقيق الاتساق. مرجع: #54275. #54400 (Nikolay Degterinsky).
  • إضافة modification_time إلى system.detached_parts. #54506 (Azat Khuzhin).
  • أُضيف الإعداد splitby_max_substrings_includes_remaining_string الذي يتحكم فيما إذا كانت الدوال “splitBy*()” ذات الوسيط “max_substring” ‏> 0 تُضمّن السلسلة المتبقية (إن وُجدت) في Array النتيجة (وفق دلالات بايثون/Spark) أم لا. لا يتغير السلوك الافتراضي. #54518 (Robert Schulze).
  • تحسين استدلال أنواع الأعداد الصحيحة لحقول Int64/UInt64. استكمال لـ #53003. يعمل الآن أيضًا مع الأنواع المتداخلة مثل Arrays of Arrays ومع الدوال مثل map/tuple. issue: #51236. #54553 (Kruglov Pavel).
  • أُضيفت عمليات على المصفوفات للضرب والقسمة وباقي القسمة مع قيمة قياسية. وهي تعمل في كلا الاتجاهين؛ على سبيل المثال 5 * [5, 5] و [5, 5] * 5 — كلتا الحالتين ممكنتان. #54608 (Yarik Briukhovetskyi).
  • أُضيفت الوسيطة الاختيارية version إلى الأمر rm في keeper-client لدعم عمليات حذف أكثر أمانًا. #54708 (János Benjamin Antal).
  • تعطيل تمكين systemd من إنهاء الخادم بالقوة (إذ قد يؤدي ذلك إلى فقدان البيانات عند استخدام جداول Buffer). #54744 (Azat Khuzhin).
  • أُضيف الحقل is_deterministic إلى جدول النظام system.functions، ويشير إلى ما إذا كانت نتيجة الدالة ثابتة بين استدعاءين (عند استخدام المدخلات نفسها تمامًا) أم لا. #54766 #55035 (Robert Schulze).
  • جُعلت العروض في المخطط information_schema أكثر توافقًا مع العروض المكافئة لها في MySQL (أي عُدّلت ووُسّعت) إلى درجة أصبح معها Tableau Online قادرًا على الاتصال بـ ClickHouse. وبشكل أكثر تحديدًا: 1. تغيّر نوع الحقل information_schema.tables.table_type من Enum8 إلى String. 2. أُضيف الحقلان table_comment و table_collation إلى العرض information_schema.table. 3. أُضيف العرضان information_schema.key_column_usage و referential_constraints. 4. استُبدلت الأسماء المستعارة المكتوبة بأحرف كبيرة في عروض information_schema بأعمدة فعلية مكتوبة بأحرف كبيرة. #54773 (Serge Klochkov).
  • أصبحت query cache تُرجِع خطأً الآن إذا حاولتَ تخزين نتيجة استعلام يحتوي على دالة غير حتمية مثل now و randomString و dictGet. وبالمقارنة مع السلوك السابق (عدم تخزين النتيجة بصمت)، يقلّل هذا من الالتباس والمفاجآت. #54801 (Robert Schulze).
  • مُنع استخدام الأعمدة الخاصة مثل materialized/ephemeral/alias مع وسائط التخزين file/s3/url/…، مع إصلاح عمليات insert إلى الأعمدة ephemeral من الملفات. يُغلق #53477. #54803 (Kruglov Pavel).
  • أصبح جمع metadata للنسخ الاحتياطي أكثر قابلية للتهيئة. #54804 (Vitaly Baranov).
  • سيضيف clickhouse-local الآن إلى ملف السجل الخاص به (إذا كان مفعّلًا عبر الخيار —server_logs_file) بادئة لكل سطر تتضمن timestamp ومعرّف thread وما إلى ذلك، تمامًا مثل clickhouse-server. #54807 (Michael Kolupaev).
  • الحقل is_obsolete في الجدول system.merge_tree_settings — أصبحت قيمته الآن 1 لإعدادات merge tree المتقادمة. في السابق، كان الوصف وحده يشير إلى أن الإعداد متقادم. #54837 (Robert Schulze).
  • أصبح من الممكن استخدام صيغة الجمع مع interval literals. ينبغي أن يكون INTERVAL 2 HOURS مكافئًا لـ INTERVAL 2 HOUR. #54860 (Jordi Villar).
  • أصبح إنشاء projection باستخدام Nullable PK مسموحًا به دائمًا. هذا يُصلح #54814. #54895 (Amos Bird).
  • أعد محاولة تنفيذ عمليات S3 الخاصة بالنسخ الاحتياطي بعد فشل ناجم عن إعادة تعيين الاتصال. #54900 (Vitaly Baranov).
  • اجعل رسالة الاستثناء أكثر دقة في حال كانت القيمة القصوى لأحد الإعدادات أقل من القيمة الدنيا. #54925 (János Benjamin Antal).
  • تتيح الدوال LIKE وmatch وغيرها من دوال مطابقة التعبيرات النمطية الآن المطابقة مع أنماط تحتوي على سلاسل فرعية غير UTF-8، وذلك بالرجوع إلى المطابقة الثنائية. مثال: يمكنك استخدام string LIKE '\xFE\xFF%' لاكتشاف BOM. هذا يحلّ #54486. #54942 (Alexey Milovidov).
  • أُضيف حدث profile باسم ContextLockWaitMicroseconds. #55029 (Maksim Kita).
  • يضبط Keeper مستويات السجل ديناميكيًا. #50372 (helifu).
  • أُضيفت الدالة timestamp للتوافق مع MySQL. يحلّ #54275. #54639 (Nikolay Degterinsky).

تحسينات البناء/الاختبار/التغليف

  • رُقِّيَ المترجم البرمجي المستخدم في البُنى الرسمية وبُنى التكامل المستمر لـ ClickHouse من Clang 16 إلى 17. #53831 (Robert Schulze).
  • أُعيد توليد بيانات tld لعمليات lookup (tldLookup.generated.cpp). #54269 (Bharat Nallan).
  • أُزيل الرابط الرمزي الزائد clickhouse-keeper-client. #54587 (Tomas Barton).
  • استُخدم /usr/bin/env لتحديد bash — وهو يدعم الآن Nix OS. #54603 (Fionera).
  • أُضيف الخيار PROFILE_CPU إلى CMake، وهو مطلوب لتنفيذ perf record من دون استخدام مخطط استدعاءات DWARF. #54917 (Maksim Kita).
  • إذا كان الرابط مختلفًا عن LLD، فيتوقف التنفيذ مع خطأ فادح. #55036 (Alexey Milovidov).
  • استُبدلت المكتبة المستخدمة لمعالجة (ترميز/فك ترميز) قيم base64 من Turbo-Base64 إلى aklomp-base64. كلتاهما تستفيدان من تسريع SIMD على x86 وARM، ولكن 1. ترخيص الثانية (BSD-2) أنسب لـ ClickHouse، إذ إن Turbo64 انتقل في هذه الأثناء إلى GPL-3، 2. ومع عدد أكبر من النجوم على GitHub، يبدو aklomp-base64 أكثر قابلية للاستمرار مستقبلًا، 3. يوفّر aklomp-base64 واجهة برمجة تطبيقات أفضل قليلًا (مع أن هذا أمر قد يُعدّ ذاتيًا)، و4. لا يتطلب aklomp-base64 منا الالتفاف على الأخطاء (مثل التهيئة غير الآمنة للخيوط). ملاحظة: يرفض aklomp-base64 قيم base64 من دون حشو، بينما يفك Turbo-Base64 ترميزها على أساس أفضل جهد. وتترك RFC-4648 مسألة ما إذا كان الحشو إلزاميًا أم لا مفتوحة، لكن هذا قد يشكّل، بحسب السياق، تغييرًا سلوكيًا ينبغي الانتباه إليه. #54119 (Mikhail Koviazin).

إصلاح خلل (سلوك غير صحيح يلاحظه المستخدم في إصدار مستقر رسمي)

  • إصلاح REPLACE/MOVE PARTITION مع zero-copy replication (ملاحظة: “zero-copy replication” ميزة تجريبية) #54193 (Alexander Tokmakov).
  • إصلاح أقفال zero copy مع الروابط الصلبة (ملاحظة: “zero-copy replication” ميزة تجريبية) #54859 (Alexander Tokmakov).
  • إصلاح المخلفات المرتبطة بـ zero copy (ملاحظة: “zero-copy replication” ميزة تجريبية) #54550 (Alexander Tokmakov).
  • تمرير مهلة retry الخاصة بـ HTTP بوحدة المللي ثانية (إذ كانت غير صحيحة سابقًا). #54438 (Duc Canh Le).
  • إصلاح رسالة error مضللة في OUTFILE مع CapnProto/Protobuf #52870 (Kruglov Pavel).
  • إصلاح تقارير الملخص مع parallel replicas وLIMIT #53050 (Raúl Marín).
  • إصلاح throttling لعمليات BACKUP من/إلى S3 (في حال عدم استخدام النسخ native)، وكذلك في بعض المواضع الأخرى #53336 (Azat Khuzhin).
  • إصلاح IO throttling أثناء نسخ الأدلة بالكامل #53338 (Azat Khuzhin).
  • إصلاح: قد تؤدي إجراءات الشرط المنقولة إلى prewhere إلى فقدان column #53492 (Yakov Olkhovskiy).
  • إصلاح error داخلي عند الاستبدال بأجزاء متطابقة على مستوى البايت #53735 (Pedro Riera).
  • إصلاح: اشتراط وجود columns المشاركة في interpolate expression #53754 (Yakov Olkhovskiy).
  • إصلاح تهيئة Cluster Discovery + إعداد نقاط الفشل في config #54113 (vdimir).
  • إصلاح المشكلات في accurateCastOrNull #54136 (Salvatore Mesoraca).
  • إصلاح المفتاح الأساسي Nullable مع المعدِّل FINAL #54164 (Amos Bird).
  • إصلاح error كان يمنع Insertion لبيانات جديدة في materialized view مُنسَّخ عند وجود بيانات مكررة. #54184 (Pedro Riera).
  • إصلاح: السماح بـ IPv6 مع bloom filter #54200 (Yakov Olkhovskiy).
  • إصلاح احتمال عدم تطابق النوع مع IPv4 #54212 (Bharat Nallan).
  • إصلاح system.data_skipping_indices للفهارس المُعاد إنشاؤها #54225 (Artur Malchanau).
  • إصلاح تعارض الأسماء في multiple join rewriter v2 #54240 (Tao Wang).
  • إصلاح أخطاء غير متوقعة في system.errors بعد join #54306 (vdimir).
  • إصلاح isZeroOrNull(NULL) #54316 (flynn).
  • إصلاح: النسخ المتماثلة المتوازية عبر Distributed مع prefer_localhost_replica = 1 #54334 (Igor Nikonov).
  • إصلاح خطأ منطقي في الدمج العمودي + ReplacingMergeTree + تنظيف optimize #54368 (alesapin).
  • إصلاح الخطأ المحتمل URI contains invalid characters في دالة الجدول s3 #54373 (Kruglov Pavel).
  • إصلاح segfault في تحسين AST للدالة arrayExists #54379 (Nikolay Degterinsky).
  • التحقق من تجاوز السعة قبل الجمع في الدالة analysisOfVariance #54385 (Antonio Andelic).
  • إعادة إنتاج الخطأ وإصلاحه في removeSharedRecursive #54430 (Sema Checherinda).
  • إصلاح احتمال ظهور نتيجة غير صحيحة مع SimpleAggregateFunction في PREWHERE و FINAL #54436 (Azat Khuzhin).
  • إصلاح تصفية الأجزاء باستخدام indexHint لغير المحلل #54449 (Azat Khuzhin).
  • إصلاح projections التجميعية ذات الحالات المطبّعة #54480 (Amos Bird).
  • clickhouse-local: شيء يتعلق بمعلمة multiquery #54498 (CuiShuoGuo).
  • يدعم clickhouse-local وسيطة سطر الأوامر --database #54503 (vdimir).
  • إصلاح خطأ parsing محتمل في صيغ -WithNames عند تعطيل input_format_with_names_use_header #54513 (Kruglov Pavel).
  • إصلاح حالة نادرة من الخطأ CHECKSUM_DOESNT_MATCH #54549 (alesapin).
  • إصلاح فرز UNION ALL للنتائج المرتبة مسبقًا #54564 (Vitaly Baranov).
  • إصلاح تثبيت snapshot في Keeper #54572 (Antonio Andelic).
  • إصلاح حالة تسابق في ColumnUnique #54575 (Nikita Taranov).
  • فهرس Annoy/Usearch: إصلاح LOGICAL_ERROR أثناء البناء باستخدام قيم default #54600 (Robert Schulze).
  • إصلاح serialization الخاصة بـ ColumnDecimal #54601 (Nikita Taranov).
  • إصلاح استدلال المخطط لوظائف *Cluster لأسماء الأعمدة التي تحتوي على مسافات #54635 (Kruglov Pavel).
  • إصلاح استخدام البنية من جداول الإدراج في حالة القيم الافتراضية وأعمدة insert الصريحة #54655 (Kruglov Pavel).
  • إصلاح: تجنّب استخدام مطابقة Regex، التي قد تتضمن alternation، كشرط للمفتاح. #54696 (Yakov Olkhovskiy).
  • إصلاح ReplacingMergeTree مع vertical merge والتنظيف #54706 (SmitaRKulkarni).
  • إصلاح virtual columns التي كانت تعرض قيماً غير صحيحة بعد ORDER BY #54811 (Michael Kolupaev).
  • إصلاح تصفية الأجزاء باستخدام indexHint عند عدم استخدام analyzer #54825 #54449 (Azat Khuzhin).
  • إصلاح segfault في Keeper أثناء إيقاف التشغيل #54841 (Antonio Andelic).
  • إصلاح Invalid number of rows in Chunk في MaterializedPostgreSQL #54844 (Kseniia Sumarokova).
  • نقل إعدادات format المتقادمة إلى قسم منفصل #54855 (Kruglov Pavel).
  • إعادة بناء minmax_count_projection عند تعديل partition key #54943 (Amos Bird).
  • إصلاح cast خاطئ إلى ColumnVector<Int128> في الدالة if #55019 (Kruglov Pavel).
  • منع إرفاق parts من جداول تحتوي على projections أو indices مختلفة #55062 (János Benjamin Antal).
  • تخزين NULL في خريطة النتيجة scalar عندما تكون نتيجة subquery فارغة #52240 (vdimir).
  • إصلاح أن FINAL ينتج ranges قراءة غير صالحة في حالة نادرة #54934 (Nikita Taranov).
  • إصلاح: insert quorum بدون retries في keeper #55026 (Igor Nikonov).
  • إصلاح الحالة البسيطة مع Nullable #55030 (Pedro Riera).

إصدار ClickHouse 23.8 LTS، 2023-08-31. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • إذا كان disk الديناميكي يحتوي على اسم، فيجب تحديده بالشكل disk = disk(name = 'disk_name', …) ضمن وسائط دالة disk. في الإصدار السابق، كان يمكن تحديده بالشكل disk = disk_<disk_name>(...)، لكن هذا لم يعد مدعومًا. #52820 (Kseniia Sumarokova).
  • سيُنشئ clickhouse-benchmark اتصالات بالتوازي عند استدعائه باستخدام --concurrency بقيمة أكبر من واحد. في السابق، كان غير قابل للاستخدام إذا شغّلته مع 1000 اتصال متزامن من أوروبا إلى الولايات المتحدة. كما صُحِّح حساب QPS للاتصالات ذات زمن الوصول المرتفع. تغيير غير متوافق مع الإصدارات السابقة: أُزيل خيار إخراج JSON في clickhouse-benchmark. إذا كنت قد استخدمت هذا الخيار، فيمكنك أيضًا استخراج البيانات من system.query_log بتنسيق JSON كحل بديل. #53293 (Alexey Milovidov).
  • أُزيل العمود microseconds من system.text_log، وأُزيل العمود milliseconds من system.metric_log، لأنهما أصبحا زائدين عن الحاجة في وجود العمود event_time_microseconds. #53601 (Alexey Milovidov).
  • أُهملت ميزة ذاكرة التخزين المؤقت للبيانات الوصفية. فهي تجريبية ولم نستخدمها مطلقًا. وهذه الميزة خطيرة: #51182. أُزيل جدول النظام system.merge_tree_metadata_cache. لا تزال ذاكرة التخزين المؤقت للبيانات الوصفية متاحة في هذا الإصدار، لكنها ستُزال قريبًا. وهذا يُغلق #39197. #51303 (Alexey Milovidov).
  • تعطيل دعم 3DES في اتصالات TLS. #52893 (Kenji Noguchi).

ميزة جديدة

  • استيراد مباشر من أرشيفات zip/7z/tar. مثال: file('*.zip :: *.csv'). #50321 (nikitakeba).
  • إضافة عمود ptr إلى system.trace_log من أجل trace_type = 'MemorySample'. يحتوي هذا العمود على عنوان التخصيص. أُضيفت الدالة flameGraph التي يمكنها إنشاء flamegraph يوضّح الذاكرة المخصّصة وغير المُحرَّرة. إعادة العمل على #38391. #45322 (Nikolai Kochetov).
  • أُضيفت table function azureBlobStorageCluster. مجموعة الميزات المدعومة مشابهة جدًا لـ table function s3Cluster. #50795 (SmitaRKulkarni).
  • السماح باستخدام cluster وclusterAllReplicas وremote وremoteSecure دون اسم table في المشكلة #50808. #50848 (Yangkuan Liu).
  • system table لمراقبة Kafka consumers. #50999 (Ilya Golshtein).
  • أُضيف الإعداد max_sessions_for_user. #51724 (Alexey Gerasimchuck).
  • دوال جديدة toUTCTimestamp/fromUTCTimestamp لتعمل بالطريقة نفسها التي تعمل بها to_utc_timestamp/from_utc_timestamp في spark. #52117 (KevinyhZou).
  • إضافة دوال جديدة structureToCapnProtoSchema/structureToProtobufSchema لتحويل بنية ClickHouse table إلى schema بصيغة CapnProto/Protobuf. السماح بإدخال/إخراج البيانات بصيغة CapnProto/Protobuf دون format schema خارجي باستخدام schema مُولَّد تلقائيًا من بنية table (ويُتحكَّم فيه عبر الإعدادات format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema). كما يمكن تصدير الـ schema المُولَّد تلقائيًا أثناء الإدخال/الإخراج باستخدام الإعداد output_format_schema. #52278 (Kruglov Pavel).
  • حقل جديد query_cache_usage في system.query_log يوضّح الآن ما إذا كان query cache قد استُخدم وكيف استُخدم. #52384 (Robert Schulze).
  • إضافة دالتين جديدتين startsWithUTF8 وendsWithUTF8. #52555 (李扬).
  • السماح بعدد متغير من columns في TSV/CustomSeparated/JSONCompactEachRow، وجعل schema inference يعمل مع عدد متغير من columns. إضافة الإعدادات input_format_tsv_allow_variable_number_of_columns وinput_format_custom_allow_variable_number_of_columns وinput_format_json_compact_allow_variable_number_of_columns. #52692 (Kruglov Pavel).
  • أُضيفت queries ‏SYSTEM STOP/START PULLING REPLICATION LOG (لاختبار ReplicatedMergeTree). #52881 (Alexander Tokmakov).
  • السماح بتنفيذ الدوال الثابتة غير deterministic في mutations على initiator. #53129 (Anton Popov).
  • إضافة تنسيق الإدخال One الذي لا يقرأ أي بيانات ويُرجع دائمًا صفًا واحدًا مع العمود dummy من النوع UInt8 والقيمة 0 مثل system.one. ويمكن استخدامه مع الأعمدة الافتراضية _file/_path لسرد الملفات في دوال الجداول file/s3/url/hdfs/etc دون قراءة أي بيانات. #53209 (Kruglov Pavel).
  • إضافة الدالة tupleConcat. ويغلق #52759. #53239 (Nikolay Degterinsky).
  • دعم العملية TRUNCATE DATABASE. #53261 (Bharat Nallan).
  • إضافة الإعداد max_threads_for_indexes لتقييد عدد خيوط التنفيذ المستخدمة في معالجة المفتاح الأساسي. #53313 (jorisgio).
  • إعادة إضافة دوال SipHash المزوّدة بمفاتيح. #53525 (Salvatore Mesoraca).
  • (#52755 , #52895) إضافة الدوال arrayRotateLeft, arrayRotateRight, arrayShiftLeft, arrayShiftRight. #53557 (Mikhail Koviazin).
  • إضافة العمود name إلى system.clusters كاسم مستعار للعمود cluster. #53605 (irenjj).
  • تتيح لوحة المعلومات المتقدمة الآن التحرير المجمّع (حفظ/تحميل). #53608 (Alexey Milovidov).
  • تتيح لوحة المعلومات المتقدمة الآن خيار تكبير المخططات وتحريكها. #53622 (Alexey Milovidov).
  • أُضيف دعم جمع المصفوفات وطرحها: [5,2] + [1,7]. ولم يُنفَّذ القسمة والضرب بسبب الالتباس بين الضرب عنصرًا بعنصر والضرب القياسي للوسائط. ويغلق #49939. #52625 (Yarik Briukhovetskyi).
  • إضافة دعم استخدام السلاسل النصية الحرفية كأسماء للجداول. ويغلق #52178. #52635 (hendrik-m).

الميزة التجريبية

  • إضافة محرك جدول جديد S3Queue لاستيراد البيانات المتدفقة من S3. يُغلق #37012. #49086 (s-kat). وهو غير جاهز للاستخدام. لا تستخدمه.
  • تمكين القراءة المتوازية من النسخ المتماثلة عبر جدول موزّع. ذو صلة بـ #49708. #53005 (Igor Nikonov).
  • إضافة دعم تجريبي لـ HNSW بوصفه طريقةً للبحث التقريبي عن الجيران. #53447 (Davit Vardanyan). هذا مخصّص حاليًا لمن يواصلون العمل على التنفيذ. لا تستخدمه.

تحسين الأداء

  • دعم pushdown لمرشحات Parquet. أي عند قراءة ملفات Parquet، تُتخطى مجموعات الصفوف (أجزاء من الملف) استنادًا إلى شرط WHERE وقيم الحد الأدنى/الحد الأقصى في كل عمود. وبوجه خاص، إذا كان الملف مرتبًا تقريبًا حسب عمود معيّن، فستكون الاستعلامات التي تُصفّي نطاقًا صغيرًا من ذلك العمود أسرع بكثير. #52951 (Michael Kolupaev).
  • تحسين قراءة مجموعات الصفوف الصغيرة في Parquet عبر تجميعها معًا. يُغلق #53069. #53281 (Kruglov Pavel).
  • تحسين count عند القراءة من الملفات في معظم تنسيقات الإدخال. يُغلق #44334. #53637 (Kruglov Pavel).
  • استخدام التصفية حسب الملف/المسار قبل القراءة في table functions ‏url/file/hdfs. #53529 (Kruglov Pavel).
  • تفعيل الترجمة البرمجية الفورية JIT على AArch64 وPowerPC وSystemZ وRISC-V. #38217 (Maksim Kita).
  • إضافة الإعداد rewrite_count_distinct_if_with_count_distinct_implementation لإعادة كتابة countDistinctIf باستخدام count_distinct_implementation. يُغلق #30642. #46051 (flynn).
  • تسريع دمج حالات aggregate functions ‏uniq وuniqExact من خلال موازاة التحويل قبل الدمج. #50748 (Jiebin Sun).
  • تحسين أداء aggregation لمفتاح String قابل لـ NULL عند استخدام عدد كبير من المفاتيح متغيرة الطول. #51399 (LiuNeng).
  • إضافة مرحلة في Analyzer لتحسين مرشح الوقت باستخدام preimage. تُظهر تجارب الأداء لـ SSB على جهاز ICX ‏(معالج Intel Xeon Platinum 8380، ‏80 نواة، ‏160 خيطًا) أن هذا التغيير قد يحقق تحسنًا بنسبة 8.5% في المتوسط الهندسي لـ QPS عند تفعيل Analyzer التجريبي. #52091 (Zhiguo Zhou).
  • تحسين الدمج إذا كانت جميع مجموعات hash أحادية المستوى في الدالة uniqExact ‏(COUNT DISTINCT). #52973 (Jiebin Sun).
  • محرك الجداول Join: عدم استنساخ بنية بيانات hash join مع جميع الأعمدة. #53046 (Duc Canh Le).
  • تنفيذ input format أصلي لـ ORC من دون مكتبة “apache arrow” لتحسين الأداء. #53324 (李扬).
  • ستطلب لوحة المعلومات من الخادم ضغط البيانات، وهو ما يفيد عند التعامل مع نطاقات زمنية كبيرة عبر اتصالات إنترنت بطيئة. على سبيل المثال، قد يبلغ حجم chart واحد يحتوي على 86400 نقطة 1.5 ميجابايت بدون ضغط و60 كيلوبايت بعد الضغط باستخدام br. #53569 (Alexey Milovidov).
  • تحسين الاستفادة من thread pool لعمليات BACKUP وRESTORE. #53649 (Nikita Mikhaylov).
  • تحميل البيانات الوصفية لـ filesystem cache عند بدء التشغيل بالتوازي. يُضبط ذلك عبر إعداد cache المسمى load_metadata_threads (default: 1). ذو صلة بـ #52037. #52943 (Kseniia Sumarokova).
  • تحسين move_primary_key_columns_to_end_of_prewhere. #53337 (Han Fei).
  • يحسّن هذا التفاعل مع ClickHouse Keeper. سابقًا، كان بإمكان المستدعي تسجيل callback الخاصة بـ watch نفسها عدة مرات. في هذه الحالة، كان كل entry يستهلك ذاكرة، كما كانت callback نفسها تُستدعى عدة مرات، وهو ما لم يكن منطقيًا كثيرًا. ولتفادي ذلك، كان على المستدعي إضافة بعض المنطق لعدم إضافة watch نفسها عدة مرات. مع هذا التغيير، تُجرى deduplication داخليًا إذا مُرّرت callback الخاصة بـ watch عبر shared_ptr. #53452 (Alexander Gololobov).
  • تخزين عدد rows في الملفات مؤقتًا لأغراض count في دوال file/s3/url/hdfs/azure. يمكن تمكين cache أو تعطيلها عبر تعيين use_cache_for_count_from_files (مُمكّنة افتراضيًا). استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/53637. #53692 (Kruglov Pavel).
  • ستؤدي إدارة threads بعناية أكبر إلى تحسين سرعة S3 table function عند التعامل مع عدد كبير من الملفات بأكثر من ~25%. #53668 (pufit).

تحسينات

  • أُضيف الإعداد stderr_reaction للتحكم في الإجراء المتخذ (none أو log أو throw) عندما تحتوي stderr الخاصة بالأمر الخارجي على بيانات. وهذا يُسهّل تصحيح أخطاء الأوامر الخارجية. #43210 (Amos Bird).
  • أُضيف العمود partition إلى system part_log وإلى جدول الدمج. #48990 (Jianfei Hu).
  • أصبح بالإمكان الآن تهيئة أحجام ذاكرات التخزين المؤقت للاستعلامات وmmap و(index) uncompressed/mark ديناميكيًا أثناء التشغيل، من دون إعادة تشغيل الخادم. #51446 (Robert Schulze).
  • إذا أُنشئ القاموس بمفتاح مركب، فسيُختار تلقائيًا متغير التخطيط “complex key”. #49587 (xiebin).
  • أُضيف الإعداد use_concurrency_control لتحسين اختبار ميزة التحكم الجديدة في التزامن. #49618 (Alexey Milovidov).
  • أُضيفت اقتراحات للأسماء المكتوبة بشكل خاطئ لقواعد البيانات والجداول. #49801 (Yarik Briukhovetskyi).
  • أثناء قراءة ملفات صغيرة من HDFS باستخدام Gluten، تبيّن أن ذلك يستغرق وقتًا أطول مقارنةً بتنفيذ query مباشرةً عبر Spark. وقد عالجنا ذلك. #50063 (KevinyhZou).
  • كان هناك عدد كبير جدًا من سجلات error غير المفيدة بعد انتهاء صلاحية الجلسة، ولم يكن ذلك مرغوبًا. #50171 (helifu).
  • أُضيفت جلسات ZooKeeper احتياطية محددة المدة. كما أُصلح العمود index في system.zookeeper_connection لعناوين DNS. #50424 (Anton Kozlov).
  • أُضيفت إمكانية تسجيل log عند بلوغ max_partitions_per_insert_block. #50948 (Sean Haynes).
  • أُضيفت مجموعة من الأوامر المخصصة إلى clickhouse-keeper-client (بشكل أساسي لتسهيل تصحيح الأخطاء في ClickHouse). #51117 (pufit).
  • تم تحديث التحقق من connection string في table function ‏azureBlobStorage، لأن connection string التي تحتوي على “sas” لا تبدأ دائمًا بـ endpoint الافتراضية. كما تم تحديث عنوان URL الخاص بالاتصال ليشمل token ‏“sas” بعد إضافة Container الخاصة بـ Azure إلى عنوان URL. #51141 (SmitaRKulkarni).
  • أُصلح وصف مجموعات التصفية في خوارزمية JOIN ‏full_sorting_merge. #51329 (Tanay Tummalapalli).
  • أُصلح استهلاك الذاكرة في Aggregator عندما تكون قيمة max_block_size كبيرة جدًا. #51566 (Nikita Taranov).
  • أُضيف الأمر SYSTEM SYNC FILESYSTEM CACHE. يقارن هذا الأمر بين الحالة الموجودة في الذاكرة لذاكرة التخزين المؤقت لنظام الملفات وما هو موجود على القرص، ويُصلح الحالة الموجودة في الذاكرة عند الحاجة. ولا يلزم ذلك إلا إذا كنت تُجري تدخلات يدوية على البيانات الموجودة على القرص، وهو أمر غير مُوصى به بشدة. #51622 (Kseniia Sumarokova).
  • جرت محاولة لإنشاء proxy resolver عام لـ CH مع الحفاظ على التوافق مع الإصدارات السابقة لـ proxy resolver الموجود في إعدادات S3 storage. #51749 (Arthur Passos).
  • دعم قراءة الأعمدة الفرعية لـ Tuple من دوال الجداول file/s3/hdfs/url/azureBlobStorage. #51806 (Kruglov Pavel).
  • تُرجِع الدالة arrayIntersect الآن القيم بالترتيب المطابق للوسيطة الأولى. يُغلق #27622. #51850 (Yarik Briukhovetskyi).
  • إضافة استعلامات جديدة تتيح إنشاء/حذف كيانات الوصول في مخزن وصول محدد أو نقل كيانات الوصول من مخزن وصول إلى آخر. #51912 (pufit).
  • جعل استعلامات ALTER TABLE FREEZE غير مُكرَّرة في محرك قاعدة البيانات Replicated. #52064 (Mike Kot).
  • أُضيفت إمكانية إجراء flush لجداول النظام عند الإيقاف غير المتوقع. #52174 (Alexey Gerasimchuck).
  • إصلاح الحالة التي كانت فيها دالة الجدول s3 ترفض العمل مع عناوين URL الموقَّعة مسبقًا. يُغلق #50846. #52310 (chen).
  • إضافة العمود name كاسم مستعار لـ event وmetric في الجدولين system.events وsystem.metrics. يُغلق #51257. #52315 (chen).
  • أُضيف دعم الصياغة CREATE UNIQUE INDEX في المحلل بوصفها no-op لتحسين التوافق مع SQL. الفهرس UNIQUE غير مدعوم. اضبط create_index_ignore_unique = 1 لتجاهل الكلمة المفتاحية UNIQUE في الاستعلامات. #52320 (Ilya Yatsishin).
  • إضافة دعم وحدات الماكرو المعرَّفة مسبقًا ({database} و{table}) في بعض إعدادات Kafka engine: topic وconsumer وclient_id وغيرها. #52386 (Yury Bogomolov).
  • تعطيل تحديث filesystem cache أثناء backup/restore. يجب ألا يتم تحديث filesystem cache أثناء backup/restore، إذ يبدو أن ذلك يبطئ العملية فقط من دون فائدة (لأن الأمر BACKUP قد يقرأ كمية كبيرة من البيانات، ولا جدوى من وضع كل هذه البيانات في filesystem cache ثم إزاحتها مباشرة). #52402 (Vitaly Baranov).
  • يتيح إعداد S3 endpoint استخدامه انطلاقًا من الجذر، مع إلحاق ’/’ تلقائيًا عند الحاجة. #47809. #52600 (xiaolei565).
  • بالنسبة إلى clickhouse-local، السماح بالخيارات الموضعية وتهيئة إعدادات UDF العامة (user_scripts_path وuser_defined_executable_functions_config). #52643 (Yakov Olkhovskiy).
  • يتضمن system.asynchronous_metrics الآن المقياسين “QueryCacheEntries” و”QueryCacheBytes” لفحص query cache. #52650 (Robert Schulze).
  • أُضيفت إمكانية استخدام المعامل s3_storage_class في عبارة SETTINGS ضمن statement‏ BACKUP لعمليات النسخ الاحتياطي إلى S3. #52658 (Roman Vasin).
  • إضافة الأداة المساعدة print-backup-info.py التي تحلل ملف البيانات الوصفية للنسخة الاحتياطية وتطبع معلومات عنها. #52690 (Vitaly Baranov).
  • يُغلق #49510. حاليًا، أسماء قواعد البيانات والجداول لدينا حساسة لحالة الأحرف، لكن أدوات BI تستعلم من information_schema أحيانًا بأحرف صغيرة وأحيانًا بأحرف كبيرة. لهذا السبب لدينا قاعدة البيانات information_schema التي تحتوي على جداول بأحرف صغيرة مثل information_schema.tables، ولدينا قاعدة البيانات INFORMATION_SCHEMA التي تحتوي على جداول بأحرف كبيرة مثل INFORMATION_SCHEMA.TABLES. لكن بعض الأدوات تستعلم عن INFORMATION_SCHEMA.tables وinformation_schema.TABLES. والحل المقترح هو تكرار كل من الجداول المكتوبة بأحرف صغيرة وكبيرة في قاعدتَي البيانات information_schema وINFORMATION_SCHEMA. #52695 (Yarik Briukhovetskyi).
  • يتمتع الاستعلام CHECK TABLE الآن بأداء أفضل وقابلية استخدام أعلى (يرسل تحديثات التقدم، ويمكن إلغاؤه). #52745 (vdimir).
  • إضافة دعم modulo وintDiv وintDivOrZero لـ tuples عبر توزيعها على عناصر الـ tuple. #52758 (Yakov Olkhovskiy).
  • البحث عن ملفات yaml وyml الافتراضية للإعدادات في clickhouse-client بعد xml. #52767 (Alexey Milovidov).
  • عند الدمج في إعدادات لا يكون جذرها clickhouse، كانت ملفات الإعدادات ذات اسم عقدة الجذر المختلف تُتجاوز ببساطة من دون إطلاق استثناء. #52770 (Yakov Olkhovskiy).
  • أصبح من الممكن الآن تحديد الحد الأدنى (memory_profiler_sample_min_allocation_size) والحد الأقصى (memory_profiler_sample_max_allocation_size) لحجم التخصيصات التي سيجري تتبعها باستخدام sampling memory profiler. #52779 (alesapin).
  • إضافة الإعداد precise_float_parsing للتبديل بين أساليب تحليل قيم float (سريع/دقيق). #52791 (Andrey Zvonov).
  • استخدام نفس المسارات الافتراضية لـ clickhouse-keeper (الرابط الرمزي) كما في clickhouse-keeper (الملف التنفيذي). #52861 (Vitaly Baranov).
  • تحسين رسالة الخطأ الخاصة بـ table function remote. يُغلق #40220. #52959 (jiyoungyoooo).
  • أُضيفت إمكانية تحديد storage policy مخصصة في عبارة SETTINGS ضمن استعلامات RESTORE. #52970 (Victor Krasnov).
  • إضافة إمكانية تقييد طلبات S3 أثناء عمليات النسخ الاحتياطي (أصبحت أوامر BACKUP وRESTORE الآن تراعي s3_max_[get/put]_[rps/burst]). #52974 (Daniel Pozo Escalona).
  • إضافة إعدادات لتجاهل عبارة ON CLUSTER في الاستعلامات الخاصة بإدارة الدوال المعرفة من قبل المستخدم المتماثلة أو كيانات التحكم في الوصول ذات التخزين المتماثل. #52975 (Aleksei Filatov).
  • إجراءات EXPLAIN لخطوة JOIN. #53006 (Maksim Kita).
  • جعل hasTokenOrNull وhasTokenCaseInsensitiveOrNull يعيدان null عند كون needles فارغة. #53059 (ltrk2).
  • إتاحة تقييد المسارات المسموح بها لذاكرات التخزين المؤقت لنظام الملفات. يفيد ذلك أساسًا مع الأقراص الديناميكية. إذا تم تحديد filesystem_caches_path في تهيئة الخادم، فستُقيَّد جميع مسارات ذواكر التخزين المؤقت لنظام الملفات بهذا الدليل. على سبيل المثال، إذا كان path في تهيئة cache مسارًا نسبيًا، فسيُوضَع داخل filesystem_caches_path؛ وإذا كان path في تهيئة cache مسارًا مطلقًا، فسيُشترط أن يكون داخل filesystem_caches_path. وإذا لم يتم تحديد filesystem_caches_path في التهيئة، فسيبقى السلوك كما كان في الإصدارات السابقة. #53124 (Kseniia Sumarokova).
  • تمت إضافة مجموعة من الأوامر المخصّصة (ومعظمها لتسهيل تصحيح أخطاء ClickHouse). #53127 (pufit).
  • إضافة معلومات تشخيصية عن اسم الملف أثناء استنتاج المخطط، ما يساعد عند معالجة ملفات متعددة باستخدام globs. #53135 (Alexey Milovidov).
  • سيحمّل العميل الاقتراحات باستخدام الاتصال الرئيسي إذا لم يكن مسموحًا للاتصال الثاني بإنشاء جلسة. #53177 (Alexey Gerasimchuck).
  • إضافة بند EXCEPT إلى الاستعلام SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM]، على سبيل المثال SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP. #53280 (Nikolay Degterinsky).
  • تغيير القيمة الافتراضية لـ max_concurrent_queries من 100 إلى 1000. لا بأس بوجود عدد كبير من الاستعلامات المتزامنة إذا لم تكن ثقيلة وكانت في الغالب تنتظر الشبكة. ملاحظة: لا تخلط بين الاستعلامات المتزامنة وQPS؛ فعلى سبيل المثال، يمكن لخادم ClickHouse تنفيذ عشرات الآلاف من QPS مع أقل من 100 استعلام متزامن. #53285 (Alexey Milovidov).
  • تقييد عدد عمليات الدمج الخلفية المتزامنة لتحسين الأقسام. #53405 (Duc Canh Le).
  • تمت إضافة الإعداد allow_moving_table_directory_to_trash، الذي يتيح تجاهل الخطأ Directory for table data already exists عند النسخ المتماثل لقاعدة بيانات Replicated أو استعادتها. #53425 (Alexander Tokmakov).
  • إذا ضُبطت إعدادات الخادم asynchronous_metrics_update_period_s وasynchronous_heavy_metrics_update_period_s خطأً على القيمة 0، فسيتعامل النظام الآن مع ذلك بسلاسة بدلًا من إنهاء التطبيق. #53428 (Robert Schulze).
  • أصبح خادم ClickHouse الآن يراعي حدود الذاكرة التي تتغير عبر cgroups عند إعادة تحميل تهيئته. #53455 (Robert Schulze).
  • إضافة إمكانية تعطيل flush لجداول Distributed عند DETACH أو DROP أو إيقاف الخادم. #53501 (Azat Khuzhin).
  • تدعم الدالة domainRFC الآن IPv6 بين أقواس مربعة. #53506 (Chen768959).
  • استخدام timeout أطول لطلبات S3 CopyObject، والتي تُستخدم في النسخ الاحتياطية. #53533 (Michael Kolupaev).
  • أُضيف إعداد على مستوى الخادم aggregate_function_group_array_max_element_size. يُستخدم هذا الإعداد لتقييد حجم Array لدالة groupArray عند التسلسل. القيمة الافتراضية هي 16777215. #53550 (Nikolai Kochetov).
  • أُضيفت SCHEMA كاسم مستعار لـ DATABASE لتحسين التوافق مع MySQL. #53587 (Daniël van Eeden).
  • أُضيفت مقاييس غير متزامنة للجداول في قاعدة بيانات النظام. على سبيل المثال، TotalBytesOfMergeTreeTablesSystem. يُغلق هذا #53603. #53604 (Alexey Milovidov).
  • لن يستخدم محرر SQL في واجهة Play ولوحة المعلومات Grammarly. #53614 (Alexey Milovidov).
  • وكإعدادات متقدمة على مستوى الخبراء، أصبح بالإمكان الآن (1) ضبط size&#95;ratio (أي الحجم النسبي للطابور المحمي) لذاكرات [index] mark/uncompressed cache، و(2) ضبط سياسة التخزين المؤقت لذاكرة index mark cache وذاكرة index uncompressed cache. #53657 (Robert Schulze).
  • أُضيف التحقق من معلومات العميل إلى Query packet في TCPHandler. #53673 (Alexey Gerasimchuck).
  • أُضيفت إعادة محاولة تحميل الأجزاء عند حدوث أخطاء في الشبكة أثناء التفاعل مع Microsoft Azure. #53750 (SmitaRKulkarni).
  • أصبحت تتبعات المكدس للاستثناءات، بما في ذلك استثناءات Materialized view، تنتقل الآن. #53766 (Ilya Golshtein).
  • إذا لم يتم تحديد hostname أو المنفذ، فسيحاول عميل keeper البحث عن connection string في ملف config.xml الخاص بـ ClickHouse. #53769 (pufit).
  • أُضيف حدث profile باسم PartsLockMicroseconds يُظهر عدد الميكروثواني التي نحتفظ خلالها بقفل أجزاء البيانات في عائلة محركات الجداول MergeTree. #53797 (alesapin).
  • أصبح حد إعادة الاتصال ضمن حدود RAFT قابلاً للضبط في keeper. ويمكن أن يساعد هذا الإعداد keeper على إعادة إنشاء الاتصال مع الأقران بسرعة أكبر إذا انقطع الاتصال الحالي. #53817 (Pengyuan Bian).
  • تُتجاهل المفاتيح الأجنبية في تعريفات الجداول لتحسين التوافق مع MySQL، بحيث لا يضطر المستخدم إلى إعادة كتابة SQL الخاص بجزء المفتاح الأجنبي. راجع #53380. #53864 (jsc0218).

تحسينات البناء/الاختبار/التغليف

  • لا تكشف الرموز من الملف التنفيذي لـ ClickHouse للرابط الديناميكي. قد يُصلح ذلك #43933. #47475 (Alexey Milovidov).
  • أضف الرابط الرمزي clickhouse-keeper-client إلى حزمة clickhouse-server. #51882 (Mikhail f. Shiryaev).
  • أضف https://github.com/elliotchance/sqltest إلى CI للإبلاغ عن مدى التوافق مع SQL 2016. #52293 (Alexey Milovidov).
  • رقِّ PRQL إلى 0.9.3. #53060 (Maximilian Roos).
  • تُصدَّر system tables من فحوصات CI إلى ClickHouse Cloud. #53086 (Alexey Milovidov).
  • تُرفع بيانات profile الخاصة بالمصرّف (-ftime-trace) إلى ClickHouse Cloud. #53100 (Alexey Milovidov).
  • سرِّع إصدارات Debug وTidy. #53178 (Alexey Milovidov).
  • سرِّع عملية build بإزالة كمٍّ هائل من المخلفات. كان أحد headers المُضمَّنة كثيرًا قد أفسده boost. #53180 (Alexey Milovidov).
  • أزل المزيد من المخلفات. #53182 (Alexey Milovidov).
  • كانت الدالة arrayAUC تستخدم templates ثقيلة في ++C — وتم الاستغناء عنها. #53183 (Alexey Milovidov).
  • كانت بعض وحدات الترجمة تُعاد بناؤها دائمًا بغضّ النظر عن ccache. تم العثور على السبب وإصلاحه. #53184 (Alexey Milovidov).
  • تُرفع بيانات profile الخاصة بالمصرّف (-ftime-trace) إلى ClickHouse Cloud. هذه هي المحاولة الثانية بعد #53100. #53213 (Alexey Milovidov).
  • صدِّر logs من CI في الاختبارات stateful إلى ClickHouse Cloud. #53351 (Alexey Milovidov).
  • صدِّر logs من CI في اختبارات stress. #53353 (Alexey Milovidov).
  • صدِّر logs من CI في اختبارات fuzzer. #53354 (Alexey Milovidov).
  • احتفظ بـ parameters البيئة في الأمر clickhouse start. يُصلح هذا #51962. #53418 (Mikhail f. Shiryaev).
  • استكمالًا لـ #53418. تحسينات صغيرة على install_check.py، مع إضافة اختبارات للتحقق من تمرير معاملات ENV بشكل صحيح إلى العملية الرئيسية عند تنفيذ init.d start. #53457 (Mikhail f. Shiryaev).
  • إعادة تنظيم إدارة الملفات في CMake لمنع التكرار المحتمل. على سبيل المثال، يتكرر indexHint.cpp في كلٍّ من dbms_sources وclickhouse_functions_sources. #53621 (Amos Bird).
  • ترقية snappy إلى 1.1.10. #53672 (李扬).
  • تحسين طفيف لعملية البناء في CMake عبر تنقية بعض التبعيات وإزالة بعض العناصر المكررة. تتضمن كل commit وصفًا موجزًا للتغييرات المُدخلة. #53759 (Amos Bird).

إصلاح خلل

  • لا تعِد تعيين فهرس Annoy (التجريبي) أثناء الإنشاء عند وجود أكثر من علامة واحدة #51325 (Tian Xinhui).
  • إصلاح استخدام الأدلة المؤقتة أثناء RESTORE #51493 (Azat Khuzhin).
  • إصلاح العمليات الحسابية الثنائية لـ Nullable(IPv4) #51642 (Yakov Olkhovskiy).
  • دعم نوعَي البيانات IPv4 وIPv6 كسمات للقواميس #51756 (Yakov Olkhovskiy).
  • إصلاح المجموع الاختباري لعلامات الضغط #51777 (SmitaRKulkarni).
  • إصلاح تفسير الفاصلة خطأً على أنها جزء من التاريخ والوقت في التحليل المرن لتنسيق CSV #51950 (Kruglov Pavel).
  • لا تطرح استثناءً عندما تكون لدالة UDF التنفيذية معاملات #51961 (Nikita Taranov).
  • إصلاح إعادة حساب skip indexes والإسقاطات في استعلامات ALTER DELETE #52530 (Anton Popov).
  • MaterializedMySQL: إصلاح الحلقة اللانهائية في ReadBuffer::read #52621 (Val Doroshchuk).
  • تحميل الاقتراحات فقط مع لهجة clickhouse #52628 (János Benjamin Antal).
  • تهيئة قناة ares وإتلافها عند الطلب. #52634 (Arthur Passos).
  • إصلاح التصفية حسب الأعمدة الافتراضية باستخدام تعبير OR #52653 (Azat Khuzhin).
  • إصلاح التعطل في الدالة tuple مع وسيطة عمود sparse واحدة #52659 (Anton Popov).
  • إصلاح named collections في العنقود #52687 (Al Korgun).
  • إصلاح قراءة عمود غير ضروري في حالة PREWHERE متعددة المراحل #52689 (Anton Popov).
  • إصلاح نتيجة الفرز غير المتوقعة عبر أعمدة متعددة عند استخدام ترتيب nulls first #52761 (copperybean).
  • إصلاح حالة تسابق بيانات في إعادة تهيئة Keeper #52804 (Antonio Andelic).
  • إصلاح فرز الأعمدة sparse مع Limit كبير #52827 (Anton Popov).
  • clickhouse-keeper: إصلاح تنفيذ الخادم باستخدام poll. #52833 (Andy Fiddaman).
  • جعل محلل regexp يتعرّف على مجموعات الالتقاط المسماة #52840 (Han Fei).
  • إصلاح احتمال حدوث assert في ~PushingAsyncPipelineExecutor في clickhouse-local #52862 (Kruglov Pavel).
  • إصلاح قراءة Nested(Array(LowCardinality(...))) الفارغة #52949 (Anton Popov).
  • أُضيفت اختبارات جديدة لـ session_log، وأُصلح عدم الاتساق بين تسجيل الدخول وتسجيل الخروج. #52958 (Alexey Gerasimchuck).
  • إصلاح تسرّب كلمة المرور في show create mysql table #52962 (Duc Canh Le).
  • تحويل تنسيق العمود sparse إلى التنسيق الكامل في CreateSetAndFilterOnTheFlyStep #53000 (vdimir).
  • إصلاح حالة تسابق نادرة عند حذف دليل بادئة المفتاح الفارغ في fs cache #53055 (Kseniia Sumarokova).
  • إصلاح قيام ZstdDeflatingWriteBuffer أحيانًا باقتطاع المخرجات #53064 (Michael Kolupaev).
  • إصلاح query_id في part_log مع استعلامات flush غير المتزامنة #53103 (Raúl Marín).
  • إصلاح خطأ محتمل من cache وهو “Read unexpected size” #53121 (Kseniia Sumarokova).
  • تعطيل مُرمّز Parquet الجديد #53130 (Alexey Milovidov).
  • إصلاح الاستثناء “Set غير جاهز” #53162 (Nikolai Kochetov).
  • إصلاح تهريب المحارف في محرك PostgreSQL #53250 (Nikolay Degterinsky).
  • جدول session_log تجريبي: أُضيفت اختبارات جديدة لـ session_log، وأُصلح عدم الاتساق بين تسجيل الدخول وتسجيل الخروج. #53255 (Alexey Gerasimchuck). وأُصلح أيضًا عدم الاتساق بين نجاح تسجيل الدخول وتسجيل الخروج #53302 (Alexey Gerasimchuck).
  • إصلاح إضافة فواصل زمنية أقل من الثانية إلى DateTime #53309 (Michael Kolupaev).
  • إصلاح الخطأ “Context has expired” في Dictionaries #53342 (Alexey Milovidov).
  • إصلاح تنسيق AST غير الصحيح للإسقاط العادي #53347 (Amos Bird).
  • منع استخدام use_structure_from_insertion_table_in_table_functions عند تنفيذ Scalar #53348 (flynn).
  • إصلاح تحميل قاعدة بيانات lazy أثناء تنفيذ استعلام select على system.table #53372 (SmitaRKulkarni).
  • أُصلحت system.data_skipping_indices في MaterializedMySQL #53381 (Filipp Ozinov).
  • إصلاح معالجة محرف الإرجاع carriage return المفرد في محرك تجزئة ملفات TSV #53407 (Kruglov Pavel).
  • إصلاح الخطأ Context has expired على النحو الصحيح #53433 (Michael Kolupaev).
  • إصلاح timeout_overflow_mode عند وجود استعلام فرعي في الطرف الأيمن من IN #53439 (Duc Canh Le).
  • إصلاح سلوك غير متوقع في #53152 #53440 (Zhiguo Zhou).
  • إصلاح خطأ parse في الدالة JSON_QUERY عندما يكون path مكوّنًا بالكامل من أرقام #53470 (KevinyhZou).
  • إصلاح الترتيب الخاطئ للأعمدة في الاستعلامات التي تستخدم FINAL المتوازي. #53489 (Nikolai Kochetov).
  • إصلاح SELECT من ReplacingMergeTree مع do_not_merge_across_partitions_select_final #53511 (Vasily Nemkov).
  • تفريغ طابور async insert أولًا عند إيقاف التشغيل #53547 (joelynch).
  • إصلاح تعطل في join على عمود sparse #53548 (vdimir).
  • إصلاح احتمال وجود UB في skipping index من نوع Set للدوال ذات الوسائط غير الصحيحة #53559 (Azat Khuzhin).
  • إصلاح احتمال وجود UB في inverted indexes (ميزة تجريبية) #53560 (Azat Khuzhin).
  • إصلاح: يأخذ تعبير interpolate عمود المصدر بدلًا من العمود الذي يحمل الاسم نفسه والمُشار إليه باسم مستعار من تعبير select. #53572 (Yakov Olkhovskiy).
  • إصلاح عدد granules المُستبعَدة في EXPLAIN PLAN index=1 #53616 (wangxiaobo).
  • التعامل بشكل صحيح مع totals وExtremes باستخدام DelayedSource #53644 (Antonio Andelic).
  • تعلّق cache الخاصة بـ prepared set في pipeline الخاصة بـ mutation #53645 (Nikolai Kochetov).
  • إصلاح خلل في mutations مع subcolumns من النوع JSON داخل predicates في استعلامات UPDATE وDELETE. #53677 (VanDarkholme7).
  • إصلاح filter pushdown لعملية join من نوع full_sorting_merge #53699 (vdimir).
  • محاولة إصلاح خلل متعلق بـ NULL::LowCardinality(Nullable(...)) NOT IN #53706 (Andrey Zvonov).
  • إصلاح: distinct المرتّب مع الأعمدة sparse #53711 (Igor Nikonov).
  • transform: معالجة العمود الافتراضي بشكل صحيح عند وجود صفوف متعددة #53742 (Salvatore Mesoraca).
  • إصلاح تعطّل fuzzer في parseDateTime #53764 (Robert Schulze).
  • MaterializedPostgreSQL: إصلاح استثناء غير مُلتقط في getCreateTableQueryImpl #53832 (Kseniia Sumarokova).
  • إصلاح احتمال حدوث segfault أثناء استخدام محرك PostgreSQL #53847 (Kseniia Sumarokova).
  • إصلاح الاسم المستعار named&#95;collection&#95;admin #54066 (Kseniia Sumarokova).

إصدار ClickHouse 23.7، 2023-07-27. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • إضافة نوع الوصول NAMED COLLECTION (الأسماء البديلة: USE NAMED COLLECTION، NAMED COLLECTION USAGE). هذا التغيير غير متوافق مع الإصدارات السابقة لأن نوع الوصول هذا معطّل افتراضيًا (لأن نوع الوصول الأب NAMED COLLECTION ADMIN معطّل افتراضيًا أيضًا). اقتُرح في #50277. للمنح، استخدم GRANT NAMED COLLECTION ON collection_name TO user أو GRANT NAMED COLLECTION ON * TO user، وللتمكن من منح هذه الصلاحيات، يلزم وجود named_collection_admin في config (وكان اسمه سابقًا named_collection_control، لذا سيبقى كاسم بديل). #50625 (Kseniia Sumarokova).
  • تصحيح خطأ مطبعي في اسم العمود last_removal_attemp_time ضمن system.parts. وأصبح اسمه الآن last_removal_attempt_time. #52104 (filimonov).
  • رفع version الخاص بـ distributed_ddl_entry_format_version إلى 5 افتراضيًا (مما يفعّل تمرير opentelemetry و initial_query_idd). ولن يتيح ذلك معالجة الإدخالات الموجودة لـ DDL الموزع بعد downgrade (لكن لاحظ أنه لا يُفترض عادةً وجود مثل هذه الإدخالات غير المعالجة). #52128 (Azat Khuzhin).
  • التحقق من البيانات الوصفية الخاصة بـ projection بالطريقة نفسها التي نتحقق بها من البيانات الوصفية العادية. قد يمنع هذا التغيير الخادم من بدء التشغيل إذا كان هناك جدول يحتوي على projection غير صالح. ومن الأمثلة على ذلك projection أنشأ أعمدة موضعية في PK (مثل projection p (select * order by 1, 4)، وهو غير مسموح به في PK الخاص بالجدول وقد يتسبب في تعطل أثناء insert/merge). احذف مثل هذه projections قبل التحديث. يعالج #52353. #52361 (Nikolai Kochetov).
  • أُزيلت الميزة التجريبية hashid بسبب خطأ. وكانت جودة التنفيذ محل شك منذ البداية، ولم تتجاوز المرحلة التجريبية. هذا يغلق #52406. #52449 (Alexey Milovidov).

ميزة جديدة

  • تمت إضافة محرك قاعدة البيانات Overlay لدمج عدة قواعد بيانات في قاعدة بيانات واحدة. كما تمت إضافة محرك قاعدة البيانات Filesystem لتمثيل دليل في نظام الملفات على هيئة مجموعة من الجداول المتاحة ضمنيًا، مع اكتشاف format وstructure تلقائيًا. ويتيح محرك قاعدة البيانات الجديد S3 التفاعل مع تخزين S3 بوضع القراءة فقط، من خلال تمثيل prefix على هيئة مجموعة من الجداول. كما يتيح محرك قاعدة البيانات الجديد HDFS التفاعل مع تخزين HDFS بالطريقة نفسها. #48821 (alekseygolub).
  • تمت إضافة دعم للأقراص الخارجية في Keeper لتخزين snapshots وlogs. #50098 (Antonio Andelic).
  • تمت إضافة دعم لأنماط globs لاختيار أدلة متعددة ({}). #50559 (Andrey Zvonov).
  • يمكن لـ Kafka connector جلب schema الخاصة بـ Avro من schema registry باستخدام basic authentication عبر credentials مرمّزة بصيغة URL. #49664 (Ilya Golshtein).
  • تمت إضافة الدالة arrayJaccardIndex التي تحسب معامل تشابه Jaccard بين مصفوفتين. #50076 (FFFFFFFHHHHHHH).
  • تمت إضافة عمود is_obsolete إلى system.settings والجداول المشابهة. يُغلق #50819. #50826 (flynn).
  • تم تنفيذ دعم للعناصر المشفرة في configuration file. وأضيفت إمكانية استخدام نص مشفر في العناصر الطرفية ضمن configuration file. ويُشفَّر النص باستخدام codecs التشفير من القسم <encryption_codecs>. #50986 (Roman Vasin).
  • أصبحت خوارزمية Grace Hash Join قابلة للتطبيق الآن على FULL وRIGHT JOIN أيضًا. #49483. #51013 (lgbo).
  • تمت إضافة query ‏SYSTEM STOP LISTEN لإنهاء أكثر سلاسة. يُغلق #47972. #51016 (Nikolay Degterinsky).
  • تمت إضافة خيارات input_format_csv_allow_variable_number_of_columns. #51273 (Dmitry Kardymon).
  • ميزة مملة أخرى: تمت إضافة الدالة substring_index، كما في Spark أو MySQL. #51472 (李扬).
  • تمت إضافة system table باسم jemalloc_bins لعرض إحصاءات bins الخاصة بـ jemalloc. Example: SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10. استمتعوا. #51674 (Alexander Gololobov).
  • تمت إضافة format ‏RowBinaryWithDefaults مع بايت إضافي قبل كل column كعلامة لاستخدام default value الخاصة بالعمود. يُغلق #50854. #51695 (Kruglov Pavel).
  • تمت إضافة الإعداد default_temporary_table_engine. وهو مماثل لـ default_table_engine، ولكن للجداول المؤقتة. #51292. #51708 (velavokr).
  • أُضيفت الدالتان الجديدتان initcap وinitcapUTF8، اللتان تحوّلان الحرف الأول من كل كلمة إلى حرف كبير وبقية الأحرف إلى أحرف صغيرة. #51735 (Dmitry Kardymon).
  • أصبح الأمر CREATE TABLE يدعم الآن صياغة PRIMARY KEY ضمن تعريف العمود. وتُضاف الأعمدة إلى الفهرس الأساسي بنفس الترتيب الذي تُعرَّف به. #51881 (Ilya Yatsishin).
  • أُضيفت إمكانية استخدام محددات تنسيق التاريخ والوقت في أسماء ملفات السجل وملفات سجل الأخطاء، سواء في ملفات الإعداد (وسما log وerrorlog) أو في وسيطات سطر الأوامر (--log-file و--errorlog-file). #51945 (Victor Krasnov).
  • أُضيفت إحصائية Peak Memory Usage إلى ترويسات HTTP. #51946 (Dmitry Kardymon).
  • أُضيفت الدوال الجديدة hasSubsequence (+إصدارات CaseInsensitive وUTF8) لمطابقة التتابعات الجزئية في السلاسل النصية. #52050 (Dmitry Kardymon).
  • أُضيف array_agg بوصفه اسمًا بديلًا لـ groupArray للتوافق مع PostgreSQL. ويغلق ذلك #52100. ### إضافة توثيقية للتغييرات الظاهرة للمستخدم. #52135 (flynn).
  • أُضيف any_value بوصفه اسمًا بديلًا للتوافق مع الدالة التجميعية any. ويغلق ذلك #52140. #52147 (flynn).
  • أُضيفت الدالة التجميعية array_concat_agg للتوافق مع BigQuery، وهي اسم بديل لـ groupArrayArray. ويغلق ذلك #52139. #52149 (flynn).
  • أُضيف OCTET_LENGTH بوصفه اسمًا بديلًا لـ length. ويغلق ذلك #52153. #52176 (FFFFFFFHHHHHHH).
  • أُضيفت الدالة firstLine لاستخراج السطر الأول من سلسلة نصية متعددة الأسطر. ويغلق ذلك #51172. #52209 (Mikhail Koviazin).
  • نُفِّذ تنسيق بأسلوب KQL لنوع البيانات Interval. وهذا مطلوب فقط للتوافق مع لغة الاستعلام Kusto. #45671 (ltrk2).
  • أُضيف الاستعلام SYSTEM FLUSH ASYNC INSERT QUEUE الذي يُفرّغ جميع عمليات insert غير المتزامنة المعلّقة إلى الجداول الوجهة. كما أُضيف إعداد من جهة الخادم async_insert_queue_flush_on_shutdown (وقيمته الافتراضية true) لتحديد ما إذا كان ينبغي تفريغ طابور عمليات insert غير المتزامنة عند الإيقاف المنظّم. وأصبح الإعداد async_insert_threads الآن إعدادًا من جهة الخادم. #49160 (Anton Popov).
  • أُضيفت الأسماء البديلة current_database، ودالة جديدة هي current_schemas، للتوافق مع PostgreSQL. #51076 (Pedro Riera).
  • أُضيف اسم بديل للدالة today (المتاحة الآن أيضًا بالاسمين curdate/current_date) وللدالة now (current_timestamp). #52106 (Lloyd-Pottiger).
  • دعم async_deduplication_token في الإدراج غير المتزامن. #52136 (Han Fei).
  • إضافة إعداد جديد disable_url_encoding يتيح تعطيل فك ترميز/ترميز المسار في URI ضمن محرك URL. #52337 (Kruglov Pavel).

تحسين الأداء

  • تمكين الاختيار التلقائي لتنسيق التسلسل sparse افتراضيًا. وهذا يحسّن الأداء. هذا التنسيق مدعوم منذ الإصدار 22.1. بعد هذا التغيير، قد لا يكون الرجوع إلى إصدار أقدم من 22.1 ممكنًا. وقد يتطلب الرجوع إلى إصدار أقدم تعيين ratio_of_defaults_for_sparse_serialization=0.9375 55153. يمكنك تعطيل استخدام تنسيق التسلسل sparse من خلال تعيين الإعداد ratio_of_defaults_for_sparse_serialization = 1 لجداول MergeTree لديك. #49631 (Alexey Milovidov).
  • تمكين الإعدادين move_all_conditions_to_prewhere وenable_multiple_prewhere_read_steps افتراضيًا. #46365 (Alexander Gololobov).
  • تحسين أداء بعض الاستعلامات عبر ضبط allocator. #46416 (Azat Khuzhin).
  • نستخدم الآن مهام ثابتة الحجم في MergeTreePrefetchedReadPool كما في MergeTreeReadPool. كما نستخدم أيضًا connection pool لطلبات S3. #49732 (Nikita Taranov).
  • المزيد من pushdown إلى الجانب الأيمن من join. #50532 (Nikita Taranov).
  • تحسين grace_hash join من خلال حجز حجم hash table مسبقًا (إعادة إرسال). #50875 (lgbo).
  • قد يكون انتظار القفل في OpenedFileCache ملحوظًا أحيانًا. لذلك قسّمناه إلى خرائط فرعية متعددة (لكل منها قفلها الخاص) لتجنب التنازع. #51341 (Nikita Taranov).
  • نقل الشروط التي تتضمن أعمدة المفتاح الأساسي إلى نهاية سلسلة PREWHERE. والفكرة هي أن الشروط التي تتضمن أعمدة PK يُحتمل أن تُستخدم في تحليل PK، ولن تضيف الكثير لاحقًا إلى التصفية في PREWHERE. #51958 (Alexander Gololobov).
  • تسريع COUNT(DISTINCT) لأنواع String عبر تضمين SipHash مباشرة. وتُظهر تجارب الأداء على OnTime على جهاز ICX ‏(Intel Xeon Platinum 8380 CPU، ‏80 نواة، ‏160 خيطًا) أن هذا التغيير يمكن أن يحقق تحسنًا بنسبة 11.6% في QPS للاستعلام Q8 من دون أي تأثير في الاستعلامات الأخرى. #52036 (Zhiguo Zhou).
  • تمكين allow_vertical_merges_from_compact_to_wide_parts افتراضيًا. سيوفّر هذا الذاكرة أثناء عمليات الدمج. #52295 (Alexey Milovidov).
  • إصلاح التحليل غير الصحيح لـ projection الذي يُبطل المفاتيح الأساسية. لا تظهر هذه المشكلة إلا عند query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1. هذا يُصلح #48823. وهذا يُصلح #51173. #52308 (Amos Bird).
  • تقليل عدد استدعاءات النظام في FileCache::loadMetadata، ما يسرّع بدء تشغيل الخادم إذا كانت filesystem cache مُعدّة. #52435 (Raúl Marín).
  • أصبح من الممكن فرض حدٍّ أدنى صارم لحجم مقطع الملف عبر تنزيل البيانات المتبقية في الخلفية. ويُضبط الحد الأدنى لحجم مقطع الملف (إذا كان حجم الملف الفعلي أكبر) من خلال إعداد تهيئة cache ‏boundary_alignment، والقيمة الافتراضية هي 4Mi. كما يُضبط عدد خيوط الخلفية من خلال إعداد تهيئة cache ‏background_download_threads، والقيمة الافتراضية هي 2. كذلك زِيدت قيمة max_file_segment_size من 8Mi إلى 32Mi في طلب السحب هذا. #51000 (Kseniia Sumarokova).
  • خُفِّضت قيم timeout الافتراضية لـ S3 من 30 ثانية إلى 3 ثوانٍ، وللاتصالات الأخرى عبر HTTP من 180 ثانية إلى 30 ثانية. #51171 (Michael Kolupaev).
  • أُضيف الإعداد الجديد merge_tree_determine_task_size_by_prewhere_columns. إذا ضُبط على true، فلن تُؤخذ في الاعتبار عند تحديد حجم مهمة القراءة إلا أحجام الأعمدة الواردة في قسم PREWHERE. وإلا فستؤخذ جميع الأعمدة الواردة في الاستعلام في الاعتبار. #52606 (Nikita Taranov).

تحسينات

  • استخدم read_bytes/total_bytes_to_read لشريط التقدّم في table functions من نوع s3/file/url/… لتحسين عرض التقدّم. #51286 (Kruglov Pavel).
  • إضافة إعداد للجدول باسم wait_for_unique_parts_send_before_shutdown_ms يحدّد مقدار الوقت الذي ستنتظره replica قبل إغلاق interserver handler الخاص بعمليات الإرسال المكرّرة. كما أُصلح عدم الاتساق في إيقاف تشغيل tables وinterserver handlers: إذ أصبح server الآن يوقف tables أولًا، ثم يوقف interserver handlers بعد ذلك فقط. #51851 (alesapin).
  • السماح باستخدام FETCH المعياري في SQL من دون OFFSET. انظر https://antonz.org/sql-fetch/. #51293 (Alexey Milovidov).
  • السماح بتصفية HTTP headers في URL/S3 table functions باستخدام القسم الجديد http_forbid_headers في config. تتوفر كلٌّ من المطابقة التامة ومرشحات regexp. #51038 (Nikolay Degterinsky).
  • عدم عرض رسائل عن مساحة خالية قدرها 16 EiB في logs، لأنها غير منطقية. هذا يُغلق #49320. #49342 (Alexey Milovidov).
  • التحقق بشكل صحيح من الحد الأقصى للدالة sleepEachRow. وإضافة الإعداد function_sleep_max_microseconds_per_block. وهذا مطلوب لـ query fuzzer العام. #49343 (Alexey Milovidov).
  • إصلاح مشكلتين في دوال geoHash. #50066 (李扬).
  • تسجيل استعلامات flush الخاصة بـ async insert في system.query_log. #51160 (Raúl Marín).
  • أصبحت الدالتان date_diff وage تدعمان وحدتَي الملّي ثانية والميكروثانية، وتعملان بدقة الميكروثانية. #51291 (Dmitry Kardymon).
  • تحسين parsing للمسار في clickhouse-keeper-client. #51359 (Azat Khuzhin).
  • كان هناك خطأ في منتج تابع لجهة خارجية يعتمد على ClickHouse (Gluten: a Plugin to Double Spark SQL’s Performance). يتجنب هذا الإصلاح حدوث heap overflow في ذلك المنتج أثناء القراءة من HDFS. #51386 (李扬).
  • إضافة إمكانية تعطيل النسخ native لـ S3 (إعداد BACKUP/RESTORE allow_s3_native_copy، وs3_allow_native_copy لأقراص s3/s3_plain). #51448 (Azat Khuzhin).
  • إضافة العمود primary_key_size إلى table ‏system.parts لعرض حجم primary key المضغوط على disk. يُغلق #51400. #51496 (Yarik Briukhovetskyi).
  • السماح بتشغيل clickhouse-local من دون procfs، ومن دون وجود home directory، ومن دون إضافات name resolution من glibc. #51518 (Alexey Milovidov).
  • إضافة العنصر النائب %a لاسم الملف الكامل في الإعداد rename&#95;files&#95;after&#95;processing. #51603 (Kruglov Pavel).
  • إضافة العمود modification_time إلى system.parts_columns. #51685 (Azat Khuzhin).
  • إضافة الإعداد الجديد input_format_csv_use_default_on_bad_values إلى تنسيق CSV، ما يتيح إدراج القيمة الافتراضية عند فشل تحليل حقل واحد. #51716 (KevinyhZou).
  • تمت إضافة تفريغ سجل التعطل إلى القرص بعد حدوث تعطل غير متوقع. #51720 (Alexey Gerasimchuck).
  • إصلاح السلوك في صفحة لوحة المعلومات حيث لا تظهر الأخطاء غير المرتبطة بالمصادقة. كما تم إصلاح سلوك المخطط ‘المتداخل’. #51744 (Zach Naimon).
  • السماح بالتحويل من UUID إلى UInt128. #51765 (Dmitry Kardymon).
  • تمت إضافة دعم للدالة range ذات الوسائط من نوع Nullable. #51767 (Dmitry Kardymon).
  • تحويل شرط مثل toyear(x) = c إلى c1 <= x < c2. #51795 (Han Fei).
  • تحسين توافق MySQL لعبارة SHOW INDEX. #51796 (Robert Schulze).
  • إصلاح مشكلة عدم عمل use_structure_from_insertion_table_in_table_functions مع الأعمدة MATERIALIZED وALIAS. يُغلق #51817. يُغلق #51019. #51825 (flynn).
  • أصبح قاموس cache يطلب الآن المفاتيح الفريدة فقط من المصدر. يُغلق #51762. #51853 (Maksim Kita).
  • إصلاح الحالة التي لم تكن فيها الإعدادات تُطبَّق على استعلام EXPLAIN عند توفير FORMAT. #51859 (Nikita Taranov).
  • السماح باستخدام SETTINGS قبل FORMAT في استعلام DESCRIBE TABLE لتحقيق التوافق مع استعلام SELECT. يُغلق #51544. #51899 (Nikolay Degterinsky).
  • يمكن الآن للأعداد الصحيحة المرمّزة بـ Var-Int (المستخدمة مثلًا في البروتوكول الأصلي) استخدام النطاق الكامل لـ 64 بت. ويُنصح العملاء من الجهات الخارجية بتحديث شيفرة var-int الخاصة بهم وفقًا لذلك. #51905 (Robert Schulze).
  • تحديث الشهادات عند تغيّرها دون الحاجة إلى تنفيذ SYSTEM RELOAD CONFIG يدويًا. #52030 (Mike Kot).
  • تمت إضافة الإعداد allow_create_index_without_type الذي يتيح تجاهل استعلامات ADD INDEX من دون تحديد TYPE. وستنجح استعلامات SQL القياسية ببساطة من دون تغيير مخطط الجدول. #52056 (Ilya Yatsishin).
  • تُكتب رسائل السجل في system.text_log منذ بدء تشغيل الخادم. #52113 (Dmitry Kardymon).
  • في الحالات التي تحتوي فيها نقطة نهاية HTTP على عدة عناوين IP وكان أولها غير قابل للوصول، كان يُطرَح استثناء مهلة. أُنشئ التعامل مع الجلسات الآن بحيث يشمل جميع نقاط النهاية التي تم حلّها. #52116 (Aleksei Filatov).
  • يدعم input format ‏Avro الآن Union حتى إذا كان يحتوي على نوع واحد فقط. يغلق هذا #52131. #52137 (flynn).
  • أُضيف الإعداد optimize_use_implicit_projections لتعطيل projections الضمنية (حاليًا projection ‏min_max_count فقط). #52152 (Amos Bird).
  • كان من الممكن استغلال الدالة hasToken للتسبب في حلقة لا نهائية. أُزيل هذا الاحتمال الآن. يغلق هذا #52156. #52160 (Alexey Milovidov).
  • أُنشئت السلاسل الأصلية في ZK بشكل تفاؤلي. #52195 (Raúl Marín).
  • إصلاح #50582. تجنُّب الخطأ Not found column ... in block في بعض حالات القراءة بالترتيب ومع الثوابت. #52259 (Chen768959).
  • التحقق في أقرب وقت ممكن من جهة ClickHouse مما إذا كانت Geo primitives ‏S2 غير صالحة. يغلق هذا: #27090. #52260 (Nikita Mikhaylov).
  • أُعيدت إضافة QueryAccessInfo الخاصة بـ projection والمفقودة عند query_plan_optimize_projection = 1. يصلح هذا #50183. ويصلح هذا #50093. #52327 (Amos Bird).
  • عندما يعيد ZooKeeperRetriesControl طرح خطأ، يكون من الأنسب رؤية stack trace الأصلي له، لا ذاك الصادر من ZooKeeperRetriesControl نفسه. #52347 (Vitaly Baranov).
  • انتظار قفل zero copy replication حتى إذا كانت بعض disks لا تدعمه. #52376 (Raúl Marín).
  • الآن لن يُغلق منفذ interserver إلا بعد إيقاف الجداول. #52498 (alesapin).

الميزة التجريبية

  • أصبحت كتابة ملفات Parquet أسرع بمقدار 10 مرات، وهي الآن متعددة الخيوط، وبسرعة تكاد تماثل سرعة القراءة. #49367 (Michael Kolupaev). ويتم التحكم في ذلك عبر الإعداد output_format_parquet_use_custom_encoder، وهو معطّل افتراضيًا لأن هذه الميزة لا تزال غير مثالية.
  • أُضيف دعم PRQL كلغة استعلام. #50686 (János Benjamin Antal).
  • أصبح بالإمكان إضافة اسم disk مخصّص لأقراص التخزين المخصّصة. في السابق، كانت أقراص التخزين المخصّصة تستخدم اسم disk مُولّدًا داخليًا. والآن يمكن ذلك باستخدام disk = disk_<name>(...) (على سبيل المثال، سيكون اسم disk هو name). #51552 (Kseniia Sumarokova). وقد تتغير هذه الصياغة في هذا الإصدار.
  • (تجريبي MaterializedMySQL) تم إصلاح تعطل كان يحدث عند استخدام mysqlxx::Pool::Entry بعد قطع اتصاله. #52063 (Val Doroshchuk).
  • (تجريبي MaterializedMySQL) أصبح CREATE TABLE ... AS SELECT .. مدعومًا الآن في MaterializedMySQL. #52067 (Val Doroshchuk).
  • (تجريبي MaterializedMySQL) أُضيف تحويل تلقائي لأنواع النصوص إلى utf8 في MaterializedMySQL. #52084 (Val Doroshchuk).
  • (تجريبي MaterializedMySQL) أصبحت سلاسل UTF-8 غير الموضوعة بين علامتي اقتباس مدعومة الآن في DDL لـ MaterializedMySQL. #52318 (Val Doroshchuk).
  • (تجريبي MaterializedMySQL) أصبحت التعليقات بين علامتي اقتباس مزدوجتين مدعومة الآن في MaterializedMySQL. #52355 (Val Doroshchuk).
  • ترقية Intel QPL من v1.1.0 إلى v1.2.0 2. وترقية Intel accel-config من v3.5 إلى v4.0 3. وإصلاح مشكلة تمثلت في أن فقدان Device IOTLB كان له تأثير كبير على الأداء في مسرّعات IAA. #52180 (jasperzhu).
  • تم خفض تصنيف الإعداد session_timezone (الجديد في الإصدار 23.6) إلى تجريبي. #52445 (Alexey Milovidov).
  • دعم الأمر reconfig في ZooKeeper لـ ClickHouse Keeper مع إعادة تهيئة incremental يمكن تفعيلها عبر الإعداد keeper_server.enable_reconfiguration. ويدعم ذلك إضافة خوادم وإزالة خوادم وتغيير أولويات الخوادم. #49450 (Mike Kot). ويُشتبه في أن هذه الميزة غير مكتملة.

تحسينات البناء/الاختبار/التغليف

  • إضافة بنيات ClickHouse تجريبية لنظام Linux RISC-V 64 إلى CI. #31398 (Alexey Milovidov).
  • إضافة فحص لاختبارات التكامل مع تفعيل المحلّل. #50926 #52210 (Dmitry Novik).
  • بنيات قابلة لإعادة الإنتاج لـ Rust. #52395 (Azat Khuzhin).
  • تحديث تبعيات Cargo. #51721 (Raúl Marín).
  • جعل الدالة CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData تعمل مع المصفوفات التي تقبل NULL، وهي غير ممكنة في ClickHouse، لكنها مطلوبة لـ Gluten. #52112 (李扬).
  • حدّثنا مكتبة CCTZ إلى الفرع master، ولكن لا توجد تغييرات مرئية للمستخدم. #52124 (Alexey Milovidov).
  • يتضمن جدول system.licenses الآن أيضًا المكتبة Poco المتفرعة عبر hard fork. ويغلق هذا #52066. #52127 (Alexey Milovidov).
  • التحقق من عدم وجود حالات ترقيم غير صحيحة: مسافة قبل فاصلة مثل Hello ,world بدلًا من Hello, world. #52549 (Alexey Milovidov).

إصلاح خلل

  • إصلاح syncTables في MaterializedPostgreSQL #49698 (Kseniia Sumarokova).
  • إصلاح projection مع optimize_aggregators_of_group_by_keys #49709 (Amos Bird).
  • إصلاح optimize_skip_unused_shards مع عمليات JOIN #51037 (Azat Khuzhin).
  • إصلاح formatDateTime() مع datetime64 السالب ذي الجزء الكسري #51290 (Dmitry Kardymon).
  • كانت الدوال hasToken* غير صحيحة تمامًا. تمت إضافة اختبار لـ #43358 #51378 (Alexey Milovidov).
  • إصلاح التحسين المسؤول عن نقل الدوال قبل الفرز. #51481 (Nikolai Kochetov).
  • إصلاح عدم تطابق بنية Block في Pipe::unitePipes مع FINAL #51492 (Nikita Taranov).
  • إصلاح SIGSEGV في clusters ذات الوزن الصفري عبر جميع shards (يُصلح INSERT INTO FUNCTION clusterAllReplicas()) #51545 (Azat Khuzhin).
  • إصلاح timeout للطلبات الاحتياطية #51582 (Azat Khuzhin).
  • إصلاح logical error في ANTI join مع NULL #51601 (vdimir).
  • إصلاح نقل شروط ‘IN’ إلى PREWHERE #51610 (Alexander Gololobov).
  • عدم تطبيق PredicateExpressionsOptimizer على ASOF/ANTI join #51633 (vdimir).
  • إصلاح async insert مع deduplication في ReplicatedMergeTree باستخدام خوارزميات الدمج #51676 (Antonio Andelic).
  • إصلاح القراءة من column فارغ في parseSipHashKey #51804 (Nikita Taranov).
  • إصلاح segfault عند إنشاء جدول EmbeddedRocksdb غير صالح #51847 (Duc Canh Le).
  • إصلاح عمليات insert في جداول MongoDB #51876 (Nikolay Degterinsky).
  • إصلاح deadlock عند إيقاف DatabaseCatalog #51908 (Alexander Tokmakov).
  • إصلاح خطأ في subquery operators #51922 (Alexey Milovidov).
  • إصلاح الاتصال غير المتزامن بمضيفين لديهم عدة عناوين IP #51934 (Kruglov Pavel).
  • عدم إزالة المدخلات بعد ActionsDAG::merge #51947 (Nikolai Kochetov).
  • التحقّق من refcount في RemoveManyObjectStorageOperation::finalize بدلًا من execute #51954 (vdimir).
  • السماح بـ UDFs البارامترية #51964 (Alexey Milovidov).
  • إصلاح صغير للدالة toDateTime64() للتواريخ بعد 2283-12-31 #52130 (Andrey Zvonov).
  • إصلاح tuple في عبارة ORDER BY لدوال WINDOW #52145 (Alexey Milovidov).
  • إصلاح التحليل غير الصحيح لـ projection عندما يحتوي تعبير aggregation على دوال رتيبة #52151 (Amos Bird).
  • إصلاح خطأ في دوال groupArrayMoving #52161 (Alexey Milovidov).
  • تعطيل direct join لقاموس النطاق #52187 (Duc Canh Le).
  • إصلاح اختبار mutations العالقة (وحالة race condition نادرة للغاية) #52197 (alesapin).
  • إصلاح حالة race في قرص Web #52211 (Kseniia Sumarokova).
  • إصلاح data race في Connection::setAsyncCallback عند ورود حزمة غير معروفة من الخادم #52219 (Kruglov Pavel).
  • إصلاح حذف البيانات المؤقتة عند بدء التشغيل، مع إضافة اختبار #52275 (vdimir).
  • عدم استخدام minmax_count projections عند عدّ nullable columns #52297 (Amos Bird).
  • يجب أن يستخدم MergeTree/ReplicatedMergeTree المنطقة الزمنية للخادم لإدخالات السجل #52325 (Azat Khuzhin).
  • إصلاح parameterized view مع cte وعند الاستخدام المتعدد #52328 (SmitaRKulkarni).
  • تعطيل expression templates للفواصل الزمنية #52335 (Alexander Tokmakov).
  • إصلاح apply_snapshot في Keeper #52358 (Antonio Andelic).
  • تحديث build-osx.md #52377 (AlexBykovski).
  • إصلاح تعليق countSubstrings عند وجود needle فارغ وhaystack من نوع عمود #52409 (Sergei Trifonov).
  • إصلاح projection العادي مع جدول Merge #52432 (Amos Bird).
  • إصلاح احتمال حدوث تحرير مزدوج في Aggregator #52439 (Nikita Taranov).
  • إصلاح الإدراج في محرك Buffer #52440 (Vasily Nemkov).
  • كان تنفيذ AnyHash غير متوافق مع المواصفات. #52448 (Alexey Milovidov).
  • التحقق من عمق الاستدعاء التكراري في OptimizedRegularExpression #52451 (Alexey Milovidov).
  • إصلاح حالة سباق بيانات في DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() #52490 (Azat Khuzhin).
  • إصلاح إنهاء مفاجئ في الدالة transform #52513 (Alexey Milovidov).
  • إصلاح مشكلة الحذف الخفيف بعد حذف projection #52517 (Anton Popov).
  • إصلاح الخطأ المحتمل “يتعذر تفريغ الاتصالات: ألغِ أولًا” #52585 (Kruglov Pavel).

إصدار ClickHouse 23.6، 2023-06-29. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • حذف الميزة do_not_evict_index_and_mark_files من ذاكرة التخزين المؤقت fs. إذ لم تكن هذه الميزة إلا تزيد الأمور سوءًا. #51253 (Kseniia Sumarokova).
  • إزالة دعم ALTER لـ LIVE VIEW التجريبية. #51287 (Alexey Milovidov).
  • خفض القيم الافتراضية لكل من http_max_field_value_size و http_max_field_name_size إلى 128 KiB. #51163 (Mikhail f. Shiryaev).
  • استُعيض عن مقاييس CGroups المتعلقة بـ CPU بمقياس واحد، وهو CGroupMaxCPU، لتحسين سهولة الاستخدام. وستُطبَّع مقاييس استخدام CPU ‏Normalized وفق حدود CGroups بدلًا من العدد الإجمالي لوحدات CPU عند تعيينها. ويغلق هذا #50836. #50835 (Alexey Milovidov).

ميزة جديدة

  • بدأت الدالة transform وكذلك CASE مع مطابقة القيم بدعم جميع أنواع البيانات. هذا يُغلق #29730. هذا يُغلق #32387. هذا يُغلق #50827. هذا يُغلق #31336. هذا يُغلق #40493. #51351 (Alexey Milovidov).
  • أُضيف الخيار --rename_files_after_processing <pattern>. هذا يُغلق #34207. #49626 (alekseygolub).
  • أُضيف دعم للمعدِّل TRUNCATE في العبارة INTO OUTFILE. ويُنصح باستخدام APPEND أو TRUNCATE مع INTO OUTFILE عندما يكون الملف موجودًا. #50950 (alekar).
  • أُضيف محرك الجدول Redis ودالة الجدول redis. ويتيح ذلك الاستعلام عن خوادم Redis الخارجية. #50150 (JackyWoo).
  • أصبح من الممكن تخطي الملفات الفارغة في دوال الجداول file/s3/url/hdfs باستخدام الإعدادات s3_skip_empty_files وhdfs_skip_empty_files وengine_file_skip_empty_files وengine_url_skip_empty_files. #50364 (Kruglov Pavel).
  • أُضيف إعداد جديد باسم use_mysql_types_in_show_columns لتعديل تعليمة SQL ‏SHOW COLUMNS بحيث تعرض الأنواع المكافئة في MySQL عندما يكون العميل متصلًا عبر منفذ التوافق مع MySQL. #49577 (Thomas Panetti).
  • يمكن الآن استدعاء clickhouse-client باستخدام سلسلة اتصال بدلًا من “—host” و”—port” و”—user” وما إلى ذلك. #50689 (Alexey Gerasimchuck).
  • أُضيف الإعداد session_timezone؛ ويُستخدم كمنطقة زمنية افتراضية للجلسة عند عدم تحديدها صراحةً. #44149 (Andrey Zvonov).
  • أصبح الترميز DEFLATE_QPL الآن خاضعًا للتحكم عبر إعداد الخادم “enable_deflate_qpl_codec” (الافتراضي: false) بدلًا من الإعداد “allow_experimental_codecs”. وهذا يعني أن DEFLATE_QPL لم يعد تجريبيًا. #50775 (Robert Schulze).

تحسين الأداء

  • تحسين جدولة مهام اختيار الدمج والتنظيف في ReplicatedMergeTree. لن تُنفَّذ هذه المهام بوتيرة متكررة جدًا عندما لا يكون هناك ما يمكن دمجه أو تنظيفه. أُضيفت الإعدادات max_merge_selecting_sleep_ms وmerge_selecting_sleep_slowdown_factor وmax_cleanup_delay_period وcleanup_thread_preferred_points_per_iteration. يُفترض أن يؤدي هذا إلى إغلاق #31919. #50107 (Alexander Tokmakov).
  • تمكين push down للمرشح عبر CROSS JOIN. #50605 (Han Fei).
  • تحسين الأداء عند تمكين QueryProfiler باستخدام timer_id محلي على مستوى thread بدلًا من object عام. #48778 (Jiebin Sun).
  • إعادة كتابة format الإدخال/الإخراج لـ CapnProto لتحسين أدائه. أصبحت مطابقة أسماء الأعمدة وحقول CapnProto غير حساسة لحالة الأحرف، مع إصلاح قراءة وكتابة حقول البنية المتداخلة. #49752 (Kruglov Pavel).
  • تحسين أداء الكتابة بتنسيق Parquet للخيوط المتوازية. #50102 (Hongbin Ma).
  • تعطيل parallelize_output_from_storages عند معالجة MATERIALIZED VIEWs وstorages التي تحتوي على block واحد فقط. #50214 (Azat Khuzhin).
  • دمج طلب السحب #46558. تجنُّب تبديل ترتيب الـ block أثناء sort إذا كان الـ block مرتبًا بالفعل. #50697 (Alexey Milovidov, Maksim Kita).
  • إجراء عدة طلبات list إلى ZooKeeper بالتوازي لتسريع القراءة من جدول system.zookeeper. #51042 (Alexander Gololobov).
  • تسريع تهيئة جداول lookup الخاصة بـ DateTime للمناطق الزمنية. من شأن ذلك تقليل وقت بدء التشغيل/الاتصال لـ clickhouse-client، خصوصًا في build التصحيح لأنه ثقيل نسبيًا. #51347 (Alexander Gololobov).
  • إصلاح بطء data lakes الناتج عن طلبات head المتزامنة. (يرتبط ذلك ببطء Iceberg/Deltalake/Hudi عند وجود عدد كبير من الملفات). #50976 (Kseniia Sumarokova).
  • عدم قراءة جميع الأعمدة من جدول GLOBAL JOIN الموجود على الجانب الأيمن. #50721 (Nikolai Kochetov).

ميزة تجريبية

  • دعم النسخ المتماثلة المتوازية مع المحلّل. #50441 (Raúl Marín).
  • إضافة مهلة انتظار عشوائية قبل تنفيذ عمليات الدمج وعمليات mutation الكبيرة، لتوزيع الحمل بشكل أكثر توازنًا بين النسخ المتماثلة في حالة zero-copy replication. #51282 (alesapin).
  • عدم نسخ استعلامات ALTER PARTITION وعمليات mutation عبر قاعدة البيانات Replicated إذا كان لديها shard واحد فقط وكان الجدول الأساسي هو ReplicatedMergeTree. #51049 (Alexander Tokmakov).

تحسين

  • خُفِّفت حدود “Too many parts” لتصبح أكثر ملاءمة للأنظمة الحديثة. وأُعيد تطبيق الضغط العكسي أثناء استعلامات insert طويلة التشغيل. #50856 (Alexey Milovidov).
  • إتاحة تحويل IPv6 إلى IPv4 address للنطاق CIDR ‏::ffff:0:0/96 (العناوين المعيّنة إلى IPv4). #49759 (Yakov Olkhovskiy).
  • تحديث protocol الخاص بـ MongoDB لدعم MongoDB بالإصدار 5.1 والإصدارات الأحدث. مع الحفاظ على دعم الإصدارات التي تستخدم protocol القديم (<3.6). يُغلق #45621، #49879. #50061 (Nikolay Degterinsky).
  • إضافة الإعداد input_format_max_bytes_to_read_for_schema_inference لتقييد عدد البايتات المقروءة أثناء schema inference. يُغلق #50577. #50592 (Kruglov Pavel).
  • مراعاة الإعداد input_format_null_as_default أثناء schema inference. #50602 (Kruglov Pavel).
  • إتاحة تخطي الأسطر الفارغة اللاحقة في تنسيقات CSV/TSV/CustomSeparated عبر الإعدادات input_format_csv_skip_trailing_empty_lines وinput_format_tsv_skip_trailing_empty_lines وinput_format_custom_skip_trailing_empty_lines (وهي معطّلة افتراضيًا). يُغلق #49315. #50635 (Kruglov Pavel).
  • أصبحت الدالتان “toDateOrDefault|OrNull” و”accuateCast[OrDefault|OrNull]” تحللان argument الرقمية بشكل صحيح الآن. #50709 (Dmitry Kardymon).
  • دعم CSV مع delimiters للحقول تكون مسافات بيضاء أو \t، وهذه delimiters مدعومة في Spark. #50712 (KevinyhZou).
  • أصبحت الإعدادات number_of_mutations_to_delay وnumber_of_mutations_to_throw مفعّلة افتراضيًا بالقيمتين 500 و1000 على التوالي. #50726 (Anton Popov).
  • تعرض dashboard القيم المفقودة بشكل صحيح. وهذا يُغلق #50831. #50832 (Alexey Milovidov).
  • أُضيفت إمكانية استخدام argument للتاريخ والوقت بتنسيق syslog timestamp في الدالتين parseDateTimeBestEffort* وparseDateTime64BestEffort*. #50925 (Victor Krasnov).
  • أصبح بالإمكان الآن تحديد parameter سطر الأوامر “—password” في clickhouse-client مرة واحدة فقط. #50966 (Alexey Gerasimchuck).
  • استخدام hash_of_all_files من system.parts للتحقق من identity الخاصة بـ parts أثناء النسخ الاحتياطية على مستوى cluster. #50997 (Vitaly Baranov).
  • يحدّد جدول النظام zookeeper_connection الحقل connected_time بوصفه الوقت الذي أُنشئ فيه الاتصال (بالتنسيق القياسي)، كما أُضيف الحقل session_uptime_elapsed_seconds الذي يوضّح مدة جلسة الاتصال بعد إنشائها (بالثواني). #51026 (郭小龙).
  • تحسين شريط التقدّم لدوال الجداول file/s3/hdfs/url باستخدام حجم الـ chunk من البيانات المصدر، مع اعتماد حساب تزايدي للحجم الإجمالي في كل thread. وإصلاح شريط التقدّم لدوال *Cluster. ويغلق هذا #47250. #51088 (Kruglov Pavel).
  • إضافة total_bytes_to_read إلى حزمة Progress في بروتوكول TCP لتحسين شريط Progress. #51158 (Kruglov Pavel).
  • تحسين التحقق من data parts على الأقراص التي تستخدم filesystem cache. #51164 (Anton Popov).
  • إصلاح القيمة الحالية current_elements_num التي تكون غير صحيحة أحيانًا في fs cache. #51242 (Kseniia Sumarokova).

تحسينات في البناء/الاختبار/التغليف

  • إضافة keeper-client مضمّن إلى الملف التنفيذي المستقل لـ Keeper. #50964 (pufit).
  • يُستخدم الآن إصدار LZ4 الفعلي. #50621 (Nikita Taranov).
  • سيطبع خادم ClickHouse قائمة الإعدادات التي تغيّرت عند حدوث أخطاء فادحة. وهذا يُغلق #51137. #51138 (Alexey Milovidov).
  • إتاحة بناء ClickHouse باستخدام clang-17. #51300 (Alexey Milovidov).
  • يُعدّ فحص SQLancer مستقراً لأن الأخطاء التي كان يتسبب بها قد أُصلحت. وستُبلَّغ الآن حالات فشل فحص SQLancer على أنها حالة فحص فاشلة. #51340 (Ilya Yatsishin).
  • تقسيم تعليمة RUN الضخمة في Dockerfile إلى أجزاء شرطية أصغر. تثبيت الأدوات اللازمة عند الطلب ضمن طبقة RUN نفسها، ثم إزالتها بعد ذلك. ترقية نظام التشغيل مرة واحدة فقط في البداية. استخدام طريقة حديثة للتحقق من توقيع المستودع. خفض صورة الأساس إلى ubuntu:20.04 لمعالجة المشكلات في إصدارات Docker الأقدم. ترقية إصدار golang لمعالجة ثغرات golang الأمنية. #51504 (Mikhail f. Shiryaev).

إصلاح خطأ (سلوك غير صحيح يمكن للمستخدم ملاحظته في إصدار مستقر رسمي)

  • الإبلاغ بشكل صحيح عن حالة تحميل القواميس التنفيذية #48775 (Anton Kozlov).
  • تنفيذ mutation لمؤشرات التخطي والإسقاطات بشكل سليم #50104 (Amos Bird).
  • تنظيف الأجزاء المنقولة #50489 (vdimir).
  • إصلاح التوافق مع الإصدارات السابقة لتجزئة أنواع IP في الدوال التجميعية #50551 (Yakov Olkhovskiy).
  • إصلاح إرجاع table من عائلة Log عددًا خاطئًا من الصفوف بعد truncate #50585 (flynn).
  • إصلاح خلل في الدمج المتوازي لـ uniqExact #50590 (Nikita Taranov).
  • التراجع عن التغييرات الأخيرة في grace hash join #50699 (vdimir).
  • Query Cache: محاولة إصلاح التحويل غير الصحيح من ColumnConst إلى ColumnVector<char8_t> #50704 (Robert Schulze).
  • تجنب تخزين logs في Keeper تتضمن عملية غير معروفة #50751 (Antonio Andelic).
  • دعم SummingMergeTree لـ DateTime64 #50797 (Jordi Villar).
  • إضافة إعداد توافق للمناطق الزمنية غير الثابتة #50834 (Robert Schulze).
  • إصلاح تجزئة معلمات LDAP في عناصر cache entries #50865 (Julian Maicher).
  • اللجوء إلى parsing عدد صحيح كبير من String بدلًا من إطلاق استثناء في تنسيق Parquet #50873 (Kruglov Pavel).
  • إصلاح التحقق المتكرر أكثر من اللازم من ملف القفل أثناء كتابة نسخة احتياطية #50889 (Vitaly Baranov).
  • عدم تطبيق projection إذا كان read-in-order مفعّلًا. #50923 (Nikolai Kochetov).
  • إصلاح حالة تسابق في مكرّر Azure blob storage #50936 (SmitaRKulkarni).
  • إصلاح الانتشار الخاطئ لـ sort_description في CreatingSets #50955 (Nikita Taranov).
  • إصلاح parsing البيانات الوصفية الاختيارية في Iceberg v2 #50974 (Kseniia Sumarokova).
  • MaterializedMySQL: الإبقاء على الأقواس في تجاوزات table الفارغة #50977 (Val Doroshchuk).
  • إصلاح تعطل في BackupCoordinationStageSync::setError() #51012 (Vitaly Baranov).
  • إصلاح الخلل الدقيق في آلية النسخ عند الكتابة لقاموس ColumnLowCardinality #51064 (Michael Kolupaev).
  • إنشاء متجهات تهيئة آمنة #51086 (Salvatore Mesoraca).
  • إصلاح عدم فعالية query cache لاستعلامات SELECT التي تتضمن استعلامات فرعية #51132 (Robert Schulze).
  • إصلاح فهرس Set عند المقارنة بقيمة ثابتة من النوع Nullable. #51205 (Nikolai Kochetov).
  • إصلاح تعطل في الدالتين s3 و s3Cluster #51209 (Nikolay Degterinsky).
  • إصلاح تعطل مرتبط بالتعبيرات المترجمة #51231 (LiuNeng).
  • إصلاح مشكلة use-after-free في StorageURL عند التبديل بين عناوين URL #51260 (Michael Kolupaev).
  • تحديث التحقق من العرض ذي المعلمات #51272 (SmitaRKulkarni).
  • إصلاح كتابة الملف نفسه عدة مرات في النسخة الاحتياطية #51299 (Vitaly Baranov).
  • إصلاح فشل أداة الاختبار العشوائي في ActionsDAG #51301 (Alexey Milovidov).
  • إزالة البيانات المهملة من الدالة transform #51350 (Alexey Milovidov).

إصدار ClickHouse 23.5، بتاريخ 2023-06-08. العرض التقديمي، الفيديو

ملاحظات الترقية

  • ضغط العلامات والمفتاح الأساسي افتراضيًا. يخفّض هذا بشكل كبير زمن الاستعلامات الباردة. ملاحظات الترقية: أُضيف دعم العلامات المضغوطة والمفتاح الأساسي المضغوط في الإصدار 22.9. إذا فعّلت العلامات المضغوطة أو المفتاح الأساسي المضغوط، أو ثبّتَّ الإصدار 23.5 أو أحدث، حيث تكون العلامات المضغوطة أو المفتاح الأساسي المضغوط مفعّلين افتراضيًا، فلن تتمكن من الرجوع إلى الإصدار 22.8 أو أقدم. يمكنك أيضًا تعطيل العلامات المضغوطة أو المفاتيح الأساسية المضغوطة صراحةً عبر تحديد الإعدادين compress_marks و compress_primary_key في قسم <merge_tree> من ملف إعدادات الخادم. ملاحظات الترقية: إذا كنت تُجري الترقية من إصدار أقدم من 22.9، فينبغي لك إما ترقية جميع النسخ المتماثلة دفعةً واحدة، أو تعطيل الضغط قبل الترقية، أو الترقية عبر إصدار وسيط يدعم العلامات المضغوطة لكن لا يفعّلها افتراضيًا، مثل 23.3. #42587 (Alexey Milovidov).
  • جعل تخزين الكائنات المحلي يعمل بشكل متّسق مع تخزين كائنات S3، مع إصلاح مشكلة الإلحاق (يغلق #48465)، وجعله قابلًا للتهيئة كتخزين مستقل. هذا التغيير غير متوافق مع الإصدارات السابقة، لأن ذاكرة التخزين المؤقت فوق تخزين الكائنات المحلي غير متوافقة مع الإصدارات السابقة. #48791 (Kseniia Sumarokova).
  • أُزيلت الميزة التجريبية “أجزاء البيانات في الذاكرة”. لا تزال صيغة البيانات مدعومة، لكن الإعدادات أصبحت بلا تأثير، وسيُستخدم بدلًا منها الأجزاء compact أو wide. هذا يغلق #45409. #49429 (Alexey Milovidov).
  • تم تغيير القيم الافتراضية للإعدادين parallelize_output_from_storages و input_format_parquet_preserve_order. يتيح ذلك لـ ClickHouse إعادة ترتيب الصفوف عند القراءة من الملفات (مثل CSV أو Parquet)، مما يحسّن الأداء كثيرًا في حالات عديدة. لاستعادة السلوك السابق والحفاظ على الترتيب، استخدم parallelize_output_from_storages = 0, input_format_parquet_preserve_order = 1. #49479 (Michael Kolupaev).
  • جعل الإسقاطات جاهزة لبيئات الإنتاج. أُضيف الإعداد optimize_use_projections للتحكم في ما إذا كانت الإسقاطات ستُختار لاستعلامات SELECT. الإعداد allow_experimental_projection_optimization أصبح مهملًا ولا يفعل شيئًا. #49719 (Alexey Milovidov).
  • وسم joinGet بأنه غير حتمي (وكذلك dictGet). يتيح ذلك استخدامهما في عمليات mutation دون إعداد إضافي. #49843 (Azat Khuzhin).
  • التراجع عن التغيير “groupArray returns cannot be nullable” (بسبب كسر التوافق الثنائي لـ groupArray/groupArrayLast/groupArraySample مع الأنواع Nullable، وهو ما قد يؤدي على الأرجح إلى TOO_LARGE_ARRAY_SIZE أو CANNOT_READ_ALL_DATA). #49971 (Azat Khuzhin).
  • الإعداد enable_memory_bound_merging_of_aggregation_results مفعّل افتراضيًا. إذا كنت تُحدّث من إصدار أقدم من 22.12، فنوصي بضبط هذا الخيار على false إلى أن يكتمل التحديث. #50319 (Nikita Taranov).

ميزة جديدة

  • تمت إضافة محرك التخزين AzureBlobStorage ودالة الجدول azureBlobStorage. ومجموعة الميزات المدعومة مشابهة جدًا لمحرك التخزين/دالة الجدول S3 [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni.
  • تمت إضافة عميل CLI أصلي لـ ClickHouse Keeper، وهو متاح باسم clickhouse keeper-client #47414 (pufit).
  • تمت إضافة دالة الجدول urlCluster. وأُعيدت هيكلة جميع دوال الجداول *Cluster لتقليل تكرار الشيفرة. كما أصبح استدلال المخطط يعمل مع جميع تواقيع دوال *Cluster الممكنة ومع المجموعات المسماة. يُغلق #38499. #45427 (attack204), Pavel Kruglov.
  • أصبح بالإمكان الآن استخدام ذاكرة التخزين المؤقت للاستعلامات لأحمال العمل في بيئات الإنتاج. #47977 (Robert Schulze). كما أصبحت ذاكرة التخزين المؤقت للاستعلامات تدعم الاستعلامات التي تستخدم المعدِّلَين totals و extremes. #48853 (Robert Schulze). وتم جعل الإعداد allow_experimental_query_cache متقادمًا من أجل التوافق مع الإصدارات السابقة. وقد أُزيل في https://github.com/ClickHouse/ClickHouse/pull/47977. #49934 (Timur Solodovnikov).
  • أصبحت أنواع البيانات الجغرافية (Point و Ring و Polygon و MultiPolygon) جاهزة للاستخدام في بيئات الإنتاج. #50022 (Alexey Milovidov).
  • تمت إضافة استدلال المخطط إلى محركات الجداول PostgreSQL و MySQL و MeiliSearch و SQLite. يُغلق #49972. #50000 (Nikolay Degterinsky).
  • سيُضبط نوع كلمة المرور في الاستعلامات مثل CREATE USER u IDENTIFIED BY 'p' تلقائيًا وفقًا للإعداد default_password_type في config.xml على الخادم. يُغلق #42915. #44674 (Nikolay Degterinsky).
  • تمت إضافة نوع bcrypt لمصادقة كلمة المرور. يُغلق #34599. #44905 (Nikolay Degterinsky).
  • تمت إضافة الكلمة المحجوزة الجديدة INTO OUTFILE 'file.txt' APPEND. #48880 (alekar).
  • تمت إضافة الجدول system.zookeeper_connection الذي يعرض معلومات عن اتصالات Keeper. #45245 (mateng915).
  • تمت إضافة الدالة الجديدة generateRandomStructure التي تُنشئ بنية جدول عشوائية. ويمكن استخدامها مع دالة الجدول generateRandom. #47409 (Kruglov Pavel).
  • أُتيح استخدام CASE بدون فرع ELSE، كما وُسِّعت transform للتعامل مع المزيد من الأنواع. وأُصلحت أيضًا بعض المشكلات التي كانت تجعل transform() يعيد نتائج غير صحيحة عند مزج أنواع Decimal مع أنواع رقمية أخرى. #48300 (Salvatore Mesoraca). هذا يُغلق #2655. هذا يُغلق #9596. هذا يُغلق #38666.
  • تمت إضافة التشفير من جهة الخادم باستخدام مفاتيح KMS مع جداول S3، وإعداد header مع أقراص S3. يُغلق #48723. #48724 (Johann Gan).
  • تمت إضافة MemoryTracker للمهام الخلفية (merges و mutations). ويقدّم الإعدادان merges_mutations_memory_usage_soft_limit و merges_mutations_memory_usage_to_ram_ratio حد الذاكرة المرن لعمليات merges و mutations. وإذا تم بلوغ هذا الحد، فلن يقوم ClickHouse بجدولة مهام merge أو mutation جديدة. كما تمت إضافة المقياس MergesMutationsMemoryTracking لإتاحة مراقبة استخدام الذاكرة الحالي للمهام الخلفية. إعادة تقديم #46089. يُغلق #48774. #48787 (Dmitry Novik).
  • أصبحت الدالة dotProduct تعمل مع Array. #49050 (FFFFFFFHHHHHHH).
  • دعم العبارة SHOW INDEX لتحسين التوافق مع MySQL. #49158 (Robert Schulze).
  • إضافة دعم العمودين الافتراضيين _file و _path إلى table function url. - تحسين رسالة الخطأ الخاصة بـ table function url. - يحل #49231 - يحل #49232. #49356 (Ziyi Tan).
  • إضافة الحقل grants إلى ملف users.xml، مما يتيح تحديد grants للمستخدمين. #49381 (pufit).
  • دعم full/right join باستخدام خوارزمية grace hash join. #49483 (lgbo).
  • يقوم المعدّل WITH FILL بالتعبئة بحسب sorting prefix. ويتحكم في ذلك الإعداد use_with_fill_by_sorting_prefix (مفعّل افتراضيًا). ذو صلة بـ #33203#issuecomment-1418736794. #49503 (Igor Nikonov).
  • أصبح clickhouse-client الآن يقبل الاستعلامات بعد “—multiquery” عند عدم وجود “—query” (أو “-q”). مثال: clickhouse-client —multiquery “select 1; select 2;”. #49870 (Alexey Gerasimchuk).
  • إضافة handshake_timeout منفصل لتلقي حزمة Hello من replica. يُغلق #48854. #49948 (Kruglov Pavel).
  • تمت إضافة الدالة “space” التي تكرّر مسافة بعدد المرات المحدد. #50103 (Robert Schulze).
  • تمت إضافة الخيار —input_format_csv_trim_whitespaces. #50215 (Alexey Gerasimchuk).
  • السماح للدالة dictGetAll في قواميس شجرة regexp بإرجاع قيم من عدة تطابقات على شكل مصفوفات. يُغلق #50254. #50255 (Johann Gan).
  • تمت إضافة الدالة toLastDayOfWeek لتقريب تاريخ أو تاريخ مع وقت للأعلى إلى أقرب يوم سبت أو أحد. #50315 (Victor Krasnov).
  • إمكانية تجاهل فهرس تخطٍّ عبر تحديد ignore_data_skipping_indices. #50329 (Boris Kuschel).
  • إضافة الجدول system.user_processes والاستعلام SHOW USER PROCESSES لعرض معلومات الذاكرة وProfileEvents على مستوى المستخدم. #50492 (János Benjamin Antal).
  • إضافة إعدادات الخادم وformat display_secrets_in_show_and_select لعرض الأسرار الخاصة بالجداول وقواعد البيانات ودوال الجداول والقواميس. وإضافة الامتياز displaySecretsInShowAndSelect الذي يحدد المستخدمين المسموح لهم بعرض الأسرار. #46528 (Mike Kot).
  • السماح بإعداد ROW POLICY لجميع الجداول التي تنتمي إلى DATABASE. #47640 (Ilya Golshtein).

تحسين الأداء

  • ضغط العلامات والمفتاح الأساسي افتراضيًا. يقلّل ذلك بشكل كبير من زمن الاستعلامات الباردة. ملاحظات الترقية: أُضيف دعم العلامات المضغوطة والمفتاح الأساسي المضغوط في الإصدار 22.9. إذا كنت قد فعّلت العلامات المضغوطة أو المفتاح الأساسي المضغوط، أو ثبّتَّ الإصدار 23.5 أو أحدث، حيث تكون العلامات المضغوطة أو المفتاح الأساسي المضغوط مفعّلين افتراضيًا، فلن تتمكن من الرجوع إلى الإصدار 22.8 أو أقدم. يمكنك أيضًا تعطيل العلامات المضغوطة أو المفاتيح الأساسية المضغوطة صراحةً بتحديد الإعدادين compress_marks وcompress_primary_key في قسم <merge_tree> من ملف تهيئة الخادم. #42587 (Alexey Milovidov).
  • إعداد جديد هو s3_max_inflight_parts_for_one_file، ويحدّد الحد الأقصى للأجزاء التي تُحمَّل بالتوازي ضمن طلب multipart upload لملف واحد. #49961 (Sema Checherinda).
  • عند القراءة من عدة ملفات، خُفِّض عدد خيوط parsing المتوازية لكل ملف. يعالج #42192. #46661 (SmitaRKulkarni).
  • استخدم الإسقاط التجميعي فقط إذا كان يقرأ granules أقل من القراءة العادية. من المفترض أن يساعد ذلك عندما يطابق الاستعلام PK للجدول، ولكن ليس الإسقاط. يُصلح #49150. #49417 (Nikolai Kochetov).
  • لا تخزّن blocks في ANY hash join إذا لم يتم insert أي شيء. #48633 (vdimir).
  • يُصلح aggregate combinator ‏-If عند ترجمته باستخدام JIT، ويُفعّل ترجمة JIT للدوال التجميعية. يُغلق #48120. #49083 (Igor Nikonov).
  • عند القراءة من الجداول البعيدة، نستخدم tasks أصغر (بدلًا من قراءة part بالكامل) لكي تعمل آلية stealing للمهام: * يُحدَّد task size بحسب حجم الأعمدة المطلوب قراءتها * استخدم دائمًا buffers بحجم 1mb للقراءة من S3 * تُحاذى حدود segments في cache إلى 1mb بحيث يكون حجمها مناسبًا حتى مع المهام الصغيرة. ومن شأن ذلك أيضًا منع التجزؤ. #49287 (Nikita Taranov).
  • أُضيفت الإعدادات التالية: - merge_max_block_size_bytes للحد من مقدار الذاكرة المستخدمة في العمليات الخلفية. - vertical_merge_algorithm_min_bytes_to_activate لإضافة شرط آخر لتفعيل vertical merges. #49313 (Nikita Mikhaylov).
  • تم تغيير الحجم الافتراضي لـ read buffer عند القراءة من local filesystem إلى قيمة أفضل قليلًا. كما أُضيف إعدادان جديدان: max_read_buffer_size_local_fs وmax_read_buffer_size_remote_fs. #49321 (Nikita Taranov).
  • تحسين استهلاك الذاكرة وسرعة Dictionaries ‏SPARSE_HASHED/HASHED (فعلى سبيل المثال، أصبح SPARSE_HASHED الآن يستهلك ذاكرة أقل بمقدار 2.6x، وأسرع بنحو ~2x). #49380 (Azat Khuzhin).
  • تحسين الجدولين system.query_log وsystem.query_thread_log عبر تطبيق LowCardinality عند الاقتضاء. وستصبح queries على هذين الجدولين أسرع. #49530 (Alexey Milovidov).
  • أداء أفضل عند قراءة ملفات Parquet المحلية (عبر القراءة المتوازية). #49539 (Michael Kolupaev).
  • تحسين أداء RIGHT/FULL JOIN بما يصل إلى الضعف في بعض السيناريوهات، خاصةً عند ربط جدول أيسر صغير بجدول أيمن كبير. #49585 (lgbo).
  • تحسين أداء BLAKE3 بنسبة 11% عبر تفعيل LTO في Rust. #49600 (Azat Khuzhin). وأصبح الآن بمستوى C++.
  • تحسين بنية system.opentelemetry_span_log. واستخدام LowCardinality حيثما كان ذلك مناسبًا. ومع أن هذا الجدول غير مُصمَّم جيدًا عمومًا (إذ يستخدم نوع البيانات Map حتى للسمات الشائعة)، فسيصبح أفضل قليلًا. #49647 (Alexey Milovidov).
  • محاولة حجز حجم جدول hash مسبقًا في join grace_hash. #49816 (lgbo).
  • دمج متوازٍ لحالات uniqExactIf. يغلق #49885. #50285 (flynn).
  • تحسين في Keeper: إضافة طلب CheckNotExists إلى Keeper، مما يتيح تحسين أداء جداول Replicated. #48897 (Antonio Andelic).
  • تحسينات أداء في Keeper: تجنّب إجراء التسلسل للطلب نفسه مرتين أثناء المعالجة، مع تخزين نتائج إلغاء التسلسل للطلبات الكبيرة مؤقتًا. ويتم التحكم في ذلك عبر إعداد coordination الجديد min_request_size_for_cache. #49004 (Antonio Andelic).
  • تقليل عدد طلبات List إلى ZooKeeper عند اختيار الأجزاء المراد دمجها، عندما لا يكون لدى عدد كبير من partition ما يمكن دمجه. #49637 (Alexander Tokmakov).
  • إعادة العمل على آلية القفل في ذاكرة التخزين المؤقت FS #44985 (Kseniia Sumarokova).
  • تعطيل parallel replicas البحتة إذا كان تحسين العدّ البسيط ممكنًا. #50594 (Raúl Marín).
  • عدم إرسال طلب head لكل المفاتيح في استنتاج مخطط Iceberg، بل فقط للمفاتيح المستخدمة لقراءة البيانات. #50203 (Kruglov Pavel).
  • الإعداد enable_memory_bound_merging_of_aggregation_results مفعّل افتراضيًا. #50319 (Nikita Taranov).

ميزة تجريبية

  • خفّض codec DEFLATE_QPL الحد الأدنى لإصدار SIMD إلى SSE 4.2. تغيير في التوثيق ضمن qpl - يعتمد Intel® QPL على مُوجّه kernels وقت التشغيل وفحص cpuid لاختيار أفضل تنفيذ متاح (sse/avx2/avx512) - أُعيدت هيكلة ملف cmake الخاص ببناء qpl في ClickHouse ليتوافق مع أحدث إصدار qpl من upstream. #49811 (jasperzhu).
  • إضافة دعم مبدئي لإجراء عمليات JOIN باستخدام نسخ متماثلة متوازية الخالصة. #49544 (Raúl Marín).
  • زيادة التوازي في إزالة الأجزاء Outdated مع “zero-copy replication”. #49630 (Alexander Tokmakov).
  • نسخ متماثلة متوازية: 1) تم إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند استخدام نسخ متماثلة متوازية مع تخزين non-replicated بينما يكون الإعداد parallel_replicas_for_non_replicated_merge_tree معطّلًا. 2) أصبح لدى allow_experimental_parallel_reading_from_replicas الآن 3 قيم ممكنة: 0 و1 و2. 0 - معطّل، 1 - مفعّل، مع تعطيلها بصمت في حال الفشل (في حالة FINAL أو JOIN)، 2 - مفعّل، مع إطلاق استثناء في حال الفشل. 3) إذا استُخدم modifier FINAL في query من نوع SELECT وكانت نسخ متماثلة متوازية مفعّلة، فسيحاول ClickHouse تعطيلها إذا كان allow_experimental_parallel_reading_from_replicas مضبوطًا على 1، وإلا فسيُطلق استثناءً. #50195 (Nikita Mikhaylov).
  • عند تفعيل نسخ متماثلة متوازية، فإنها تتخطى دائمًا الخوادم غير المتاحة (ويتحكم في هذا السلوك الإعداد skip_unavailable_shards، وهو مفعّل افتراضيًا ولا يمكن إلا تعطيله). هذا يُغلق: #48565. #50293 (Nikita Mikhaylov).

تحسين

  • لن يفك الأمر BACKUP تشفير البيانات المخزنة على الأقراص المشفرة أثناء إنشاء نسخة احتياطية. وبدلًا من ذلك، ستُخزَّن البيانات في النسخة الاحتياطية بصيغة مشفرة. ولا يمكن استعادة هذه النسخ الاحتياطية إلا إلى قرص مشفر يضم قائمة مفاتيح التشفير نفسها (أو قائمة موسعة منها). #48896 (Vitaly Baranov).
  • أُضيفت إمكانية استخدام الجداول المؤقتة في جزء FROM من ATTACH PARTITION FROM و REPLACE PARTITION FROM. #49436 (Roman Vasin).
  • أُضيف الإعداد async_insert لجداول MergeTree. وله المعنى نفسه للإعداد async_insert على مستوى الاستعلام، ويتيح عمليات الإدراج غير المتزامنة لجدول معيّن. ملاحظة: لا يسري مفعوله على استعلامات الإدراج من clickhouse-client، لذا استخدم الإعداد على مستوى الاستعلام في هذه الحالة. #49122 (Anton Popov).
  • أُضيف دعم لواحق الحجم في معلمات عبارة إنشاء الحصة. #49087 (Eridanus).
  • جرى توسيع first_value و last_value لقبول NULL. #46467 (lgbo).
  • أُضيف الاسم المستعار str_to_map و mapFromString للدالة extractKeyValuePairs. وهذا يغلق https://github.com/clickhouse/clickhouse/issues/47185. #49466 (flynn).
  • أُضيف دعم للإصدار 2 من CGroup للمقاييس غير المتزامنة المتعلقة باستخدام الذاكرة وتوافرها. وهذا يغلق #37983. #45999 (sichenzhao).
  • ينبغي أن تتخطى دوال الجداول العنقودية دائمًا الأجزاء غير المتاحة. يغلق #46314. #46765 (zk_kiger).
  • السماح لملف CSV بأن يحتوي على أعمدة فارغة في ترويسه. #47496 (你不要过来啊).
  • أُضيفت دالة الجدول gcs المتوافقة مع S3 في Google Cloud Storage. ومثل الدالتين oss و cosn، فهي مجرد اسم مستعار لدالة الجدول s3، ولا تقدم أي ميزات جديدة. #47815 (Kuba Kaflik).
  • أُضيفت إمكانية استخدام حجم صارم للأجزاء مع S3 (للتوافق مع CloudFlare R2 S3 Storage). #48492 (Azat Khuzhin).
  • أُضيفت أعمدة جديدة تتضمن معلومات عن النسخ المتماثلة لقاعدة البيانات Replicated إلى system.clusters: database_shard_name و database_replica_name و is_active. كما أُضيف بند FROM SHARD اختياري إلى استعلام SYSTEM DROP DATABASE REPLICA. #48548 (Alexander Tokmakov).
  • أُضيف عمود جديد zookeeper_name إلى system.replicas، للإشارة إلى عنقود ZooKeeper (المساعد) الذي تُخزَّن فيه البيانات الوصفية للجدول المتماثل. #48549 (cangyin).
  • يدعم العامل IN مقارنة Date و Date32. يغلق #48736. #48806 (flynn).
  • دعم رموز المحو في HDFS، المؤلفان: @M1eyu2018 و@tomscut. #48833 (M1eyu).
  • تنفيذ SYSTEM DROP REPLICA من عناقيد ZooKeeper الإضافية، وقد يحل #48931. #48932 (wangxiaobo).
  • إضافة نوع البيانات Array إلى MongoDB. يغلق #48598. #48983 (Nikolay Degterinsky).
  • دعم تخزين أنواع البيانات Interval في الجداول. #49085 (larryluogit).
  • السماح باستخدام window function ‏ntile بدون تعريف صريح لإطار النافذة: ntile(3) OVER (ORDER BY a)، ويغلق #46763. #49093 (vdimir).
  • أُضيفت الإعدادات (number_of_mutations_to_delay, number_of_mutations_to_throw) لتأخير استعلامات ALTER التي تنشئ mutations (ALTER UPDATE, ALTER DELETE, ALTER MODIFY COLUMN, …) أو طرح استثناء لها، وذلك عندما يكون لدى الجدول بالفعل عدد كبير من mutations غير المكتملة. #49117 (Anton Popov).
  • التقاط استثناء من create_directories في filesystem cache. #49203 (Kseniia Sumarokova).
  • نسخ الأمثلة المضمّنة إلى الحقل الجديد example في system.functions لاستكمال الحقل description. #49222 (Dan Roscigno).
  • تمكين خيارات connection لقاموس MongoDB. مثال: xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source> ### مدخل توثيقي للتغييرات الموجّهة للمستخدم. #49225 (MikhailBurdukov).
  • أُضيف alias ‏asymptotic لطريقة الحساب asymp في kolmogorovSmirnovTest. كما حُسِّن التوثيق. #49286 (Nikita Mikhaylov).
  • أصبحت دوال aggregation ‏groupBitAnd/Or/Xor تعمل الآن على بيانات الأعداد الصحيحة الموقعة. وهذا يجعلها متسقة مع سلوك الدوال scalar ‏bitAnd/Or/Xor. #49292 (exmy).
  • تقسيم توثيق الدوال إلى حقول أدق وأكثر تفصيلاً. #49300 (Robert Schulze).
  • استخدام عدة threads مشتركة بين جميع الجداول داخل server لتحميل outdated data parts. ويُتحكَّم في حجم pool وqueue الخاصين بها عبر الإعدادين max_outdated_parts_loading_thread_pool_size وoutdated_part_loading_thread_pool_queue_size. #49317 (Nikita Mikhaylov).
  • لا تُفرِط في تقدير حجم البيانات المُعالجة لأعمدة LowCardinality عندما تتشارك القواميس بين الكتل. هذا يُغلق #49322. انظر أيضًا #48745. #49323 (Alexey Milovidov).
  • يستخدم writer الخاص بـ Parquet الآن حجم row group مناسبًا عند استدعائه عبر OUTFILE. #49325 (Michael Kolupaev).
  • السماح باستخدام الكلمات المفتاحية المقيّدة مثل ARRAY كاسم مستعار إذا كان الاسم المستعار بين علامتَي اقتباس. يُغلق هذا #49324. #49360 (Nikolay Degterinsky).
  • نُقلت مهام تحميل أجزاء البيانات وحذفها إلى poolات مشتركة على مستوى الخادم بدلًا من poolات خاصة بكل جدول. ويجري التحكم في أحجام هذه الـ poolات عبر الإعدادات max_active_parts_loading_thread_pool_size وmax_outdated_parts_loading_thread_pool_size وmax_parts_cleaning_thread_pool_size في config ذي المستوى الأعلى. وأصبحت إعدادات مستوى الجدول max_part_loading_threads وmax_part_removal_threads قديمة. #49474 (Nikita Mikhaylov).
  • السماح باستخدام ?password=pass في عنوان URL لواجهة Play. وتُستبدل كلمة المرور في سجل المتصفح. #49505 (Mike Kot).
  • السماح بقراءة الكائنات ذات الحجم الصفري من أنظمة الملفات البعيدة. (لأن الملفات الفارغة لا تُؤخذ لها نسخ احتياطية، فقد ينتهي بنا الأمر إلى وجود blobs صفرية في ملف metadata). يُغلق هذا #49480. #49519 (Kseniia Sumarokova).
  • إرفاق MemoryTracker الخاص بالخيط بـ total_memory_tracker بعد فصل ThreadGroup. #49527 (Dmitry Novik).
  • إصلاح parameterized views عند استخدام query parameter عدة مرات في الاستعلام. #49556 (Azat Khuzhin).
  • تحرير الذاكرة المخصّصة لآخر snapshot من ProfileEvents أُرسلت ضمن سياق الاستعلام. متابعة لـ #47564. #49561 (Dmitry Novik).
  • توفّر الدالة “makeDate” الآن overload متوافقًا مع MySQL (وسيطة السنة واليوم من السنة). #49603 (Robert Schulze).
  • دعم table function dictionary مع RegExpTreeDictionary. #49666 (Han Fei).
  • أُضيفت سياسة scheduling عادلة موزونة لـ IO. وأُضيف أيضًا مدير موارد ديناميكي يتيح تحديث البنية الهرمية لـ IO scheduling أثناء runtime من دون إعادة تشغيل الخادم. #49671 (Sergei Trifonov).
  • إضافة طلب compose بعد multipart upload إلى GCS. يتيح ذلك استخدام عملية النسخ على الكائنات التي رُفعت باستخدام multipart upload. ويُوصى بتعيين s3_strict_upload_part_size إلى قيمة معيّنة، لأن طلب compose قد يفشل مع الكائنات المُنشأة باستخدام parts ذات أحجام مختلفة. #49693 (Antonio Andelic).
  • بالنسبة إلى الدالة extractKeyValuePairs: تم تحسين منطق التحليل «بأفضل جهد» بحيث يقبل key_value_delimiter كجزء صالح من القيمة. كما يبسّط ذلك التفرعات، وقد يسرّع الأداء قليلًا أيضًا. #49760 (Arthur Passos).
  • إضافة الحقل initial_query_id إلى system.processors_profile_log #49777 (helifu).
  • يمكن الآن لجداول سجل النظام أن تمتلك مفاتيح فرز مخصّصة. #49778 (helifu).
  • يُستخدم الحقل الجديد partitions في system.query_log للإشارة إلى التقسيمات المشاركة في العملية الحسابية. #49779 (helifu).
  • تمت إضافة الإعداد enable_the_endpoint_id_with_zookeeper_name_prefix إلى ReplicatedMergeTree (وهو معطّل افتراضيًا). وعند تمكينه، يضيف اسم مجموعة ZooKeeper إلى نقطة نهاية الاتصال بين الخوادم الخاصة بالجدول. وهذا يتجنب أخطاء Duplicate interserver IO endpoint عند وجود جداول مكررة لها المسار نفسه، ولكنها تستخدم ZooKeepers إضافية مختلفة. #49780 (helifu).
  • إضافة query parameters إلى clickhouse-local. يُغلق #46561. #49785 (Nikolay Degterinsky).
  • السماح بتحميل القواميس والدوال من YAML افتراضيًا. في الإصدارات السابقة، كان ذلك يتطلب تحرير dictionaries_config أو user_defined_executable_functions_config في ملف الإعدادات، لأنهما كانا يتوقعان ملفات *.xml. #49812 (Alexey Milovidov).
  • يتيح Kafka table engine الآن استخدام الأعمدة المستعارة. #49824 (Aleksandr Musorin).
  • إضافة إعداد لتقييد الحد الأقصى لعدد الأزواج التي تنتجها extractKeyValuePairs، كإجراء احترازي لتجنب استهلاك قدر كبير جدًا من الذاكرة. #49836 (Arthur Passos).
  • إضافة دعم للحالة (غير المعتادة) التي تكون فيها الوسيطات في العامل IN عبارة عن Tuples ذات عنصر واحد. #49844 (MikhailBurdukov).
  • تدعم الدالة bitHammingDistance نوعَي البيانات String وFixedString. يُغلق #48827. #49858 (flynn).
  • إصلاح أخطاء إعادة تعيين المهلة في العميل على OS X. #49863 (alekar).
  • إضافة دعم للأعداد الصحيحة الكبيرة، مثل UInt128 وInt128 وUInt256 وInt256، في الدالة bitCount. ويتيح ذلك حساب Hamming distance على أقنعة بتات كبيرة لتطبيقات الذكاء الاصطناعي. #49867 (Alexey Milovidov).
  • استخدام البصمات بدلًا من معرّفات المفاتيح في الأقراص المشفّرة. وهذا يبسّط إعداد الأقراص المشفّرة. #49882 (Vitaly Baranov).
  • إضافة نوع البيانات UUID إلى PostgreSQL. يُغلق #49739. #49894 (Nikolay Degterinsky).
  • تقبل الدالة toUnixTimestamp الآن وسيطات Date وDate32. #49989 (Victor Krasnov).
  • قصر احتساب ذاكرة القواميس على ذاكرة الخادم فقط. #49995 (Azat Khuzhin).
  • سيسمح الخادم باستخدام إعدادات SQL_* مثل SQL_AUTO_IS_NULL كعمليات بلا تأثير للتوافق مع MySQL. ويغلق هذا #49927. #50013 (Alexey Milovidov).
  • الحفاظ على initial&#95;query&#95;id الأصلي لاستعلامات ON CLUSTER، وهو ما يفيد في الاستبطان (ضمن distributed_ddl_entry_format_version=5). #50015 (Azat Khuzhin).
  • الحفاظ على التوافق مع الإصدارات السابقة للإعدادات التي أُعيدت تسميتها باستخدام الأسماء المستعارة (allow_experimental_projection_optimization بدلًا من optimize_use_projections، وallow_experimental_lightweight_delete بدلًا من enable_lightweight_delete). #50044 (Azat Khuzhin).
  • دعم تمرير FQDN عبر ضبط my&#95;hostname لتسجيل عقدة العنقود في Keeper. وإضافة الإعداد invisible لدعم مجموعات حوسبة متعددة. وتكون مجموعة الحوسبة، بصفتها عنقودًا، غير مرئية لمجموعات الحوسبة الأخرى. #50186 (Yangkuan Liu).
  • إصلاح قراءة PostgreSQL لجميع البيانات رغم إمكانية تحديد LIMIT n. #50187 (Kseniia Sumarokova).
  • إضافة profile events جديدة للاستعلامات التي تحتوي على استعلامات فرعية (QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries). #50204 (Azat Khuzhin).
  • إضافة الحقل roles في ملف users.xml، مما يتيح تحديد الأدوار مع grants عبر ملف config. #50278 (pufit).
  • الإبلاغ عن CGroupCpuCfsPeriod وCGroupCpuCfsQuota في AsynchronousMetrics. - ومراعاة حدود ذاكرة cgroup v2 أثناء بدء تشغيل الخادم. #50379 (alekar).
  • إضافة معالج إشارة لـ SIGQUIT ليعمل بالطريقة نفسها التي يعمل بها SIGINT. ويغلق هذا #50298. #50435 (Nikolay Degterinsky).
  • في حال فشل تحليل JSON بسبب كِبر حجم الكائن، أخرج الموضع الأخير لتسهيل Debug. #50474 (Valentin Alexeev).
  • دعم القيم العشرية ذات الحجم غير الثابت. ويغلق هذا #49130. #50586 (Kruglov Pavel).

تحسينات البناء/الاختبار/التحزيم

  • keeper-bench جديد ومحسَّن. يمكن تخصيص كل شيء من ملف YAML/XML: - مولِّد الطلبات - يمكن أن يكون لكل نوع من مولدات الطلبات مجموعة محددة من الحقول - يمكن إنشاء الطلبات المتعددة بمجرد تطبيق الأمر نفسه تحت المفتاح multi - يمكن تعريف حقل weight لكل طلب أو طلب فرعي ضمن الطلبات المتعددة للتحكم في التوزيع - تعريف الأشجار التي يلزم إعدادها لتشغيل الاختبار - يمكن تعريف المضيفين مع إمكانية تخصيص جميع قيم timeout، كما يمكن التحكم في عدد الجلسات التي سيتم إنشاؤها لكل مضيف - الأعداد الصحيحة المعرّفة بالحقلين min_value وmax_value هي مولدات أرقام عشوائية. #48547 (Antonio Andelic).
  • ‏Io_uring غير مدعوم على macos، لذا لا تختره عند تشغيل الاختبارات محليًا لتجنب حالات الإخفاق العرضية. #49250 (Frank Chen).
  • دعم حقن الأعطال المُسمّى للاختبار. #49361 (Han Fei).
  • السماح بتشغيل ClickHouse على أنظمة التشغيل التي لا يتوفر فيها نداء النظام prctl (التحكم في العمليات)، مثل AWS Lambda. #49538 (Alexey Milovidov).
  • أُصلحت مشكلة تعارض البناء بين contrib/isa-l و isa-l في qpl 49296. #49584 (jasperzhu).
  • أصبحت الأدوات المساعدة الآن لا تُبنى إلا عند طلبها صراحةً (“-DENABLE_UTILS=1”) بدلًا من بنائها افتراضيًا، مما يقلل أزمنة الربط في بنى التطوير المعتادة. #49620 (Robert Schulze).
  • نقل وصف بناء idxd-config إلى ملف CMake منفصل لتجنب إزالته بالخطأ مستقبلًا. #49651 (jasperzhu).
  • إضافة فحص CI مع المحلّل مفعّلًا في الفرع master. متابعة #49562. #49668 (Dmitry Novik).
  • التبديل إلى LLVM/clang 16. #49678 (Azat Khuzhin).
  • السماح ببناء ClickHouse باستخدام clang-17. #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
  • أصبح دمج ClickHouse في مشاريع cmake أخرى أسهل الآن. #49991 (Amos Bird). (مع أن هذا غير مستحسن بشدة - Alexey Milovidov).
  • إصلاح التسجيل الإضافي الغريب في QEMU بعد #47151، راجع https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless&#95;tests&#95;&#95;release&#95;&#95;databasereplicated&#95;&#95;[3&#95;4].html. #50442 (Mikhail f. Shiryaev).
  • بات ClickHouse يعمل على Linux RISC-V 6.1.22. وبذلك أُغلِقت #50456. #50457 (Alexey Milovidov).
  • ترقية Protobuf الداخلي إلى v3.18 (لإصلاح CVE-2022-1941 غير الصحيح). #50400 (Robert Schulze).
  • ترقية libxml2 الداخلي إلى v2.10.4 (لإصلاح CVE-2023-28484 غير الصحيح وCVE-2023-29469 غير الصحيح). #50402 (Robert Schulze).
  • ترقية c-ares إلى v1.19.1 (CVE-2023-32067 غير صحيح، وCVE-2023-31130 غير صحيح، وCVE-2023-31147 غير صحيح). #50403 (Robert Schulze).
  • إصلاح CVE-2022-2469 غير الصحيح في libgsasl. #50404 (Robert Schulze).

إصلاح خطأ (سلوك غير صحيح ظاهر للمستخدمين في إصدار مستقر رسمي)

  • ActionsDAG: إصلاح تحسين غير صحيح #47584 (Salvatore Mesoraca).
  • التعامل الصحيح مع اللقطات المتزامنة في Keeper #48466 (Antonio Andelic).
  • أصبح MergeTreeMarksLoader يحتفظ بـ DataPart بدلاً من DataPartStorage #48515 (SmitaRKulkarni).
  • إصلاح حالة Sequence #48603 (Ilya Golshtein).
  • التحقق من التزامن في Back/Restore عند وجود حالات فشل سابقة #48726 (SmitaRKulkarni).
  • إصلاح مشكلة عدم زيادة مقياس ReadonlyReplica عند Attach لجدول بمسار ZK غير موجود #48954 (wangxiaobo).
  • إصلاح احتمال استدعاء terminate بسبب استثناء غير مُلتقط في بعض المواضع #49112 (Kruglov Pavel).
  • إصلاح خطأ key not found في الاستعلامات التي تحتوي على عدة StorageJoin #49137 (vdimir).
  • إصلاح نتيجة استعلام غير صحيحة عند استخدام primary key من النوع Nullable #49172 (Duc Canh Le).
  • إصلاح reinterpretAs*() على الأجهزة ذات ترتيب البايتات big-endian #49198 (Suzy Wang).
  • (Experimental zero-copy replication) جعل قفل الأجزاء في zero-copy أكثر ذرّية #49211 (alesapin).
  • إصلاح حالة تسابق عند تحميل Outdated parts #49223 (Alexander Tokmakov).
  • إصلاح مشكلة إرجاع نتيجة غير صحيحة عندما تكون جميع قيم key value هي NULL ويُستخدم group مع rollup #49282 (Shuai li).
  • إصلاح حساب load_factor لقواميس HASHED مع SHARDS #49319 (Azat Khuzhin).
  • منع تهيئة CODECs للضغط للأعمدة المستعارة #49363 (Timur Solodovnikov).
  • إصلاح خطأ في إزالة دليل part موجود #49365 (alesapin).
  • إصلاح GCS بشكل صحيح عند استخدام HMAC #49390 (Antonio Andelic).
  • إصلاح خطأ fuzz عندما لا يتم إنشاء set الخاصة بالاستعلام الفرعي عند القراءة من remote() #49425 (Alexander Gololobov).
  • عكس shutdown_wait_unfinished_queries #49427 (Konstantin Bogdanov).
  • (Experimental zero-copy replication) إصلاح خطأ آخر في zero-copy #49473 (alesapin).
  • إصلاح إعداد database الخاص بـ Postgres #49481 (Mal Curtis).
  • التعامل الصحيح مع وسيطات s3Cluster #49490 (Antonio Andelic).
  • إصلاح خلل في destructor الخاصة بـ TraceCollector. #49508 (Yakov Olkhovskiy).
  • إصلاح تعطل AsynchronousReadIndirectBufferFromRemoteFS عند عمليات seek القصيرة #49525 (Michael Kolupaev).
  • إصلاح ترتيب تحميل Dictionaries #49560 (Alexander Tokmakov).
  • منع تغيير نوع البيانات للعمود Object(‘json’) #49563 (Nikolay Degterinsky).
  • إصلاح اختبار stress (خطأ منطقي: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
  • إصلاح خلل في DISTINCT #49628 (Alexey Milovidov).
  • إصلاح: DISTINCT بالترتيب نفسه مع القيم الصفرية في الأعمدة غير المرتبة #49636 (Igor Nikonov).
  • إصلاح خطأ طفيف في الأعداد الصحيحة الكبيرة اكتشفه UBSan باستخدام fuzzer #49645 (Alexey Milovidov).
  • إصلاح القراءة من الأعمدة sparse بعد إعادة التشغيل #49660 (Anton Popov).
  • إصلاح assert في SpanHolder::finish() مع fibers #49673 (Kruglov Pavel).
  • إصلاح دوال short circuit وmutations مع الوسيطات sparse #49716 (Anton Popov).
  • إصلاح كتابة الملفات المضافة إلى incremental backups #49725 (Vitaly Baranov).
  • إصلاح الخطأ “There is no physical column _row_exists in table” الذي يحدث أثناء lightweight delete mutation على جدول يحتوي على عمود Object. #49737 (Alexander Gololobov).
  • إصلاح مشكلة msan في randomStringUTF8(uneven number) #49750 (Robert Schulze).
  • إصلاح aggregate function ‏kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH).
  • إصلاح الأسماء المستعارة للإعدادات في native protocol #49776 (Azat Khuzhin).
  • إصلاح arrayMap مع Array من Tuples بوسيط واحد #49789 (Anton Popov).
  • إصلاح إعدادات throttling الخاصة بـ IO/BACKUPs لكل query #49797 (Azat Khuzhin).
  • إصلاح تعيين NULL في تعريف profile #49831 (Vitaly Baranov).
  • إصلاح خطأ يتعلق بالإسقاطات والإعداد aggregate_functions_null_for_empty (لـ query_plan_optimize_projection) #49873 (Amos Bird).
  • إصلاح معالجة الدفعة المعلّقة لـ INSERT غير المتزامن في Distributed بعد إعادة التشغيل #49884 (Azat Khuzhin).
  • إصلاح عبارة assert في CacheMetadata::doCleanup #49914 (Kseniia Sumarokova).
  • إصلاح is_prefix في OptimizeRegularExpression #49919 (Han Fei).
  • إصلاح المقاييس WriteBufferFromS3Bytes وWriteBufferFromS3Microseconds وWriteBufferFromS3RequestsErrors #49930 (Aleksandr Musorin).
  • إصلاح ترميز IPv6 في Protobuf #49933 (Yakov Olkhovskiy).
  • إصلاح احتمال حدوث خطأ منطقي عند تحليل Nullable بشكل غير صحيح في التنسيقات النصية #49960 (Kruglov Pavel).
  • إضافة الإعداد output_format_parquet_compliant_nested_types لإنتاج ملفات Parquet أكثر توافقًا #50001 (Michael Kolupaev).
  • إصلاح خطأ منطقي في اختبار stress “Not enough space to add …” #50021 (Kseniia Sumarokova).
  • تجنّب حدوث حالة deadlock عند بدء الجدول في خيط attach الخاص بـ ReplicatedMergeTree #50026 (Antonio Andelic).
  • إصلاح عبارة assert في SpanHolder::finish() مع fibers، المحاولة الثانية #50034 (Kruglov Pavel).
  • إضافة escaping صحيح لتسلسل سياق OpenTelemetry الخاص بـ DDL #50045 (Azat Khuzhin).
  • إصلاح الإبلاغ عن projection parts المعطوبة #50052 (Amos Bird).
  • إصلاح مشكلة عدم المساواة مع NaN في ترجمة JIT البرمجية #50056 (Maksim Kita).
  • إصلاح الانهيار في حالة Replicated database بدون معاملات #50058 (Azat Khuzhin).
  • إصلاح الانهيار مع multiIf عند وجود شرط ثابت ومعاملات Nullable #50123 (Anton Popov).
  • إصلاح index analysis غير الصحيح للمفاتيح المرتبطة بـ Date #50153 (Amos Bird).
  • عدم السماح بتعديل ORDER BY عند عدم وجود أعمدة ORDER BY #50154 (Han Fei).
  • إصلاح index analysis المعطوب عندما يحتوي العامل الثنائي على معامل ثابت بقيمة NULL #50177 (Amos Bird).
  • clickhouse-client: عدم السماح باستخدام --query و --queries-file في الوقت نفسه #50210 (Alexey Gerasimchuk).
  • إصلاح UB في امتدادات INTO OUTFILE ‏(APPEND / AND STDOUT) و WATCH EVENTS #50216 (Azat Khuzhin).
  • إصلاح تخطي المسافات في نهاية الصف في تنسيق CustomSeparatedIgnoreSpaces #50224 (Kruglov Pavel).
  • إصلاح تحليل البيانات الوصفية الخاصة بـ Iceberg #50232 (Kseniia Sumarokova).
  • إصلاح SELECT المتداخل على Distributed في عبارة WITH #50234 (Azat Khuzhin).
  • إصلاح مشكلة في msan ضمن keyed siphash #50245 (Robert Schulze).
  • إصلاح أخطاء sockets الخاصة بـ Poco في وضع non-blocking، واستخدام sockets non-blocking فعلية #50252 (Kruglov Pavel).
  • إصلاح حساب checksum لإدخالات النسخ الاحتياطي #50264 (Vitaly Baranov).
  • إصلاح مشكلة NaN في دوال المقارنة #50287 (Maksim Kita).
  • إصلاح مفتاح Nullable في JIT aggregation #50291 (Maksim Kita).
  • إصلاح تعطل clickhouse-local عند كتابة مخرجات Arrow أو Parquet فارغة #50328 (Michael Kolupaev).
  • إصلاح تعطل عند استدعاء Pool::Entry::disconnect() #50334 (Val Doroshchuk).
  • تحسين جلب الجزء عبر الإبقاء على قفل الدليل لمدة أطول #50339 (SmitaRKulkarni).
  • إصلاح الدوال bitShift* عندما يكون كلا المعاملين ثابتين #50343 (Kruglov Pavel).
  • إصلاح حالة deadlock في Keeper عند حدوث Exception أثناء المعالجة المسبقة للطلبات. #50387 (frinkr).
  • إصلاح hash لقيم الأعداد الصحيحة الثابتة #50421 (Robert Schulze).
  • إصلاح merge_tree_min_rows_for_seek/merge_tree_min_bytes_for_seek لفهارس تخطي البيانات #50432 (Azat Khuzhin).
  • تقييد عدد المهام قيد التنفيذ لتحميل الأجزاء القديمة #50450 (Nikita Mikhaylov).
  • إصلاح في Keeper: تطبيق الحالة غير المُثبّتة بعد تثبيت snapshot #50483 (Antonio Andelic).
  • إصلاح الطيّ غير الصحيح للثوابت #50536 (Alexey Milovidov).
  • إصلاح خطأ منطقي في اختبار الإجهاد (المساحة غير كافية لإضافة …) #50583 (Kseniia Sumarokova).
  • إصلاح تحويل Null إلى LowCardinality(Nullable) في دالة الجدول values #50637 (Kruglov Pavel).
  • التراجع عن تحسين غير صالح لـ RegExpTreeDictionary #50642 (Johann Gan).

إصدار ClickHouse 23.4، 2023-04-26. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • أصبح المُنسِّق ‘%M’ في الدالة formatDateTime() يطبع اسم الشهر الآن بدلًا من الدقائق. وهذا يجعل السلوك متسقًا مع MySQL. ويمكن استعادة السلوك السابق باستخدام الإعداد “formatdatetime_parsedatetime_m_is_month_name = 0”. #47246 (Robert Schulze).
  • لا يكون لهذا التغيير معنى إلا إذا كنت تستخدم ذاكرة التخزين المؤقت لنظام الملفات الافتراضي. إذا لم تكن قيمة path في تهيئة ذاكرة التخزين المؤقت لنظام الملفات الافتراضي فارغة، ولم تكن مسارًا مطلقًا، فسيتم وضعها في <دليل بيانات خادم ClickHouse>/caches/<path_from_cache_config>. #48784 (Kseniia Sumarokova).
  • يُرفض الآن استخدام الفهارس الأساسية/الثانوية ومفاتيح الفرز ذات التعبيرات المتطابقة. ويمكن تعطيل هذا السلوك باستخدام الإعداد allow_suspicious_indices. #48536 (凌涛).

ميزة جديدة

  • دعم دالة التجميع الجديدة quantileGK/quantilesGK، على غرار approx_percentile في Spark. راجع خوارزمية Greenwald-Khanna على الرابط http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf. #46428 (李扬).
  • إضافة تعليمة SHOW COLUMNS التي تعرض معلومات موجزة من system.columns. #48017 (Robert Schulze).
  • أُضيف المُعدِّلان LIGHTWEIGHT وPULL إلى استعلام SYSTEM SYNC REPLICA. ينتظر إصدار LIGHTWEIGHT عمليات الجلب ونطاقات الإسقاط فقط (ويتم تجاهل عمليات الدمج وmutations). أما إصدار PULL فيجلب إدخالات جديدة من ZooKeeper ولا ينتظرها. يُصلح #47794. #48085 (Alexander Tokmakov).
  • إضافة الدالة kafkaMurmurHash للتوافق مع Kafka DefaultPartitioner. إغلاق #47834. #48185 (Nikolay Degterinsky).
  • السماح بإنشاء مستخدم بسهولة مع الامتيازات نفسها الخاصة بالمستخدم الحالي باستخدام GRANT CURRENT GRANTS. #48262 (pufit).
  • إضافة دالة التجميع الإحصائية kolmogorovSmirnovTest. إغلاق #48228. #48325 (FFFFFFFHHHHHHH).
  • أُضيف العمود lost_part_count إلى الجدول system.replicas. تعرض قيمة العمود العدد الإجمالي للأجزاء المفقودة في الجدول المقابل. تُخزَّن القيمة في ZooKeeper ويمكن استخدامها بدلًا من حدث profile‏ ReplicatedDataLoss غير الدائم لأغراض المراقبة. #48526 (Sergei Trifonov).
  • إضافة الدالة soundex للتوافق. إغلاق #39880. #48567 (FriendLey).
  • دعم النوع Map في JSONExtract. #48629 (李扬).
  • إضافة التنسيق PrettyJSONEachRow لإخراج JSON منسّق مع فواصل أسطر جديدة ومسافة بادئة من 4 فراغات. #48898 (Kruglov Pavel).
  • إضافة تنسيق الإدخال ParquetMetadata لقراءة البيانات الوصفية لملف Parquet. #48911 (Kruglov Pavel).
  • إضافة الدالة extractKeyValuePairs لاستخراج أزواج مفتاح-قيمة من السلاسل النصية. قد تحتوي سلاسل الإدخال على ضجيج (مثل ملفات السجل، ولا يلزم أن تكون منسّقة بالكامل بصيغة أزواج مفتاح-قيمة)، وستبحث الخوارزمية عن أزواج مفتاح-قيمة المطابقة للوسائط المُمرَّرة إلى الدالة. حتى الآن، تقبل الدالة الوسائط التالية: data_column (إلزامي)، وkey_value_pair_delimiter (القيمة الافتراضية :)، وpair_delimiters (القيم الافتراضية \space \, \;) وquoting_character (القيمة الافتراضية علامات الاقتباس المزدوجة). #43606 (Arthur Passos).
  • يمكن الآن استدعاء الدوال replaceOne() وreplaceAll() وreplaceRegexpOne() وreplaceRegexpAll() باستخدام وسيطات pattern وreplacement غير ثابتة. #46589 (Robert Schulze).
  • أُضيفت دوال للتعامل مع الأعمدة من النوع Map: ‏mapConcat وmapSort وmapExists. #48071 (Anton Popov).

تحسين الأداء

  • أصبحت قراءة الملفات بتنسيق Parquet أسرع بكثير. أُضيف التوازي إلى عمليات الإدخال/الإخراج وفك الترميز (ويتحكم فيها الإعداد max_threads)، ولا تُقرأ إلا نطاقات البيانات المطلوبة. #47964 (Michael Kolupaev).
  • إذا شغّلنا mutation مع ‎IN (subquery)‎ على هذا النحو: ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table) وكان الجدول t يحتوي على عدة parts، فسيُبنى في الذاكرة set للاستعلام الفرعي SELECT id FROM huge_table لكل part. وإذا كان عدد الـ parts كبيرًا، فقد يستهلك ذلك قدرًا كبيرًا من الذاكرة (وقد يؤدي إلى OOM) ومن CPU. والحل هو إدخال cache قصيرة العمر لمجموعات الـ sets التي تبنيها مهام mutation حاليًا. وإذا نُفِّذت مهمة أخرى من mutation نفسها بالتوازي، فيمكنها العثور على الـ set في cache، وانتظار اكتمال بنائه، ثم إعادة استخدامه. #46835 (Alexander Gololobov).
  • لا تتحقق من dependencies عند تطبيق استعلامات ALTER TABLE إلا عند الحاجة. #48062 (Raúl Marín).
  • تحسين الدالة mapUpdate. #48118 (Anton Popov).
  • يُرسَل الآن استعلام داخلي إلى replica المحلية بشكل صريح، وتُستقبَل البيانات منها عبر واجهة loopback. ولا يُراعى الإعداد prefer_localhost_replica مع نسخ متماثلة متوازية. وهذا مطلوب لتحسين scheduling ويجعل الشيفرة أنظف: إذ تقتصر مسؤولية initiator على تنسيق عملية القراءة ودمج النتائج، مع الاستمرار في الرد على الطلبات بينما تتولى جميع الاستعلامات الثانوية قراءة البيانات. ملاحظة: استخدام واجهة loopback ليس الأفضل من حيث الأداء، لكن خلاف ذلك قد تتضور بعض replicas جوعًا للمهام، ما قد يؤدي إلى تنفيذ أبطأ للاستعلامات وعدم الاستفادة من جميع الموارد الممكنة. كما أصبحت تهيئة coordinator أكثر lazy. فجميع الطلبات الواردة تتضمن معلومات عن خوارزمية القراءة، ويُهيَّأ coordinator بها عند وصول أول طلب. وإذا قررت أي replica القراءة بخوارزمية مختلفة، فسيُطرَح استثناء وسيُجهَض الاستعلام. #48246 (Nikita Mikhaylov).
  • لا تُبنَ set للطرف الأيمن من clause IN مع subquery عندما يكون استخدامها مقتصرًا على تحليل skip indexes، وتكون هذه الأخيرة معطلة عبر الإعداد (use_skip_indexes=0). في السابق، كان ذلك قد يؤثر في أداء queries. #48299 (Anton Popov).
  • أصبح query processing متوازيًا مباشرة بعد القراءة من FROM file(...). مرتبط بـ #38755. #48525 (Igor Nikonov). كما أصبح query processing متوازيًا مباشرة بعد القراءة من أي مصدر بيانات. وتشمل مصادر البيانات المتأثرة غالبًا المصادر البسيطة أو وسائط التخزين الخارجية مثل table functions url وfile. #48727 (Igor Nikonov). ويتحكم في ذلك الإعداد parallelize_output_from_storages، وهو غير مفعّل افتراضيًا.
  • خُفِّض التنازع على mutex الخاص بـ ThreadPool (وقد يحسن الأداء عند وجود عدد هائل من jobs الصغيرة). #48750 (Sergei Trifonov).
  • تقليل memory usage لعدة mutations من ALTER DELETE. #48522 (Nikolai Kochetov).
  • إزالة محاولات connection الزائدة إذا كان الإعداد skip_unavailable_shards مفعّلًا. #48771 (Azat Khuzhin).

الميزة التجريبية

  • تُدمَج الإدخالات في ذاكرة التخزين المؤقت للاستعلامات الآن إلى الحد الأقصى max_block_size وتُضغط. #45912 (Robert Schulze).
  • أصبح من الممكن الآن تحديد حصص لكل مستخدم في ذاكرة التخزين المؤقت للاستعلامات. #48284 (Robert Schulze).
  • بعض الإصلاحات على النسخ المتماثلة المتوازية #48433 (Nikita Mikhaylov).
  • تنفيذ zero-copy replication (ميزة تجريبية) على الأقراص المشفّرة. #48741 (Vitaly Baranov).

تحسين

  • زيادة القيمة الافتراضية لـ connect_timeout_with_failover_ms إلى 1000 ملّي ثانية (بسبب إضافة connections غير المتزامنة في https://github.com/ClickHouse/ClickHouse/pull/47229). يُغلق #5188. #49009 (Kruglov Pavel).
  • عدة تحسينات تتعلق ببحيرات البيانات: - جعل Iceberg يعمل مع البيانات غير المقسّمة إلى partition. - دعم الإصدار v2 من تنسيق Iceberg (إذ كان المدعوم سابقًا v1 فقط) - دعم قراءة البيانات المقسّمة إلى partition في DeltaLake/Hudi - تسريع قراءة metadata الخاصة بـ DeltaLake باستخدام ملفات checkpoint الخاصة بـ Delta - إصلاح reads غير الصحيحة في Hudi: إذ كان يختار سابقًا البيانات المطلوب قراءتها بشكل غير صحيح، ولذلك لم يكن يقرأ بصورة صحيحة إلا الجداول صغيرة الحجم - جعل هذه engines تلتقط تحديثات البيانات المتغيرة (إذ كانت state تُضبط سابقًا عند إنشاء الجدول) - إجراء اختبارات مناسبة لـ Iceberg/DeltaLake/Hudi باستخدام spark. #47307 (Kseniia Sumarokova).
  • إضافة connection غير متزامن إلى socket، وكتابة غير متزامنة إلى socket. وجعل إنشاء connections وإرسال query/external tables غير متزامنَين عبر shards. وإعادة هيكلة الشيفرة باستخدام fibers. يُغلق #46931. سنتمكن من زيادة connect_timeout_with_failover_ms افتراضيًا بعد هذا PR (https://github.com/ClickHouse/ClickHouse/issues/5188). #47229 (Kruglov Pavel).
  • دعم أقسام config keeper/keeper_server كبديل عن zookeeper. يُغلق #34766، #34767. #35113 (李扬).
  • أصبح من الممكن ضبط العلامة secure في named_collections لقاموس له source من جدول ClickHouse. يعالج #38450. #46323 (Ilya Golshtein).
  • تدعم الدالة bitCount نوعَي البيانات FixedString وString. #49044 (flynn).
  • أُضيفت retries قابلة للتهيئة لجميع العمليات مع [Zoo]Keeper في استعلامات Backup. #47224 (Nikita Mikhaylov).
  • تفعيل use_environment_credentials لـ S3 افتراضيًا، بحيث تُنشأ سلسلة provider بالكامل بشكل افتراضي. #47397 (Antonio Andelic).
  • حاليًا، تشبه الدالة JSON_VALUE الدالة get_json_object في spark، إذ تدعم جلب value من JSON string عبر path مثل ‘$.key’. لكنها لا تزال تختلف عنها في بعض الأمور: - 1. في get_json_object الخاصة بـ spark، ستُعاد null إذا لم يكن path موجودًا، أما في JSON_VALUE فستُعاد سلسلة فارغة؛ - 2. في get_json_object الخاصة بـ spark، يمكن إرجاع value من نوع معقّد، مثل قيمة JSON object/array، أما في JSON_VALUE فستُعاد سلسلة فارغة. #47494 (KevinyhZou).
  • بالنسبة إلى use_structure_from_insertion_table_in_table_functions، أصبح تمرير structure جدول الإدخال إلى table function أكثر مرونة. وتم إصلاح مشكلة في mapping الأسماء واستخدام virtual columns. لم تعد هناك حاجة إلى الإعداد ‘auto’. #47962 (Yakov Olkhovskiy).
  • لا تواصل إعادة محاولة الاتصال بـ Keeper إذا أُلغي الاستعلام أو تجاوز الحدود. #47985 (Raúl Marín).
  • دعم إدخال/إخراج Enum في BSONEachRow، مع السماح بجميع أنواع مفاتيح map وتجنّب العمليات الحسابية الإضافية عند الإخراج. #48122 (Kruglov Pavel).
  • دعم المزيد من أنواع ClickHouse في تنسيقات ORC/Arrow/Parquet: ‏Enum(8|16)، و(U)Int(128|256)، وDecimal256 (في ORC)، والسماح بقراءة IPv4 من قيم Int32 (إذ يخرج ORC قيمة IPv4 على هيئة Int32، ولم يكن بالإمكان قراءتها مجددًا)، وإصلاح قراءة Nullable(IPv6) من البيانات الثنائية في ORC. #48126 (Kruglov Pavel).
  • إضافة العمودين perform_ttl_move_on_insert وload_balancing إلى الجدول system.storage_policies، وتعديل نوع العمود volume_type إلى Enum8. #48167 (lizhuoyu5).
  • أُضيف دعم للأمر BACKUP ALL الذي ينشئ نسخًا احتياطية لجميع الجداول وقواعد البيانات، بما في ذلك المؤقتة وتلك التابعة للنظام. #48189 (Vitaly Baranov).
  • تدعم الدالة mapFromArrays النوع Map كمدخل. #48207 (李扬).
  • أصبح ناتج بعض أوامر SHOW PROCESSLIST مرتبًا الآن. #48241 (Robert Schulze).
  • تقييد المعدل لكل استعلام/على مستوى الخادم لعمليات remote IO/local IO/النسخ الاحتياطية (إعدادات الخادم: max_remote_read_network_bandwidth_for_server وmax_remote_write_network_bandwidth_for_server وmax_local_read_bandwidth_for_server وmax_local_write_bandwidth_for_server وmax_backup_bandwidth_for_server، والإعدادات: max_remote_read_network_bandwidth وmax_remote_write_network_bandwidth وmax_local_read_bandwidth وmax_local_write_bandwidth وmax_backup_bandwidth). #48242 (Azat Khuzhin).
  • دعم المزيد من الأنواع في تنسيق CapnProto: ‏Map، و(U)Int(128|256)، وDecimal(128|256). مع السماح بتحويلات الأعداد الصحيحة أثناء الإدخال/الإخراج. #48257 (Kruglov Pavel).
  • عدم طرح CURRENT_WRITE_BUFFER_IS_EXHAUSTED في السلوك الطبيعي. #48288 (Raúl Marín).
  • إضافة الإعداد الجديد keeper_map_strict_mode الذي يفرض ضمانات إضافية على العمليات المنفذة فوق جداول KeeperMap. #48293 (Antonio Andelic).
  • التحقق من أن نوع المفتاح الأساسي في القاموس البسيط هو نوع عدد صحيح غير موقّع أصلي. وإضافة الإعداد check_dictionary_primary_key للتوافق (اضبط check_dictionary_primary_key =false لتعطيل التحقق). #48335 (lizhuoyu5).
  • عدم تكرار mutations الخاصة بـ KeeperMap لأنه غير ضروري. #48354 (Antonio Andelic).
  • السماح بكتابة/قراءة tuple غير مسمّى كـ Message متداخل في تنسيق Protobuf. وتتم مطابقة عناصر Tuple وحقول Message حسب الموضع. #48390 (Kruglov Pavel).
  • دعم الإعدادَين additional_table_filters وadditional_result_filter في المخِّط الجديد. كما أُضيفت فقرة توثيقية لـ additional_result_filter. #48405 (Dmitry Novik).
  • أصبح parseDateTime يدعم الآن سلسلة التنسيق ‘%f’ (الثواني الكسرية). #48420 (Robert Schulze).
  • أصبحت سلسلة التنسيق “%f” في formatDateTime() تطبع الآن “000000” إذا كانت القيمة المنسّقة لا تحتوي على ثوانٍ كسرية، ويمكن استعادة السلوك السابق (صفر واحد) باستخدام الإعداد “formatdatetime_f_prints_single_zero = 1”. #48422 (Robert Schulze).
  • عدم تكرار DELETE و TRUNCATE في KeeperMap. #48434 (Antonio Andelic).
  • توليد قيم Decimals وBools صالحة في الدالة generateRandom. #48436 (Kruglov Pavel).
  • السماح بالفواصل اللاحقة في قائمة التعبيرات ضمن استعلام SELECT، على سبيل المثال SELECT a, b, c, FROM table. يُغلق #37802. #48438 (Nikolay Degterinsky).
  • جعل معامِلَي العميل --user و--password يتجاوزان متغيرَي البيئة CLICKHOUSE_USER وCLICKHOUSE_PASSWORD. يُغلق #38909. #48440 (Nikolay Degterinsky).
  • أُضيفت عمليات إعادة المحاولة عند تحميل أجزاء البيانات في جداول MergeTree في حالة الأخطاء القابلة لإعادة المحاولة. #48442 (Anton Popov).
  • إضافة دعم لأنواع البيانات Date وDate32 وDateTime وDateTime64 في الدوال arrayMin وarrayMax وarrayDifference. يُغلق #21645. #48445 (Nikolay Degterinsky).
  • إضافة دعم للماكرو {server_uuid}. وهو مفيد لتحديد النسخ المتماثلة في المجموعات المتوسعة تلقائيًا عندما تُضاف نسخ متماثلة جديدة وتُزال باستمرار أثناء وقت التشغيل. هذا يُغلق #48554. #48563 (Alexey Milovidov).
  • سينشئ نص التثبيت رابطًا صلبًا بدلًا من النسخ إذا كان ذلك ممكنًا. #48578 (Alexey Milovidov).
  • دعم صياغة SHOW TABLE بالمعنى نفسه لـ SHOW CREATE TABLE. يُغلق #48580. #48591 (flynn).
  • أصبحت المخازن المؤقتة المؤقتة لـ HTTP تدعم الآن العمل عبر إخلاء البيانات من ذاكرة التخزين المؤقت لنظام الملفات الافتراضي. #48664 (Vladimir C).
  • أصبح استنتاج المخطط يعمل مع CREATE AS SELECT. يُغلق #47599. #48679 (flynn).
  • تمت إضافة الإعداد replicated_max_mutations_in_one_entry إلى ReplicatedMergeTree، ما يتيح تقييد عدد أوامر mutation لكل إدخال MUTATE_PART واحد (القيمة الافتراضية هي 10000). #48731 (Alexander Tokmakov).
  • في أنواع AggregateFunction، لا تُحتسب بايتات Arena غير المستخدمة ضمن read_bytes. #48745 (Raúl Marín).
  • إصلاح بعض الإعدادات المتعلقة بـ MySQL التي لم تكن تُعالَج عند استخدام MySQL dictionary source + named collection. يُغلق #48402. #48759 (Kseniia Sumarokova).
  • إذا عيّن مستخدم max_single_part_upload_size إلى قيمة كبيرة جدًا، فقد يؤدي ذلك إلى حدوث crash بسبب خطأ في AWS S3 SDK. يُصلح هذا #47679. #48816 (Alexey Milovidov).
  • إصلاح data race في RabbitMQ (التقرير)، مع إعادة هيكلة الشيفرة. #48845 (Kseniia Sumarokova).
  • إضافة aliases name و part_name من system.parts و system.part_log. يُغلق #48718. #48850 (sichenzhao).
  • تدعم الدوال “arrayDifferenceSupport()” و”arrayCumSum()” و”arrayCumSumNonNegative()” الآن Arrays إدخال من أنواع الأعداد الصحيحة العريضة (U)Int128/256. #48866 (cluster).
  • لم تعد history متعددة الأسطر في clickhouse-client تُحشّى. وهذا يجعل اللصق أكثر سلاسة. #48870 (Joanna Hulboj).
  • تنفيذ تحسين طفيف للحالة النادرة التي يُشغَّل فيها ClickHouse داخل LXC ويُستخدم فيها LXCFS. توجد مشكلة في LXCFS، إذ تُرجع أحيانًا الخطأ “Transport endpoint is not connected” عند القراءة من ملف داخل /proc. وكان هذا الخطأ يُسجَّل بشكل صحيح في server log الخاص بـ ClickHouse. وأضفنا أيضًا حلاً التفافيًا لهذه المشكلة عبر إعادة فتح الملف. وهذا تغيير ضئيل جدًا. #48922 (Real).
  • تحسين احتساب الذاكرة لعمليات prefetches. وجعل إعدادات prefetch عشوائية في CI. #48973 (Kseniia Sumarokova).
  • تعيين headers بشكل صحيح لعمليات النسخ native على GCS. #48981 (Antonio Andelic).
  • إضافة دعم لتحديد أسماء الإعدادات في سطر الأوامر باستخدام الشرطات بدلًا من الشرطات السفلية، على سبيل المثال --max-threads بدلًا من --max_threads. بالإضافة إلى ذلك، تمت إضافة دعم لمحارف الشرطة Unicode مثل بدلًا من -- — وهذا مفيد عندما تتواصل مع فريق في شركة أخرى ويقوم manager من ذلك الفريق بنسخ الشيفرة ولصقها من MS Word. #48985 (alekseygolub).
  • أضف آلية احتياطية للمصادقة بكلمة المرور عند فشل المصادقة باستخدام شهادة مستخدم SSL. يُغلق #48974. #48989 (Nikolay Degterinsky).
  • حسّن لوحة المعلومات المضمّنة. يُغلق #46671. #49036 (Kevin Zhang).
  • أضف أحداث profile لرسائل السجل، بحيث يمكنك بسهولة معرفة عدد رسائل السجل حسب مستوى الخطورة. #49042 (Alexey Milovidov).
  • في الإصدارات السابقة، كان التنسيق LineAsString يعمل بشكل غير متسق، سواء أكان التحليل المتوازي مفعّلًا أم لا، عند وجود فواصل أسطر DOS أو macOS Classic. يُغلق هذا #49039. #49052 (Alexey Milovidov).
  • ستذكر رسالة الاستثناء الخاصة بمعلمة الاستعلام غير المحللة أيضًا اسم المعلمة. إعادة تنفيذ #48878. يُغلق #48772. #49061 (Alexey Milovidov).

تحسينات البناء/الاختبار/التغليف

  • تحديث المناطق الزمنية. تم تحديث ما يلي: Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore. #48572 (Alexey Milovidov).
  • تقليل عدد التبعيات في ملفات الترويسة لتسريع البناء. #47984 (Dmitry Novik).
  • جعل ضغط العلامات والفهارس عشوائيًا في الاختبارات. #48286 (Alexey Milovidov).
  • ترقية إصدار ZSTD الداخلي من 1.5.4 إلى 1.5.5. #46797 (Robert Schulze).
  • جعل عمليات الدمج العمودية من الأجزاء compact إلى الأجزاء wide عشوائيةً في الاختبارات. #48287 (Raúl Marín).
  • دعم قيمة checksum من نوع CRC32 في HDFS، مع إصلاح مشكلات الأداء. #48614 (Alexey Milovidov).
  • إزالة ما تبقى من دعم GCC. #48671 (Robert Schulze).
  • إضافة تشغيل CI مع تمكين البنية التحتية الجديدة لـ محلّل. #48719 (Dmitry Novik).

إصلاح خلل (سلوك غير صحيح ملحوظ للمستخدم في إصدار مستقر رسمي)

  • إصلاح system.query_views_log لـ MVs التي تُرسَل من الخيوط الخلفية #46668 (Azat Khuzhin).
  • إصلاح عدة أخطاء في RENAME COLUMN #46946 (alesapin).
  • إصلاح مشكلات طفيفة في التمييز اللوني في clickhouse-format #47610 (Natasha Murashkina).
  • إصلاح خطأ في libc++ الخاصة بـ LLVM كان يؤدي إلى تعطل عند رفع الأجزاء إلى S3 إذا كان حجمها أكبر من INT_MAX #47693 (Azat Khuzhin).
  • إصلاح تجاوز السعة في الدالة sparkbar #48121 (Vladimir C).
  • إصلاح حالة تسابق في S3 #48190 (Anton Popov).
  • تعطيل JIT للدوال التجميعية بسبب سلوك غير متسق #48195 (Alexey Milovidov).
  • إصلاح تنسيق alter (طفيف) #48289 (Natasha Murashkina).
  • إصلاح استخدام CPU في RabbitMQ (وقد ساء في 23.2 بعد #44404) #48311 (Kseniia Sumarokova).
  • إصلاح تعطل في EXPLAIN PIPELINE عند Merge فوق Distributed #48320 (Azat Khuzhin).
  • إصلاح إجراء تسلسل LowCardinality كـ Arrow dictionary #48361 (Kruglov Pavel).
  • إعادة تعيين أداة التنزيل لجزء ملف التخزين المؤقت في TemporaryFileStream #48386 (Vladimir C).
  • إصلاح احتمال تعليق SYSTEM SYNC REPLICA في حالة DROP/REPLACE PARTITION #48391 (Azat Khuzhin).
  • إصلاح خطأ عند بدء التشغيل عند تحميل جدول موزع يعتمد على Dictionary #48419 (MikhailBurdukov).
  • عدم التحقق من التبعيات عند إعادة تسمية system tables تلقائيًا #48431 (Raúl Marín).
  • تحديث الصفوف المتأثرة فقط في تخزين KeeperMap #48435 (Antonio Andelic).
  • إصلاح احتمال حدوث segfault في VFS cache #48469 (Kseniia Sumarokova).
  • تُطلق الدالة toTimeZone خطأً عند عدم توفير سلسلة ثابتة #48471 (Jordi Villar).
  • إصلاح خطأ منطقي متعلق بـ IPv4 في Protobuf، وإضافة دعم لـ Date32 #48486 (Kruglov Pavel).
  • تم احتساب العلامة “changed” في system.settings بشكل غير صحيح للإعدادات ذات القيم المتعددة #48516 (MikhailBurdukov).
  • إصلاح التخزين Memory عند تمكين الضغط #48517 (Anton Popov).
  • إصلاح مشكلة في وضع اللصق بين القوسين كانت تُفسد إدخال كلمة المرور عند إعادة اتصال العميل #48528 (Michael Kolupaev).
  • إصلاح map المتداخل للمفاتيح من نوعي IP و UUID #48556 (Yakov Olkhovskiy).
  • إصلاح استثناء غير مُلتقط في حالة المُحمِّل المتوازي للقواميس المُهشّاة #48571 (Azat Khuzhin).
  • تعمل الدالة التجميعية groupArray الآن بشكل صحيح مع النتائج الفارغة للأنواع Nullable #48593 (lgbo).
  • إصلاح خلل في Keeper عندما لا تُنشأ عقدة بالمخطط auth في ACL أحيانًا. #48595 (Aleksei Filatov).
  • السماح بعوامل المقارنة لـ IPv4 مع UInt #48611 (Yakov Olkhovskiy).
  • إصلاح خطأ محتمل ناتج عن cache #48636 (Kseniia Sumarokova).
  • لم تعد async inserts ذات البيانات الفارغة تُطلق استثناءً. #48663 (Anton Popov).
  • إصلاح تبعيات الجدول في حالة فشل RENAME TABLE #48683 (Azat Khuzhin).
  • إذا كان المفتاح الأساسي يحتوي على أعمدة مكررة (وهذا ممكن فقط في projections)، فقد يؤدي ذلك إلى خلل في الإصدارات السابقة #48838 (Amos Bird).
  • إصلاح حالة race condition في ZooKeeper عند الانضمام إلى send_thread/receive_thread #48849 (Alexander Gololobov).
  • إصلاح خطأ اسم الجزء غير المتوقع عند محاولة drop جزء detached متجاهَل مع zero copy replication #48862 (Michael Lex).
  • إصلاح قراءة عمود Date32 من Parquet/Arrow إلى عمود ليس من نوع Date32 #48864 (Kruglov Pavel).
  • إصلاح خطأ UNKNOWN_IDENTIFIER أثناء التحديد من جدول يحتوي على row policy وعمود يتضمن نقاطًا #48976 (Kruglov Pavel).
  • إصلاح التجميع حسب سلاسل نصية Nullable فارغة #48999 (LiuNeng).

إصدار ClickHouse 23.3 LTS، 2023-03-30. العرض التقديمي، الفيديو

ملاحظات الترقية

  • أصبحت عمليات DELETE الخفيفة جاهزة للاستخدام في بيئة production ومفعّلة افتراضيًا. كما أصبح استعلام DELETE لجداول MergeTree متاحًا افتراضيًا الآن.
  • تغيّر سلوك الدالتين *domain*RFC وnetloc قليلًا: جرى تخفيف القيود على مجموعة الرموز المسموح بها في جزء authority من عنوان URL لتحقيق توافق أفضل. #46841 (Azat Khuzhin).
  • تم منع إنشاء جداول تستند إلى KafkaEngine مع عبارات DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED للأعمدة. #47138 (Aleksandr Musorin).
  • أُزيلت ميزة “asynchronous connection drain”. كما أُزيلت الإعدادات والمقاييس المرتبطة بها أيضًا. وكانت هذه ميزة داخلية، لذا لا يُفترض أن تؤثر إزالتها في المستخدمين الذين لم يسمعوا بها من قبل. #47486 (Alexander Tokmakov).
  • تمت إضافة دعم لنوع البيانات Decimal بعرض 256 بت (أكثر من 38 رقمًا) في arraySum/Min/Max/Avg/Product، وarrayCumSum/CumSumNonNegative، وarrayDifference، وإنشاء المصفوفات، وعامل IN، ومعلمات الاستعلام، وgroupArrayMovingSum، والدوال الإحصائية، وmin/max/any/argMin/argMax، وPostgreSQL wire protocol، ومحرك جدول MySQL والدالة الخاصة به، وsumMap، وmapAdd، وmapSubtract، وarrayIntersect. كما أُضيف دعم للأعداد الصحيحة الكبيرة في arrayIntersect. وستستخدم دوال التجميع الإحصائية التي تتضمن العزوم (مثل corr أو مختلف دوال TTest) Float64 بوصفه تمثيلها الداخلي (إذ كانت تستخدم Decimal128 قبل هذا التغيير، لكن ذلك لم يكن ذا جدوى)، ويمكن لهذه الدوال أن تُرجع nan بدلًا من inf في حالة التباين اللانهائي. وكانت بعض الدوال تقبل أنواع البيانات Decimal256 لكنها كانت تُرجع Decimal128 في الإصدارات السابقة، وقد أُصلح ذلك الآن. هذا يُغلق #47569. هذا يُغلق #44864. هذا يُغلق #28335. #47594 (Alexey Milovidov).
  • أصبحت إعدادات الخادم backup_threads/restore_threads بدلًا من إعدادات المستخدم. #47881 (Azat Khuzhin).
  • عدم السماح بالفهارس الثانوية الثابتة وغير الحتمية. #46839 (Anton Popov).

ميزة جديدة

  • تمت إضافة وضع جديد لتقسيم العمل على replicas باستخدام الإعدادين parallel_replicas_custom_key وparallel_replicas_custom_key_filter_type. إذا كانت الـ cluster تتكون من shard واحدة تضم عدة replicas، فسيتم اختيار ما يصل إلى max_parallel_replicas منها عشوائيًا وتحويلها إلى shards. ولكل shard، يُضاف filter مطابق إلى query على initiator قبل إرسالها إلى الـ shard. وإذا كانت الـ cluster تتكون من عدة shards، فسيكون السلوك مماثلًا لـ sample_key مع إمكانية تحديد key اعتباطي. #45108 (Antonio Andelic).
  • خيار لعرض نتيجة جزئية عند الإلغاء: تمت إضافة إعداد query باسم partial_result_on_first_cancel، بما يتيح للـ query المُلغاة (مثلًا بسبب Ctrl-C) إرجاع نتيجة جزئية. #45689 (Alexey Perevyshin).
  • تمت إضافة دعم engines جداول اعتباطية للجداول المؤقتة (باستثناء المحركين Replicated وKeeperMap). إغلاق #31497. #46071 (Roman Vasin).
  • تمت إضافة دعم replication لدوال SQL المعرّفة من قبل المستخدم باستخدام تخزين مركزي في Keeper. #46085 (Aleksei Filatov).
  • تنفيذ system.server_settings (على غرار system.settings) ليحتوي على إعدادات server. #46550 (pufit).
  • دعم query ‏UNDROP TABLE. إغلاق #46811. #47241 (chen).
  • السماح بمنح grants منفصلة لـ named collections (على سبيل المثال، لإتاحة منح صلاحية SHOW/CREATE/ALTER/DROP named collection لمجموعات محددة فقط بدلًا من جميعها دفعة واحدة). إغلاق #40894. تمت إضافة نوع access جديد باسم NAMED_COLLECTION_CONTROL لا يُمنح للمستخدم default إلا إذا أُضيف صراحةً إلى config المستخدم (وهو مطلوب للتمكن من تنفيذ GRANT ALL)، كما لم يعد من الضروري تحديد show_named_collections يدويًا للمستخدم default كي يتمكن من امتلاك access rights كاملة كما كان الحال في 23.2. #46241 (Kseniia Sumarokova).
  • السماح بأقراص مخصصة متداخلة. في السابق، كانت الأقراص المخصصة تدعم فقط بنية disk مسطحة. #47106 (Kseniia Sumarokova).
  • تقديم الدالة widthBucket (مع alias ‏WIDTH_BUCKET للتوافق). #42974. #46790 (avoiderboi).
  • تمت إضافة الدالة الجديدة parseDateTime/parseDateTimeInJodaSyntax وفقًا لـ format string المحدد. تقوم parseDateTime بتحويل String إلى DateTime بصياغة MySQL، بينما تقوم parseDateTimeInJodaSyntax بالتحليل وفق Joda syntax. #46815 (李扬).
  • استخدام dummy UInt8 كبنية structure افتراضية لـ table function ‏null. إغلاق #46930. #47006 (flynn).
  • دعم تنسيق تاريخ يحتوي على فاصلة، مثل Dec 15, 2021، في الدالة parseDateTimeBestEffort. إغلاق #46816. #47071 (chen).
  • أضِف الإعدادين http_wait_end_of_query وhttp_response_buffer_size اللذين يقابلان معاملي URL ‏wait_end_of_query وbuffer_size لواجهة HTTP. يتيح ذلك تغيير هذه الإعدادات ضمن ملفات التعريف. #47108 (Vladimir C).
  • أضِف جدول system.dropped_tables الذي يعرض الجداول التي أُزيلت من قواعد بيانات Atomic لكنها لم تُحذف بالكامل بعد. #47364 (chen).
  • أضِف INSTR كاسم مستعار لـ positionCaseInsensitive من أجل التوافق مع MySQL. يُغلق هذا #47529. #47535 (flynn).
  • أُضيفت الدالة toDecimalString التي تتيح تحويل الأرقام إلى سلسلة نصية بدقة ثابتة. #47838 (Andrey Zvonov).
  • أضِف إعداد MergeTree ‏max_number_of_mutations_for_replica. يحد هذا الإعداد عدد part mutations لكل replica إلى العدد المحدد. ويعني الصفر عدم وجود حد لعدد mutations لكل replica (مع أن التنفيذ قد يظل مقيّدًا بإعدادات أخرى). #48047 (Vladimir C).
  • أضِف الدالة المرتبطة بـ Map ‏mapFromArrays، التي تتيح إنشاء map من زوج من Arrays. #31125 (李扬).
  • يتيح التحكم في الضغط في صيغ الإخراج Parquet/ORC/Arrow، ويضيف دعمًا لمزيد من صيغ إدخال الضغط. يُغلق هذا #13541. #47114 (Kruglov Pavel).
  • أضِف authentication باستخدام شهادة مستخدم SSL إلى native protocol. يُغلق هذا #47077. #47596 (Nikolay Degterinsky).
  • أضِف الصيغ OrNull() وOrZero() لـ parseDateTime، وأضِف الاسم المستعار str_to_date لتحقيق التوافق مع MySQL. #48000 (Robert Schulze).
  • أُضيف العامل REGEXP (على غرار العوامل “LIKE” و”IN” و”MOD” وغيرها) لتحسين التوافق مع MySQL. #47869 (Robert Schulze).

تحسين الأداء

  • أصبحت العلامات في الذاكرة مضغوطة الآن، وتستهلك ذاكرة أقل بمقدار 3 إلى 6 مرات. #47290 (Michael Kolupaev).
  • كانت النسخ الاحتياطية للأعداد الكبيرة من الملفات بطيئة على نحو لا يُصدق في الإصدارات السابقة. لم يعد الأمر كذلك. فهي الآن سريعة على نحو لا يُصدق. #47251 (Alexey Milovidov). أُضيف مجمع خيوط منفصل لعمليات الإدخال/الإخراج الخاصة بالنسخ الاحتياطي. يتيح ذلك توسيع نطاقه بشكل مستقل عن المجمّعات الأخرى وتحسين الأداء. #47174 (Nikita Mikhaylov). تم استخدام طلب MultiRead وآليات إعادة المحاولة لجمع البيانات الوصفية في المرحلة النهائية من معالجة النسخ الاحتياطي. #47243 (Nikita Mikhaylov). إذا كانت كلٌّ من النسخة الاحتياطية والبيانات المستعادة موجودتين في S3، فسيُستخدم النسخ على جانب الخادم من الآن فصاعدًا. #47546 (Vitaly Baranov).
  • أُصلحت مشكلة القراءة المفرطة في الاستعلامات التي تستخدم FINAL. #47801 (Nikita Taranov).
  • سيُضبط الإعداد max_final_threads على عدد الأنوية عند بدء تشغيل الخادم (باستخدام الخوارزمية نفسها المستخدَمة مع max_threads). ويحسّن ذلك التزامن في تنفيذ final على الخوادم ذات العدد الكبير من وحدات المعالجة المركزية. #47915 (Nikita Taranov).
  • أصبح تنفيذ pipeline القراءة لقاموس DIRECT مع مصدر CLICKHOUSE باستخدام عدة خيوط ممكنًا. ولتفعيل ذلك، اضبط dictionary_use_async_executor=1 في قسم SETTINGS للمصدر ضمن تعليمة CREATE DICTIONARY. #47986 (Vladimir C).
  • تحسين أداء التجميع لمفتاح Nullable واحد. #45772 (LiuNeng).
  • تم دعم الاستفادة من الفهرس tokenbf_v1 بالأحرف الصغيرة مع hasTokenOrNull و hasTokenCaseInsensitive و hasTokenCaseInsensitiveOrNull. #46252 (ltrk2).
  • تحسين الدالتين position و LIKE عبر البحث عن أول حرفين باستخدام SIMD. #46289 (Jiebin Sun).
  • تحسين الاستعلامات على system.detached_parts، التي قد يكون حجمها كبيرًا جدًا. أُضيفت عدة مصادر مع مراعاة قيد حجم block؛ وفي كل block، يُستخدم مجمع خيوط IO لحساب حجم part، أي لإجراء استدعاءات النظام بالتوازي. #46624 (Sema Checherinda).
  • زِيدت القيمة الافتراضية لـ max_replicated_merges_in_queue في جداول ReplicatedMergeTree من 16 إلى 1000. ويتيح ذلك تنفيذ عمليات merge في الخلفية بسرعة أكبر على clusters التي تضم عددًا كبيرًا جدًا من النسخ المتماثلة، مثل clusters ذات التخزين المشترك في ClickHouse Cloud. #47050 (Alexey Milovidov).
  • تم تحديث clickhouse-copier لاستخدام GROUP BY بدلًا من DISTINCT للحصول على قائمة partitions. وبالنسبة إلى الجداول الكبيرة، خفّض ذلك زمن select من أكثر من 500 ثانية إلى أقل من ثانية واحدة. #47386 (Clayton McClure).
  • أُصلح تراجع الأداء في ASOF JOIN. #47544 (Ongkong).
  • مزيد من التجميع على دفعات في Keeper. تحسين الأداء بتجنّب تجزئة الدفعات عند طلبات القراءة. #47978 (Antonio Andelic).
  • السماح باستخدام PREWHERE مع Merge عند وجود تعبيرات DEFAULT مختلفة للأعمدة. #46831 (Azat Khuzhin).

ميزة تجريبية

  • النسخ المتماثلة المتوازية: تحسين الأداء العام عبر الاستفادة بشكل أفضل من النسخة المتماثلة المحلية، ومنع القراءة باستخدام النسخ المتماثلة المتوازية من MergeTree غير المتماثلة افتراضيًا. #47858 (Nikita Mikhaylov).
  • دعم دفع التصفية إلى الجدول الأيسر في JOIN مع جداول Join وDictionary وEmbeddedRocksDB إذا كان المحلّل التجريبي مفعّلًا. #47280 (Maksim Kita).
  • أصبح ReplicatedMergeTree مع zero copy replication يفرض حملًا أقل على Keeper. #47676 (alesapin).
  • إصلاح إنشاء عرض مادي باستخدام MaterializedPostgreSQL #40807 (Maksim Buren).

تحسين

  • تمكين input_format_json_ignore_unknown_keys_in_named_tuple افتراضيًا. #46742 (Kruglov Pavel).
  • السماح بتجاهل الأخطاء أثناء الإدخال إلى MATERIALIZED VIEW (مع إضافة setting جديد هو materialized_views_ignore_errors، وقيمته الافتراضية false، لكنه يُضبط على true عند تفريغ السجلات إلى جداول system.*_log دون أي شرط). #46658 (Azat Khuzhin).
  • تتبّع طابور الملفات لعمليات الإرسال الموزعة في الذاكرة. #45491 (Azat Khuzhin).
  • تُضاف الآن الترويسات X-ClickHouse-Query-Id وX-ClickHouse-Timezone إلى الاستجابات في جميع الاستعلامات عبر HTTP protocol. وكان هذا يقتصر سابقًا على استعلامات SELECT فقط. #46364 (Anton Popov).
  • الجداول الخارجية من MongoDB: دعم الاتصال بمجموعة Replica Set عبر URI يتضمن قائمة من host:port، مع دعم الخيار readPreference في قواميس MongoDB. مثال على URI: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr).
  • من المفترض ألا تلاحظ هذا التحسين. أُعيد تنفيذ تحليل الإسقاطات بالاعتماد على query plan. وتمت إضافة setting باسم query_plan_optimize_projection=1 للتبديل بين الإصدار القديم والجديد. يُصلح #44963. #46537 (Nikolai Kochetov).
  • استخدام Parquet v2 بدلًا من v1 في output format افتراضيًا. وأُضيف setting باسم output_format_parquet_version للتحكم في إصدار Parquet، والقيم الممكنة هي 1.0 و2.4 و2.6 و2.latest (الافتراضي). #46617 (Kruglov Pavel).
  • أصبح من الممكن الآن استخدام صياغة configuration الجديدة لتهيئة Kafka topics التي تتضمن نقاطًا (.) في أسمائها. #46752 (Robert Schulze).
  • إصلاح آليات الاستدلال التي تتحقق من patterns في hyperscan بحثًا عن تكرارات إشكالية. #46819 (Robert Schulze).
  • عدم الإبلاغ عن وجود عقدة ZK في system.errors عندما يكون block قد أُنشيء بالتزامن بواسطة replica أخرى. #46820 (Raúl Marín).
  • زيادة الحد الأقصى للملفات المفتوحة في clickhouse-local. وسيصبح بإمكانه القراءة من جداول web على الخوادم التي تضم عددًا هائلًا من CPU cores. وعدم التراجع عن القراءة من URL table engine في حال وجود عدد كبير جدًا من الملفات المفتوحة. هذا يُغلق #46852. #46853 (Alexey Milovidov).
  • أصبحت الاستثناءات التي تُطرح عند تعذّر parse الأرقام تحمل رسالة Exception أسهل قراءةً. #46917 (Robert Schulze).
  • تمت إضافة تحديث لـ system.backups بعد كل مهمة مُعالَجة لتتبّع تقدّم النسخ الاحتياطية. #46989 (Aleksandr Musorin).
  • السماح بتحويل الأنواع في Native input format. إضافة الإعداد input_format_native_allow_types_conversion للتحكم في ذلك (وهو مُمكّن افتراضيًا). #46990 (Kruglov Pavel).
  • السماح باستخدام IPv4 في الدالة range لتوليد نطاقات IP. #46995 (Yakov Olkhovskiy).
  • تحسين رسالة الاستثناء عندما يتعذر نقل جزء من وحدة تخزين/قرص إلى آخر. #47032 (alesapin).
  • دعم النوع Bool في الدالة JSONType. في السابق، كان النوع Null يُعاد بالخطأ لقيم bool. #47046 (Anton Popov).
  • استخدام المعامل _request_body لتهيئة استعلامات HTTP معرّفة مسبقًا. #47086 (Constantine Peresypkin).
  • إضافة مسافة بادئة تلقائية في SQL Editor المدمج بواجهة المستخدم عند الضغط على Enter. #47113 (Alexey Korepanov).
  • سيحاول الاستخراج الذاتي باستخدام ‘sudo’ تعيين uid و gid للملفات المستخرجة إلى المستخدم الذي يشغّل العملية. #47116 (Yakov Olkhovskiy).
  • في السابق، كانت الوسيطة الثانية للدالة repeat تقبل فقط نوع عدد صحيح غير موقّع، ما يعني أنها لم تكن تقبل قيمًا مثل -1. وكان هذا السلوك مختلفًا عن سلوك دالة Spark. في هذا التحديث، عُدّلت الدالة repeat لتتوافق مع سلوك دالة Spark. وهي الآن تقبل أنواع المُدخلات نفسها، بما في ذلك الأعداد الصحيحة السالبة. وأُجريت اختبارات مكثفة للتحقق من صحة التنفيذ المحدّث. #47134 (KevinyhZou). ملاحظة: أُعيدت كتابة إدخال سجل التغييرات بواسطة ChatGPT.
  • إزالة الجزء ::__1 من stacktraces. وعرض std::basic_string<char, ... على أنه String في stacktraces. #47171 (Mike Kot).
  • إعادة تنفيذ وضع interserver لتجنب هجمات إعادة الإرسال (مع ملاحظة أن هذا التغيير متوافق رجعيًا مع الخوادم الأقدم). #47213 (Azat Khuzhin).
  • تحسين التعرّف على مجموعات التعبيرات النمطية وتنقيح قاموس regexp_tree. #47218 (Han Fei).
  • تحسين في Keeper: إضافة 4LW جديدة clrs لتنظيف الموارد التي يستخدمها Keeper (مثل تحرير الذاكرة غير المستخدمة). #47256 (Antonio Andelic).
  • إضافة وسائط اختيارية إلى codecs DoubleDelta(bytes_size), Gorilla(bytes_size), FPC(level, float_size)، ما يتيح استخدام هذه codecs في clickhouse-compressor دون column type. وإصلاح حالات التوقف المحتملة والأخطاء الحسابية في clickhouse-compressor عند استخدام هذه codecs. الإصلاحات: https://github.com/ClickHouse/ClickHouse/discussions/47262. #47271 (Kruglov Pavel).
  • إضافة دعم لأنواع الأعداد الصحيحة الكبيرة إلى الدالة runningDifference. يُغلق #47194. #47322 (Nikolay Degterinsky).
  • أضِف نافذة انتهاء صلاحية لبيانات اعتماد S3 التي لها وقت انتهاء محدد لتجنّب أخطاء ExpiredToken في بعض الحالات الطرفية. يمكن التحكّم بذلك عبر الإعداد expiration_window_seconds، والقيمة الافتراضية هي 120 ثانية. #47423 (Antonio Andelic).
  • دعم Decimals و Date32 في تنسيق Avro. #47434 (Kruglov Pavel).
  • لا تبدأ تشغيل الخادم إذا تم اكتشاف تحويل غير مكتمل من Ordinary إلى Atomic، واطبع رسالة خطأ أفضل مع إرشادات لاستكشاف الأخطاء وإصلاحها. #47487 (Alexander Tokmakov).
  • أضِف عمودًا جديدًا kind إلى system.opentelemetry_span_log. يحتوي هذا العمود على قيمة SpanKind المعرّفة في OpenTelemetry. #47499 (Frank Chen).
  • السماح بقراءة/كتابة المصفوفات المتداخلة في تنسيق Protobuf باستخدام اسم الحقل الجذر فقط باعتباره اسم العمود. سابقًا، كان يجب أن يتضمن اسم العمود جميع أسماء الحقول المتداخلة (مثل a.b.c Array(Array(Array(UInt32)))، أما الآن فيمكنك استخدام a Array(Array(Array(UInt32))) فقط. #47650 (Kruglov Pavel).
  • تمت إضافة modifier اختياري STRICT إلى SYSTEM SYNC REPLICA يجعل الاستعلام ينتظر حتى يصبح replication queue فارغًا (تمامًا كما كان يعمل سابقًا قبل https://github.com/ClickHouse/ClickHouse/pull/45648). #47659 (Alexander Tokmakov).
  • تحسين تسمية بعض سجلات span الخاصة بـ OpenTelemetry. #47667 (Frank Chen).
  • منع استخدام سلاسل طويلة جدًا من combinators الدوال التجميعية (إذ قد تؤدي إلى بطء الاستعلامات في مرحلة التحليل). هذا يغلق #47715. #47716 (Alexey Milovidov).
  • دعم subquery في parameterized views؛ يحل #46741 #47725 (SmitaRKulkarni).
  • إصلاح تسرّب للذاكرة في تكامل MySQL (يمكن إعادة إنتاجه مع connection_auto_close=1). #47732 (Kseniia Sumarokova).
  • تحسين معالجة الأخطاء في الشيفرة المتعلقة بمعلمات Decimal، ما أدى إلى رسائل خطأ أكثر إفادة. سابقًا، عند تمرير معلمات Decimal غير صحيحة، كانت رسالة الخطأ الناتجة غير واضحة أو غير مفيدة. مع هذا التحديث، تم إصلاح رسالة الخطأ المطبوعة لتقديم معلومات أكثر تفصيلًا وفائدة، مما يسهّل تحديد المشكلات المتعلقة بمعلمات Decimal وتصحيحها. #47812 (Yu Feng). ملاحظة: أُعيدت كتابة changelog entry هذه بواسطة ChatGPT.
  • يُستخدم parameter exact_rows_before_limit لجعل rows_before_limit_at_least يعكس بدقة عدد الصفوف المُعادة قبل الوصول إلى الحد. يعالج طلب السحب هذا المشكلات التي تظهر عندما يتضمن الاستعلام distributed processing عبر shards متعددة أو عمليات فرز. قبل هذا التحديث، لم تكن هذه السيناريوهات تعمل على النحو المقصود. #47874 (Amos Bird).
  • introspection لمقاييس ThreadPools. #47880 (Azat Khuzhin).
  • إضافة أحداث profile ‏WriteBufferFromS3Microseconds وWriteBufferFromS3RequestsErrors. #47885 (Antonio Andelic).
  • إضافة الخيارين --link و--noninteractive (-y) إلى مُثبّت ClickHouse. يُغلق #47750. #47887 (Nikolay Degterinsky).
  • إصلاح استثناء UNKNOWN_TABLE عند الإرفاق بعرض مادي له جداول تابعة غير متاحة. وقد يكون ذلك مفيدًا عند محاولة استعادة الحالة من نسخة احتياطية. #47975 (MikhailBurdukov).
  • إصلاح الحالة التي لا يُضاف فيها المسار (الاختياري) إلى تهيئة قرص مشفّر. #47981 (Kseniia Sumarokova).
  • دعم CTE في العروض ذات المعلمات. التنفيذ: تم التحديث للسماح بمعلمات الاستعلام أثناء تقييم الاستعلامات الفرعية القيَمية. #48065 (SmitaRKulkarni).
  • دعم الأعداد الصحيحة الكبيرة (U)Int128/(U)Int256، وMap مع أي نوع من المفاتيح، وDateTime64 بأي دقة (وليس 3 و6 فقط). #48119 (Kruglov Pavel).
  • السماح بتخطي الأخطاء المرتبطة بقيم enum غير المعروفة في تنسيقات إدخال الصفوف. #48133 (Alexey Milovidov).

تحسينات في البناء/الاختبار/التغليف

  • أصبح ClickHouse يُبنى الآن باستخدام C++23. #47424 (Robert Schulze).
  • إجراء اختبار fuzz لاستعلامات EXPLAIN في AST Fuzzer. #47803 #47852 (flynn).
  • فصل اختبار الضغط وفحص التوافق التراجعي الآلي (الذي أصبح الآن Upgrade check). #44879 (Kruglov Pavel).
  • تحديث صورة Ubuntu الخاصة بـ Docker للحد من بعض تقارير الأمان الخاطئة. #46784 (Julio Jimenez). يُرجى ملاحظة أن ClickHouse ليس لديه تبعيات ولا يتطلب Docker.
  • إضافة مطالبة تسمح بإزالة تنزيل clickhouse موجود مسبقًا عند تنزيل ClickHouse باستخدام “curl | sh”. ونص المطالبة هو: “ClickHouse binary clickhouse already exists. Overwrite? [y/N]”. #46859 (Dan Roscigno).
  • إصلاح خطأ أثناء بدء تشغيل الخادم على التوزيعات القديمة (مثل Amazon Linux 2) وعلى ARM، حيث لا يتم العثور على رموز glibc 2.28. #47008 (Robert Schulze).
  • التحضير لـ clang 16. #47027 (Amos Bird).
  • إضافة فحص CI يضمن أن ClickHouse يمكنه العمل مع glibc قديم على ARM. #47063 (Robert Schulze).
  • إضافة فحص Style check لمنع الاستخدام غير الصحيح للماكرو NDEBUG. #47699 (Alexey Milovidov).
  • تسريع عملية البناء قليلًا. #47714 (Alexey Milovidov).
  • ترقية vectorscan إلى 5.4.9. #47955 (Robert Schulze).
  • إضافة اختبار وحدة للتأكد من أن التسجيل القاتل في Apache Arrow لا يؤدي إلى الإنهاء. ويغطي هذا التغييرات في ClickHouse/arrow#16. #47958 (Arthur Passos).
  • استعادة إمكانية تشغيل بنية خادم التصحيح الأصلية على macOS. #48050 (Robert Schulze). ملاحظة: هذا التغيير ذو صلة بالتطوير فقط، لأن البُنى الرسمية لـ ClickHouse تُنجَز باستخدام الترجمة العابرة.

إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)

  • إصلاح إعادة ضبط محلل التنسيقات، واختبار معالجة الرسائل التالفة في Kafka #45693 (Kruglov Pavel).
  • إصلاح حساب حجم البيانات في Keeper #46086 (Antonio Andelic).
  • أُصلِح خلل في إعادة المحاولة التلقائية لاستعلام DROP TABLE مع جداول ReplicatedMergeTree وقواعد البيانات Atomic. وفي حالات نادرة، كان قد يؤدي ذلك إلى ظهور الخطأين Can't get data for node /zk_path/log_pointer وThe specified key does not exist إذا انتهت صلاحية جلسة ZooKeeper أثناء تنفيذ DROP، وتم بالتوازي إنشاء جدول replicated جديد بالمسار نفسه في ZooKeeper. #46384 (Alexander Tokmakov).
  • إصلاح التكرار العودي غير الصحيح للاسم المستعار أثناء تطبيع الاستعلامات، وهو ما كان يمنع بعض الاستعلامات من التنفيذ. #46609 (Raúl Marín).
  • إصلاح serialization/deserialization لعناوين IPv4/IPv6 في binary formats #46616 (Kruglov Pavel).
  • ‏ActionsDAG: لا تغيّر نتيجة and أثناء التحسين #46653 (Salvatore Mesoraca).
  • تحسين إلغاء الاستعلام عند تعطل العميل #46681 (Alexander Tokmakov).
  • إصلاح العمليات الحسابية في تحسين aggregate #46705 (Duc Canh Le).
  • إصلاح احتمال الإنهاء المفاجئ لـ clickhouse-local عند schema inference لـ JSONEachRow #46731 (Kruglov Pavel).
  • إصلاح تعديل دور منتهي الصلاحية #46772 (Vitaly Baranov).
  • إصلاح تجميع أعمدة PREWHERE الموحّد من عدة خطوات #46785 (Alexander Gololobov).
  • استخدام النطاق الأولي لجلب حجم الملف في HTTP read buffer. وبدون هذا التغيير، لم يكن بالإمكان معالجة بعض الملفات البعيدة. #46824 (Antonio Andelic).
  • إصلاح شريط التقدم غير الصحيح عند استخدام جداول URL #46830 (Antonio Andelic).
  • إصلاح تقرير MSan في الدالة maxIntersections #46847 (Alexey Milovidov).
  • إصلاح خلل في نوع البيانات Map #46856 (Alexey Milovidov).
  • إصلاح النتائج غير الصحيحة لبعض عمليات بحث LIKE عندما يحتوي نمط LIKE على محارف غير قابلة للاقتباس لكنها موضوعة بين علامتي اقتباس #46875 (Robert Schulze).
  • إصلاح - كان WITH FILL يتسبب في إنهاء مفاجئ عندما كانت Filling Transform تعالج block فارغًا #46897 (Yakov Olkhovskiy).
  • إصلاح استنتاج التاريخ والأعداد الصحيحة من السلاسل النصية في JSON #46972 (Kruglov Pavel).
  • إصلاح خلل في اختيار القرص في zero-copy replication أثناء fetch #47010 (alesapin).
  • إصلاح خطأ مطبعي في تعريف خدمة systemd #47051 (Palash Goel).
  • إصلاح الخطأ NOT_IMPLEMENTED مع CROSS JOIN و algorithm = auto #47068 (Vladimir C).
  • إصلاح مشكلة فشل جدول ‘ReplicatedMergeTree’ في insert لبيانين متشابهين عند ضبط ‘part_type’ على وضع ‘InMemory’ (ميزة تجريبية). #47121 (liding1992).
  • القواميس الخارجية / library-bridge: إصلاح الخطأ “unknown library method ‘extDict_libClone’” #47136 (alex filatov).
  • إصلاح حالة تسابق في grace hash join مع limit #47153 (Vladimir C).
  • إصلاح دعم PREWHERE لأعمدة معيّنة #47154 (Azat Khuzhin).
  • إصلاح احتمال حدوث توقف تام في Query Status #47161 (Kruglov Pavel).
  • منع insert select على جدول Join نفسه لأنه يؤدي إلى توقف تام #47260 (Vladimir C).
  • تخطي partitions المدمجة في عمليات merge الخاصة بـ min_age_to_force_merge_seconds #47303 (Antonio Andelic).
  • تعديل find_first_symbols بحيث يعمل كما هو متوقع مع find_first_not_symbols #47304 (Arthur Passos).
  • إصلاح استنتاج الأرقام الكبيرة في CSV #47410 (Kruglov Pavel).
  • تعطيل مُحسِّن التعبيرات المنطقية للتعبيرات التي تحتوي على aliases. #47451 (Nikolai Kochetov).
  • إصلاح خطأ في decodeURLComponent #47457 (Alexey Milovidov).
  • إصلاح explain graph مع projection #47473 (flynn).
  • إصلاح query parameters #47488 (Alexey Milovidov).
  • parameterized view: إصلاح خطأ. #47495 (SmitaRKulkarni).
  • Fuzzer لتنسيقات البيانات، وما نتج عنه من إصلاحات. #47519 (Alexey Milovidov).
  • إصلاح التحقق من الرتابة لـ DateTime64 #47526 (Antonio Andelic).
  • إصلاح “block structure mismatch” لعمود Nullable LowCardinality #47537 (Nikolai Kochetov).
  • إصلاح مناسب لخلل في Apache Parquet #45878 #47538 (Kruglov Pavel).
  • إصلاح التحليل المتوازي لـ BSONEachRow عندما يكون حجم المستند غير صالح #47540 (Kruglov Pavel).
  • الحفاظ على الخطأ في system.distribution_queue عند تنفيذ SYSTEM FLUSH DISTRIBUTED #47541 (Azat Khuzhin).
  • التحقق من وجود عمود مكرر في تنسيق BSONEachRow #47609 (Kruglov Pavel).
  • إصلاح انتظار قفل zero copy أثناء النقل #47631 (alesapin).
  • إصلاح التجميع حسب الأقسام #47634 (Nikita Taranov).
  • إصلاح خلل في تسلسل Tuple كمصفوفة في تنسيق BSONEachRow #47690 (Kruglov Pavel).
  • إصلاح تعطل في polygonsSymDifferenceCartesian #47702 (pufit).
  • إصلاح القراءة من محرك التخزين File للملفات المضغوطة باستخدام ضغط zlib وgzip #47796 (Anton Popov).
  • تحسين اكتشاف الاستعلامات الفارغة في PostgreSQL (لمشغّل pgx الخاص بـ golang) #47854 (Azat Khuzhin).
  • إصلاح التحقق من الرتابة لـ DateTime لأنواع LowCardinality #47860 (Antonio Andelic).
  • استخدام restore_threads (وليس backup_threads) مع RESTORE ASYNC #47861 (Azat Khuzhin).
  • إصلاح DROP COLUMN مع ReplicatedMergeTree الذي يحتوي على إسقاطات #47883 (Antonio Andelic).
  • إصلاح استعادة قاعدة بيانات Replicated #47901 (Alexander Tokmakov).
  • إصلاح عاجل لتحذيرات مطولة أكثر من اللازم في HTTP #47903 (Alexander Tokmakov).
  • إصلاح “قيمة الحقل طويلة جدًا” في catboostEvaluate #47970 (Robert Schulze).
  • إصلاح #36971: Watchdog: الخروج برمز غير صفري إذا خرجت العملية الفرعية #47973 (Коренберг Марк).
  • إصلاح لمشكلة “ملف الفهرس cidx أطول من المتوقع” #48010 (SmitaRKulkarni).
  • إصلاح استعلام MaterializedPostgreSQL للحصول على السمات ‏(replica-identity) #48015 (Solomatov Sergei).
  • parseDateTime()‎: إصلاح السلوك غير المعرّف (overflow للأعداد الصحيحة الموقَّعة) #48019 (Robert Schulze).
  • استخدام أسماء فريدة للسجلات في Avro لتجنّب إعادة استخدام المخطط الخاص بها #48057 (Kruglov Pavel).
  • ضبط مهلات مقابس TCP/HTTP بشكل صحيح في Keeper #48108 (Antonio Andelic).
  • إصلاح احتمال استدعاء عضو على مؤشر فارغ في تنسيق Avro #48184 (Kruglov Pavel).

إصدار ClickHouse 23.2، 2023-02-23. العرض التقديمي، الفيديو

تغيير غير متوافق مع الإصدارات السابقة

  • توسيع الدالة “toDayOfWeek()” (alias: “DAYOFWEEK”) بإضافة وسيطة mode تحدد ما إذا كان الأسبوع يبدأ يوم الاثنين أو الأحد، وما إذا كان العد يبدأ من 0 أو 1. ولضمان الاتساق مع دوال date time الأخرى، أُدرجت وسيطة mode بين وسيطتَي الوقت والمنطقة الزمنية. وهذا يكسر الاستخدام الحالي للصيغة ذات الوسيطتين (التي لم تكن موثقة سابقًا) “toDayOfWeek(time, time_zone)”. ويمكن إصلاح ذلك بإعادة كتابة الدالة إلى “toDayOfWeek(time, 0, time_zone)”. #45233 (Robert Schulze).
  • إعادة تسمية setting ‏max_query_cache_size إلى filesystem_cache_max_download_size. #45614 (Kseniia Sumarokova).
  • لن يمتلك المستخدم default permission لنوع الوصول SHOW NAMED COLLECTION بشكل افتراضي (فعلى سبيل المثال، لن يعود المستخدم default قادرًا على منح ALL لمستخدمين آخرين كما كان من قبل، ولذلك فإن طلب السحب هذا غير متوافق مع الإصدارات السابقة). #46010 (Kseniia Sumarokova).
  • إذا تم تحديد عبارة SETTINGS قبل عبارة FORMAT، فستُطبَّق الإعدادات على formatting أيضًا. #46003 (Azat Khuzhin).
  • إزالة دعم setting ‏materialized_postgresql_allow_automatic_update (وكان هذا الإعداد معطّلًا افتراضيًا). #46106 (Kseniia Sumarokova).
  • تحسين أداء countDigits قليلًا على datasets واقعية. وقد أُغلق بذلك #44518. في الإصدارات السابقة، كانت countDigits(0) تُرجع 0؛ أما الآن فهي تُرجع 1، وهو الأصح ويتوافق مع التوثيق الحالي. #46187 (Alexey Milovidov).
  • منع إنشاء columns جديدة مضغوطة بمزيج من codecs “Delta” أو “DoubleDelta” متبوعًا بـ codecs “Gorilla” أو “FPC”. ويمكن تجاوز ذلك باستخدام setting “allow_suspicious_codecs = true”. #45652 (Robert Schulze).

ميزة جديدة

  • أضف StorageIceberg ودالة الجدول iceberg للوصول إلى مخزن جداول Iceberg على S3. #45384 (flynn).
  • أتح تهيئة التخزين على نحو SETTINGS disk = '<disk_name>' (بدلًا من storage_policy) ومع إنشاء القرص صراحةً SETTINGS disk = disk(type=s3, ...). #41976 (Kseniia Sumarokova).
  • اعرض عدادات ProfileEvents في system.part_log. #38614 (Bharat Nallan).
  • تحسين محرك ReplacingMergeTree الحالي للسماح بإدراج السجلات المكررة. ويستفيد هذا من مزايا كلٍّ من ReplacingMergeTree وCollapsingMergeTree في محرك MergeTree واحد. لا تُعاد البيانات المحذوفة عند الاستعلام عنها، لكنها لا تُزال من القرص أيضًا. #41005 (youennL-cs).
  • أضف الدالة generateULID. يُغلق #36536. #44662 (Nikolay Degterinsky).
  • أضف الدالة التجميعية corrMatrix لحساب الارتباط بين كل زوج من الأعمدة. بالإضافة إلى ذلك، وبما أن covarSamp وcovarPop التجميعيتين مشابهتان لـ corr، فقد أُضيفت أيضًا covarSampMatrix وcovarPopMatrix. ‏@alexey-milovidov يغلق #44587. #44680 (FFFFFFFHHHHHHH).
  • تقديم الدالة arrayShuffle لإجراء تبديلات عشوائية للمصفوفات. #45271 (Joanna Hulboj).
  • ادعم النوع FIXED_SIZE_BINARY في Arrow، وFIXED_LENGTH_BYTE_ARRAY في Parquet، وطابقهما مع FixedString. أضف الإعدادات output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array للتحكم في نوع الإخراج الافتراضي لـ FixedString. يُغلق #45326. #45340 (Kruglov Pavel).
  • أضف عمودًا جديدًا last_exception_time إلى system.replication&#95;queue. #45457 (Frank Chen).
  • أُضيفت دالتان جديدتان تتيحان استخدام مفاتيح/بذور يحددها المستخدم مع SipHash. #45513 (Salvatore Mesoraca).
  • السماح بإصدار ذي ثلاث وسائط من دالة الجدول format. إغلاق #45808. #45873 (FFFFFFFHHHHHHH).
  • إضافة دعم تنسيق JodaTime لكل من ‘x’ و’w’ و’S’. راجع https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html. #46073 (zk_kiger).
  • دعم دالة النافذة ntile. (lgbo).
  • إضافة الإعداد final لتطبيق المُعدِّل FINAL ضمنيًا على كل جدول. #40945 (Arthur Passos).
  • تمت إضافة الدالتين arrayPartialSort وarrayPartialReverseSort. #46296 (Joanna Hulboj).
  • تتيح المعلمة الجديدة في http، client_protocol_version، تعيين إصدار بروتوكول العميل لاستجابات HTTP باستخدام تنسيق Native. #40397. #46360 (Geoff Genz).
  • إضافة دالة جديدة regexpExtract، مماثلة لدالة spark ‏REGEXP_EXTRACT لأغراض التوافق. وهي مشابهة للدالة الحالية extract. #46469 (李扬).
  • إضافة دالة جديدة JSONArrayLength تُرجع عدد العناصر في مصفوفة JSON الخارجية. تُرجع الدالة NULL إذا كانت سلسلة JSON المُدخلة غير صالحة. #46631 (李扬).

تحسين الأداء

  • تعمل الآلية المُضافة إذا كان شرط PREWHERE عبارة عن اقتران لعدة شروط (cond1 AND cond2 AND … ). وهي تجمع الشروط التي تتطلب قراءة الأعمدة نفسها ضمن خطوات. بعد كل خطوة، يُحسَب الجزء المقابل من الشرط الكامل، وقد تُرشَّح الصفوف الناتجة. يتيح ذلك قراءة عدد أقل من الصفوف في الخطوات التالية، مما يوفّر عرض نطاق IO ويقلّل حجم المعالجة. هذه الآلية معطلة افتراضيًا حاليًا. وسيتم تفعيلها افتراضيًا في أحد الإصدارات المستقبلية بعد التأكد من أنها لا تسبب أي تراجعات، لذا يُنصح بشدة باستخدامها لأغراض الاختبار. ويمكن التحكم فيها عبر إعدادين: “enable_multiple_prewhere_read_steps” و “move_all_conditions_to_prewhere”. #46140 (Alexander Gololobov).
  • أُضيف خيار لتجميع partition بشكل مستقل إذا كان partition key للجدول ومفتاح Group By متوافقين. ويُتحكَّم فيه عبر الإعداد allow_aggregate_partitions_independently. وهو معطل افتراضيًا بسبب محدودية حالات استخدامه (يرجى الرجوع إلى الوثائق). #45364 (Nikita Taranov).
  • السماح باستخدام Vertical merge algorithm مع parts بتنسيق Compact. سيتيح ذلك لـ ClickHouse server استخدام ذاكرة أقل بكثير في العمليات الخلفية. هذا يُغلق #46084. #45681 #46282 (Anton Popov).
  • تحسين قارئ Parquet باستخدام قارئ Batch. #45878 (LiuNeng).
  • إضافة method جديدة local_filesystem_read_method، وهي io_uring، وتعتمد على النظام الفرعي غير المتزامن io_uring في Linux، مما يحسّن أداء القراءة بشكل شبه عام مقارنةً بالـ method الافتراضية pread. #38456 (Saulius Valatka).
  • إعادة كتابة aggregate functions التي تحتوي على if expression كـ argument عندما تكون logically equivalent. على سبيل المثال، يمكن إعادة كتابة avg(if(cond, col, null)) إلى avgIf(cond, col). وهذا يفيد في تحسين الأداء. #44730 (李扬).
  • تحسين أداء الدالتين lower/upper باستخدام تعليمات avx512. #37894 (yaqi-zhao).
  • إزالة القيد الذي كان يجعل ClickHouse يستخدم نصف الأنوية فقط على الأنظمة التي تحتوي على >=32 نواة مع تعطيل SMT (أي عند تعطيل Hyper Threading من BIOS). #44973 (Robert Schulze).
  • تحسين أداء الدالة multiIf عبر التنفيذ العمودي columnar، مع تسريع بمقدار 2.3x. #45296 (李扬).
  • إضافة مسار سريع للدالة position عندما تكون needle فارغة. #45382 (李扬).
  • تفعيل تحسين query_plan_remove_redundant_sorting افتراضيًا. نُفّذ هذا التحسين في #45420. #45567 (Igor Nikonov).
  • زيادة حجم chunk لترميز نقل HTTP لتحسين أداء الاستعلامات الكبيرة التي تستخدم HTTP interface. #45593 (Geoff Genz).
  • أُصلح أداء استعلامات SELECT القصيرة التي تقرأ من جداول تحتوي على عدد كبير من أعمدة Array/Map/Nested. #45630 (Anton Popov).
  • تحسين أداء التصفية للأعداد الصحيحة الكبيرة وأنواع Decimal. #45949 (李扬).
  • يمكن لهذا التغيير أن يقلل بفاعلية من الحمل الإضافي الناتج عن استخراج عامل التصفية من ColumnNullable(UInt8)، وأن يحسن الأداء العام للاستعلام. ولتقييم أثر هذا التغيير، اعتمدنا benchmark ‏TPC-H، لكننا غيّرنا أنواع الأعمدة من non-NULL إلى Nullable، وقسنا QPS لاستعلاماته بوصفه مؤشراً للأداء. #45962 (Zhiguo Zhou).
  • جعل العمودين الافتراضيين _part و _partition_id من النوع LowCardinality(String). يغلق #45964. #45975 (flynn).
  • تحسين أداء تحويل Decimal عندما لا يتغير scale. #46095 (Alexey Milovidov).
  • السماح بزيادة الجلب الاستباقي لعمليات read data. #46168 (Kseniia Sumarokova).
  • إعادة كتابة arrayExists(x -> x = 1, arr) -> has(arr, 1)، مما يحسن الأداء بمقدار 1.34 مرة. #46188 (李扬).
  • إصلاح الزيادة الكبيرة جداً في استخدام الذاكرة لعمليات vertical merges على disk غير بعيد. مع مراعاة max_insert_delayed_streams_for_parallel_write للـ remote disk. #46275 (Nikolai Kochetov).
  • تحديث zstd إلى الإصدار v1.5.4. ويتضمن ذلك بعض التحسينات الطفيفة في الأداء ونسبة الضغط. إذا كنت تشغّل replicas بإصدارات مختلفة من ClickHouse، فقد ترى رسائل error معقولة مثل Data after merge/mutation is not byte-identical to data on another replicas. مع توضيح للسبب. هذه الرسائل طبيعية ولا داعي للقلق بشأنها. #46280 (Raúl Marín).
  • إصلاح تراجع الأداء الناتج عن #39737. #46309 (Alexey Milovidov).
  • سيستجيب المعالج replicas_status بسرعة حتى في حال وجود replication queue كبيرة. #46310 (Alexey Milovidov).
  • إضافة دعم avx512 إلى aggregate function ‏sum، وإلى دالة الحساب الأحادي، وإلى دالة المقارنة. #37870 (zhao zhou).
  • أُعيدت كتابة الشيفرة المتعلقة بتوزيع marks والتنسيق العام لعملية القراءة من أجل تحقيق أكبر تحسن ممكن في الأداء. يغلق هذا #34527. #43772 (Nikita Mikhaylov).
  • إزالة عبارات DISTINCT الزائدة في الاستعلام (الاستعلامات الفرعية). نُفذ ذلك بالاعتماد على query plan. ويطبق تحسيناً مشابهاً لـ optimize_duplicate_order_by_and_distinct فيما يتعلق بعبارات DISTINCT. ويمكن تفعيله عبر الإعداد query_plan_remove_redundant_distinct. وهو ذو صلة بـ #42648. #44176 (Igor Nikonov).
  • بعض تحسينات إعادة كتابة الاستعلام: sumIf(123, cond) -> 123 * countIf(1, cond), sum(if(cond, 123, 0)) -> 123 * countIf(cond), sum(if(cond, 0, 123)) -> 123 * countIf(not(cond)) #44728 (李扬).
  • جرى تحسين طريقة تفاعل الدمج المقيَّد بالذاكرة والتجميع بخوارزمية In order في المستوى الأعلى من خطة الاستعلام. سابقًا، كنا نلجأ في بعض الحالات إلى الفرز الصريح من أجل AIO رغم أنه لم يكن مطلوبًا فعليًا. #45892 (Nikita Taranov).
  • تُجدول عمليات الدمج المتزامنة باستخدام round-robin افتراضيًا لضمان تشغيل عادل وخالٍ من التجويع. سابقًا، في الأجزاء ذات الحمل الزائد الشديد، كان من الممكن أن تتعرض عمليات الدمج الكبيرة للتجويع بسبب عمليات الدمج الأصغر نتيجة استخدام الجدولة ذات الأولوية الصارمة. أُضيف خيار في إعدادات الخادم باسم background_merges_mutations_scheduling_policy لاختيار خوارزمية الجدولة (round_robin أو shortest_task_first). #46247 (Sergei Trifonov).

تحسين

  • تمكين إعادة المحاولة لعملية INSERT افتراضيًا في حال فقدان جلسة ZooKeeper. نحن نستخدم ذلك بالفعل في بيئة الإنتاج. #46308 (Alexey Milovidov).
  • إضافة إمكانية تجاهل المفاتيح غير المعروفة في كائن JSON ضمن الـ tuples المسماة (input_format_json_ignore_unknown_keys_in_named_tuple). #45678 (Azat Khuzhin).
  • دعم تحسين العبارة where عبر نقل تعبير مفتاح الفرز إلى prewhere في الاستعلامات التي تستخدم final. #38893. #38950 (hexiaoting).
  • إضافة مقاييس جديدة للنسخ الاحتياطية: num_processed_files و processed_files_size لوصف العدد الفعلي للملفات المُعالجة. #42244 (Aleksandr).
  • تمت إضافة إعادة المحاولة عند حدوث أخطاء DNS بين الخوادم. #43179 (Anton Kozlov).
  • تحسين في Keeper: محاولة حجز مساحة مسبقًا على القرص لتجنب مشكلات نفاد المساحة غير المتوقعة. وإضافة الإعداد max_log_file_size لتحديد الحد الأقصى لحجم ملفات سجل Raft الخاصة بـ Keeper. #44370 (Antonio Andelic).
  • تحسين سلوك منطق واجهة برمجة التطبيقات لتأخر الـ replica في حال كانت الـ replica للقراءة فقط. #45148 (mateng915).
  • طلب كلمة المرور تفاعليًا في clickhouse-client عندما لا تكون كلمة المرور الفارغة صحيحة. يغلق #46702. #46730 (Nikolay Degterinsky).
  • وسم ضغط Gorilla على الأعمدة من نوع غير Float* بأنه مشبوه. #45376 (Robert Schulze).
  • إظهار اسم الـ replica التي تنفذ عملية merge في عمود postpone_reason. #45458 (Frank Chen).
  • حفظ تتبع مكدس الاستثناء في part_log. #45459 (Frank Chen).
  • جرى تحسين القاموس regexp_tree وهو الآن متوافق مع https://github.com/ua-parser/uap-core. #45631 (Han Fei).
  • تم تحديث آلية التحقق في SYSTEM SYNC REPLICA، مما يحل #45508 #45648 (SmitaRKulkarni).
  • إعادة تسمية الإعداد replication_alter_partitions_sync إلى alter_sync. #45659 (Antonio Andelic).
  • تدعم الدالة الجدولية generateRandom والمحرك الآن أنواع البيانات LowCardinality. وهذا مفيد للاختبار؛ فعلى سبيل المثال يمكنك كتابة INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000. وهذا مطلوب من أجل تصحيح #45590. #45661 (Alexey Milovidov).
  • توفّر query result cache التجريبية الآن إعدادات تهيئة أكثر مرونة وتجزئة. #45679 (Robert Schulze).
  • أُعيدت تسمية “query result cache” إلى “query cache”. #45682 (Robert Schulze).
  • إضافة الأمر SYSTEM SYNC FILE CACHE. وسيُجري نداء النظام sync. #8921. #45685 (DR).
  • إضافة إعداد S3 جديد allow_head_object_request. يجعل طلب السحب هذا استخدام الطلب GetObjectAttributes بدلًا من HeadObject، الذي أُضيف في https://github.com/ClickHouse/ClickHouse/pull/45288، اختياريًا (ومعطّلًا افتراضيًا). #45701 (Vitaly Baranov).
  • إضافة إمكانية تجاوز إعدادات الاتصال استنادًا إلى أسماء الاتصالات (ما يعني أنه لم تعد بحاجة إلى تخزين كلمة مرور لكل اتصال؛ إذ يمكنك ببساطة وضع كل شيء في ~/.clickhouse-client/config.xml، وحتى استخدام ملفات محفوظات مختلفة لها، وهو ما قد يكون مفيدًا أيضًا). #45715 (Azat Khuzhin).
  • تنسيق Arrow: دعم نوع Duration. يُغلق #45669. #45750 (flynn).
  • توسيع logging في Query Cache لتحسين التحقيق في سلوك التخزين المؤقت. #45751 (Robert Schulze).
  • أصبحت إعدادات query cache على مستوى الخادم قابلة لإعادة الضبط أثناء وقت التشغيل. #45758 (Robert Schulze).
  • إخفاء كلمة المرور في السجلات عندما تُحدَّد الوسائط الخاصة بـ table function باستخدام named collection. #45774 (Vitaly Baranov).
  • تحسين عميل S3 الداخلي ليستنتج المناطق وعمليات إعادة التوجيه بشكل صحيح لمختلف أنواع عناوين URL. #45783 (Antonio Andelic).
  • إضافة دعم لأنواع Map وIPv4 وIPv6 في GenerateRandom. وهذا مفيد غالبًا لأغراض الاختبار. #45785 (Raúl Marín).
  • دعم empty/notEmpty لأنواع IP. #45799 (Yakov Olkhovskiy).
  • جرى تقسيم العمود num_processed_files إلى عمودين: num_files (لـ BACKUP) وfiles_read (لـ RESTORE). كما جرى تقسيم العمود processed_files_size إلى عمودين: total_size (لـ BACKUP) وbytes_read (لـ RESTORE). #45800 (Vitaly Baranov).
  • إضافة دعم للاستعلام SHOW ENGINES للتوافق مع MySQL. #45859 (Filatenkov Artur).
  • تحسين طريقة تعامل أداة الإخفاء مع الاستعلامات. #45867 (Raúl Marín).
  • تحسين سلوك التحويل إلى Date للقيمة الحدّية 65535 ‏(2149-06-06). #46042 #45914 (Joanna Hulboj).
  • إضافة الإعداد check_referential_table_dependencies للتحقق من التبعيات المرجعية عند تنفيذ DROP TABLE. يحل هذا الطلب #38326. #45936 (Vitaly Baranov).
  • إصلاح tupleElement ليُرجع Null عند وجود وسيطة Null. يغلق #45894. #45952 (flynn).
  • إرجاع خطأ عند عدم وجود أي ملفات تطابق wildcard الخاص بـ S3. يغلق #45587. #45957 (chen).
  • استخدام بيانات حالة العنقود للتحقق من عمليات النسخ الاحتياطي/الاستعادة المتزامنة. #45982 (SmitaRKulkarni).
  • ClickHouse Client: استخدام المطابقة “exact” في البحث التقريبي، لما توفره من تجاهل صحيح لحالة الأحرف وخوارزمية أنسب لمطابقة استعلامات SQL. #46000 (Azat Khuzhin).
  • منع صيغة إنشاء View غير الصحيحة CREATE View X TO Y AS SELECT. يغلق #4331. #46043 (flynn).
  • باتت عائلة محركات التخزين Log تدعم تعيين storage_policy. يغلق #43421. #46044 (flynn).
  • تحسين تنسيق JSONColumns عندما تكون النتيجة فارغة. يغلق #46024. #46053 (flynn).
  • إضافة تنفيذ مرجعي لـ SipHash128. #46065 (Salvatore Mesoraca).
  • إضافة مقياس جديد لتسجيل عدد مرات تخصيص الذاكرة وحجم البايتات باستخدام mmap. #46068 (李扬).
  • حاليًا، بالنسبة إلى الدوال مثل leftPad وrightPad وleftPadUTF8 وrightPadUTF8، يجب أن تكون الوسيطة الثانية length من النوع UInt8|16|32|64|128|256. وهذا تقييد صارم جدًا لمستخدمي ClickHouse، كما أنه غير متسق مع دوال مشابهة أخرى مثل arrayResize وsubstring وما إلى ذلك. #46103 (李扬).
  • إصلاح مشكلة assertion في الدالة welchTTest في إصدار debug build عندما تكون الإحصائية الناتجة NaN. كما جرى توحيد السلوك مع الدوال المشابهة الأخرى. وتغيير سلوك studentTTest ليُرجع NaN بدلًا من إطلاق استثناء لأن السلوك السابق كان غير عملي. هذا يغلق #41176 وهذا يغلق #42162. #46141 (Alexey Milovidov).
  • استخدام أكثر سلاسة للأعداد الصحيحة الكبيرة و ORDER BY WITH FILL. أصبح من الممكن استخدام الأعداد الصحيحة العادية لنقطتَي البداية والنهاية في WITH FILL عند استخدام ORDER BY مع الأعداد الصحيحة الكبيرة (128 بت و256 بت). كما تم إصلاح النتيجة الخاطئة للأعداد الصحيحة الكبيرة عند كون نقطتَي البداية أو النهاية سالبتين. هذا يُغلق #16733. #46152 (Alexey Milovidov).
  • إضافة الأعمدة parts وactive_parts وtotal_marks إلى system.tables بخصوص issue. #46161 (attack204).
  • الدوال “multi[Fuzzy]Match(Any|AnyIndex|AllIndices}” ترفض الآن تعبيرات Regex التي يُرجَّح أن يكون تقييمها بطيئًا جدًا في vectorscan. #46167 (Robert Schulze).
  • عندما يكون insert_null_as_default مفعّلًا ولا يحتوي العمود على قيمة افتراضية معرّفة، فسيتم استخدام القيمة الافتراضية لنوع العمود. كما يُصلح هذا التغيير استخدام القيم الافتراضية مع nulls في حالة أعمدة LowCardinality. #46171 (Kruglov Pavel).
  • تفضيل مفاتيح الوصول المعرّفة صراحةً لعملاء S3. إذا كان use_environment_credentials مضبوطًا على true، وكان المستخدم قد وفّر مفتاح الوصول عبر query أو config، فسيُستخدم هذا المفتاح بدلًا من المفتاح الموجود في متغير البيئة. #46191 (Antonio Andelic).
  • إضافة alias باسم “DATE_FORMAT()” للدالة “formatDateTime()” لتحسين التوافق مع SQL dialect الخاص بـ MySQL، وتوسيع الدالة formatDateTime باستبدالات “a” و”b” و”c” و”h” و”i” و”k” و”l” و”r” و”s” و”W”. ### مُدخل توثيقي للتغييرات الظاهرة للمستخدم وصف قصير قابل للقراءة من المستخدم: DATE_FORMAT هو alias للدالة formatDateTime. ينسّق قيمة Time وفقًا لـ format string المحدد. ويجب أن يكون Format expression ثابتًا، لذلك لا يمكن استخدام عدة formats لعمود نتيجة واحد. (وفّر رابطًا إلى formatDateTime). #46302 (Jake Bamrah).
  • إضافة ProfileEvents وCurrentMetrics لمهام callback الخاصة بـ parallel replicas (لجداول s3Cluster وMergeTree). #46313 (Alexey Milovidov).
  • إضافة دعم DELETE وUPDATE للجداول التي تستخدم محرك التخزين KeeperMap. #46330 (Antonio Andelic).
  • السماح بكتابة استعلامات RENAME باستخدام query parameters. يحل المشكلة #45778. #46407 (Nikolay Degterinsky).
  • إصلاح استعلامات SELECT ذات المعلمات مع محوّل REPLACE. يحل المشكلة #33002. #46420 (Nikolay Degterinsky).
  • استبعاد database الداخلية المستخدمة للجداول المؤقتة/الخارجية من حساب المقياس غير المتزامن “NumberOfDatabases”. وهذا يجعل السلوك متسقًا مع system table “system.databases”. #46435 (Robert Schulze).
  • تمت إضافة العمود last_exception_time إلى جدول distribution_queue. #46564 (Aleksandr).
  • دعم عبارة IN مع معلمة في العروض ذات المعلمات. #46583 (SmitaRKulkarni).
  • لا تُحمَّل المجموعات المسماة عند بدء تشغيل الخادم (بل تُحمَّل عند أول استخدام لها). #46607 (Kseniia Sumarokova).

تحسينات في البناء/الاختبار/التغليف

  • إضافة GWP-ASan المُنفَّذ عبر runtime الخاص بـ LLVM. يُغلق هذا #27039. #45226 (Han Fei).
  • نريد أن نجعل اختباراتنا أقل استقرارًا وأكثر عرضة للتذبذب: إضافة عشوائية إلى إعدادات merge tree في الاختبارات. #38983 (Anton Popov).
  • تمكين دعم HDFS على PowerPC، ما يساعد على إصلاح الاختبارات الوظيفية التالية: 02113_hdfs_assert.sh و02244_hdfs_cluster.sql و02368_cancel_write_into_hdfs.sh. #44949 (MeenaRenganathan22).
  • إضافة ملف systemd.service لـ clickhouse-keeper. يُصلح هذا #44293. #45568 (Mikhail f. Shiryaev).
  • نُقلت النسخة المتفرعة التي يستخدمها ClickHouse من poco من “contrib/” إلى “base/poco/”. #46075 (Robert Schulze).
  • إضافة خيار إلى clickhouse-watchdog لإعادة تشغيل العملية الفرعية. هذا ليس ذا فائدة كبيرة. #46312 (Alexey Milovidov).
  • إذا كان متغير البيئة CLICKHOUSE_DOCKER_RESTART_ON_EXIT مضبوطًا على 1، فستشغّل حاوية Docker clickhouse-server كعملية فرعية بدلًا من العملية الأولى، ثم تعيد تشغيله عند خروجه. #46391 (Alexey Milovidov).
  • إصلاح ملف خدمة systemd. #46461 (SuperDJY).
  • رُفع الحد الأدنى لإصدار Clang المطلوب لبناء ClickHouse من 12 إلى 15. #46710 (Robert Schulze).
  • ترقية Intel QPL من v0.3.0 إلى v1.0.0 2. وبناء libaccel-config وربطه ربطًا ثابتًا بمكتبة QPL بدلًا من الربط الديناميكي. #45809 (jasperzhu).

إصلاح الأخطاء (خلل يلاحظه المستخدم في الإصدار المستقر الرسمي)

  • تفريغ البيانات بدقة وفقًا لـ rabbitmq_flush_interval_ms أو rabbitmq_max_block_size في StorageRabbitMQ. يغلق #42389. يغلق #45160. #44404 (Kseniia Sumarokova).
  • استخدام PODArray للعرض في الدالة sparkBar، حتى نتمكن من التحكم في استخدام الذاكرة. يغلق #44467. #44489 (Duc Canh Le).
  • إصلاح قيام الدالتين (quantilesExactExclusive, quantilesExactInclusive) بإرجاع عنصر Array غير مُرتَّب. #45379 (wujunfu).
  • إصلاح استثناء غير معالَج في HTTPHandler عند تمكين OpenTelemetry. #45456 (Frank Chen).
  • عدم استنتاج Dates من الأرقام المكوَّنة من 8 خانات. فقد يؤدي ذلك إلى قراءة بيانات غير صحيحة. #45581 (Kruglov Pavel).
  • إصلاحات لاستخدام الإعداد odbc_bridge_use_connection_pooling على نحو صحيح. #45591 (Bharat Nallan).
  • عند استدعاء callback في cache، قد تكون هذه الـ cache قد دُمِّرت. ولضمان الأمان، نلتقط الأعضاء بالقيمة. وهذا آمن أيضًا لجدولة المهام لأنها ستُعطَّل قبل تدمير التخزين. يحل #45548. #45601 (Han Fei).
  • إصلاح تلف البيانات عند دمج codecs من نوع Delta أو DoubleDelta مع codec من نوع Gorilla. #45615 (Robert Schulze).
  • التحقق من الأنواع بشكل صحيح عند استخدام فهرس مرشح Bloom لـ N-gram لتجنب القراءات غير الصالحة. #45617 (Antonio Andelic).
  • تم الإبلاغ عن حالتي segfault تتعلقان بـ c-ares. وقد أُدخلتا في طلبات السحب السابقة الخاصة بي. وقد أصلحتهما بمساعدة Alexander Tokmakov. #45629 (Arthur Passos).
  • إصلاح وصف المفتاح عند مواجهة مفاتيح أساسية مكررة. يمكن أن يحدث ذلك في الإسقاطات. راجع #45590 للتفاصيل. #45686 (Amos Bird).
  • تعيين طريقة الضغط ومستواه للنسخ الاحتياطي. يغلق #45690. #45737 (Pradeep Chhetri).
  • ينبغي استخدام select_query_typed.limitByOffset بدلًا من select_query_typed.limitOffset. #45817 (刘陶峰).
  • عند استخدام المحلّل التجريبي، فإن استعلامات مثل SELECT number FROM numbers(100) LIMIT 10 OFFSET 10; تعطي نتائج خاطئة (نتيجة فارغة لهذا الاستعلام). ويرجع ذلك إلى خطوة OFFSET غير ضرورية أضافها المخطِّط. #45822 (刘陶峰).
  • التوافق مع الإصدارات السابقة - السماح بالتحويل الضمني المُضيِّق من UInt64 إلى IPv4 - وهو مطلوب لتعبير “INSERT … VALUES …”. #45865 (Yakov Olkhovskiy).
  • إصلاح محلل IPv6 لعناوين ip4 المختلطة عند غياب الأوكتيت الأول (مثل ::.1.2.3). #45871 (Yakov Olkhovskiy).
  • إضافة العمود query_kind إلى الجدول system.processes والاستعلام SHOW PROCESSLIST. وإزالة الشيفرة المكررة. ويُصلح ذلك خطأً كانت فيه معلَمة التهيئة العامة max_concurrent_select_queries لا تُطبَّق على الاستعلامات التي تحتوي على سلاسل INTERSECT أو EXCEPT. #45872 (Alexey Milovidov).
  • إصلاح تعطل في الدالة stochasticLinearRegression. اكتشفه WingFuzz. #45985 (Nikolai Kochetov).
  • إصلاح تعطل في استعلامات SELECT ذات المعدِّلين INTERSECT وEXCEPT التي تقرأ البيانات من جداول تحتوي على أعمدة sparse مُمكّنة (ويتحكم فيها الإعداد ratio_of_defaults_for_sparse_serialization). #45987 (Anton Popov).
  • إصلاح تحسين read in order لفرز DESC مع FINAL، وإغلاق #45815. #46009 (Vladimir C).
  • إصلاح قراءة الأعمدة المتداخلة غير الموجودة متعددة المستويات في compact parts. #46045 (Azat Khuzhin).
  • إصلاح العمود elapsed في system.processes (خطأ بمقدار 10x). #46047 (Azat Khuzhin).
  • إصلاح تكميلي لاستبدال أنواع domain لعناوين IP ‏(IPv4 وIPv6) بالأنواع native في https://github.com/ClickHouse/ClickHouse/pull/43221. #46087 (Yakov Olkhovskiy).
  • إصلاح استبدال متغيرات البيئة في التهيئة عندما تكون للمعلَمة قيمة مسبقًا. هذا يغلق #46131. وهذا يغلق #9547. #46144 (pufit).
  • إصلاح predicate push down غير الصحيح مع grouping sets. يغلق #45947. #46151 (flynn).
  • إصلاح خطأ محتمل يؤدي إلى توقف pipeline في fulls_sorting_join عند استخدام مفاتيح ثابتة. #46175 (Vladimir C).
  • عدم إعادة كتابة دوال tuple كقيم حرفية أثناء formatting لتجنب النتائج غير الصحيحة. #46232 (Salvatore Mesoraca).
  • إصلاح خطأ محتمل لتجاوز الحدود أثناء قراءة LowCardinality(Nullable) بتنسيق Arrow format. #46270 (Kruglov Pavel).
  • إصلاح فشل استعلامات SYSTEM UNFREEZE مع الاستثناء CANNOT_PARSE_INPUT_ASSERTION_FAILED. #46325 (Aleksei Filatov).
  • إصلاح تعطل محتمل قد يحدث بسبب تجاوز سعة عدد صحيح أثناء إلغاء تسلسل حالة التجميع لدالة تخزّن HashTable. #46349 (Nikolai Kochetov).
  • إصلاح احتمال حدوث LOGICAL_ERROR في asynchronous inserts عند إرسال بيانات غير صالحة بتنسيق VALUES. #46350 (Anton Popov).
  • أُصلح LOGICAL_ERROR عند محاولة تنفيذ ALTER ... MOVE PART ... TO TABLE. هذا النوع من الاستعلامات لم يكن مدعومًا فعليًا من الأساس. #46359 (Alexander Tokmakov).
  • إصلاح schema inference في s3Cluster لعمليات distributed insert select المتوازية عند تمكين parallel_distributed_insert_select. #46381 (Kruglov Pavel).
  • إصلاح استعلامات مثل ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ...، حيث إن arr1 وarr2 حقلان من العمود Nested نفسه. #46387 (Anton Popov).
  • قد يفشل Scheduler في جدولة مهمة. وإذا حدث ذلك، فيجب إلغاء MulityPartUpload بالكامل، ويجب أن ينتظر UploadHelper المهام التي تمت جدولتها بالفعل. #46451 (Dmitry Novik).
  • إصلاح PREWHERE في Merge عند وجود أنواع افتراضية مختلفة (يصلح بعض حالات NOT_FOUND_COLUMN_IN_BLOCK عندما يختلف النوع الافتراضي للعمود، كما يسمح أيضًا باستخدام PREWHERE عندما يكون نوع العمود نفسه عبر الجداول، ويمنعه فقط عند اختلافه). #46454 (Azat Khuzhin).
  • إصلاح تعطل كان قد يحدث عند استخدام قيم ثابتة في ORDER BY. يُصلح #46466. #46493 (Nikolai Kochetov).
  • لا تُطلق استثناءً إذا كان إعداد disk محددًا على مستوى query، بينما كان storage_policy محددًا في قسم إعدادات config الخاص بـ merge tree. سيؤدي disk إلى تجاوز الإعداد المحدد في config. #46533 (Kseniia Sumarokova).
  • إصلاح معالجة غير صحيحة للـ argument الثابت LowCardinality في الدالة arrayMap. كان هذا الخلل قد يؤدي إلى segfault في release، وإلى logical error Bad cast في build التصحيح. #46569 (Alexey Milovidov).
  • يُصلح #46557. #46611 (Alexander Gololobov).
  • إصلاح إعادة التشغيل اللانهائية لوحدة systemd الخاصة بـ clickhouse-server إذا تعذر على server البدء خلال 1m30sec (تعطيل منطق timeout لبدء clickhouse-server من خدمة systemd). #46613 (Azat Khuzhin).
  • كانت memory buffers المخصصة أثناء asynchronous inserts تُحرَّر في Context العام، ولم تكن counters الخاصة بـ MemoryTracker للمستخدم وquery المقابلين تُحدَّث بشكل صحيح. وقد أدى ذلك إلى استثناءات OOM إيجابية كاذبة. #46622 (Dmitry Novik).
  • تم التحديث بحيث لا تتم إزالة on_expression من table_join لأنه يُستخدم في عمليات التحليل المستقبلية، مما يحل #45185. #46487 (SmitaRKulkarni).

إصدار ClickHouse 23.1، 2023-01-26. العرض التقديمي، الفيديو

إصدار ClickHouse 23.1

ملاحظات الترقية

  • يصبح الاستعلام SYSTEM RESTART DISK بلا تأثير. #44647 (alesapin).
  • يصبح الخيار PREALLOCATE في قواميس HASHED/SPARSE_HASHED بلا تأثير. #45388 (Azat Khuzhin). ولم يعد يوفّر مزايا تُذكر.
  • يُمنع استخدام codec ‏Gorilla على الأعمدة التي ليست من النوع Float32 أو Float64. #45252 (Robert Schulze). إذ لم يكن لذلك جدوى وأدّى إلى حالات عدم اتساق.
  • قد تعمل quorum inserts المتوازية بشكل غير صحيح مع جداول *MergeTree التي أُنشئت باستخدام الصياغة المهجورة. لذلك، عُطِّل دعم quorum inserts المتوازية بالكامل لهذه الجداول. ولا يؤثر ذلك في الجداول التي أُنشئت بالصياغة الجديدة. #45430 (Alexander Tokmakov).
  • استُخدم الطلب GetObjectAttributes بدلًا من الطلب HeadObject للحصول على حجم كائن في AWS S3. ويعالج هذا التغيير، على سبيل المثال، التعامل مع نقاط النهاية التي لا تحتوي على مناطق محددة صراحةً بعد تحديث AWS SDK. #45288 (Vitaly Baranov). جرى اختبار AWS S3 وMinio، لكن ضع في اعتبارك أن خدمات S3-compatible المختلفة (GCS وR2 وB2) قد تتضمن حالات عدم توافق طفيفة. وقد يتطلب هذا التغيير أيضًا تعديل ACL للسماح بالطلب GetObjectAttributes.
  • تُمنع المسارات في أسماء timezone. على سبيل المثال، لا يُسمح باسم timezone مثل /usr/share/zoneinfo/Asia/Aden؛ ويجب استخدام اسم timezone من قاعدة بيانات IANA مثل Asia/Aden. #44225 (Kruglov Pavel).
  • تُمنع الاستعلامات التي تجمع بين الربط بالمساواة والتعبيرات الثابتة (مثل JOIN ON t1.x = t2.x AND 1 = 1) بسبب نتائج غير صحيحة. #44016 (Vladimir C).

ميزة جديدة

  • مصدر قاموس لاستخراج المفاتيح عبر اجتياز شجرة التعبيرات النمطية. ويمكن استخدامه لتحليل User-Agent. #40878 (Vage Ogannisian). #43858 (Han Fei).
  • أُضيف دعم العروض ذات المعلمات، وأصبح من الممكن الآن تحديد معلمات الاستعلام لمحرك الجدول View. يُعالج #40907. #41687 (SmitaRKulkarni).
  • إضافة الدالتين quantileInterpolatedWeighted/quantilesInterpolatedWeighted. #38252 (Bharat Nallan).
  • دعم ARRAY JOIN للنوع Map، على غرار الدالة “explode” في Spark. #43239 (李扬).
  • دعم literals السلاسل الثنائية والسداسية العشرية القياسية في SQL. #43785 (Mo Xuan).
  • السماح بتنسيق DateTime بأسلوب Joda-Time. راجع توثيق Joda-Time. #43818 (李扬).
  • تنفيذ مُنسِّق للثواني الكسرية (%f) في formatDateTime. #44060 (ltrk2). #44497 (Alexander Gololobov).
  • أُضيفت الدالة age لحساب الفرق بين تاريخين أو بين قيمتَي تاريخ ووقت، معبَّرًا عنه بعدد الوحدات الكاملة. يُغلق #41115. #44421 (Robert Schulze).
  • إضافة المصدر Null للقواميس. يُغلق #44240. #44502 (mayamika).
  • السماح بتهيئة فئة تخزين S3 باستخدام خيار التهيئة s3_storage_class، مثل <s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class>. يُغلق #44443. #44707 (chen).
  • إدراج القيم الافتراضية عند وجود عناصر مفقودة في JSON object أثناء تحليل named tuple. أُضيف الإعداد input_format_json_defaults_for_missing_elements_in_named_tuple للتحكم في هذا السلوك. يُغلق #45142#issuecomment-1380153217. #45231 (Kruglov Pavel).
  • تسجيل وقت بدء تشغيل الخادم في ProfileEvents (ServerStartupMilliseconds). يُعالج #43188. #45250 (SmitaRKulkarni).
  • إعادة هيكلة محركات البث Kafka/RabbitMQ/NATS وتحسينها، مع إضافة دعم لجميع التنسيقات، وإعادة هيكلة التنسيقات أيضًا بشكل طفيف: - إصلاح إنتاج الرسائل في التنسيقات المعتمدة على الصفوف مع اللواحق/البوادئ. الآن تُنسَّق كل رسالة بالكامل مع جميع الفواصل، ويمكن تحليلها مرة أخرى باستخدام تنسيق الإدخال. - دعم التنسيقات المعتمدة على الكتل مثل Native وParquet وORC وغيرها. تُنسَّق كل كتلة كرسالة منفصلة. يعتمد عدد الصفوف في الرسالة الواحدة على حجم الكتلة، لذا يمكنك التحكم فيه عبر الإعداد max_block_size. - إضافة إعدادات engine جديدة هي kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message. تتحكم هذه الإعدادات في عدد الصفوف التي تُنسَّق داخل رسالة واحدة في التنسيقات المعتمدة على الصفوف. القيمة الافتراضية: 1. - إصلاح الاستهلاك المرتفع للذاكرة في NATS table engine. - دعم البيانات الثنائية الاعتباطية في منتِج NATS (كان يعمل سابقًا فقط مع السلاسل النصية التي تحتوي على \0 في النهاية) - إضافة إعدادات engine المفقودة الخاصة بـ Kafka/RabbitMQ/NATS إلى الوثائق. - إعادة هيكلة الإنتاج والاستهلاك في Kafka/RabbitMQ/NATS، وفصل ذلك عن دلالات WriteBuffers/ReadBuffers. - إعادة هيكلة تنسيقات الإخراج: إزالة callbacks على مستوى كل صف والمستخدمة في Kafka/RabbitMQ/NATS (لم نعد نستخدم callbacks هناك)، والسماح باستخدام IRowOutputFormat مباشرةً، وتوضيح فواصل نهاية الصف والفواصل بين الصفوف، وإتاحة إعادة تعيين تنسيق الإخراج لبدء التنسيق من جديد - إضافة تنفيذ صحيح في الدالة formatRow (تحسين إضافي بعد إعادة هيكلة التنسيقات). #42777 (Kruglov Pavel).
  • دعم قراءة/كتابة جداول Nested بصفتها List من Struct في تنسيق CapnProto. وقراءة/كتابة Decimal32/64 بصفتها Int32/64. يُغلق #43319. #43379 (Kruglov Pavel).
  • أُضيف العمود message_format_string إلى system.text_log. يحتوي العمود على النمط الذي استُخدم لتنسيق الرسالة. #44543 (Alexander Tokmakov). يتيح ذلك إجراء أنواع مختلفة من analytics على سجلات ClickHouse.
  • محاولة الاكتشاف التلقائي للرؤوس التي تحتوي على أسماء الأعمدة (وربما الأنواع) لتنسيقات الإدخال CSV/TSV/CustomSeparated. إضافة الإعدادات input_format_tsv/csv/custom_detect_header التي تُمكّن هذا السلوك (مفعّلة افتراضيًا). يُغلق #44640. #44953 (Kruglov Pavel).

ميزة تجريبية

  • إضافة فهرس معكوس تجريبي كنوع جديد من الفهارس الثانوية للبحث النصي بكفاءة. #38667 (larryluogit).
  • إضافة ذاكرة تخزين مؤقت تجريبية لنتائج الاستعلامات. #43797 (Robert Schulze).
  • أُضيف نظام فرعي قابل للتوسعة والتهيئة لجدولة طلبات IO (ولم يُدمج بعد مع شيفرة IO نفسها). #41840 (Sergei Trifonov). هذه الميزة لا تفعل أي شيء على الإطلاق، استمتع.
  • أُضيف SYSTEM DROP DATABASE REPLICA الذي يزيل البيانات الوصفية لنسخة متماثلة معطلة من قاعدة بيانات Replicated. ويحل #41794. #42807 (Alexander Tokmakov).

تحسين الأداء

  • لا تُحمَّل الأجزاء غير النشطة عند بدء تشغيل جداول MergeTree. #42181 (Anton Popov).
  • تحسين زمن الاستجابة عند القراءة من وحدة التخزين S3 ودالة الجدول s3 عند وجود أعداد كبيرة من الملفات الصغيرة. وأصبحت الإعدادات remote_filesystem_read_method وremote_filesystem_read_prefetch سارية الآن أثناء القراءة من وحدة التخزين S3. #43726 (Anton Popov).
  • تحسين قراءة حقول struct في ملفات Parquet/ORC. ولا تُحمَّل إلا الحقول المطلوبة. #44484 (lgbo).
  • كانت خوارزمية التجميع على مستويين معطّلة عن طريق الخطأ للاستعلامات عبر واجهة HTTP. وقد أُعيد تفعيلها، مما أدى إلى تحسن كبير في الأداء. #45450 (Nikolai Kochetov).
  • أُضيف دعم mmap إلى StorageFile، ما يُفترض أن يحسّن أداء clickhouse-local. #43927 (pufit).
  • أُضيف دعم sharding في HashedDictionary لإتاحة التحميل المتوازي (بتوسّع شبه خطي بحسب عدد الشظايا). #40003 (Azat Khuzhin).
  • تسريع تحليل الاستعلامات. #42284 (Raúl Marín).
  • استبدال سلسلة OR expr = x1 OR ... OR expr = xN دائمًا بـ expr IN (x1, ..., xN) في الحالة التي يكون فيها expr عمودًا من نوع LowCardinality. ويُتجاهل الإعداد optimize_min_equality_disjunction_chain_length في هذه الحالة. #42889 (Guo Wangyang).
  • تحسين الأداء قليلًا عبر تحسين الشيفرة المحيطة بـ ThreadStatus. #43586 (Zhiguo Zhou).
  • تحسين تقييم المنطق الثلاثي على مستوى الأعمدة عبر تحقيق auto-vectorization. وفي اختبار الأداء لهذا microbenchmark، لاحظنا ذروة زيادة في الأداء بمقدار 21x على جهاز ICX ‏(Intel Xeon Platinum 8380 CPU). #43669 (Zhiguo Zhou).
  • تجنّب الحصول على أقفال قراءة في جدول system.tables إن أمكن. #43840 (Raúl Marín).
  • تحسين ThreadPool. وتُظهر تجارب الأداء على SSB ‏(Star Schema Benchmark) على جهاز ICX ‏(Intel Xeon Platinum 8380 CPU، و80 نواة، و160 thread) أن هذا التغيير يمكن أن يقلّل فعليًا من التنافس على القفل ThreadPoolImpl::mutex بنسبة 75%، مما يزيد من استخدام CPU ويحسّن الأداء الإجمالي بنسبة 2.4%. #44308 (Zhiguo Zhou).
  • يُطبَّق الآن تحسين التنبؤ بحجم hash table فقط إذا كان حجم hash table المخزَّن مؤقتًا كبيرًا بما يكفي (وقد حُدِّدت الحدود تجريبيًا وضُمِّنت مباشرةً في الشيفرة). #44455 (Nikita Taranov).
  • تحسين طفيف في الأداء للقراءة غير المتزامنة من أنظمة الملفات البعيدة. #44868 (Kseniia Sumarokova).
  • إضافة مسار سريع للحالات التالية: - col like '%%'; - col like '%'; - col not like '%'; - col not like '%'; - match(col, '.*'). #45244 (李扬).
  • تحسين طفيف لآلية تحسين المسار الشائع في التصفية (عبارة WHERE). #45289 (Nikita Taranov).
  • توفير معلومات الاطراد لـ toUnixTimestamp64* لتمكين المزيد من التحسينات الجبرية في تحليل الفهارس. #44116 (Nikita Taranov).
  • إتاحة ضبط البيانات المؤقتة لمعالجة الاستعلامات (التفريغ إلى القرص) بحيث تتكامل مع ذاكرة التخزين المؤقت لنظام الملفات (باستخدام المساحة من قرص ذاكرة التخزين المؤقت) #43972 (Vladimir C). يفيد هذا ClickHouse Cloud بالدرجة الأولى، لكنه قابل للاستخدام أيضًا في البيئات ذاتية الإدارة إذا كنت تعرف ما تفعله.
  • جعل جدول system.replicas يجلب حالات النسخ المتماثلة بالتوازي. يُغلق #43918. #43998 (Nikolay Degterinsky).
  • تحسين استهلاك الذاكرة أثناء النسخ الاحتياطي إلى S3: ستُنسخ الملفات إلى S3 الآن مباشرةً من دون استخدام WriteBufferFromS3 (الذي قد يستهلك قدرًا كبيرًا من الذاكرة). #45188 (Vitaly Baranov).
  • إضافة ذاكرة تخزين مؤقت لمعرّفات الكتل غير المتزامنة. سيقلّل هذا عدد طلبات ZooKeeper عند تفعيل إزالة الازدواجية في عمليات الإدراج غير المتزامنة. #45106 (Han Fei).

تحسين

  • استخدام البنية من جدول الإدراج في generateRandom بدون وسائط. #45239 (Kruglov Pavel).
  • السماح بالتحويل الضمني للقيم العائمة المخزنة في الحقول النصية ضمن JSON إلى أعداد صحيحة في دوال JSONExtract. على سبيل المثال JSONExtract('{"a": "1000.111"}', 'a', 'UInt64') -> 1000، بينما كان يُرجِع سابقًا 0. #45432 (Anton Popov).
  • تمت إضافة الحقلين supports_parallel_parsing وsupports_parallel_formatting إلى الجدول system.formats لتحسين إمكانات الاستبطان. #45499 (Anton Popov).
  • تحسين قراءة حقول CSV في تنسيق CustomSeparated/Template. يُغلق #42352 ويُغلق #39620. #43332 (Kruglov Pavel).
  • توحيد قياسات الزمن المنقضي للاستعلامات. #43455 (Raúl Marín).
  • تحسين الاستخدام التلقائي للبنية من جدول الإدراج في دوال الجداول file/hdfs/s3 عند وجود أعمدة افتراضية في استعلام SELECT، مما يعالج الخطأ المحتمل Block structure mismatch أو number of columns mismatch. #43695 (Kruglov Pavel).
  • إضافة دعم للوسائط الموقعة في الدالة range. يُصلح #43333. #43733 (sanyu).
  • إزالة الفرز الزائد، مثل فرز عبارات ORDER BY ذات الصلة في الاستعلامات الفرعية. نُفِّذ ذلك بالاعتماد على خطة الاستعلام. ويوفر تحسينًا مشابهًا لـ optimize_duplicate_order_by_and_distinct فيما يتعلق بعبارات ORDER BY، لكنه أكثر عمومية لأنه يُطبَّق على أي خطوات فرز زائدة (وليس فقط الناتجة عن عبارة ORDER BY) ويُطبَّق على الاستعلامات الفرعية بأي عمق. ذو صلة بـ #42648. #43905 (Igor Nikonov).
  • إضافة إمكانية تعطيل إزالة تكرار الملفات في BACKUP (وبالنسبة إلى النسخ الاحتياطية بدون إزالة تكرار، يمكن استخدام ATTACH بدلًا من RESTORE الكامل). على سبيل المثال BACKUP foo TO S3(...) SETTINGS deduplicate_files=0 (القيمة الافتراضية deduplicate_files=1). #43947 (Azat Khuzhin).
  • إعادة هيكلة وتحسين استنتاج المخطط للتنسيقات النصية. وإضافة إعداد جديد schema_inference_make_columns_nullable يتحكم في جعل الأنواع الناتجة Nullable (مفعّل افتراضيًا). #44019 (Kruglov Pavel).
  • دعم أفضل لبروتوكول PROXYv1. #44135 (Yakov Olkhovskiy).
  • إضافة معلومات حول أحدث فحص للجزء بواسطة خيوط التنظيف إلى الجدول system.parts. #44244 (Dmitry Novik).
  • تعطيل دوال الجداول في وضع القراءة فقط لعمليات الإدراج. #44290 (SmitaRKulkarni).
  • إضافة إعداد simultaneous_parts_removal_limit للسماح بتقييد عدد الأجزاء التي تُعالَج في تكرار واحد من CleanupThread. #44461 (Dmitry Novik).
  • لا تُهيِّئ ReadBufferFromS3 عندما لا تكون هناك حاجة في الاستعلام إلا إلى الأعمدة الافتراضية. قد يكون هذا مفيدًا في #44246. #44493 (chen).
  • منع ظهور تلميحات مكررة لأسماء الأعمدة. يُغلق #44130. #44519 (Joanna Hulboj).
  • السماح بإحلال وحدات الماكرو في endpoint الخاص بـ disks. يحل #40951. #44533 (SmitaRKulkarni).
  • تحسين استدلال المخطط عند تفعيل input_format_json_read_object_as_string. #44546 (Kruglov Pavel).
  • إضافة إعداد على مستوى المستخدم باسم database_replicated_allow_replicated_engine_arguments يتيح حظر إنشاء جداول ReplicatedMergeTree ذات الوسائط داخل DatabaseReplicated. #44566 (alesapin).
  • منع المستخدمين من تحديد القيمة صفر (وهي غير صالحة) لـ index_granularity عن طريق الخطأ. يُغلق هذا #44536. #44578 (Alexey Milovidov).
  • أُضيفت إمكانية تعيين path لملف keytab الخاص بالخدمة في parameter ‏keytab ضمن قسم kerberos في config.xml. #44594 (Roman Vasin).
  • استخدام الجزء المكتوب بالفعل من الاستعلام في البحث التقريبي (بتمريره إلى مكتبة skim المكتوبة بلغة Rust والمربوطة ربطًا ثابتًا مع ClickHouse). #44600 (Azat Khuzhin).
  • تفعيل input_format_json_read_objects_as_strings افتراضيًا لإتاحة قراءة nested JSON objects بينما لا يزال نوع JSON Object تجريبيًا. #44657 (Kruglov Pavel).
  • تحسين إزالة التكرار في async inserts: عند تنفيذ المستخدمين عمليات async inserts مكررة، ينبغي إجراء إزالة التكرار داخل الذاكرة قبل الاستعلام من Keeper. #44682 (Han Fei).
  • سيُحلِّل format الإدخال/الإخراج Avro النوع bool على أنه نوع bool في ClickHouse. #44684 (Kruglov Pavel).
  • دعم النوع Bool في Arrow/Parquet/ORC. يُغلق #43970. #44698 (Kruglov Pavel).
  • لا تُحلِّل ما بعد علامات الاقتباس بشكل جشع عند قراءة UUIDs، إذ قد يؤدي ذلك إلى نجاح parsing لبيانات غير صحيحة عن طريق الخطأ. #44686 (Raúl Marín).
  • استنتج UInt64 في حالة overflow لـ Int64 وأصلح بعض التحويلات في استدلال المخطط. #44696 (Kruglov Pavel).
  • في السابق، كان resolving الاعتماديات داخل قاعدة البيانات Replicated يتم بطريقة ملتوية، أما الآن فأصبح يتم على نحو صحيح باستخدام graph صريح. #44697 (Nikita Mikhaylov).
  • إصلاح مشكلة عدم احتفاظ output_format_pretty_row_numbers بالعداد عبر الـ blocks. يُغلق #44815. #44832 (flynn).
  • عدم الإبلاغ عن أخطاء في system.errors الناتجة عن دمج الأجزاء بالتزامن مع عملية التنظيف في الخلفية. #44874 (Raúl Marín).
  • تحسين metrics وإصلاحها لـ Distributed async INSERT. #44922 (Azat Khuzhin).
  • تمت إضافة إعدادات لمنع عمليات النسخ الاحتياطي والاستعادة المتزامنة، مما يحل #43891 التنفيذ: * تمت إضافة إعدادات على مستوى server لمنع عمليات النسخ الاحتياطي والاستعادة المتزامنة، وتُقرأ وتُضبط عند إنشاء BackupWorker في Context. * تُضبط الإعدادات على true افتراضيًا. * قبل بدء النسخ الاحتياطي أو الاستعادة، تمت إضافة تحقق لمعرفة ما إذا كانت هناك أي عمليات نسخ احتياطي/استعادة أخرى قيد التشغيل. بالنسبة إلى الطلبات الداخلية، يتحقق مما إذا كانت من العقدة نفسها باستخدام backup_uuid. #45072 (SmitaRKulkarni).
  • إضافة parameter \<storage_policy> في config لسجلات النظام. #45320 (Stig Bakken).

تحسينات البناء/الاختبار/التغليف

  • الربط الثابت مع مكتبة skim (وهي مكتوبة بلغة Rust) لتنفيذ البحث الضبابي في سجل clickhouse client/local. #44239 (Azat Khuzhin).
  • أزلنا دعم الربط المشترك بسبب Rust. في الواقع، لم تكن Rust سوى ذريعة لهذا الإزالة، إذ كنا نريد إزالته على أي حال. #44828 (Alexey Milovidov).
  • إزالة الاعتماد على أداة adduser من الحزم، لأننا لا نستخدمها. ويُصلح هذا #44934. #45011 (Alexey Milovidov).
  • جرى تحديث مكتبة SQLite إلى أحدث إصدار. وتُستخدم لقاعدة بيانات SQLite ولمحركات تكامل الجداول الخاصة بها. كما جرى إصلاح تقرير TSan إيجابي كاذب. ويغلق هذا #45027. #45031 (Alexey Milovidov).
  • تغييرات على CRC-32 لمعالجة مشكلة تصادم WeakHash في PowerPC. #45144 (MeenaRenganathan22).
  • تحديث الوحدات الفرعية aws-c* #43020 (Vitaly Baranov).
  • دمج طلبات السحب backport الناجحة وطلبات السحب المعتمدة والناجحة تلقائيًا #41110 (Mikhail f. Shiryaev).
  • إطلاق موقع ويب لعرض حالة ClickHouse CI. المصدر.

إصلاح الأخطاء

  • استبدال نوعَي IP من domain ‏(IPv4 وIPv6) بأنواع native. #43221 (Yakov Olkhovskiy). ويؤدي ذلك تلقائيًا إلى إصلاح بعض التنفيذات المفقودة في الشيفرة.
  • إصلاح عملية النسخ الاحتياطي إذا تم إيقاف mutations أثناء عملية النسخ الاحتياطي. #45351 (Vitaly Baranov).
  • إصلاح رسالة الاستثناء Invalid number of rows in Chunk. #41404. #42126 (Alexander Gololobov).
  • إصلاح احتمال استخدام قيمة غير مهيأة بعد تنفيذ التعبيرات عقب الفرز. يغلق #43386 #43635 (Kruglov Pavel).
  • تحسين التعامل مع NULL في مُركِّبات التجميع، وإصلاح احتمال حدوث segfault/خطأ منطقي عند استخدام التحسين غير الشائع optimize_rewrite_sum_if_to_count_if. يغلق #43758. #43813 (Kruglov Pavel).
  • إصلاح قيود إعدادات استعلام CREATE USER/ROLE. #43993 (Nikolay Degterinsky).
  • إصلاح خطأ متعلق بقيمة افتراضية غير قابلة للتحليل للعمود EPHEMERAL في البيانات الوصفية للجدول. #44026 (Yakov Olkhovskiy).
  • إصلاح تحليل إصدار غير صالح من إعداد التوافق. #44224 (Kruglov Pavel).
  • مواءمة طرح Interval من DateTime مع الإضافة. #44241 (ltrk2).
  • إزالة القيود على الحجم الأقصى لنتيجة العرض. #44261 (lizhuoyu5).
  • إصلاح احتمال حدوث خطأ منطقي في cache إذا كان do_not_evict_index_and_mrk_files=1. يغلق #42142. #44268 (Kseniia Sumarokova).
  • إصلاح احتمال انقطاع الكتابة إلى cache مبكرًا جدًا في write-through cache (إذ كان التخزين المؤقت قد يتوقف بسبب افتراض خاطئ رغم أنه لم يكن ينبغي أن يحدث ذلك). #44289 (Kseniia Sumarokova).
  • إصلاح احتمال حدوث crash إذا استُخدمت الدالة IN ذات الوسائط الثابتة كوسيط ثابت مع LowCardinality. يصلح #44221. #44346 (Nikolai Kochetov).
  • إصلاح دعم المعلمات المعقدة (مثل Arrays) في الدوال التجميعية البارامترية. يغلق هذا #30975. كانت الدالة التجميعية sumMapFiltered غير قابلة للاستخدام في الاستعلامات الموزعة قبل هذا التغيير. #44358 (Alexey Milovidov).
  • إصلاح قراءة ObjectId في استنتاج مخطط BSON. #44382 (Kruglov Pavel).
  • إصلاح حالة تسابق قد تؤدي إلى إزالة الأجزاء المؤقتة قبل الأوان، قبل اكتمال الدمج في ReplicatedMergeTree. وقد تؤدي هذه المشكلة إلى أخطاء مثل No such file or directory: xxx. يُصلح #43983. #44383 (alesapin).
  • كانت بعض استعلامات SYSTEM ... ON CLUSTER غير الصالحة تتصرف بطريقة غير متوقعة إذا لم يتم تحديد اسم العنقود. وقد تم إصلاح ذلك، وأصبحت الاستعلامات غير الصالحة الآن تُطلق SYNTAX_ERROR كما ينبغي. يُصلح #44264. #44387 (Alexander Tokmakov).
  • إصلاح قراءة النوع Map بتنسيق ORC. #44400 (Kruglov Pavel).
  • إصلاح قراءة الأعمدة غير الموجودة في بيانات الإدخال بتنسيقات Parquet/ORC. وكان هذا قد يؤدي سابقًا إلى الخطأ INCORRECT_NUMBER_OF_COLUMNS. يُغلق #44333. #44405 (Kruglov Pavel).
  • سابقًا، كانت الدالة bar تستخدم المحرف نفسه ’▋’ (U+258B “Left five eighths block”) لعرض كلٍّ من شريطي 5/8 و6/8. ويصحح هذا التغيير هذا السلوك باستخدام ’▊’ (U+258A “Left three quarters block”) لعرض شريط 6/8. #44410 (Alexander Gololobov).
  • كان وضع إعدادات profile بعد قيود إعدادات profile في ملف التهيئة يجعل هذه القيود غير فعالة. #44411 (Konstantin Bogdanov).
  • إصلاح SYNTAX_ERROR عند تشغيل استعلامات EXPLAIN AST INSERT مع بيانات. يُغلق #44207. #44413 (save-my-heart).
  • إصلاح قراءة قيمة bool مع CRLF في CSV format. يُغلق #44401. #44442 (Kruglov Pavel).
  • عدم تنفيذ and/or/if/multiIf على قاموس LowCardinality، لذلك لا يمكن أن يكون نوع النتيجة LowCardinality. وكان هذا قد يؤدي في بعض الحالات إلى الخطأ Illegal column ColumnLowCardinality. يُصلح #43603. #44469 (Kruglov Pavel).
  • إصلاح mutations مع الإعداد max_streams_for_merge_tree_reading. #44472 (Anton Popov).
  • إصلاح احتمال فكّ إشارة مؤشّر null مع GROUPING SETS في ASTSelectQuery::formatImpl (#43049). #44479 (Robert Schulze).
  • التحقق من types في arguments الخاصة بـ table function، وarguments الخاصة بدالة CAST، وschema inference لـ JSONAsObject وفقًا للإعدادات. #44501 (Kruglov Pavel).
  • إصلاح الدالة IN مع LowCardinality وconst column. يُغلق #44503. #44506 (Duc Canh Le).
  • تم إصلاح خطأ في تطبيع تعبير DEFAULT في عبارة CREATE TABLE. كان يمكن استبدال الوسيط الثاني للدالة in (أو الوسيط الأيمن للمعامل IN) بنتيجة تقييمه أثناء تنفيذ استعلام CREATE. يُصلح #44496. #44547 (Alexander Tokmakov).
  • لا تعمل الإسقاطات عند وجود WITH ROLLUP وWITH CUBE وWITH TOTALS. في الإصدارات السابقة، كان الاستعلام يُنتج استثناءً بدلًا من تخطي استخدام الإسقاطات. هذا يُغلق #44614. هذا يُغلق #42772. #44615 (Alexey Milovidov).
  • لم تكن الكتل غير المتزامنة تُنظَّف لأن الدالة get all blocks sorted by time لم تكن تجلب الكتل غير المتزامنة. #44651 (Han Fei).
  • إصلاح الخطأ LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStep في JOIN مع subquery وUNION وTOTALS. يُصلح #43687. #44673 (Nikolai Kochetov).
  • تجنّب استثناء std::out_of_range في محرك الجداول Executable. #44681 (Kruglov Pavel).
  • عدم تطبيق optimize_syntax_fuse_functions على quantiles في AST، ويُغلق #44712. #44713 (Vladimir C).
  • إصلاح خطأ متعلق بنوع غير صحيح في جدول Merge وPREWHERE، ويُغلق #43324. #44716 (Vladimir C).
  • إصلاح احتمال حدوث crash أثناء الإيقاف (عند تدمير TraceCollector). يُصلح #44757. #44758 (Nikolai Kochetov).
  • إصلاح احتمال حدوث crash في معالجة الاستعلامات الموزعة. كان يمكن أن يحدث هذا crash إذا أعاد استعلام يتضمن totals أو extremes نتيجة فارغة، وكانت هناك أنواع غير متطابقة في جدول Distributed والجدول المحلي. يُصلح #44738. #44760 (Nikolai Kochetov).
  • إصلاح fsync لعمليات fetches (min_compressed_bytes_to_fsync_after_fetch)/الملفات الصغيرة (ttl.txt, columns.txt) في mutations (min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge). #44781 (Azat Khuzhin).
  • كان من الممكن حدوث حالة تسابق نادرة عند الاستعلام عن الجدولين system.parts أو system.parts_columns في وجود parts يجري نقلها بين disks. قُدِّم في #41145. #44809 (Alexey Milovidov).
  • إصلاح الخطأ Context has expired الذي قد يظهر عند تفعيل تحسين projections. ويمكن إعادة إنتاجه في الاستعلامات التي تستخدم دوال محددة، مثل dictHas/dictGet، والتي تستخدم Context في وقت التشغيل. يُصلح #44844. #44850 (Nikolai Kochetov).
  • إصلاح للخطأ Cannot read all data الذي قد يحدث أثناء قراءة Dictionary ‏LowCardinality من remote fs. يُصلح #44709. #44875 (Nikolai Kochetov).
  • تجاهل الحالات التي يتعذر فيها قراءة حساسات مراقبة العتاد، بدلًا من إظهار رسالة Exception كاملة في logs. #44895 (Raúl Marín).
  • استخدام القيمة max_delay_to_insert إذا تجاوز الزمن المحسوب لتأخير INSERT قيمة هذا الإعداد. ذو صلة بـ #44902. #44916 (Igor Nikonov).
  • إصلاح الخطأ Different order of columns in UNION subquery في الاستعلامات التي تحتوي على UNION. يُصلح #44866. #44920 (Nikolai Kochetov).
  • قد يُحتسب تأخير INSERT بشكل غير صحيح، مما قد يؤدي إلى استخدام الإعداد max_delay_to_insert دائمًا كتأخير بدلًا من القيمة الصحيحة. ويُستخدم لذلك التعبير البسيط max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold)، أي إن التأخير يزداد تناسبيًا مع عدد parts التي تتجاوز threshold. يغلق #44902. #44954 (Igor Nikonov).
  • إصلاح خطأ alter table TTL عندما يحتوي Wide part على قناع lightweight delete. #44959 (Mingliang Pan).
  • إصلاح لاحق لاستبدال أنواع domain لعناوين IP ‏(IPv4 وIPv6) بأنواع native #43221. #45024 (Yakov Olkhovskiy).
  • إصلاح لاحق لاستبدال أنواع domain لعناوين IP ‏(IPv4 وIPv6) بأنواع native https://github.com/ClickHouse/ClickHouse/pull/43221. #45043 (Yakov Olkhovskiy).
  • كان من الممكن حدوث overflow في buffer داخل parser. اكتشفه fuzzer. #45047 (Alexey Milovidov).
  • إصلاح خطأ محتمل من نوع cannot-read-all-data في FileLog. يغلق #45051، #38257. #45057 (Kseniia Sumarokova).
  • يتم تعطيل aggregation الموفّرة للذاكرة (الإعداد distributed_aggregation_memory_efficient) عند وجود grouping sets في query. #45058 (Nikita Taranov).
  • إصلاح قاموس RANGE_HASHED لاحتساب أعمدة النطاق كجزء من المفتاح الأساسي أثناء التحديثات عند تحديد update_field. يغلق #44588. #45061 (Maksim Kita).
  • إصلاح الخطأ Cannot capture column لوسيطة LowCardinality الملتقطة في لامبدا متداخلة. يُصلح #45028. #45065 (Nikolai Kochetov).
  • إصلاح النتيجة الخاطئة للاستعلام في additional_table_filters (إذ لم يُطبَّق الفلتر الإضافي) عند استخدام إسقاط minmax/count. #45133 (Nikolai Kochetov).
  • إصلاح خلل في الدالة histogram كان يسمح بقبول قيم سالبة. #45147 (simpleton).
  • إصلاح قابلية العمود الخاطئة لقبول NULL في StoreageJoin، يغلق #44940. #45184 (Vladimir C).
  • إصلاح إعادة تحميل إعدادات background_fetches_pool_size (عند الزيادة في وقت التشغيل). #45189 (Raúl Marín).
  • معالجة استعلامات SELECT بشكل صحيح على محركات KV (مثل KeeperMap وEmbeddedRocksDB) عند استخدام IN على المفتاح مع استعلام فرعي يُنتج نوعاً مختلفاً. #45215 (Antonio Andelic).
  • إصلاح خطأ منطقي في SEMI JOIN و& join_use_nulls في بعض الحالات، يغلق #45163، ويغلق #45209. #45230 (Vladimir C).
  • إصلاح مشكلة heap-use-after-free أثناء القراءة من S3. #45253 (Kruglov Pavel).
  • إصلاح خلل عندما يكون نوع Avro Union هو [‘null’, Nested type]، يغلق #45275. وإصلاح خلل يستنتج النوع bytes على نحو غير صحيح على أنه Float. #45276 (flynn).
  • طرح استثناء صحيح عندما يتعذر استخدام PREWHERE الصريح مع جدول يستخدم محرك التخزين Merge. #45319 (Antonio Andelic).
  • في WSL1 Ubuntu، يفشل ClickHouse ذاتي الاستخراج في فك الضغط بسبب عدم اتساق: إذ يبلّغ /proc/self/maps عن inode لملف 32bit، بينما يبلّغ stat عن inode ‏64bit. #45339 (Yakov Olkhovskiy).
  • إصلاح حالة تسابق عند بدء تشغيل جدول Distributed (قد تؤدي إلى معالجة ملف async INSERT عدة مرات). #45360 (Azat Khuzhin).
  • إصلاح تعطل محتمل أثناء القراءة من التخزين S3 ودالة الجدول s3 في حال فشل طلب ListObject. #45371 (Anton Popov).
  • إصلاح استثناء SELECT ... FROM system.dictionaries عند وجود قاموس ذي بنية غير صحيحة (مثل نوع غير صحيح في إعدادات XML). #45399 (Aleksei Filatov).
  • إصلاح استدلال المخطط في s3Cluster عند استخدام البنية من جدول الإدراج في استعلامات INSERT INTO ... SELECT * FROM s3Cluster. #45422 (Kruglov Pavel).
  • إصلاح خطأ في parsing لـ JSON/BSONEachRow عبر HTTP كان قد يؤدي إلى استخدام القيم الافتراضية لبعض الأعمدة بدلًا من القيم الموجودة في البيانات. #45424 (Kruglov Pavel).
  • إصلاح خطأ (Code: 632. DB::Exception: Unexpected data … after parsed IPv6 value …) في parsing الموجّه للأنواع لعناوين IP من مصدر نصي. #45425 (Yakov Olkhovskiy).
  • إغلاق #45297 إضافة check للتعابير النمطية الفارغة. #45428 (Han Fei).
  • إصلاح احتمال تعليق query (وربما تكون query موزعة). #45448 (Azat Khuzhin).
  • إصلاح احتمال حدوث deadlock عند تفعيل allow_asynchronous_read_from_io_pool_for_merge_tree في حال وقوع exception من ThreadPool::schedule. #45481 (Nikolai Kochetov).
  • إصلاح احتمال بقاء table قيد الاستخدام بعد DETACH. #45493 (Azat Khuzhin).
  • إصلاح حالة abort نادرة عند إلغاء query واستخدام parsing متوازٍ أثناء تنفيذها. #45498 (Anton Popov).
  • إصلاح حالة تسابق بين إنشاء Distributed table وتنفيذ INSERT إليها (قد يؤدي ذلك إلى CANNOT_LINK أثناء INSERT إلى table). #45502 (Azat Khuzhin).
  • إضافة default مناسبة (SLRU) إلى getter الخاصة بـ cache policy. يغلق #45514. #45524 (Kseniia Sumarokova).
  • منع ARRAY JOIN في mutations يغلق #42637 #44447 (SmitaRKulkarni).
  • إصلاح العلامات النجمية المؤهلة مع اسم alias table ومحوّل الأعمدة. يحل #44736. #44755 (SmitaRKulkarni).
آخر تعديل في ٢٩ يونيو ٢٠٢٦