جدول المحتويات
إصدار 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_ARRAY(وCOMPLEX_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. - أصبح الإعداد على مستوى MergeTreereplicated_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مع StorageEmbeddedRocksDB. وتمكين العدّ البسيط لـ 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 GCDcodec لإعداد البيانات (على غرار 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 باستخدام
NullablePK مسموحًا به دائمًا. هذا يُصلح #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 functions3Cluster. #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ضمن statementBACKUPلعمليات النسخ الاحتياطي إلى 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_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_collection_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.937555153. يمكنك تعطيل استخدام تنسيق التسلسل 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_files_after_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). - التراجع عن التغيير “
groupArrayreturns 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 functionurl. - تحسين رسالة الخطأ الخاصة بـ table functionurl. - يحل #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 في
ANYhash 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_query_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_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_tests__release__databasereplicated__[3_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 ويمكن استخدامها بدلًا من حدث profileReplicatedDataLossغير الدائم لأغراض المراقبة. #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 functionsurlو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). - لن يمتلك المستخدم
defaultpermission لنوع الوصول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_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 التي تحتوي على
ifexpression كـ 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، فستشغّل حاوية Dockerclickhouse-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 errorBad 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).