إصدار ClickHouse v21.12، 2021-12-15. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- إصلاح لميزة كان لها سابقًا سلوك غير مرغوب فيه. لم يعد مسموحًا بإجراء
selectمباشر لـ Kafka/RabbitMQ/FileLog. ويمكن تمكين ذلك عبر الإعدادstream_like_engine_allow_direct_select. ومع ذلك، لن يُسمح بالتحديد المباشر حتى عند تمكينه بهذا الإعداد إذا كان هناك عرض مادي مرفق. وبالنسبة إلى Kafka وRabbitMQ، فإن التحديد المباشر — إذا كان مسموحًا — لن ينفّذ commit للرسائل افتراضيًا. ولتمكين commits مع التحديد المباشر، يجب على المستخدم استخدام إعداد على مستوى التخزينkafka{rabbitmq}_commit_on_select=1(القيمة الافتراضية0). #31053 (Kseniia Sumarokova). - تغيير طفيف في سلوك دالة جديدة. إرجاع سلسلة نصية غير محاطة بعلامات اقتباس في JSON_VALUE. يُغلق #27965. #31008 (Kseniia Sumarokova).
- إعادة تسمية إعداد. إضافة دعم لتمثيل NULL مخصص في تنسيقات الإدخال TSV/CSV. إصلاح إلغاء التسلسل لـ Nullable(String) في تنسيقات الإدخال TSV/CSV/JSONCompactStringsEachRow/JSONStringsEachRow. وإعادة تسمية
output_format_csv_null_representationوoutput_format_tsv_null_representationإلىformat_csv_null_representationوformat_tsv_null_representationعلى التوالي. #30497 (Kruglov Pavel). - مزيد من إهمال شيفرة غير مستخدمة أصلًا. هذا يهمك فقط إذا كنت تستخدم إصدارات ClickHouse الأقدم من 20.6. أُزيلت آلية “انتخاب القائد” من
ReplicatedMergeTree، لأن دعم عدة قادة متاح منذ 20.6. إذا كنت تُجري ترقية من إصدار أقدم وكانت إحدى النسخ المتماثلة ذات الإصدار القديم هي القائد، فسيفشل الخادم في البدء بعد الترقية. أوقف النسخ المتماثلة ذات الإصدار القديم لكي يتمكن الإصدار الجديد من البدء. بعد ذلك، لن يعود من الممكن الرجوع إلى إصدار أقدم من 20.6. #32140 (tavplubix).
ميزة جديدة
- تم تنفيذ المزيد من أوامر ZooKeeper Four Letter Words في clickhouse-keeper: https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands. #28981 (JackyWoo). وأصبح
clickhouse-keeperالآن مكتمل الميزات. - دعم نوع البيانات
Bool. #31072 (kevin wan). - دعم
PARTITION BYفي وحدات التخزين File وURL وHDFS، وكذلك مع دالة الجدولINSERT INTO. يُغلق #30273. #30690 (Kseniia Sumarokova). - تمت إضافة
CONSTRAINT ... ASSUME ...(من دون التحقق أثناءINSERT). وأُضيف أيضًا تحويل الاستعلام إلى CNF (https://github.com/ClickHouse/ClickHouse/issues/11749) لتحسين عملية التحسين. كما أُضيفت إعادة كتابة بسيطة للاستعلام باستخدام القيود (مطابقة بسيطة فقط حاليًا، وسيُحسَّن ذلك لاحقًا لدعم <,=,>… ). وأُضيفت أيضًا إمكانية استبدال الأعمدة الثقيلة بأعمدة خفيفة إذا كان ذلك ممكنًا. #18787 (Nikita Vasilev). - دعم مصادقة الوصول Basic لدوال http/url. #31648 (michael1589).
- دعم النوع
INTERVALفي العبارةSTEPللمُعدِّلWITH FILL. #30927 (Anton Popov). - إضافة دعم للقراءة المتوازية من ملفات متعددة، ودعم globs في العبارة
FROM INFILE. #30135 (Filatenkov Artur). - إضافة دعم لمعاملات الاستعلام
Identifierالخاصة بالجدول وقاعدة البيانات. يُغلق #27226. #28668 (Nikolay Degterinsky). - ملخص سريع: تحسينات كبيرة في اكتمال تنسيقات النص واتساقها. أُعيدت هيكلة التنسيقات
TSVوTSVRawوCSVوJSONCompactEachRowوJSONCompactStringsEachRow، وأزيل تكرار الشيفرة، وأُضيفت واجهة أساسية للتنسيقات ذات اللواحق-WithNamesو-WithNamesAndTypes. وأُضيفت التنسيقاتCSVWithNamesAndTypesوTSVRawWithNamesوTSVRawWithNamesAndTypesوJSONCompactEachRowWIthNamesوJSONCompactStringsEachRowWIthNamesوRowBinaryWithNames. كما أُضيف دعم التحليل المتوازي للتنسيقاتTSVWithNamesAndTypesوTSVRaw(WithNames/WIthNamesAndTypes)وCSVWithNamesAndTypesوJSONCompactEachRow(WithNames/WIthNamesAndTypes)وJSONCompactStringsEachRow(WithNames/WIthNamesAndTypes). وأُضيف أيضًا دعم ربط الأعمدة والتحقق من الأنواع لتنسيقRowBinaryWithNamesAndTypes. وأُضيف الإعدادinput_format_with_types_use_headerلتحديد ما إذا كان ينبغي التحقق من أن الأنواع المكتوبة في تنسيق<format_name>WIthNamesAndTypesتتطابق مع بنية الجدول. وأُضيف الإعدادinput_format_csv_empty_as_defaultواستُخدم في تنسيق CSV بدلًا منinput_format_defaults_for_omitted_fields(لأن هذا الإعداد لا ينبغي أن يتحكم فيcsv_empty_as_default). وصُحِّح استخدام الإعدادinput_format_defaults_for_omitted_fields(إذ كان يُستخدم فقط على أنهcsv_empty_as_default، بينما ينبغي أن يتحكم في احتساب تعبيرات القيم الافتراضية للحقول المُهمَلة). وصُحِّح الإدخال/الإخراج لنوع Nullable في تنسيقTSVRaw، ليصبح هذا التنسيق متوافقًا بالكامل مع الإدراج في TSV. وصُحِّح أيضًا إدراج قيم NULL فيLowCardinality(Nullable)عند تفعيلinput_format_null_as_default(إذ كانت القيم الافتراضية تُدرج سابقًا بدلًا من قيم NULL الفعلية). وصُحِّح إلغاء تسلسل السلاسل النصية في التنسيقينJSONStringsEachRow/JSONCompactStringsEachRow(إذ كانت السلاسل تُحلَّل فقط حتى أول ‘\n’ أو ‘\t’). وأُضيفت إمكانية استخدام قاعدة الهروبRawفي تنسيق الإدخال Template. وأُضيفت معلومات تشخيصية لتنسيق الإدخالJSONCompactEachRow(WithNames/WIthNamesAndTypes). كما صُحِّحت مشكلة في التحليل المتوازي لتنسيقات-WithNamesعندما تكون قيمة الإعدادmin_chunk_bytes_for_parallel_parsingأقل من عدد البايتات في صف واحد. #30178 (Kruglov Pavel). وأُتيحت طباعة/تحليل أسماء الأعمدة وأنواعها في تنسيق الإدخال/الإخراجCustomSeparated. وأُضيفت التنسيقاتCustomSeparatedWithNames/WithNamesAndTypesالمشابهة لـTSVWithNames/WithNamesAndTypes. #31434 (Kruglov Pavel). - دعم Aliyun OSS Storage. #31286 (cfcz48).
- يوفّر جميع إعدادات Global Thread pool في ملف الإعدادات. #31285 (Tomáš Hromada).
- استُحدثت دوال النافذة
exponentialTimeDecayedSumوexponentialTimeDecayedMaxوexponentialTimeDecayedCountوexponentialTimeDecayedAvg، وهي أكثر كفاءة منexponentialMovingAverageللنوافذ الأكبر. كما شملت مزيدًا من حالات الاستخدام. #29799 (Vladimir Chebotarev). - أُضيف خيار لضغط السجلات قبل كتابتها إلى ملف باستخدام LZ4. يغلق هذا #23860. #29219 (Nikolay Degterinsky).
- دعم
JOIN ON 1 = 1مع دلالة CROSS JOIN. يغلق هذا #25578. #25894 (Vladimir C). - أُضيف Map combinator للنوع
Map. - وأُعيدت تسميةsum-, min-, max- Mapالقديمة للمصفوفات المرتبطة إلىsum-, min-, max- MappedArrays. #24539 (Ildus Kurbangaliev). - جعل القراءة عبر HTTP قابلة لإعادة المحاولة. يُغلق #29696. #29894 (Kseniia Sumarokova).
ميزة تجريبية
WINDOW VIEWلتمكين معالجة التدفقات في ClickHouse. #8331 (vxider).- إزالة دعم استخدام قواعد البيانات Ordinary مع
MaterializedMySQL. #31292 (Stig Bakken). - تنفيذ الأمرين BACKUP وRESTORE لعائلة Log. لا تزال هذه الميزة قيد التطوير. #30688 (Vitaly Baranov).
تحسينات الأداء
- تقليل استخدام الذاكرة عند القراءة بتنسيقات
s3/url/hdfsParquetوORCوArrow(يتم التحكم في ذلك عبر الإعدادinput_format_allow_seeks، وهو مُمكَّن افتراضيًا). كما أُضيف الإعدادremote_read_min_bytes_for_seekللتحكم في عمليات seek. يُغلق #10461. يُغلق #16857. #30936 (Kseniia Sumarokova). - إضافة تحسينات للشروط الثابتة في JOIN ON، راجع #26928. #27021 (Vladimir C).
- دعم التنسيق المتوازي لجميع التنسيقات النصية، باستثناء
JSONEachRowWithProgressوPrettyCompactMonoBlock. #31489 (Kruglov Pavel). - تسريع count على الأعمدة Nullable. #31806 (Raúl Marín).
- تسريع الدالتين التجميعيتين
avgوsumCount. #31694 (Raúl Marín). - تحسين أداء تنسيقات الإخراج JSON وXML. #31673 (alexey-milovidov).
- تحسين أداء مزامنة البيانات إلى جهاز تخزين كتلي. هذا يُغلق #31181. #31229 (zhanglistar).
- إصلاح مشكلة في أداء الاستعلامات في جداول
LiveView. يُصلح #30831. #31006 (vzakaznikov). - تسريع تحليل الاستعلامات. #31949 (Raúl Marín).
- السماح بتقسيم قواعد rollup في
GraphiteMergeTreeللمقاييس العادية/الموسومة (الحقل الاختياريrule_type). #25122 (Michail Safronov). - إزالة طلبات
DESC TABLEالزائدة لـremote()(في حالةremote('127.1', system.one)، أي عند استخدام معرّف على هيئة db.table بدلًا من سلسلة نصية، كان يُرسل طلبDESC TABLEزائد). #32019 (Azat Khuzhin). - تحسين الدالة
tupleElementلقراءة subcolumn عند تمكين الإعدادoptimize_functions_to_subcolumns. #31261 (Anton Popov). - تحسين الدالة
mapContainsلقراءة subcolumn keyعند تمكين الإعدادoptimize_functions_to_subcolumns. #31218 (Anton Popov). - إضافة الإعدادين
merge_tree_min_rows_for_concurrent_read_for_remote_filesystemوmerge_tree_min_bytes_for_concurrent_read_for_remote_filesystem. #30970 (Kseniia Sumarokova). - تخطي mutations الخاصة بأقسام مختلفة في
StorageMergeTree. #21326 (Vladimir Chebotarev).
تحسينات
- عدم السماح بحذف table أو dictionary إذا كانت هناك جداول أو قواميس أخرى تعتمد عليه. #30977 (tavplubix).
- إتاحة إصدار نسخ لحالات الدوال التجميعية. يمكننا الآن إدخال تغييرات متوافقة مع الإصدارات السابقة في تنسيق التسلسل لحالات الدوال التجميعية. يغلق هذا #12552. #24820 (Kseniia Sumarokova).
- دعم صياغة
ALTER MODIFY COLUMNبأسلوب PostgreSQL. #32003 (SuperDJY). - أُضيف دعم
update_fieldإلىRangeHashedDictionaryوComplexKeyRangeHashedDictionary. #32185 (Maksim Kita). - أصبحت الدالتان
murmurHash3_128وsipHash128تقبلان الآن عددًا عشوائيًا من الوسيطات. يغلق هذا #28774. #28965 (小路). - دعم التعبير الافتراضي لتخزين
HDFSوتحسين الجلب عندما يكون المصدر عموديًا. #32256 (李扬). - تحسين اسم العملية في span الخاص بـ OpenTelemetry. #32234 (Frank Chen).
- استخدام
Content-Type: application/x-ndjson(http://ndjson.org/) لتنسيق الإخراجJSONEachRow. #32223 (Dmitriy Dorofeev). - تحسين تخطي الحقول غير المعروفة باستخدام قاعدة الهروب المقتبس في تنسيقات Template/CustomSeparated. في السابق، كان يمكن تخطي السلاسل المقتبسة فقط، أما الآن فيمكن تخطي القيم من أي نوع. #32204 (Kruglov Pavel).
- أصبح
clickhouse-keeperالآن يرفض بدء التشغيل أو تطبيق تغييرات التكوين عندما تحتوي على معرّفات أو نقاط نهاية مكررة. يُصلح هذا #31339. #32121 (alesapin). - تعيين Content-Type في حزم HTTP الصادرة من URL engine. #32113 (Frank Chen).
- إرجاع Content-Type باعتباره ‘application/json’ لتنسيق
JSONEachRowإذا كانoutput_format_json_array_of_rowsمفعّلًا. #32112 (Frank Chen). - السماح بتحليل
+قبل قيمFloat32/Float64. #32079 (Kruglov Pavel). - السماح باستخدام المعلمة
hdfs_replicationالتي يضبطها المستخدم لكل منDiskHDFSوStorageHDFS. يغلق هذا #32039. #32049 (leosunli). - أُضيف حقلا ClickHouse
exceptionوexception_codeإلى سجل span الخاص بـ OpenTelemetry. #32040 (Frank Chen). - تحسين مدة سجل span الخاص بـ OpenTelemetry — إذ كانت تساوي صفرًا على مستوى الاستعلام عند حدوث استثناء في الاستعلام. #32038 (Frank Chen).
- إصلاح المشكلة التي كانت تمنع إنشاء
LowCardinalityمن النوعInt256. #31832 (alexey-milovidov). - إعادة إنشاء جداول
system.*_logفي حال اختلاف engine/partition_by. #31824 (Azat Khuzhin). MaterializedMySQL: إصلاح المشكلة المتعلقة بجدول يحمل الاسم ‘table’. #31781 (Håvard Kvålen).- dictionary source في ClickHouse: دعم connections المعرّفة مسبقًا. يغلق #31705. #31749 (Kseniia Sumarokova).
- السماح باستخدام configuration الخاصة بـ connections المعرّفة مسبقًا لمحركات Kafka وRabbitMQ (بالطريقة نفسها المتبعة مع table engines الأخرى الخاصة بالتكامل). #31691 (Kseniia Sumarokova).
- إعادة عرض prompt دائمًا أثناء التنقل في السجل داخل clickhouse-client. سيحسّن ذلك سهولة التعامل مع queries الطويلة جدًا التي لا تتسع على الشاشة. #31675 (alexey-milovidov) (author: Amos Bird).
- إضافة key bindings للتنقل عبر السجل (بدلًا من الأسطر/السجل). #31641 (Azat Khuzhin).
- تحسين عمليات التحقق من
max_execution_time. تم إصلاح بعض الحالات التي لا تُجرى فيها عمليات التحقق من timeout، ما قد يؤدي إلى استمرار query لفترة طويلة جدًا. #31636 (Raúl Marín). - رسالة Exception أفضل عند تعذر تحميل
users.xmlبسبب hash غير صالح لكلمة المرور. يغلق هذا #24126. #31557 (Vitaly Baranov). - استخدام اسم shard وreplica من arguments الخاصة بقاعدة البيانات
Replicatedعند توسيع macros في arguments الخاصة بـReplicatedMergeTreeإذا لم تكن هذه macros معرّفة في config. يغلق #31471. #31488 (tavplubix). - تحسين تحليل projection الخاصة بـ
min/max/count. الآن، عند تمكينallow_experimental_projection_optimization، يمكن استخدام projection الافتراضيةmin/max/countمع columns من partition key. #31474 (Amos Bird). - إضافة دعم
--pagerإلىclickhouse-local. #31457 (Azat Khuzhin). - إصلاح مشكلة انتظار المحرر أثناء التحرير التفاعلي للاستعلام (
waitpid()يعيد -1 عندSIGWINCHويعملEDITORوclickhouse-local/clickhouse-clientبشكل متزامن). #31456 (Azat Khuzhin). - إصدار Exception إذا وُجدت بيانات غير صالحة بعد field في التنسيق
JSONCompactStrings(EachRow). #31455 (Kruglov Pavel). - تغيّرت default value لإعدادَي
http_send_timeoutوhttp_receive_timeoutمن 1800 (30 دقيقة) إلى 180 (3 دقائق). #31450 (tavplubix). - أصبح
MaterializedMySQLيدعم الآن استعلامات DDL من نوعCREATE TABLE ... LIKE .... #31410 (Stig Bakken). - إرجاع استعلام إنشاء اصطناعي عند تنفيذ
show create tableعلى جداول النظام. #31391 (SuperDJY). - سابقًا، كان التقدّم يُعرَض فقط للدالة الجدولية
numbers. أما الآن، فأصبح يُعرَض أيضًا لـnumbers_mt. #31318 (Kseniia Sumarokova). - تُستخدَم الآن أدوار المستخدم الأولية للعثور على سياسات الصفوف، انظر #31080. #31262 (Vitaly Baranov).
- إذا جرى تغيير إعداد متقادم، فسيُعرَض تحذير في
system.warnings. #31252 (tavplubix). - تحسين آلية backoff لمهام التنظيف الخلفية في
MergeTree. ونُقِل الإعدادانmerge_tree_clear_old_temporary_directories_interval_secondsوmerge_tree_clear_old_parts_interval_secondsمن إعدادات المستخدمين إلى إعدادات MergeTree. #31180 (tavplubix). - سيُرسل كل replica الآن إلى client معلومات تزايدية فقط عن عدّادات profile events. #31155 (Dmitry Novik). وهذا يجعل الخيار
--hardware_utilizationفيclickhouse-clientقابلًا للاستخدام. - تفعيل التحرير متعدد الأسطر في
clickhouse-clientافتراضيًا. يعالج هذا #31121. #31123 (Amos Bird). - تطبيع أسماء الدوال في استعلامات
ALTER. يساعد ذلك على تجنّب عدم تطابق البيانات الوصفية بين إنشاء table باستخدام الفهارس/الإسقاطات وإضافة الفهارس/الإسقاطات عبر أوامر alter. وهذا PR لاحق لـ https://github.com/ClickHouse/ClickHouse/pull/20174. وقد صُنّف ضمن التحسينات لعدم وجود تقارير أخطاء، ولكون هذا السيناريو نادرًا إلى حدّ ما. #31095 (Amos Bird). - دعم المُعدِّل
IF EXISTSفي استعلامRENAME DATABASE/TABLE/DICTIONARY. وإذا استُخدم هذا التوجيه، فلن يظهر error إذا لم تكن DATABASE/TABLE/DICTIONARY المطلوب إعادة تسميتها موجودة. #31081 (victorgao). - إلغاء عمليات الدمج العمودية عند حذف partition. وهذا متابعة لـ https://github.com/ClickHouse/ClickHouse/pull/25684 و https://github.com/ClickHouse/ClickHouse/pull/30996. #31057 (Amos Bird).
- لن تُرسل الجلسة المحلية داخل dictionary source في ClickHouse أحداثها إلى سجل الجلسة بعد الآن. ويُصلح هذا احتمال حدوث deadlock (تنبيه tsan) عند الإيقاف. كما يُصلح هذا PR الاختبار غير المستقر
test_dictionaries_dependency_xml/. #31013 (Vitaly Baranov). - تقليل القفل في أمر ALTER. #31010 (Amos Bird).
- إصلاح الخيار
--verboseفي وضع interactive mode لـclickhouse-localمع السماح بالتسجيل في ملف. #30881 (Kseniia Sumarokova). - أُضيفت الأوامر
\lو\dو\cإلىclickhouse-client، كما في MySQL وPostgreSQL. #30876 (Pavel Medvedev). - بالنسبة إلى
clickhouse-localأوclickhouse-client: إذا استُخدم الخيار--interactiveمع--queryأو--queries-file، فسيُنفَّذان أولًا كما في الوضع غير التفاعلي، ثم يبدأ الوضع التفاعلي. #30851 (Kseniia Sumarokova). - إصلاح الخطأ المحتمل “The local set of parts of X doesn’t look like the set of parts in ZooKeeper” (إذا فشل DROP أثناء إزالة znodes من ZooKeeper). #30826 (Azat Khuzhin).
- أصبح تنسيق Avro format يعمل مع Kafka. وأُضيف الإعداد
output_format_avro_rows_in_file. #30351 (Ilya Golshtein). - إتاحة تحديد مخطط PostgreSQL واحد أو أي عدد من المخططات لقاعدة بيانات
MaterializedPostgreSQLواحدة. يُغلق #28901. يُغلق #29324. #28933 (Kseniia Sumarokova). - استُبدلت المنافذ الافتراضية للاتصال الداخلي لـ
clickhouse-keeperمن 44444 إلى 9234. يُصلح #30879. #31799 (alesapin). - تنفيذ الدالة
transformمع معاملات Decimal. #31839 (李帅). - إصلاح الإنهاء المفاجئ في خادم Debug وخطأ
DB::Exception: std::out_of_range: basic_stringفي خادم release عند وجود عنوان URL غير صالح لـ hdfs، وذلك بإضافة تحقق إضافي من بنية عنوان URL الخاص بـ hdfs. #31042 (Kruglov Pavel). - إصلاح assert محتمل في
hdfstable function/engine، مع إضافة اختبار. #31036 (Kruglov Pavel).
إصلاحات الأخطاء
- إصلاح الأسماء المستعارة في group by / order by / limit by عند تمكين الوسيطات الموضعية. يغلق #31173. #31741 (Kseniia Sumarokova).
- إصلاح استخدام محرك الجدول
Bufferمع النوعMap. يُصلح #30546. #31742 (Anton Popov). - إصلاح القراءة من جداول
MergeTreeعند تمكينuse_uncompressed_cache. #31826 (Anton Popov). - إصلاح السلوك عند تعلّق التعديلات التي ليس لديها ما تنفذه (مع تمكين الإعداد
empty_result_for_aggregation_by_empty_set). #32358 (Nikita Mikhaylov). - إصلاح تخطي الأعمدة أثناء كتابة protobuf. يُصلح طلب السحب هذا #31160، راجع التعليق #31160#issuecomment-980595318. #31988 (Vitaly Baranov).
- إصلاح خطأ عند إزالة الأعمدة غير المطلوبة في الاستعلام الفرعي. إذا كانت هناك دالة تجميع في الاستعلام من دون group by، فلا تُزل حتى إن كانت غير مطلوبة. #32289 (dongyifeng).
- لم يتم بلوغ حد الحصة، لكن جرى تجاوز الحد. يُصلح طلب السحب هذا #31174. #31337 (sunny).
- إصلاح SHOW GRANTS عند استخدام عمليات revoke جزئية. يُصلح طلب السحب هذا #31138. #31249 (Vitaly Baranov).
- جرى تقدير حجم الذاكرة بشكل غير صحيح عند تشغيل ClickHouse داخل حاويات مع حدود cgroup. #31157 (Pavel Medvedev).
- إصلاح استعلامات
ALTER ... MATERIALIZE COLUMN ...عندما لا يكون نوع بيانات التعبير الافتراضي مساويًا لنوع بيانات العمود. #32348 (Anton Popov). - إصلاح تعطل بإشارة SIGFPE في دالة التجميع
avgWeightedمع وسيطةDecimal. يُصلح #32053. #32303 (tavplubix). - كان الخادم قد يفشل في البدء مع الخطأ
Cannot attach 1 tables due to cyclic dependenciesإذا كان جدولDictionaryيشير إلى قاموس XML يحمل الاسم نفسه، وقد تم إصلاح ذلك. يُصلح #31315. #32288 (tavplubix). - إصلاح خطأ تحليل أثناء إلغاء تسلسل NaN لـ
Nullable(Float)مع قاعدة الهروبQuoted. #32190 (Kruglov Pavel). - قواميس XML: قد تُؤهَّل المعرّفات المستخدمة في استعلام CREATE TABLE إلى
default_databaseأثناء الترقية إلى إصدار أحدث. يغلق #31963. #32187 (Maksim Kita). - قد يُحدَّد عدد النسخ المتماثلة النشطة بشكل غير صحيح عند الإدراج باستخدام quorum إذا كان الإعداد
replicated_can_become_leaderمعطَّلًا على بعض النسخ المتماثلة. تم إصلاح ذلك. #32157 (tavplubix). - Dictionaries: إصلاح الحالات التي لا تعمل فيها
{condition}مع استعلامات قاعدة البيانات المخصّصة. #32117 (Maksim Kita). - إصلاح
CASTمنNullableمعcast_keep_nullable(كان الخطأPARAMETER_OUT_OF_BOUNDيظهر سابقًا، على سبيل المثال معtoUInt32OrDefault(toNullable(toUInt32(1)))). #32080 (Azat Khuzhin). - إصلاح CREATE TABLE لـ Join Storage في بعض الحالات النادرة. إغلاق #31680. #32066 (SuperDJY).
- تم إصلاح الخطأ
Directory ... already exists and is not emptyعند فصل جزء. #32063 (tavplubix). MaterializedMySQL(ميزة تجريبية): إصلاح التفسير الخاطئ لبياناتDECIMALمن MySQL. #31990 (Håvard Kvålen).- كان المحرّك
FileLog(ميزة تجريبية) ينشئ دليلًا للبيانات الوصفية دون حاجة عند فشل إنشاء الجدول. إصلاح #31962. #31967 (flynn). - قد يتعطل بعض إدخالات
GET_PARTفي قائمة انتظار النسخ المتماثل إذا فُقد جزء على جميع النسخ المتماثلة ولم تكن هناك أجزاء أخرى في القسم نفسه. وقد تم إصلاح ذلك في الحالات التي يحتوي فيها partition key فقط على أعمدة من أنواع الأعداد الصحيحة أوDate[Time]. إصلاح #31485. #31887 (tavplubix). - إصلاح الدالتين
emptyوnotEmptyمع الوسيطات من النوعUUID. إصلاح #31819. #31883 (Anton Popov). - تغيير مسار الإعداد من
keeper_server.session_timeout_msإلىkeeper_server.coordination_settings.session_timeout_msعند إنشاءKeeperTCPHandler. وينطبق الأمر نفسه علىoperation_timeout. #31859 (JackyWoo). - إصلاح التحويل غير الصحيح لنوع Nullable عند استخدام primary key قابلة لـ NULL. (المفتاح الأساسي Nullable ميزة غير مستحسنة — يُرجى عدم استخدامها). هذا يُصلح #31075. #31823 (Amos Bird).
- إصلاح crash في UDF تكرارية في SQL. إغلاق #30856. #31820 (Maksim Kita).
- إصلاح crash عند استخدام الدالة
dictGetمع النوع لسمة dictionary attribute عندما يكون النوعNullable. إصلاح #30980. #31800 (Maksim Kita). - إصلاح تعطل يحدث عند وجود نتيجة فارغة لاستعلام ODBC (مع بعض برامج تشغيل ODBC). يُغلق #31465. #31766 (Kseniia Sumarokova).
- إصلاح مشكلة تعطيل query profiler (في حال كانت
query_profiler_real_time_period_ns>0/query_profiler_cpu_time_period_ns>0، قد يظل query profiler مُمكّنًا حتى بعد انتهاء الاستعلام). #31740 (Azat Khuzhin). - إصلاح segfault نادر في استعلامات
ATTACH PARTITIONالمتزامنة. #31738 (tavplubix). - إصلاح حالة تسابق في تنسيق الإخراج JSONEachRowWithProgress عند اختلاط البيانات مع الأسطر التي تعرض التقدم في المخرجات. #31736 (Kruglov Pavel).
- إصلاح الخطأ
there are no such cluster hereعند تنفيذ استعلامON CLUSTERإذا كان اسم cluster المحدد هو اسم قاعدة بياناتReplicated. #31723 (tavplubix). - إصلاح استثناء في بعض استخدامات الدالة
decryptعلى أعمدة Nullable. هذا يُغلق #31662. وهذا يُغلق #31426. #31707 (alexey-milovidov). - إصلاح الدالة
ngramsعندما تحتوي السلسلة النصية على محارف UTF-8. #31706 (yandd). - لم تكن الإعدادات
input_format_allow_errors_numوinput_format_allow_errors_ratioتعمل عند parsing لأنواع domain مثلIPv4، وقد تم إصلاح ذلك. يُصلح #31686. #31697 (tavplubix). - إصلاح استثناء null pointer في
MATERIALIZE COLUMN. #31679 (Nikolai Kochetov). - كان استعلام
RENAME TABLEيعمل بشكل غير صحيح عند محاولة إعادة تسمية Dictionary من نوع DDL في قاعدة بياناتOrdinary، وقد تم إصلاح ذلك. #31638 (tavplubix). - تنفيذ الدالة التجميعية
sparkbarبالشكل المقصود، انظر: #26175#issuecomment-960353867، التعليق. #31624 (小路). - إصلاح JSON غير صالح تم توليده عندما تحتوي أسماء الأعمدة فقط على تسلسلات UTF-8 غير صالحة. #31534 (Kevin Michel).
- تعطيل
partial_merge_join_left_table_buffer_bytesإلى حين إصلاح الخلل في هذا التحسين. انظر #31009). وإزالة الخيار الزائدpartial_merge_join_optimizations. #31528 (Vladimir C). - إصلاح التقدم في استعلامات
INSERT SELECTالقصيرة. #31510 (Azat Khuzhin). - إصلاح السلوك الخاطئ مع
group byوالوسيطات الموضعية. يُغلق #31280#issuecomment-968696186. #31420 (Kseniia Sumarokova). - معالجة
nullptrفي موفّر بيانات الاعتماد STS لـ S3. #31409 (Vladimir Chebotarev). - إزالة الدالة
notLikeمن تحليل الفهرس لأنها كانت غير صحيحة. #31169 (sundyli). - إصلاح خلل في Keeper قد يؤدي إلى تعذّر التشغيل عند فقدان بعض سجلات التنسيق ووجود لقطة أحدث من أحدث سجل لدينا. #31150 (alesapin).
- إعادة كتابة الجدول الموزّع الأيمن في join محلي. يحل #25809. #31105 (abel-cheng).
- إصلاح جدول
Mergeمع الأسماء المستعارة وwhere(إذ لم يكن يعمل سابقًا مطلقًا). يُغلق #28802. #31044 (Kseniia Sumarokova). - إصلاح JSON_VALUE/JSON_QUERY مع المعرّفات المقتبسة. يتيح ذلك وجود مسافات في JSON path. يُغلق #30971. #31003 (Kseniia Sumarokova).
- كان استخدام الدالة
formatRowمع تنسيقات غير موجّهة للصفوف يؤدي إلى segfault. عدم السماح باستخدام هذه الدالة مع مثل هذه التنسيقات (لأن ذلك غير منطقي). #31001 (Kruglov Pavel). - إصلاح خلل كان يعطّل استعلامات SELECT إذا جاءت بعد حذف عرض مادي. اكتُشف في #30691. #30997 (Kseniia Sumarokova).
- تخطّي فحص
max_partition_size_to_dropفي حالة ATTACH PARTITION … FROM و MOVE PARTITION … #30995 (Amr Alaa). - إصلاح بعض الحالات الطرفية في معاملي
INTERSECTوEXCEPT. يُغلق #30803. #30965 (Kseniia Sumarokova).
تحسينات البناء/الاختبار/التحزيم
- إصلاح نتائج التصفية غير الصحيحة في إصدارات البناء غير المعتمدة على x86. هذا يُغلق #31417. هذا يُغلق #31524. #31574 (alexey-milovidov).
- جعل build الخاصة بـ ClickHouse قابلة لإعادة الإنتاج بالكامل (متطابقة على مستوى البايت عبر أجهزة مختلفة). هذا يُغلق #22113. #31899 (alexey-milovidov). إزالة مسار نظام الملفات إلى دليل البناء من الملفات الثنائية لتمكين إصدارات build قابلة لإعادة الإنتاج. كان ذلك مطلوبًا من أجل #22113. #31838 (alexey-milovidov).
- استخدام ملفات CMakeLists الخاصة بنا لـ
zlib-ngوcassandraوmariadb-connector-cوxzوre2وsentryوgsaslوarrowوprotobuf. هذا مطلوب من أجل #20151. جزء من #9226. خطوة صغيرة نحو إزالة الفوضى المزعجة من نظام البناء. #30599 (alexey-milovidov). - إصدارات build محكمة العزل: استخدام إصدار ثابت من libc والتأكد من عدم استخدام أي ملفات مصدرية أو ثنائية من نظام التشغيل المضيف أثناء البناء. هذا يُغلق #27133. هذا يُغلق #21435. هذا يُغلق #30462. #30011 (alexey-milovidov).
- إضافة الدالة
getFuzzerData()لتسهيل اختبار وظائف معيّنة باستخدام fuzzer. هذا يُغلق #23227. #27526 (Alexey Boykov). - إعداد الإمكانات داخل Docker بشكل أكثر دقة. #31802 (Constantine Peresypkin).
- تفعيل خياري compile
-fstrict-vtable-pointersو-fwhole-program-vtablesفي clang. #20151 (Maksim Kita). - تجنّب تنزيل ملفات tarball الخاصة بسلسلة الأدوات لأغراض الترجمة المتقاطعة لـ FreeBSD. #31672 (alexey-milovidov).
- دعم أولي لـ risc-v. راجع development/build-cross-riscv للاطلاع على الملاحظات الخاصة وأمر البناء الذي جرت تجربته. #31309 (Vladimir Smirnov).
- دعم compile على أجهزة arm باستخدام parameter “-DENABLE_TESTS=OFF”. #31007 (zhanghuajie).
إصدار ClickHouse v21.11، 2021-11-09. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- تغيير ترتيب الوسيطتين
json_pathوjsonفي دوال SQL/JSON (ليتوافق مع المعيار). يُغلق #30449. #30474 (Kseniia Sumarokova). - إزالة إعداد الجدول
write_final_markلمحركMergeTree. وسيكون دائمًاtrue. #30455 (Kseniia Sumarokova). لا يلزم اتخاذ أي إجراء، فجميع الجداول متوافقة مع الإصدار الجديد. - تمت إزالة الدالة
bayesAB. يُرجى المساعدة في إعادة هذه الدالة بعد تحديثها. يُغلق هذا #26233. #29934 (alexey-milovidov). - ينطبق هذا فقط إذا كنت قد بدأت بالفعل في استخدام الدعم التجريبي لـ
clickhouse-keeper. تستخدم snapshots الخاصة بـ ClickHouse Keeper الآن، افتراضيًا، codec الضغطZSTDبدلًا من ضغط block المخصصLZ4في ClickHouse. يمكن تعطيل هذا السلوك باستخدام إعداد coordination compress_snapshots_with_zstd_format(ويجب أن تكون قيمته متطابقة على جميع replicas ضمن quorum). هذا النوع من عدم التوافق مع الإصدارات السابقة نادر جدًا، وقد يحدث فقط عندما ترسل عقدة جديدة snapshot (ويحدث ذلك في حالة recovery) إلى عقدة قديمة لا تستطيع قراءة snapshots بتنسيق ZSTD. #29417 (alesapin).
ميزة جديدة
- يتيح وضع
INSERTغير المتزامن الجديد تجميع البيانات المُدرجة وتخزينها في batch واحدة في الخلفية. ويمكن تمكينه من جهة العميل عبر ضبطasync_insertلاستعلاماتINSERTالتي تتضمن بيانات مضمنة داخل الاستعلام أو في buffer منفصل (على سبيل المثال، لاستعلاماتINSERTعبر بروتوكول HTTP). وإذا كانتwait_for_async_insertتساوي true (افتراضيًا)، فسوف ينتظر العميل حتى يتم flush البيانات إلى table. وعلى جانب server، يتحكم في ذلك الإعداداتasync_insert_threadsوasync_insert_max_data_sizeوasync_insert_busy_timeout_ms. يُنفّذ #18282. #27537 (Anton Popov). #20557 (Ivan). ملاحظات حول الأداء: مع asynchronous inserts يمكنك تنفيذ ما يصل إلى نحو 10 000 استعلامINSERTفردي في الثانية، لذلك لا يزال من المستحسن الإدراج على شكل batches إذا كنت تريد تحقيق أداء يصل إلى ملايين rows المُدرجة في الثانية. - أُضيف interactive mode إلى
clickhouse-local. لذلك، يمكنك ببساطة تشغيلclickhouse-localللحصول على واجهة ClickHouse لسطر الأوامر من دون الاتصال بـ server ومعالجة البيانات من الملفات وdata sources الخارجية. كما دُمجت شيفرةclickhouse-clientوclickhouse-localمعًا. يُغلق #7203. يُغلق #25516. يُغلق #22401. #26231 (Kseniia Sumarokova). - أُضيف دعم user defined functions القابلة للتنفيذ (القابلة للبرمجة النصية). وهي UDFs يمكن كتابتها بأي لغة برمجة. #28803 (Maksim Kita).
- السماح باستخدام connections معرّفة مسبقًا إلى data sources الخارجية. يتيح ذلك تجنّب تحديد credentials أو العناوين عند استخدام data sources الخارجية، إذ يمكن الرجوع إليها بأسمائها بدلًا من ذلك. يُغلق #28367. #28577 (Kseniia Sumarokova).
- أُضيفت database باسم
INFORMATION_SCHEMAتضم العروضSCHEMATAوTABLESوVIEWSوCOLUMNSالمقابلة للجداول المناظرة في database system. يُغلق #9770. #28691 (tavplubix). - دعم
EXISTS (subquery). يُغلق #6852. #29731 (Kseniia Sumarokova). - logging الجلسات لأغراض التدقيق. تسجيل جميع أحداث login and logout events الناجحة والفاشلة في table جديدة باسم
system.session_log. #22415 (Vasily Nemkov) (Vitaly Baranov). - دعم دوال cosine distance وEuclidean distance متعددة الأبعاد؛ ومسافات ومعايير L1 وL2 وLp وLinf. وكذلك الجداء scalar على tuples ومجموعة متنوعة من operators الحسابية على tuples. وهذا يُغلق بالكامل #4509 بل وأكثر من ذلك. #27933 (Alexey Boykov).
- إضافة دعم الضغط وفك الضغط لـ
INTO OUTFILEوFROM INFILE(مع الاكتشاف التلقائي أو مع parameter اختياري إضافي). #27135 (Filatenkov Artur). - إضافة دعم CORS (Cross Origin Resource Sharing) مع طلب HTTP
OPTIONS. وهذا يعني أن Grafana ستعمل الآن مع طلبات serverless من دون حلول التفافية. يُغلق #18693. #29155 (Filatenkov Artur). - أصبحت الاستعلامات التي تستخدم JOIN ON تدعم الآن حالات الفصل (OR). #21320 (Ilya Golshtein).
- أُضيفت الدالة
tokens. وهي تتيح تقسيم السلسلة النصية إلى وحدات باستخدام محارف ASCII غير الأبجدية الرقمية كفواصل. #29981 (Maksim Kita). وأُضيفت الدالةngramsلاستخراج ngrams من النص. يُغلق #29699. #29738 (Maksim Kita). - إضافة دوال لتطبيع Unicode: الدوال
normalizeUTF8NFCوnormalizeUTF8NFDوnormalizeUTF8NFKCوnormalizeUTF8NFKD. #28633 (darkkeks). - استهلاك متدفق لملفات logs الخاصة بالتطبيق في ClickHouse باستخدام table engine
FileLog. وهو يشبه engine KafkaأوRabbitMQ، لكنه مخصص لـ logs التي يُضاف إليها فقط وتُدوَّر في local filesystem. يُغلق #6953. #25969 (flynn) (Kseniia Sumarokova). - إضافة output format
CapnProto، وإعادة هيكلة input format CapnProto. #29291 (Kruglov Pavel). - السماح بكتابة الأرقام في query بصيغة binary literal. مثال:
SELECT 0b001;. #29304 (Maksim Kita). - أُضيف نوع Dictionary
hashed_array. وهو يوفّر الذاكرة عند استخدام Dictionaries ذات attributes متعددة. يُغلق #30236. #30242 (Maksim Kita). - أُضيفت الدالة
JSONExtractKeys. #30056 (Vitaly). - إضافة الدالة
getOSKernelVersion- وهي تُرجع String يحتوي على إصدار OS kernel. #29755 (Memo). - أُضيفت الدالتان
MD4وSHA384. تُعد MD4 دالة hash متقادمة وغير آمنة، ولا يمكن استخدامها إلا في حالات نادرة عندما تكون MD4 مستخدمة بالفعل في نظام قديم وتحتاج إلى الحصول على النتيجة نفسها تمامًا. #29602 (Nikita Tikhomirov). - يمكن تمكين HSTS لخادم HTTP في ClickHouse عن طريق تعيين
hsts_max_ageفي configuration file إلى رقم موجب. #29516 (凌涛). - دعم Huawei OBS Storage. يُغلق #24294. #29511 (kevin wan).
- دالة جديدة
mapContainsKeyLikeللحصول على الـ map الذي يطابق مفتاحه تعبيرًا نمطيًا بسيطًا. #29471 (凌涛). ودالة جديدةmapExtractKeyLikeللحصول على الـ map مع الإبقاء فقط على العناصر التي تطابق النمط المحدد. #30793 (凌涛). - تم تنفيذ
ALTER TABLE x MODIFY COMMENT. #29264 (Vasily Nemkov). - إضافة دوال فحص H3 غير المتوفرة في ClickHouse لكنها متاحة عبر واجهة برمجة تطبيقات H3: https://h3geo.org/docs/api/inspection. #29209 (Bharat Nallan).
- السماح باستخدام ALTER TABLE FETCH و ATTACH غير المكررين في قواعد بيانات Replicated. #29202 (Kevin Michel).
- أُضيف الإعداد
output_format_csv_null_representation: وهو مماثل لـoutput_format_tsv_null_representationولكنه مخصص لمخرجات CSV. #29123 (PHO). - أُضيفت الدالة
zookeeperSessionUptime()التي تُرجع مدة تشغيل جلسة ZooKeeper الحالية بالثواني. #28983 (tavplubix). - تنفيذ الدالة
h3ToGeoBoundary. #28952 (Ivan Veselov). - إضافة aggregate function
exponentialMovingAverageالتي يمكن استخدامها كـ window function. هذا يغلق #27511. #28914 (alexey-milovidov). - السماح بتضمين الأعمدة الفرعية من أعمدة الجدول في ناتج query
DESCRIBE(يمكن تمكين ذلك عبر الإعدادdescribe_include_subcolumns). #28905 (Anton Popov). - تمت إضافة الخيار
send_chunk_headerإلىExecutableوExecutablePool. إذا كانت قيمة هذا الخيار true، فسيتم إرسال عدد الصفوف في الـ chunkrows_countمع فاصل أسطر إلى client قبل الـ chunk. #28833 (Maksim Kita). - يدعم
tokenbf_v1وngramالنوع Map بمفتاح من النوع String أو FixedSring. وهذا يحسّن تخطي البيانات في query عند استخدام عامل تصفية على مفتاح map.sql CREATE TABLE map_tokenbf ( row_id UInt32, map Map(String, String), INDEX map_tokenbf map TYPE ngrambf_v1(4,256,2,0) GRANULARITY 1 ) Engine=MergeTree() Order by idمع الجدول أعلاه، فإن queryselect * from map_tokebf where map['K']='V'سيتخطى الـ granule الذي لا يحتوي على المفتاحA. وبالطبع، يعتمد عدد الصفوف التي سيجري تخطيها علىgranularityوindex_granularityاللذين قمت بإعدادهما. #28511 (凌涛). - إرسال profile events من server إلى client. وتم تقديم packet type جديد باسم
ProfileEvents. يغلق #26177. #28364 (Dmitry Novik). - عمليات إزاحة البت للنوعين
FixedStringوStringمن data types. هذا يغلق #27763. #28325 (小路). - دعم إضافة الجداول إلى النسخ المتماثل من PostgreSQL وحذفها منه ديناميكيًا في محرك قاعدة البيانات MaterializedPostgreSQL. ودعم ALTER لإعدادات قاعدة البيانات. يُغلق #27573. #28301 (Kseniia Sumarokova).
- تمت إضافة الدالة accurateCastOrDefault(x, T). يُغلق #21330. المؤلف: @taiyang-li. #23028 (Maksim Kita).
- أُضيفت الدوال
toUUIDOrDefaultوtoUInt8/16/32/64/256OrDefaultوtoInt8/16/32/64/128/256OrDefault، مما يتيح للمستخدم تحديد قيمة افتراضية (غير NULL) عند فشل تحليل السلاسل النصية. #21330 (taiyang-li).
تحسين الأداء
- يمكن أن تستبق عمليات الدمج في الخلفية بعضها بعضًا، وتُجدول بأولويات مناسبة. وبذلك لن تعود عمليات الدمج طويلة التشغيل تعيق تقدّم عمليات الدمج القصيرة. وهذا مطلوب لتحسين جدولة تنفيذ عمليات الدمج والتحكم فيه، كما يقلّل من احتمالات ظهور خطأ “too many parts”. #22381. #25165 (Nikita Mikhaylov). وأُضيفت إمكانية تنفيذ عدد من عمليات الدمج وmutations أكبر من عدد threads في background pool. وستُنفَّذ عمليات الدمج وmutations خطوةً بخطوة وفقًا لأحجامها (الأصغر يحظى بأولوية أعلى). ويتحكم setting
background_merges_mutations_concurrency_ratioفي نسبة عدد tasks إلى threads للتنفيذ، وقيمته الافتراضية 2. #29140 (Nikita Mikhaylov). - أصبح بالإمكان استخدام reads غير المتزامنة لأنظمة الملفات البعيدة. كما خُفِّض عدد عمليات
seekأثناء القراءة من أنظمة الملفات البعيدة. وهذا يحسّن الأداء بشكل كبير جدًا ويجعل القرصين التجريبيينwebوs3أسرع من EBS في ظروف معينة. #29205 (Kseniia Sumarokova). وفي الوقت نفسه، انتقل disk type web(dataset ثابتة مستضافة على خادم ويب) من الحالة التجريبية إلى الجاهزية لبيئات production. - ستستخدم queries التي تتضمن
INTO OUTFILEفيclickhouse-clientعدة threads. كما أُصلحت مشكلة وميض شريط التقدم عند استخدامINTO OUTFILE. هذا يغلق #30873. وهذا يغلق #30872. #30886 (alexey-milovidov). - تقليل كمية البيانات المضغوطة الزائدة المقروءة من disk لبعض أنواع استعلامات
SELECT(فقط لعائلة engines MergeTree). #30111 (alesapin). - إزالة بعض استدعاءات
seekالزائدة أثناء قراءة blocks المضغوطة في عائلة table engines MergeTree. #29766 (alesapin). - جعل table function
urlتعالج عدة عناوين URL بالتوازي. هذا يغلق #29670 ويغلق #29671. #29673 (alexey-milovidov). - تحسين أداء aggregation وفق ترتيب primary key (مع تفعيل setting
optimize_aggregation_in_order). #30266 (Anton Popov). - يستخدم ClickHouse الآن DNS cache أثناء التواصل مع S3 الخارجي. #29999 (alesapin).
- إضافة دعم pushdown لعبارتي
IS NULL/IS NOT NULLإلى قواعد البيانات الخارجية (مثل MySQL). #29463 (Azat Khuzhin). تحويلisNull/isNotNullإلىIS NULL/IS NOT NULL(لقواعد البيانات الخارجية، مثل MySQL). #29446 (Azat Khuzhin). - ستستخدم استعلامات SELECT من جداول Dictionary عدة threads. #30500 (Maksim Kita).
- تحسين الأداء عند filtering (عملية WHERE) لأعمدة
Decimal. #30431 (Jun Jin). - إزالة الشيفرة كثيرة التفرعات في عملية
filterعبر تنفيذ أفضل باستخدامpopcnt/ctzلما يوفّره من أداء أعلى. #29881 (Jun Jin). - تحسين دالة توليد قناع البايت لـ
filter(المستخدمة مع العامل WHERE) بشكل شامل باستخدام تعليمات SSE/AVX2/AVX512. لاحظ أن ClickHouse يستخدم SSE فقط افتراضيًا، لذا فهذا لا ينطبق إلا على builds المخصّصة. #30014 (jasperzhu). #30670 (jasperzhu). - تحسين أداء الدالة التجميعية SUM للأعداد ذات الفاصلة العائمة من النوع Nullable. #28906 (Raúl Marín).
- تسريع عملية loading للأجزاء عند استخدام عدة disks. الفكرة مشابهة لـ https://github.com/ClickHouse/ClickHouse/pull/16423 . وتُظهر بيئة الإنتاج تحسنًا: 24 min -> 16 min . #28363 (Amos Bird).
- تقليل الإعدادات الافتراضية لـ part size في multipart upload على S3 لخفض memory usage. #28679 (ianton-ru).
- تسريع الدالة
bitmapAnd. #28332 (dddounaiking). - إزالة إشعارات mutation غير المثالية في
StorageMergeTreeعندما تكون merges لا تزال جارية. #27552 (Vladimir Chebotarev). - محاولة تحسين أداء مقارنة السلاسل النصية. #28767 (alexey-milovidov).
- يمكن أن يعمل index المفتاح الأساسي وfilter الـ partition مع tuple. #29281 (凌涛).
- إذا كان query يحتوي على عدة دوال تجميعية quantile لها arguments نفسها ولكن parameter مستوى مختلف، فستُدمج معًا وتُنفَّذ في مرور واحد إذا كان الإعداد
optimize_syntax_fuse_functionsenabled. #26657 (hexiaoting). - أصبح الآن التجميع min-max على أول expression من primary key مُحسَّنًا عبر projection. هذا خاص بـ #329. #29918 (Amos Bird).
ميزة تجريبية
- إضافة إمكانية تغيير إعدادات العقد (في ملف
.xml) لـ ClickHouse Keeper. #30372 (alesapin). - إضافة الدالة التجميعية
sparkbar. وبذلك يُغلق #26175. #27481 (小路). ملاحظة: يوجد خلل واحد في هذه الدالة، وسيتم تغيير هذا السلوك في الإصدارات المستقبلية.
تحسين
- السماح للمستخدم بتغيير مستويات السجل دون إعادة التشغيل. #29586 (Nikolay Degterinsky).
- عدة تحسينات على SQL UDF. تدعم الاستعلامات الخاصة بإدارة SQL User Defined Functions الآن عبارة ON CLUSTER. مثال:
CREATE FUNCTION test_function ON CLUSTER 'cluster' AS x -> x + 1;. يُغلق #30666. #30734 (Maksim Kita). دعم الصياغتينCREATE OR REPLACEوCREATE IF NOT EXISTS. #30454 (Maksim Kita). تمت إضافة دعمDROP IF EXISTS. مثال:DROP FUNCTION IF EXISTS test_function. #30437 (Maksim Kita). دعم تعبيرات lambda. مثال:CREATE FUNCTION lambda_function AS x -> arrayMap(element -> element * 2, x);. #30435 (Maksim Kita). دعم SQL user defined functions فيclickhouse-local. #30179 (Maksim Kita). - تمكين Profiler الذاكرة لكل استعلام (مع ضبط
memory_profiler_step= 4MiB) على مستوى عام. #29455 (Azat Khuzhin). - تمت إضافة الأعمدة
data_compressed_bytesوdata_uncompressed_bytesوmarks_bytesإلىsystem.data_skipping_indices. وتمت إضافة الأعمدةsecondary_indices_compressed_bytesوsecondary_indices_uncompressed_bytesوsecondary_indices_marks_bytesإلىsystem.parts. يُغلق #29697. #29896 (Maksim Kita). - إضافة الاسم المستعار
tableإلى system.tables والاسم المستعارdatabaseإلى system.databases #29677. #29882 (kevin wan). - حل التبعيات المتبادلة بين الجداول بشكل صحيح عند بدء تشغيل الخادم. يُغلق #8004، ويُغلق #15170. #28373 (tavplubix).
- تجنّب الخطأ “Division by zero” عندما يكون المقسوم عليه من النوع Nullable في الدوال
divideوintDivوmodulo. يُغلق #22621. #28352 (Kruglov Pavel). - السماح بتحليل قيم نوع البيانات
Dateفي تنسيقات النص بصيغةYYYYMMDDبالإضافة إلىYYYY-MM-DD. يُغلق هذا #30870. #30871 (alexey-milovidov). - واجهة الويب: عرض أشرطة داخل خلايا الجداول. #29792 (alexey-milovidov).
- يمكن للمستخدم الآن إنشاء قواميس مع تعليقات:
CREATE DICTIONARY ... COMMENT 'vaue'… #29899 (Vasily Nemkov). ويمكن للمستخدمين الآن أيضًا تعيين تعليقات لقاعدة البيانات في تعليمةCREATE DATABASE… #29429 (Vasily Nemkov). - تمت إضافة الإعداد
compiled_expression_cache_elements_size. وإذا احتجت يومًا إلى استخدام هذا الإعداد، فستعرف مسبقًا ما الذي يفعله. #30667 (Maksim Kita). - يدعم clickhouse-format الآن الخيار
--query. في الإصدارات السابقة، كان عليك تمرير الاستعلام إلى stdin. #29325 (凌涛). - تمت إضافة دعم
ALTER TABLEللجداول في قواعد بياناتMemory. وتُستخدم قواعد بياناتMemoryفيclickhouse-local. #30866 (tavplubix). - أصبحت المصفوفات من جميع الأنواع القابلة للتسلسل مدعومة الآن في
arrayStringConcat. #30840 (Nickita Taranov). - أصبح ClickHouse الآن يأخذ قيود docker/cgroups في الحسبان عند تحديد مقدار ذاكرة النظام. راجع #25662. #30574 (Pavel Medvedev).
- أصبح جلب بنية الجدول لقاعدة بيانات PostgreSQL أكثر موثوقية. #30477 (Kseniia Sumarokova).
- دعم كامل للوسيطات الموضعية في GROUP BY و ORDER BY. #30433 (Kseniia Sumarokova).
- أصبح بالإمكان استخراج عنصر غير نصي كسلسلة نصية باستخدام JSONExtractString. وذلك من أجل pull/25452#issuecomment-927123287. #30426 (Amos Bird).
- أُضيفت إمكانية استخدام العبارة FINAL في استعلامات SELECT من
GraphiteMergeTree. #30360 (Nikita Mikhaylov). - تحسينات طفيفة في استنساخ replica وإدراج عمليات fetch للأجزاء المعطوبة في الطابور، ما من شأنه تجنب التعليق النادر جدًا لعناصر
GET_PARTفي replication queue. #30346 (tavplubix). - أصبح مسموحًا باستخدام الروابط الرمزية للملفات في الدليل
user_filesمع دالة الجدولfile. #30309 (Kseniia Sumarokova). - تم إصلاح مقارنة
Date32معDateوDateTimeوDateTime64وString. #30219 (liang.huang). - أصبح بالإمكان إزالة التعبير
SAMPLE BYمن جداولMergeTree(ALTER TABLE <table> REMOVE SAMPLE BY). #30180 (Anton Popov). - سيبدأ
Keeperالآن (بصفته جزءًا منclickhouse-server) بشكل غير متزامن إذا تمكن من الاتصال بعقدة أخرى. #30170 (alesapin). - يدعم
clickhouse-clientالآن تحريرًا مدمجًا متعدد الأسطر. #30143 (Amos Bird). - قواميس
polygon(الترميز الجغرافي العكسي): أُضيف دعم لقراءة محتوى القاموس باستخدام أسلوب الاستعلام SELECT إذا كان الإعدادstore_polygon_key_column= true. يُغلق هذا #30090. #30142 (Maksim Kita). - إضافة شعار ClickHouse إلى واجهة Play. #29674 (alexey-milovidov).
- تحسين رسالة الاستثناء عند قراءة عمود من التنسيقات المدعومة من Arrow مثل
ArrowوArrowStreamوParquetوORC. يُغلق هذا #29926. #29927 (alexey-milovidov). - إصلاح حالة سباق بيانات بين flush وبدء التشغيل في جداول
Buffer. وقد يظهر هذا في الاختبارات. #29930 (Azat Khuzhin). - إصلاح
lock-order-inversionبينDROP TABLEلكل منDatabaseMemoryوLiveView. تُعد Live View ميزة تجريبية. وتُستخدم قاعدة بيانات Memory في clickhouse-local. #29929 (Azat Khuzhin). - إصلاح
lock-order-inversionبين إعادة التحميل الدورية للقاموس وإعادة تحميل config. #29928 (Azat Khuzhin). - تحديث ملفات zoneinfo إلى 2021c. #29925 (alexey-milovidov).
- إضافة إمكانية ضبط retries والفواصل الزمنية بينها لـ
clickhouse-copier. #29921 (Azat Khuzhin). - إضافة إعداد الخادم
shutdown_wait_unfinished_queriesللسماح بانتظار الاستعلامات الجارية حتى مدةshutdown_wait_unfinished. وهذا من أجل #24451. #29914 (Amos Bird). - إضافة إمكانية تتبّع Peak memory usage (باستخدام trace_type جديد في
system.trace_logوهوMemoryPeak). #29858 (Azat Khuzhin). - الجداول الخارجية في PostgreSQL: أُضيفت بادئة الجدول المُقسَّم ‘p’ إلى الاستعلام المستخدم لجلب فهرس replica identity. #29828 (Shoh Jahon).
- تطبيق
max_untracked_memory/memory_profiler_step/memory_profiler_sample_probabilityأثناء mutate/merge لإعداد profiling لاستخدام الذاكرة أثناء عمليات الدمج. #29681 (Azat Khuzhin). - إخفاء بيانات الاستعلامات: أصبح
clickhouse-format --obfuscateيعمل الآن مع المزيد من أنواع الاستعلامات. #29672 (alexey-milovidov). - إصلاح المشكلة التالية: تعذّر على
clickhouse-format --obfuscateمعالجة الاستعلامات التي تحتوي على Embedded Dictionaries (الدوالregionTo...). #29667 (alexey-milovidov). - إصلاح المعالجة غير الصحيحة لـ Nullable في JSON functions. يُصلح هذا #29615. ووُسِم كتحسين لأن https://github.com/ClickHouse/ClickHouse/pull/28012 لم يُصدر بعد. #29659 (Amos Bird).
- زيادة القيمة الافتراضية لـ
listen_backlog(لتتوافق مع القيمة الافتراضية في نواة Linux الأحدث). #29643 (Azat Khuzhin). - إعادة تحميل القواميس والنماذج والدوال التنفيذية المعرّفة من قبل المستخدم إذا تغيّر إعداد الخادم
dictionaries_configأوmodels_configأوuser_defined_executable_functions_config. يغلق #28142. #29529 (Maksim Kita). - إزالة القيد غير الضروري على اسم الإسقاط. يمكن الآن أن يبدأ اسم الإسقاط بـ
tmp_. #29520 (Amos Bird). - إصلاح الخطأ
There is no query or query context has expiredفي عمليات mutation التي تتضمن استعلامات فرعية متداخلة. لم يعد يُسمح بالاستعلامات الفرعية في mutation إذا كان الجدول replicated وكان الإعدادallow_nondeterministic_mutationsمعطّلًا. #29495 (tavplubix). - تطبيق تغييرات config على
max_concurrent_queriesأثناء وقت التشغيل (من دون الحاجة إلى إعادة التشغيل). #29414 (Raúl Marín). - إضافة الإعداد
use_skip_indexes. #29405 (Maksim Kita). - إضافة دعم
FREEZEللأجزاء الموجودة في الذاكرة (لأغراض النسخ الاحتياطي). #29376 (Mo Xuan). - تمرير
initial_query_idللاستعلام الأصلي إلىclickhouse-benchmark(في السابق، إذا شغّلت استعلامًا بعيدًا عبرclickhouse-benchmark، فلن تُربط الاستعلامات على الشظايا بالاستعلام الأصلي عبرinitial_query_id). #29364 (Azat Khuzhin). - مؤشرات التخطي
tokenbf_v1وngrambf_v1: أُضيف دعم لنوع البياناتArrayبمفتاح من النوعStringأوFixedString. #29280 (Maksim Kita). كما أُضيف إلى مؤشرات التخطيtokenbf_v1وngrambf_v1دعم لنوع البياناتMapبمفتاح من النوعStringأوFixedString. المؤلف @lingtaolf. #29220 (Maksim Kita). - الدالة
has: أُضيف دعم لنوع البياناتMap. #29267 (Maksim Kita). - إضافة إعدادات
compress_logsإلى clickhouse-keeper، بما يتيح ضغط سجلات clickhouse-keeper (لآلة الحالات replicated) باستخدامZSTD. تنفيذ: #26977. #29223 (alesapin). - إضافة الإعداد
external_table_strict_query— ما يفرض تمرير تعبير WHERE بالكامل في الاستعلامات إلى قواعد البيانات الخارجية حتى إن كان غير متوافق. #29206 (Azat Khuzhin). - تعطيل الإسقاطات عند استخدام
ARRAY JOIN. في الإصدارات السابقة، كان تحليل الإسقاطات قد يتسبب في كسر الأسماء المستعارة في array join. #29139 (Amos Bird). - دعم المزيد من الأنواع في output format
MsgPack. #29077 (Kruglov Pavel). - السماح بإدخال أعمدة
LowCardinalityوإخراجها في تنسيق الإدخال/الإخراجORC. #29062 (Kruglov Pavel). - قد يعرض الاستعلام من
system.distributed_ddl_queueقيماً غير صحيحة، وقد تم إصلاح ذلك. #29061 (tavplubix). - تصحيح السلوك عند استخدام طرائق غير معروفة في اتصال HTTP. يحل #29050. #29057 (Filatenkov Artur).
clickhouse-keeper: إصلاح خطأ فيclickhouse-keeper-converterقد يؤدي إلى فقدان بعض البيانات أثناء الاستعادة من سجلات ZooKeeper (وليس من snapshot). #29030 (小路). وإصلاح خطأ فيclickhouse-keeper-converterقد يؤدي إلى إلغاء تسلسل غير صحيح لسجل ZooKeeper. #29071 (小路).- تطبيق الإعدادات من استعلامات
CREATE ... AS SELECT(إصلاح: #28810). #28962 (Azat Khuzhin). - مراعاة إعداد قاعدة البيانات الافتراضية لأوامر ALTER TABLE … ON CLUSTER … REPLACE/MOVE PARTITION FROM/TO … #28955 (anneji-dev).
- بروتوكول gRPC: السماح بتغيير الضغط على جهة الخادم من جهة العميل. #28953 (Vitaly Baranov).
- تخطي الاستثناء “no data” عند قراءة المستشعرات الحرارية للمقاييس غير المتزامنة. هذا يُغلق #28852. #28882 (alexey-milovidov).
- إصلاح حالة تسابق منطقية قد تتسبب، في حالات نادرة، في ظهور الخطأ
Dictionary not foundلقاموس موجود. #28853 (tavplubix). - تخفيف التحقق من الدوال المتداخلة لـ If-combinator (مع منع combinators المتطابقة المتداخلة). #28828 (Azat Khuzhin).
- إصلاح استثناء محتمل غير ملتقط أثناء إنهاء الخادم. #28761 (Azat Khuzhin).
- منع تنظيف أدلة tmp التي قد تستخدمها عملية mutation/merge نشطة إذا كانت عملية mutation/merge طويلة بشكل استثنائي. #28760 (Azat Khuzhin).
- السماح بالتحسين
optimize_arithmetic_operations_in_aggregate_functions = 1عند استخدام alias. #28746 (Amos Bird). - تنفيذ الإعداد
detach_not_byte_identical_partsلـReplicatedMergeTree، بحيث يتم فصل الأجزاء غير المتطابقة على مستوى البايتات بدلاً من إزالتها (بعد merge/mutate). #28708 (Azat Khuzhin). - تنفيذ الإعداد
max_suspicious_broken_parts_bytesلـMergeTree(للحد من الحجم الإجمالي لجميع الأجزاء المعطوبة، والقيمة الافتراضية هي1GiB). #28707 (Azat Khuzhin). - تمكين توسيع وحدات الماكرو في إعدادات جدول
RabbitMQ. #28683 (Vitaly Baranov). - استعادة إمكانية قراءة بيانات جدول يستخدم المحرك
Logعبر عدة خيوط. #28125 (Vitaly Baranov). - إصلاح السلوك غير الصحيح في التعامل مع العمود NULL في دوال JSON. ويعالج هذا #27930. #28012 (Amos Bird).
- السماح بتعيين حجم ذاكرة Mark/Uncompressed cache الخاصة بفهارس التخطي بشكل منفصل عن الأعمدة. #27961 (Amos Bird).
- السماح بدمج JOIN مع
USINGمع أنواع JOIN الأخرى. #23881 (darkkeks). - تحديث الوحدة الفرعية aws-sdk لدعم تقييد المعدل في Yandex Cloud S3. #30646 (ianton-ru).
- إصلاح تحرير معرّف الاستعلام ومعرّف الجلسة عند نهاية معالجة الاستعلام أثناء التعامل مع استدعاء gRPC. #29954 (Vitaly Baranov).
- إصلاح إيقاف
AccessControlManagerلإصلاح اختبار غير مستقر. #29951 (Vitaly Baranov). - إصلاح فشل التحقق عند القراءة من
HDFS. وتحديث مكتبة libhdfs3 لتتمكن من التشغيل في الاختبارات في وضع التصحيح. يُغلق #29251. يُغلق #27814. #29276 (Kseniia Sumarokova).
تحسين البناء/الاختبار/التحزيم
- إضافة دعم لبناء إصدارات FreeBSD لأجهزة Aarch64. #29952 (MikaelUrankar).
- لم تعد الوحدات الفرعية التكرارية مطلوبة في ClickHouse. #30315 (alexey-milovidov).
- يمكن بناء ClickHouse بناءً ثابتًا باستخدام Musl. أُضيف هذا بشكل تجريبي، لكنه لا يدعم بناء
odbc-bridgeوlibrary-bridge، أو التكامل مع CatBoost وبعض المكتبات. #30248 (alexey-milovidov). - تمكين
ProtobufوArrowوORCوParquetفي builds الخاصة بـAArch64وDarwin(macOS). يغلق هذا #29248. ويغلق أيضًا #28018. #30015 (alexey-milovidov). - إضافة cross-build لـ PowerPC (powerpc64le). يغلق هذا #9589. كما تم تمكين دعم التفاعل مع MySQL لكل من AArch64 وPowerPC. يغلق هذا #26301. #30010 (alexey-milovidov).
- الإبقاء على الملفات المطلوبة فقط في سلاسل أدوات cross-compile، وتضمينها كوحدات فرعية (إذ كان يجري تنزيلها سابقًا كملفات tarball). #29974 (alexey-milovidov).
- تنفيذ نهج fuzzing مدرك للبنية في ClickHouse لمحلل عبارة SELECT. #30012 (Paul).
- تفعيل مُقيِّم constexpr expressions التجريبي في clang لتسريع ترجمة شيفرة Template. #29668 (myrrc).
- إضافة إمكانية الترجمة البرمجية باستخدام إصدار أحدث من glibc من دون استخدام رموز جديدة. #29594 (Azat Khuzhin).
- تقليل حجم الملف التنفيذي في build الخاصة بـ Debug باستخدام خيار تحسين من clang. #28736 (flynn).
- ستُوضَع الآن جميع images الخاصة بـ CI في مستودع Docker Hub منفصل. #28656 (alesapin).
- تحسين دعم build باستخدام clang-13. #28046 (Sergei Semin).
- إضافة إمكانية طباعة profile events الخام في
clickhouse-client(قد يكون هذا مفيدًا في debugging ولأغراض الاختبار). #30064 (Azat Khuzhin). - إضافة تبعية زمنية لوحدة clickhouse-server (تهيئة systemd وsysvinit). #28891 (Azat Khuzhin).
- إعادة تحميل cache الخاصة بـ stacktrace عند إعادة تحميل الرمز. #28137 (Amos Bird).
إصلاح الأخطاء
- قد تعثر الدوال الخاصة بالبحث غير الحساس لحالة الأحرف في سلاسل UTF-8 النصية، مثل
positionCaseInsensitiveUTF8وcountSubstringsCaseInsensitiveUTF8، على سلاسل فرعية لا تتطابق فعليًا في حالات نادرة جدًا، وقد تم إصلاح ذلك. #30663 (tavplubix). - إصلاح القراءة من ملف فارغ على قرص مشفّر. #30494 (Vitaly Baranov).
- إصلاح تحويل سلسلة شروط OR إلى
IN(تتحكم فيها الإعداداتoptimize_min_equality_disjunction_chain_length) في الاستعلامات الموزعة مع الإعدادlegacy_column_name_of_tuple_literal = 0. #28658 (Anton Popov). - السماح باستخدام عمود materialized كمفتاح التقسيم في جدول موزّع حتى إذا كان
insert_allow_materialized_columns=0:. #28637 (Vitaly Baranov). - إصلاح
ORDER BY ... WITH FILLعند ضبطTOوFROMوعدم وجود أي صفوف في مجموعة النتائج. #30888 (Anton Popov). - إصلاح عدم استخدام فهرس Set في تعبيرات AND/OR عندما يكون هناك أكثر من معاملين. هذا يُصلح #30416 . #30887 (Amos Bird).
- إصلاح تعطل يحدث عند materialize لـ projection تحتوي على دالة hash. هذا يُصلح #30861 . المشكلة مشابهة لـ https://github.com/ClickHouse/ClickHouse/pull/28560، وتعود إلى عدم الفهم الصحيح لخاصية خلوّ الترويسة. #30877 (Amos Bird).
- تم إصلاح الالتباس عند استخراج اسم ZooKeeper الإضافي من مسار ZooKeeper في
ReplicatedMergeTree. سابقًا، كان قد يفشل الخادم في البدء معUnknown auxiliary ZooKeeper nameإذا احتوى مسار ZooKeeper على نقطتين رأسيتين. يُصلح #29052. كذلك، كان مسموحًا بتحديد مسار ZooKeeper لا يبدأ بشرطة مائلة، لكنه الآن مهمل ولا يُسمح بإنشاء جداول جديدة بهذا المسار. كما لا يُسمح أيضًا بالشرطات المائلة والنقطتين الرأسيتين في أسماء ZooKeeper الإضافية. #30822 (tavplubix). - تنظيف الدليل المؤقت عند فشل
localBackupلأي سبب. #30797 (ianton-ru). - أُصلحت حالة سباق بين
REPLACE/MOVE PARTITIONوالدمج في الخلفية فيMergeTreeغير المُكرَّر، والتي كان قد تؤدي إلى بقاء جزء من البيانات المنقولة/المستبدلة في القسم. يُصلح #29327. #30717 (tavplubix). - إصلاح PREWHERE مع WHERE في حالة PREWHERE التي تكون true دائمًا. #30668 (Azat Khuzhin).
- كان من الممكن أن يتسبب تحسين push down الخاص بـ Limit في حدوث خطأ
Cannot find column. يُصلح #30438. #30562 (Nikolai Kochetov). - إضافة أقواس مفقودة عند إعادة كتابة
isNotNull/isNullإلىIS [NOT] NULL(يُصلح الاستعلامات التي تحتوي على شيء مثلisNotNull(1)+isNotNull(2)). #30520 (Azat Khuzhin). - إصلاح حالة توقف متبادل في ALTER مع استعلام فرعي scalar على الجدول نفسه، وإغلاق #30461. #30492 (Vladimir C).
- إصلاح تعطل segfault قد يحدث إذا انتهت صلاحية الجلسة أثناء تنفيذ REPLACE PARTITION. #30432 (tavplubix).
- قد تُرجع الاستعلامات التي تحتوي على شرط مثل
IN (subquery)نتيجة غير صحيحة عند تطبيق projection تجميعي. كما تم إصلاح إنشاء المجموعات الخاصة بـ projections. #30310 (Amos Bird). - إصلاح حلّ الأسماء المستعارة للأعمدة في استعلامات JOIN عند تمكين projection. يُصلح هذا #30146. #30293 (Amos Bird).
- إصلاح بعض أوجه القصور في الدالة
replaceRegexpAll. #30292 (Memo). - إصلاح تحليل الخيار
preallocateمن إعدادات layout في ComplexKeyHashedDictionary و ComplexKeySparseHashedDictionary. #30246 (Maksim Kita). - إصلاح الدالة
[I]LIKE. إغلاق #28661. #30244 (Nikolay Degterinsky). - إصلاح crash مع shortcircuit و lowcardinality في multiIf. #30243 (Raúl Marín).
- إصلاح حساب bytes_allocated في FlatDictionary و HashedDictionary للسمات Nullable. #30238 (Maksim Kita).
- السماح بالمُعرّفات التي تبدأ بأرقام في عمليات join متعددة. #30230 (Vladimir C).
- إصلاح القراءة من
MergeTreeمعmax_read_buffer_size = 0(عندما يريد المستخدم أن يؤذي نفسه بنفسه) (قد يؤدي ذلك إلى ظهور الاستثناءاتCan't adjust last granuleوLOGICAL_ERROR، أو حتى فقدان البيانات). #30192 (Azat Khuzhin). - إصلاح
pread_fake_async/pread_threadpoolمعmin_bytes_to_use_direct_io. #30191 (Azat Khuzhin). - إصلاح قيام INSERT SELECT بملء عمود MATERIALIZED بشكل غير صحيح استنادًا إلى عمود Nullable. #30189 (Azat Khuzhin).
- دعم معاملات Nullable في الدالة
initializeAggregation. #30177 (Anton Popov). - إصلاح الخطأ
Port is already connectedفي الاستعلامات التي تحتوي علىGLOBAL INوWITH TOTALS. فقط في الإصدارين 21.9 و21.10. #30086 (Nikolai Kochetov). - إصلاح حالة تسابق بين MOVE PARTITION وعمليات الدمج/الـ mutations في MergeTree. #30074 (Azat Khuzhin).
- قد تعود قاعدة البيانات
Memoryالمحذوفة إلى الظهور بعد إعادة تشغيل الخادم، وقد تم إصلاح ذلك (#29795). كما أُضيف الإعدادforce_remove_data_recursively_on_dropكحل بديل لخطأDirectory not emptyعند حذف قاعدة البياناتOrdinary(لأنه لا يمكن إزالة بقايا البيانات يدويًا في البيئة السحابية). #30054 (tavplubix). - إصلاح تعطل sample بسبب
tuple()، وإغلاق #30004. #30016 (flynn). - محاولة إغلاق المشكلة: #29965. #29976 (hexiaoting).
- إصلاح احتمال حدوث سباق بيانات بين
FileCheckerوStorageLog/StorageStripeLog. #29959 (Azat Khuzhin). - إصلاح سباق بيانات بين
LogSink::writeMarks()وLogSourceفيStorageLog. #29946 (Azat Khuzhin). - إصلاح احتمال تسرّب الموارد في حد الاستعلامات المتزامنة لجداول MergeTree، والذي أُدخل في https://github.com/ClickHouse/ClickHouse/pull/19544. #29879 (Amos Bird).
- إصلاح فحص إعادة إنشاء جداول النظام (كان يفشل في اكتشاف التغييرات في قيم
enum). #29857 (Azat Khuzhin). - MaterializedMySQL: إصلاح مشكلة كان فيها فقدان الاتصال بـ MySQL يؤدي إلى معالجة أجزاء فقط من المعاملة. #29837 (Håvard Kvålen).
- تجنّب خطأ
Timeout exceeded: elapsed 18446744073.709553 secondsالذي قد يحدث في حالات نادرة للغاية، ويُفترض أن سببه خلل ما في النواة. إصلاح #29154. #29811 (tavplubix). - إصلاح cast غير صحيح في الاستعلام
ATTACH TABLE ... FROM 'path'عند استخدام literal غير نصي بدلًا من path. وقد يؤدي ذلك إلى قراءة ذاكرة غير مهيأة. #29790 (alexey-milovidov). - إصلاح الوصول المتزامن إلى
LowCardinalityأثناءGROUP BY(وبالاقتران مع جداولBufferقد يؤدي ذلك إلى مشكلات). #29782 (Azat Khuzhin). - إصلاح
GROUP BYغير صحيح (ظهور صفوف متعددة بالمفاتيح نفسها في النتيجة) في حالة distributed query عندما كانت shards تعمل بإصدارات مختلطة<= 21.3و>= 21.4، وكان مفتاحGROUP BYيتكوّن من عدة columns كلها ذات حجم ثابت، وكانت two-level aggregation مفعّلة (انظرgroup_by_two_level_thresholdوgroup_by_two_level_threshold_bytes). إصلاح #29580. #29735 (Nikolai Kochetov). - تم إصلاح السلوك غير الصحيح للإعداد
materialized_postgresql_tables_listعند إعادة تشغيل الخادم. وُجدت المشكلة في #28529. #29686 (Kseniia Sumarokova). - قد يضيع الشرط في مسند التصفية بعد تحسين push-down. #29625 (Nikolai Kochetov).
- إصلاح ترجمة JIT للتعبيرات مع الأسماء المستعارة والتقييم المختصر للتعبيرات. يغلق #29403. #29574 (Maksim Kita).
- إصلاح segfault نادر في الاستعلام
ALTER MODIFYعند استخدام معرّف table غير صحيح في تعبيرDEFAULTمثلx.y.z.... يعالج #29184. #29573 (alesapin). - إصلاح إلغاء الإشارة إلى nullptr في
GROUP BY WITH TOTALS HAVING(عندما لا يكون column المستخدم فيHAVINGمحددًا). #29553 (Azat Khuzhin). - تجنّب deadlocks عند القراءة والكتابة على جداول Join table engine في الوقت نفسه. #29544 (Raúl Marín).
- إصلاح خلل في الفحص
pathStartsWithبسبب خلل في استخدامstd::mismatch:The behavior is undefined if the second range is shorter than the first range.. #29531 (Kseniia Sumarokova). - في ODBC bridge، تمت إضافة retries للخطأ Invalid cursor state. وهو خطأ قابل لإعادة المحاولة. يغلق #29473. #29518 (Kseniia Sumarokova).
- تم إصلاح parsing غير الصحيح لاسم table عند loading قاعدة البيانات
Lazy. يعالج #29456. #29476 (tavplubix). - إصلاح احتمال حدوث
Block structure mismatchفي subqueries ذات مسندHAVINGالمدفوع إلى الأسفل. يعالج #29010. #29475 (Nikolai Kochetov). - إصلاح الخطأ المنطقي
Cannot capture columnsفي الدالتين greatest/least. يغلق #29334. #29454 (Kruglov Pavel). - RocksDB table engine: إصلاح race condition أثناء فتح عدة DB في الوقت نفسه (مع استعادة بعض الاختبارات التي تؤدي إلى ظهور المشكلة على CI). #29393 (Azat Khuzhin).
- إصلاح عدم إيقاف replicated access storage بشكل سليم عند سوء الإعداد. #29388 (Kevin Michel).
- إزالة window function
nth_valueلأنها غير آمنة من ناحية الذاكرة. هذا يغلق #29347. #29348 (alexey-milovidov). - إصلاح عمليات الدمج العمودية لأجزاء الإسقاط. يُصلح هذا #29253. كما يُصلح طلب السحب هذا أيضًا عدة مشكلات في دمج/تعديل الإسقاطات أُدخلت في https://github.com/ClickHouse/ClickHouse/pull/25165. #29337 (Amos Bird).
- إصلاح تعليق استعلامات DDL على قاعدة بيانات
Replicatedأثناء إضافة replica جديدة. #29328 (Kevin Michel). - إصلاح مهلات الاتصال (
send_timeout/receive_timeout). #29282 (Azat Khuzhin). - إصلاح احتمال حدوث الاستثناء
Table columns structure in ZooKeeper is different from local table structureأثناء إعادة إنشاء replicas جديدة أو إنشائها لـReplicatedMergeTree، عندما يحتوي أحد أعمدة الجدول على تعبيراتdefaultتتضمن دوال لا تراعي حالة الأحرف. #29266 (Anton Popov). - إرسال الخطأ المعتاد
Database doesn't exist error(UNKNOWN_DATABASE) إلى العميل (عبر TCP) بدلًا منAttempt to read after eof(ATTEMPT_TO_READ_AFTER_EOF). #29229 (Azat Khuzhin). - إصلاح segfault أثناء الإدراج في عمود من النوع LowCardinality(Nullable) في تنسيق الإدخال Avro. #29132 (Kruglov Pavel).
- عدم السماح بإعادة استخدام بيانات الاعتماد السابقة في حالة inter-server secret (قبل INSERT عبر Buffer/Kafka إلى جدول Distributed مع تهيئة inter-server secret لذلك cluster، قد يُعاد استخدام المستخدم الذي ضُبط سابقًا لذلك connection). #29060 (Azat Khuzhin).
- التعامل مع
any_join_distinct_right_table_keysعند إجراء join مع Dictionary، وإغلاق #29007. #29014 (Vladimir C). - إصلاح الخطأ “Not found column … in block” عند إجراء join على عمود alias، وإغلاق #26980. #29008 (Vladimir C).
- إصلاح عدد الخيوط المستخدمة في الاستعلام الفرعي
GLOBAL IN(إذ كان يُنفَّذ بخيط واحد منذ إصلاح الخطأ #19414). #28997 (Nikolai Kochetov). - إصلاح التحسينات غير الصحيحة في ORDER BY إذا كان يتضمن WITH FILL. يُغلق هذا #28908. ويُغلق أيضًا #26049. #28910 (alexey-milovidov).
- إصلاح دوال المصفوفات عالية الرتبة (
SIGSEGVلـarrayCompact/ILLEGAL_COLUMNلـarrayDifference/arrayCumSumNonNegative) عند استخدام الثوابت. #28904 (Azat Khuzhin). - إصلاح انتظار mutation مع
mutations_sync=2. #28889 (Azat Khuzhin). - إصلاح الاستعلامات إلى قواعد البيانات الخارجية (مثل MySQL) عند استخدام أعمدة متعددة في IN (مثل
(k,v) IN ((1, 2))). #28888 (Azat Khuzhin). - إصلاح خلل في
LowCardinalityعند التقييم المختصر للدوال. إغلاق #28884. #28887 (Kruglov Pavel). - إصلاح قراءة الأعمدة الفرعية من الأجزاء المدمجة. #28873 (Anton Popov).
- إصلاح حالة تسابق بين
DROP PARTوREPLACE/MOVE PARTITIONقد تتسبب، في حالات نادرة، في تباعد النسخ المتماثلة. #28864 (tavplubix). - إصلاح تجميع التعبيرات مع التقييم المختصر. #28821 (Azat Khuzhin).
- إصلاح حالة نادرة للغاية قد تتباعد فيها نسخ ReplicatedMergeTree المتماثلة بعد إعادة تشغيل قسرية لكل النسخ المتماثلة. يبدو الخطأ كما يلي:
Part ... intersects (previous|next) part .... #28817 (alesapin). - تحسين التحقق من صلاحية الاتصال للاستخدام، وكذلك التقاط أي استثناء عند إيقاف
RabbitMQاحتياطًا. #28797 (Kseniia Sumarokova). - إصلاح حالة تسابق غير مؤثرة في ReplicatedMergeTreeQueue. لا ينبغي أن تكون مرئية للمستخدم، لكنها قد تؤدي إلى أخطاء دقيقة. #28734 (alesapin).
- إصلاح احتمال حدوث تعطل في
SELECTمع إسقاط تجميعي مُنشأ جزئيًا في حال وقوع استثناء. #28700 (Amos Bird). - إصلاح حدوث coredump عند إنشاء الجداول الموزعة عندما تكون المعلمات المُمرَّرة غير صحيحة. #28686 (Zhiyong Wang).
- إضافة اسمين مستعارين لـ Settings.Names و Settings.Values في جدول system.processes. #28685 (Vitaly).
- دعم مكتبة S2 Geometry: إصلاح عدد الوسائط المطلوبة للدالتين
s2RectAddوs2RectContains. #28663 (Bharat Nallan). - إصلاح تحويل غير صالح لنوع الثابت عند استخدام مفتاح أساسي من نوع Nullable أو LowCardinality. #28636 (Amos Bird).
- إصلاح “Column is not under aggregate function and not in GROUP BY” مع PREWHERE (إصلاح: #28461). #28502 (Azat Khuzhin).
إصدار ClickHouse v21.10، 2021-10-16. عرض تقديمي، فيديو
تغيير غير متوافق مع الإصدارات السابقة
- لم تعد إعدادات MergeTree التالية على مستوى الجدول:
replicated_max_parallel_sendsوreplicated_max_parallel_sends_for_tableوreplicated_max_parallel_fetchesوreplicated_max_parallel_fetches_for_tableتؤدي أي وظيفة الآن. فهي لم تعمل جيدًا مطلقًا، واستُبدلت بـmax_replicated_fetches_network_bandwidthوmax_replicated_sends_network_bandwidthوbackground_fetches_pool_size. #28404 (alesapin).
ميزة جديدة
- إضافة ميزة لإنشاء وظائف معرّفة من قبل المستخدم (UDF) كتعبيرات لامبدا. الصياغة:
CREATE FUNCTION {function_name} as ({parameters}) -> {function core}. مثال:CREATE FUNCTION plus_one as (a) -> a + 1. المؤلفون @Realist007. #27796 (Maksim Kita) #23978 (Realist007). - تمت إضافة محرك التخزين
Executableودالة الجدولexecutable. يتيح ذلك معالجة البيانات باستخدام سكربتات خارجية بأسلوب متدفق. #28102 (Maksim Kita) (ruct). - تمت إضافة محرك التخزين
ExecutablePool. وهو مشابه لـExecutable، لكنه يستخدم مجموعة من العمليات طويلة التشغيل. #28518 (Maksim Kita). - إضافة استعلام
ALTER TABLE ... MATERIALIZE COLUMN. #27038 (Vladimir Chebotarev). - دعم الكتابة المقسّمة إلى أقسام في دالة الجدول
s3. #23051 (Vladimir Chebotarev). - دعم تنسيق الضغط
lz4(بالإضافة إلىgzوbz2وxzوzstd) لاستيراد البيانات وتصديرها. #25310 (Bharat Nallan). - السماح بالوسيطات الموضعية ضمن الإعداد
enable_positional_arguments. يُغلق هذا #2592. #27530 (Kseniia Sumarokova). - قبول إعدادات المستخدم المرتبطة بتنسيقات الملفات في عبارة
SETTINGSضمن استعلامCREATEلجداول s3. يُغلق هذا #27580. #28037 (Nikita Mikhaylov). - السماح باتصال SSL لمحرك
RabbitMQ. #28365 (Kseniia Sumarokova). - إضافة الدالة
getServerPortلإتاحة الحصول على منفذ الخادم. وعندما لا يكون المنفذ مستخدمًا من قِبل الخادم، يتم رفع استثناء. #27900 (Amos Bird). - إضافة دوال تحويل بين “Snowflake ID” و
DateTimeوDateTime64. راجع #27058. #27704 (jasine). - إضافة الدالة
SHA512. #27830 (zhanglistar). - إضافة الإعداد
log_queries_probabilityالذي يتيح للمستخدم الكتابة إلىquery_logلعينة فقط من الاستعلامات. يُغلق هذا #16609. #27527 (Nikolay Degterinsky).
ميزة تجريبية
- نوع الأقراص
webلتخزين الجداول للقراءة فقط على خادم ويب على هيئة ملفات ثابتة. انظر #23982. #25251 (Kseniia Sumarokova). يلزم هذا بشكل أساسي لتسهيل اختبار التشغيل على التخزين المشترك، وكذلك للاستيراد السهل لمجموعات البيانات. لا يُنصح باستخدامه قبل الإصدار 21.11. - أُضيفت الأوامر الجديدة
BACKUPوRESTORE. #21945 (Vitaly Baranov). لا تزال هذه الميزة قيد التطوير وليست مخصّصة للاستخدام في الإصدار الحالي.
تحسين الأداء
- تسريع دوال التجميع
sumIfوcountIf. #28272 (Raúl Marín). - إنشاء إسقاط افتراضي لفهارس
minmax. والآن، عند تمكينallow_experimental_projection_optimization، ستستخدم الاستعلامات فهرس minmax بدلًا من قراءة البيانات متى أمكن ذلك. #26286 (Amos Bird). - إضافة عمليتي تحقّق في
sequenceMatchوsequenceCountتتيحان الخروج المبكر عندما يكون جزء حتمي من نمط التسلسل مفقودًا من قائمة الأحداث. يتيح هذا التغيير تنفيذ العديد من الاستعلامات التي كانت تفشل سابقًا بسبب بلوغ حد العمليات، كما يسرّع خط المعالجة عمومًا. #27729 (Jakub Kuklis). - تحسين تحليل المفتاح الأساسي بمعلومات الرتابة الدائمة للدوال الثنائية، ولا سيما القسمة على ثابت غير صفري. #28302 (Amos Bird).
- جعل شرط التصفية في
hasAllيستفيد من فهارس bloom filter لتخطي البيانات. #27984 (Braulio Valdivielso Martínez). - تسريع تحميل أجزاء البيانات من خلال تأخير عملية بدء تشغيل الجدول. #28313 (Amos Bird).
- إصلاح احتمال نقل عدد مفرط من الشروط من
WHEREإلىPREWHERE(تحسين يتحكم فيه الإعدادoptimize_move_to_prewhere). #28139 (lthaooo). - تمكين
optimize_distributed_group_by_sharding_keyافتراضيًا. #28105 (Azat Khuzhin).
تحسينات
- التحقّق من اسم العنقود قبل إنشاء جدول
Distributed، وعدم السماح بإنشاء جدول باسم عنقود غير صحيح. يُصلح #27832. #27927 (tavplubix). - إضافة الدالة التجميعية
quantileBFloat16Weightedعلى غرار دوال quantile…Weighted الأخرى. هذا يُغلق #27745. #27758 (Ivan Novitskiy). - السماح بإنشاء القواميس مع قائمة attributes فارغة. #27905 (Maksim Kita).
- إضافة توثيق تفاعلي في
clickhouse-clientيوضّح كيفية إعادة تعيين كلمة المرور. وهذا مفيد في الحالات التي يثبّت فيها المستخدم ClickHouse ويضبط كلمة المرور ثم ينساها فورًا. انظر #27750. #27903 (alexey-milovidov). - دعم الحالة التي تكون فيها البيانات محاطة بمصفوفة في input format
JSONAsString. يُغلق #25517. #25633 (Kruglov Pavel). - إضافة column جديدة باسم
last_queue_update_exceptionإلى جدولsystem.replicas. #26843 (nvartolomei). - دعم إعادة الاتصال عند حدوث failover لجداول
MaterializedPostgreSQL. يُغلق #28529. #28614 (Kseniia Sumarokova). - إنشاء UUID فريد للخادم عند أول تشغيل له. #20089 (Bharat Nallan).
- تقديم الإعداد
connection_wait_timeout(القيمة الافتراضية 5 ثوانٍ، و0 يعني عدم الانتظار) لمحركMySQL. #28474 (Azat Khuzhin). - عدم السماح بإنشاء
MaterializedPostgreSQLباستخدام arguments غير صالحة. يُغلق #28423. #28430 (Kseniia Sumarokova). - استخدام ملف tmp فعلي بدلًا من “rows_sources” المحدد مسبقًا في عمليات vertical merges. وهذا يمنع إنشاء أدلة غير ضرورية في أقراص tmp. #28299 (Amos Bird).
- إضافة
libhdfs3_confإلى config الخادم بدلًا من تصدير متغير البيئةLIBHDFS3_CONFفي clickhouse-server.service. وهذا مخصّص لتهيئة التفاعل مع HDFS. #28268 (Zhichang Yu). - إصلاح إزالة parts في حالة Temporary، وهو ما قد يؤدي إلى استثناء غير متوقع (
Part %name% doesn't exist). يُصلح #23661. #28221 #28221) (Azat Khuzhin). - إصلاح
zookeeper_log.address(قبل أول patch في طلب السحب هذا كان العنوان دائمًا::) وتقليل عدد مرات استدعاءgetpeername(2)لهذا العمود (إذ كانgetpeername()يُستدعى في كل مرة يُضاف فيها سجل إلىzookeeper_log، لذلك أصبح هذا العنوان يُخزَّن مؤقتًا في عميل zookeeper لتجنّب ذلك). #28212 (Azat Khuzhin). - دعم التحويلات الضمنية بين الفهرس في العامل
[]والمفتاح من النوعMap(مثل أنواعIntالمختلفة، وStringوFixedString). #28096 (Anton Popov). - دعم العبارة
ON CONFLICTعند الإدراج في PostgreSQL table engine أو table function. يُغلق #27727. #28081 (Kseniia Sumarokova). - تخفيف القيود على نوع البيانات
Enumللسماح بإلحاق بيانات متوافقة. يُغلق #26672. #28028 (Dmitry Novik). - إضافة الإعداد
empty_result_for_aggregation_by_constant_keys_on_empty_setللتحكم في سلوك التجميع حسب مفاتيح ثابتة على مجموعة فارغة. وذلك لاستعادة السلوك القديم في #6842. #27932 (Amos Bird). - تمت إضافة الإعداد
replication_wait_for_inactive_replica_timeout. ويتيح هذا الإعداد تحديد مدة انتظار النُسخ المتماثلة غير النشطة لتنفيذ استعلامALTER/OPTIMZE/TRUNCATE(القيمة الافتراضية هي 120 ثانية). إذا كانتreplication_alter_partitions_syncتساوي 2 وكانت بعض النُسخ المتماثلة غير نشطة لأكثر منreplication_wait_for_inactive_replica_timeoutثانية، فسيتم إطلاقUNFINISHED. #27931 (tavplubix). - دعم وسيطة lambda لمحوّل الأعمدة
APPLY، ما يتيح تطبيق دوال لها أكثر من وسيطة واحدة. هذا متعلق بـ #27877. #27901 (Amos Bird). - تفعيل
tcp_keep_alive_timeoutافتراضيًا. #27882 (Azat Khuzhin). - تحسين إلغاء الاستعلامات البعيدة (في حال توقّف الخادم البعيد بشكل غير طبيعي). #27881 (Azat Khuzhin).
- استخدام الرفع عبر النسخ متعدد الأجزاء لكائنات S3 الكبيرة. #27858 (ianton-ru).
- السماح باجتياز الروابط الرمزية في مسار قاموس المكتبة. #27815 (Kseniia Sumarokova).
- الآن لا يتطلب
ALTER MODIFY COLUMTإلىNullable(T)أي mutation. #27787 (victorgao). - عدم تجاهل الأخطاء بصمت، وعدم احتساب التأخيرات في
ReadBufferFromS3. #27484 (Vladimir Chebotarev). - تحسين
ALTER ... MATERIALIZE TTLعبر إعادة حساب metadata فقط، من دون تنفيذ إجراء TTL فعلي. #27019 (lthaooo). - السماح بقراءة قائمة نطاقات المستوى الأعلى المخصّصة من دون سطر جديد عند نهاية الملف. #28213 (Azat Khuzhin).
إصلاحات الأخطاء
- إصلاح الحالات التي تفشل فيها قراءة البيانات المضغوطة من
carbon-clickhouseمع ظهور الخطأ ‘attempt to read after end of file’. يغلق #26149. #28150 (FArthur-cmd). - إصلاح التحقق من امتيازات الوصول عند تنفيذ عبارة
GRANT WITH REPLACEمع البندON CLUSTER. يحسّن طلب السحب هذا الإصلاح الوارد في #27001. #27983 (Vitaly Baranov). - السماح بالتحديد مع
extremes = 1من عمود من النوعLowCardinality(UUID). #27918 (Vitaly Baranov). - إصلاح CAST بأسلوب PostgreSQL (المعامل
::) مع الأرقام السالبة. #27876 (Anton Popov). - بعد #26864. إصلاح إيقاف
NamedSessionStorage: أصبحت سياقات الجلسات المخزنة فيNamedSessionStorageتُدمَّر الآن قبل تدمير الـ Context العام. #27875 (Vitaly Baranov). - إصلاح خلل في الوضع “strict” في
windowFunnel. يُصلح هذا #27469. #27563 (achimbab). - إصلاح حلقة لا نهائية أثناء قراءة أرشيف
bzip2مبتور. #28543 (Azat Khuzhin). - إصلاح تداخل UUID في
DROP TABLEالخاص بـ DDL الداخلي منMaterializedMySQL. MaterializedMySQL ميزة تجريبية. #28533 (Azat Khuzhin). - إصلاح الخطأ
There is no subcolumnعند التحديد من جداول تحتوي على أعمدة من النوعNestedوأعمدة scalar تتضمن أسماؤها نقطة ولها البادئة نفسها مثلNested(على سبيل المثالn.id UInt32, n.arr1 Array(UInt64), n.arr2 Array(UInt64)). #28531 (Anton Popov). - إصلاح خلل قد يؤدي إلى الخطأ
Existing table metadata in ZooKeeper differs in sorting key expression.بعد تنفيذ ALTER علىReplicatedVersionedCollapsingMergeTree. يُصلح #28515. #28528 (alesapin). - إصلاح احتمال تسرّب watches في ZooKeeper (مشكلة طفيفة) أثناء المعالجة الخلفية لـ distributed DDL queue. يغلق #26036. #28446 (tavplubix).
- إصلاح غياب وضع علامات الاقتباس حول أسماء الجداول في engine
MaterializedPostgreSQL. يغلق #28316. #28433 (Kseniia Sumarokova). - إصلاح السلوك غير الصحيح للصفوف غير المنضمّة من عمود من النوع Nullable. يغلق #27691. #28349 (vdimir).
- إصلاح تحسين فهرس NOT-IN عندما لا تُستخدم كل أعمدة المفتاح. يُصلح هذا #28120. #28315 (Amos Bird).
- إصلاح الأجزاء المتقاطعة الناتجة عن استبدال الجزء الجديد بجزء فارغ. #28310 (Azat Khuzhin).
- إصلاح النتائج غير المتسقة في الاستعلامات التي تستخدم
ORDER BYوجداولMergeمع تمكين الإعدادoptimize_read_in_order. #28266 (Anton Popov). - إصلاح احتمال قراءة ذاكرة غير مهيأة في الاستعلامات ذات النوع
Nullable(LowCardinality)عند ضبط الإعدادextremesعلى 1. يُصلح هذا #28165. #28205 (Nikolai Kochetov). - عدة إصلاحات صغيرة للإسقاطات. راجع الوصف التفصيلي في طلب السحب. #28178 (Amos Bird).
- إصلاح أعطال
segfaultنادرة للغاية عند الإيقاف بسبب ترتيب غير صحيح لإيقاف مُعيد تحميل السياق/التهيئة. #28088 (nvartolomei). - إصلاح التعامل مع القيمة NULL من النوع
Nullable(String)في الدالةJSONExtract. يُصلح هذا #27929 و#27930. أُدخل هذا التغيير في https://github.com/ClickHouse/ClickHouse/pull/25452 . #27939 (Amos Bird). - عدة إصلاحات للأداة الجديدة
clickhouse-keeper. إصلاح خطأ نادر فيclickhouse-keeperقد يتلقى فيه العميل استجابة watch قبل اكتمال request-response. #28197 (alesapin). إصلاح سلوك غير صحيح فيclickhouse-keeperعند تشغيل list watches (getChildren) بواسطة طلباتsetللعناصر الفرعية. #28190 (alesapin). إصلاح حالة نادرة قد تؤدي فيها تغييرات إعداداتclickhouse-keeperإلى فقدان السجلات وتعليق الخادم. #28360 (alesapin). إصلاح خطأ فيclickhouse-keeperقد يؤدي إلى سجلات لا نهائية عند تقليلrotate_logs_interval. #28152 (alesapin).
تحسين البناء/الاختبار/التحزيم
- تمكين Thread Fuzzer في اختبار الإجهاد. وThread Fuzzer هي ميزة في ClickHouse تتيح اختبار عدد أكبر من احتمالات جدولة الخيوط واكتشاف المزيد من المشكلات المحتملة. يؤدي هذا إلى إغلاق #9813. يؤدي هذا إلى إغلاق #9814. يؤدي هذا إلى إغلاق #9515. يؤدي هذا إلى إغلاق #9516. #27538 (alexey-milovidov).
- إضافة مستوى سجل جديد
testلبيئات الاختبار. وهو أكثر إسهابًا حتى منtraceالافتراضي. #28559 (alesapin). - طباعة معلومات حالة git في مرحلة تهيئة CMake. #28047 (Braulio Valdivielso Martínez).
- التبديل مؤقتًا في مستودع apt الخاص بـ Ubuntu إلى المرآة ru.archive.ubuntu.com لأن المستودع الافتراضي (archive.ubuntu.com) لا يستجيب من بيئة CI الخاصة بنا. #28016 (Ilya Yatsishin).
إصدار ClickHouse v21.9، بتاريخ 2021-09-09
تغيير غير متوافق مع الإصدارات السابقة
- لم يعد يتم إخراج الأصفار اللاحقة في التمثيل النصي لأنواع
Decimal. مثال: ستُطبع1.23بدلًا من1.230000لقيمة decimal ذات scale مقداره 6. يُغلق هذا #15794. وقد يؤدي ذلك إلى قدر طفيف من عدم التوافق إذا كانت تطبيقاتك تعتمد بشكل ما على الأصفار اللاحقة. يمكن التحكم في التسلسل في تنسيقات الإخراج عبر الإعدادoutput_format_decimal_trailing_zeros. كما تغير تنفيذtoStringوالتحويل إلى String بشكل غير مشروط. #27680 (alexey-milovidov). - لم يعد مسموحًا بتطبيق دالة تجميع وسيطية مع المُركِّب
-Mergeعلى حالة دالة تجميع إذا كانت هذه الحالة قد أُنتجت بواسطة دالة تجميع ذات معاملات مختلفة. على سبيل المثال، لا يمكن إنهاء حالةfooState(42)(x)باستخدامfooMerge(s)أوfooMerge(123)(s)؛ بل يجب تحديد المعاملات صراحةً مثلfooMerge(42)(s)، ويجب أن تكون متطابقة. لا يؤثر هذا في بعض دوال التجميع الخاصة مثلquantileوsequence*التي تستخدم المعاملات لأغراض الإنهاء فقط. #26847 (tavplubix). - في clickhouse-local، تُعامل العناوين المحلية التي تتضمن منفذًا دائمًا على أنها عناوين بعيدة. #26736 (Raúl Marín).
- إصلاح مشكلة كان قد يحدث فيها CAST غير صحيح في بعض الاستعلامات المعقدة التي تحتوي على aliases للأعمدة مطابقة لأسماء expressions. يُصلح هذا #25447. ويُصلح أيضًا #26914. وقد يؤدي هذا الإصلاح إلى عدم توافق مع الإصدارات السابقة: إذا وُجدت expressions مختلفة تحمل الأسماء نفسها، فسيتم طرح exception. وقد يؤدي ذلك إلى تعطيل بعض الحالات النادرة عند ضبط
enable_optimize_predicate_expression. #26639 (alexey-milovidov). - الآن، يعيد scalar subquery دائمًا نتيجة
Nullableإذا كان نوعه يمكن أن يكونNullable. وهذا مطلوب لأن النتيجة في حالة subquery فارغ يجب أن تكونNull. في السابق، كان من الممكن ظهور خطأ بشأن أنواع غير متوافقة (إذ إن استنتاج النوع لا ينفذ scalar subquery، وقد يستخدم نوعًا غير قابل لأن يكون null). أما scalar subquery ذو النتيجة الفارغة الذي لا يمكن تحويله إلىNullable(مثلArrayأوTuple) فيطرح الآن خطأ. يُصلح هذا #25411. #26423 (Nikolai Kochetov). - أُضيف بناء نحوي لمستندات here. مثال:
SELECT $doc$ VALUE $doc$. #26671 (Maksim Kita). يكون هذا التغيير غير متوافق مع الإصدارات السابقة إذا كانت هناك في الاستعلام معرّفات تحتوي على$#28768. - يمكن للفهارس الآن التعامل مع أنواع Nullable، بما في ذلك
isNullوisNotNull. #12433 و#12455 (Amos Bird) و#27250 (Azat Khuzhin). لكن هذا أُنجز مع تغييرات في تنسيق التخزين على القرص، ولذلك، رغم أن الخادم الجديد يستطيع قراءة البيانات القديمة، فإن الخادم القديم لا يستطيع ذلك. كذلك، إذا كانت لديك فهارسMINMAXلتخطي البيانات، فقد يظهر الخطأData after mutation/merge is not byte-identical، لأن الفهرس الجديد سيستخدم الامتداد.idx2بينما كان سابقًا.idx. لذلك، ينبغي ألا تؤخر تحديث جميع النسخ المتماثلة الحالية في هذه الحالة؛ وإلا، فإذا قامت نسخة متماثلة قديمة (<21.9) بتنزيل البيانات من نسخة متماثلة جديدة بإصدار 21.9+ فلن تتمكن من تطبيق الفهرس على الجزء الذي تم تنزيله.
ميزة جديدة
- تنفيذ التقييم القصير للدوال، ويغلق #12587. تمت إضافة الإعداد
short_circuit_function_evaluationلتهيئة التقييم القصير للدوال. #23367 (Kruglov Pavel). - إضافة دعم لعوامل INTERSECT و EXCEPT و ANY و ALL. #24757 (Kirill Ershov). (Kseniia Sumarokova).
- إضافة دعم للتشفير على مستوى نظام الملفات الافتراضي (تشفير البيانات أثناء التخزين) باستخدام خوارزمية AES-CTR. #24206 (Latysheva Alexandra). (Vitaly Baranov) #26733 #26377 #26465.
- أُضيفت دوال معالجة اللغة الطبيعية (NLP) للتجزئة، واستخراج الجذور، والاختزال إلى الصيغة الأساسية، والبحث في امتدادات المرادفات. #24997 (Nikolay Degterinsky).
- أُضيف تكامل مع مكتبة S2 Geometry. #24980 (Andr0901). (Nikita Mikhaylov).
- إضافة محرك جدول SQLite، ودالة جدول، ومحرك قاعدة بيانات. #24194 (Arslan Gumerov). (Kseniia Sumarokova).
- أُضيف دعم للاستعلامات المخصصة لمصدر القاموس
MySQLوPostgreSQLوClickHouseوJDBCوCassandra. يغلق #1270. #26995 (Maksim Kita). - إضافة تخزين مشترك (مُكرَّر) للمستخدمين، والأدوار، وسياسات الصفوف، والحصص، وملفات تعريف الإعدادات عبر ZooKeeper. #27426 (Kevin Michel).
- إضافة ضغط لـ
INTO OUTFILEيختار خوارزمية الضغط تلقائيًا. يغلق #3473. #27134 (Filatenkov Artur). - إضافة
INSERT ... FROM INFILEعلى نحو مماثل لـSELECT ... INTO OUTFILE. #27655 (Filatenkov Artur). - أُضيف القاموس
complex_key_range_hashed. يغلق #22029. #27629 (Maksim Kita). - دعم التعبيرات في قسم JOIN ON. يغلق #21868. #24420 (Vladimir C).
- عندما يتصل العميل بالخادم، فإنه يتلقى معلومات عن جميع التحذيرات التي سبق أن جمعها الخادم. (يمكن تعطيل ذلك باستخدام الخيار
--no-warnings). أُضيف جدولsystem.warningsلتجميع التحذيرات المتعلقة بتهيئة الخادم. #26246 (Filatenkov Artur). #26282 (Filatenkov Artur). - السماح باستخدام التعبيرات الثابتة من
WITHوSELECTفي معاملات aggregate function. يُغلق #10945. #27531 (abel-cheng). - إضافة الدالة
tupleToNameValuePairs، التي تحوّل named tuple إلى array من الأزواج. #27505 (Braulio Valdivielso Martínez). - إضافة دعم Compression method
bzip2لعمليات الاستيراد والتصدير. يُغلق #22428. #27377 (Nikolay Degterinsky). - تمت إضافة الدالة
bitmapSubsetOffsetLimit(bitmap, offset, cardinality_limit). تُنشئ subset من bitmap مع تقييد النتائج إلىcardinality_limitوإزاحة قدرهاoffset. #27234 (DHBin). - إضافة column
default_databaseإلىsystem.users. #27054 (kevin wan). - دعم وحدات الماكرو
clusterداخل table functions ‘cluster’ و’clusterAllReplicas’. #26913 (polyprogrammist). - إضافة functions جديدة:
currentRoles(),enabledRoles(),defaultRoles(). #26780 (Vitaly Baranov). - functions جديدة:
currentProfiles(),enabledProfiles(),defaultProfiles(). #26714 (Vitaly Baranov). - إضافة functions تُرجع
query_idوinitial_query_idالخاصَّين بالـ query الحالية. هذا يُغلق #23682. #26410 (Alexey Boykov). - إضافة ميزة
REPLACE GRANT. #26384 (Caspian). - أصبح query
EXPLAINيوفّر الآن وضعEXPLAIN ESTIMATE ...الذي يعرض معلومات عن الصفوف المقروءة، وmarks، وparts من MergeTree tables. يُغلق #23941. #26131 (fastio). - تمت إضافة table
system.zookeeper_log. تُسجَّل جميع actions الخاصة بـ ZooKeeper client في هذه table. تنفيذًا لـ #25449. #26129 (tavplubix). - zero-copy replication لـ
ReplicatedMergeTreeفوق storage HDFS. #25918 (Zhichang Yu). - السماح بإدراج Nested type على هيئة array من structs في input format
ArrowوORCوParquet. #25902 (Kruglov Pavel). - إضافة datatype جديد
Date32(يُخزّن data بصيغة Int32)، مع دعم date range كما فيDateTime64، ودعم تحميل parquet date32 إلىDate32في ClickHouse، وإضافة function جديدةtoDate32مثلtoDate. #25774 (LiuNeng). - السماح بتعيين قاعدة البيانات الافتراضية لك. #25268. #25687 (kevin wan).
- إضافة parameter اختياري إلى engine
MongoDBلقبول خيارات connection string ودعم اتصال SSL. إغلاق #21189. إغلاق #21041. #22045 (Omar Bazaraa).
الميزة التجريبية
- أُضيف codec ضغط باسم
AES_128_GCM_SIVيقوم بتشفير الأعمدة بدلًا من ضغطها. #19896 (PHO). ستُعاد كتابته، لذا لا تستخدمه. - أُعيدت تسمية
MaterializeMySQLإلىMaterializedMySQL. #26822 (tavplubix).
تحسين الأداء
- تحسين أداء الاستعلامات السريعة عندما يكون
max_execution_time = 0عبر تقليل عدد استدعاءات النظامclock_gettime. #27325 (filimonov). - تخصيص المقارنات المتعلقة بالتاريخ والوقت لتحقيق أداء أفضل. يُصلح هذا #27083. #27122 (Amos Bird).
- مشاركة واصفات الملفات في القراءات المتزامنة للملفات نفسها. لا يوجد فرق ملحوظ في الأداء على Linux، لكن عدد الملفات المفتوحة سيكون أقل بكثير (من 10 إلى 100 مرة) على الخوادم المعتادة، مما يجعل العمليات أسهل. انظر #26214. #26768 (alexey-milovidov).
- تحسين زمن الاستجابة للاستعلامات القصيرة التي تتطلب القراءة من جداول تحتوي على عدد كبير من الأعمدة. #26371 (Anton Popov).
- عدم إنشاء sets للفهارس عند تحليل الاستعلام. #26365 (Raúl Marín).
- تنفيذ
SUMبشكل متجهي لأنواع الأعداد الصحيحة Nullable ذات التمثيل native (David Manzanares, Raúl Marín). #26248 (Raúl Marín). - تجميع expressions التي تتضمن أعمدة من أنواع
Enum. #26237 (Maksim Kita). - تجميع الدوال التجميعية
groupBitOrوgroupBitAndوgroupBitXor. #26161 (Maksim Kita). - تحسين استخدام الذاكرة عبر توقّع أفضل لحجم block عند قراءة أعمدة DEFAULT الفارغة. يُغلق هذا #17317. #25917 (Vladimir Chebotarev).
- تقليل استخدام الذاكرة وعدد الصفوف المقروءة في الاستعلامات التي تتضمن
ORDER BY primary_key. #25721 (Anton Popov). - تفعيل
distributed_push_down_limitافتراضيًا. #27104 (Azat Khuzhin). - جعل
toTimeZoneرتيبة عندما تكونtimeZoneقيمة ثابتة، لدعم pruning للتقسيمات عند استخدام SQL مثل:. #26261 (huangzhaowei).
تحسينات
- اعتبار دوال النافذة جاهزة للاستخدام العام. إزالة الإعداد
allow_experimental_window_functions. #27184 (Alexander Kuzmenkov). - تحسين التوافق مع إزاحات المنطقة الزمنية التي لا تمثل عددًا صحيحًا من الدقائق. #27080 (Raúl Marín).
- إذا كان واصف الملف في جدول
Fileملفًا عاديًا، فسيُسمح بقراءته عدة مرات. يتيح ذلك لـclickhouse-localالقراءة عدة مرات من stdin (مع استعلامات SELECT متعددة أو استعلامات فرعية متعددة) إذا كان stdin ملفًا عاديًا، مثلclickhouse-local --query "SELECT * FROM table UNION ALL SELECT * FROM table" ... < file. يغلق هذا #11124. بمشاركة في التأليف مع (alexey-milovidov). #25960 (BoloniniD). - إزالة التكرار في تحليل الفهرس وتجنب عمليات التحقق غير الصالحة المحتملة لـ limit أثناء تحليل projection. #27742 (Amos Bird).
- تمكين تمرير معلمات الاستعلام في متن طلبات HTTP. #27706 (Hermano Lustosa).
- منع استخدام
arrayJoinعلى تعبيرات partition. #27648 (Raúl Marín). - تسجيل عنوان IP الخاص بالعميل إذا فشلت المصادقة. #27514 (Misko Lee).
- استخدام bytes بدلًا من strings للبيانات الثنائية في بروتوكول gRPC. #27431 (Vitaly Baranov).
- إرسال استجابة تتضمن رسالة خطأ إذا لم يتم تعيين منفذ HTTP وحاول المستخدم إرسال طلب HTTP إلى منفذ TCP. #27385 (Braulio Valdivielso Martínez).
- إضافة الدالة
_CASTللاستخدام الداخلي، وهي لا تحافظ على قابلية النوع لأن يكون NULL، بينما يحافظ cast غير الداخلي عليها وفقًا للإعدادcast_keep_nullable. يغلق هذا #12636. #27382 (Kseniia Sumarokova). - إضافة الإعداد
log_formatted_queriesلتسجيل استعلام منسق إضافي فيsystem.query_log. وهذا مفيد لتحليل الاستعلامات المُطبَّعة لأن دوالًا مثلnormalizeQueryوnormalizeQueryKeepNamesلا تقوم بتحليل الاستعلامات أو تنسيقها من أجل تحقيق أداء أفضل. #27380 (Amos Bird). - إضافة الإعدادين
max_hyperscan_regexp_lengthوmax_hyperscan_regexp_total_lengthلمنع استخدام تعبيرات نمطية ضخمة في الدوال المرتبطة بـ hyperscan، مثلmultiMatchAny. #27378 (Amos Bird). - أصبحت الذاكرة التي تستهلكها دوال التجميع الخاصة بـ bitmap تُحتسب الآن ضمن حدود الذاكرة. يغلق هذا #26555. #27252 (alexey-milovidov).
- إضافة cache لمدة 10 seconds إلى S3 proxy resolver. #27216 (ianton-ru).
- تقسيم mutex العام إلى عمليات إنشاء regexp منفصلة. يساعد ذلك على تجنب أن يؤدي إنشاء regexp ضخم إلى حظر الخيوط الأخرى ذات الصلة. #27211 (Amos Bird).
- دعم المخطط لمحرك قاعدة بيانات PostgreSQL. يُغلق #27166. #27198 (Kseniia Sumarokova).
- تتبّع استخدام الذاكرة في clickhouse-client. #27191 (Filatenkov Artur).
- تسجيل
query_kindفيsystem.query_logحتى عند تعذّر بدء الاستعلام. #27182 (Amos Bird). - أُضيف العمود
replica_is_activeالذي يربط اسم النسخة المتماثلة بحالة نشاطها إلى الجدولsystem.replicas. يُغلق #27138. #27180 (Maksim Kita). - السماح بتمرير إعدادات الاستعلام عبر URI الخادم في واجهة الويب. #27177 (kolsys).
- إضافة مقياس جديد باسم
MaxPushedDDLEntryID، وهو يمثّل أكبر معرّف لإدخال DDL تدفعه العقدة الحالية إلى ZooKeeper. #27174 (Fuwang Hu). - تحسين التحقق من شرط الوجود ومن العقدة ذات السلسلة الفارغة عند إنشاء
clickhouse-keeperلعقدة znode. #27125 (小路). - يتعامل Merge JOIN بشكل صحيح مع المجموعة الفارغة في الطرف الأيمن. #27078 (Vladimir C).
- يمكن الآن أن تكون الدوال ثوابت على مستوى shard، ما يعني أنه إذا نُفِّذت في سياق جدول موزّع، فإنها تُنتج عمودًا عاديًا، وإلا فإنها تُنتج قيمة ثابتة. ومن أبرز هذه الدوال:
hostName(),tcpPort(),version(),buildId(),uptime(), إلخ. #27020 (Amos Bird). - تحديث
extractAllGroupsHorizontal- يمكن تعيين الحد الأقصى لعدد المطابقات لكل صف عبر الوسيط الثالث الاختياري. #26961 (Vasily Nemkov). - إتاحة إحصاءات
RocksDBعبر الجدول system.rocksdb. وقراءة خيارات rocksdb من إعدادات ClickHouse (مفاتيحrocksdb...). ملاحظة: لا يعتمد ClickHouse على RocksDB، وإنما هو مجرد أحد محركات تخزين التكامل الإضافية. #26821 (Azat Khuzhin). - أصبحت سجلات RocksDB الداخلية أقل إسهابًا. ملاحظة: لا يعتمد ClickHouse على RocksDB، وإنما هو مجرد أحد محركات تخزين التكامل الإضافية. هذا يُغلق #26252. #26789 (alexey-milovidov).
- يؤثر تغيير الأدوار الافتراضية على الجلسات الجديدة فقط. #26759 (Vitaly Baranov).
- تكون Watchdog معطّلة في docker افتراضيًا. إصلاح لمشكلة عدم التعامل مع ctrl+c. #26757 (Mikhail f. Shiryaev).
- يطبّق
SET PROFILEالآن القيود أيضًا إذا كانت معيّنة للملف التعريفي المُمرَّر. #26730 (Vitaly Baranov). - تحسين التعامل مع طلبات
KILL QUERY. #26675 (Raúl Marín). - تدعم الدالة
mapPopulatesSeriesالنوعMap. #26663 (Ildus Kurbangaliev). - إصلاح محاولات الاتصال الزائدة (x2) مع
skip_unavailable_shards. #26658 (Azat Khuzhin). - تجنّب تعليق
clickhouse-benchmarkإذا فشل الاتصال (أي عند حدوث EMFILE). #26656 (Azat Khuzhin). - السماح لمحرك Kafka باستخدام المزيد من الخيوط. #26642 (feihengye).
- إضافة دعم round-robin إلى
clickhouse-benchmark(وهو لا يختلف عن التشغيل العادي متعدد المضيفين/المنافذ إلا في تقرير الإحصاءات). #26607 (Azat Khuzhin). - تمكين إنشاء القواميس التنفيذية (
executable,executable_pool) باستخدام استعلام DDL عبرclickhouse-local. يغلق هذا #22355. #26510 (Maksim Kita). - تعيين نوع Query الخاص بالعميل لمعالجات بروتوكول التوافق لـ
mysqlوpostgresql. #26498 (anneji-dev). - تطبيق
LIMITعلى الشظايا في استعلامات مثلSELECT * FROM dist ORDER BY key LIMIT 10معdistributed_push_down_limit=1. وتجنّب تنفيذ خطواتDistinct/LIMIT BYفي استعلامات مثلSELECT DISTINCT shading_key FROM dist ORDER BY key. وأصبحdistributed_push_down_limitالآن مُطبَّقًا بشكل صحيح في تحسينoptimize_distributed_group_by_sharding_key. #26466 (Azat Khuzhin). - تم تحديث Protobuf إلى 3.17.3. سجلات التغييرات متاحة على https://github.com/protocolbuffers/protobuf/releases. #26424 (Ilya Yatsishin).
- تمكين الإعداد
use_hedged_requestsالذي يساعد على الحد من زمن الاستجابة في الطرف المتأخر على المجموعات الكبيرة. #26380 (alexey-milovidov). - تحسين السلوك عند وجود مضيف غير موجود في قائمة المضيفين المسموح بهم للمستخدم. #26368 (ianton-ru).
- إضافة إمكانية تعيين إعدادات مراقبة الدليل لمحرك
Distributedعبر CREATE TABLE (أيCREATE TABLE dist (key Int) Engine=Distributed(cluster, db, table) SETTINGS monitor_batch_inserts=1وما شابه ذلك). #26336 (Azat Khuzhin). - حفظ عنوان الخادم في عناوين URL الخاصة بالسجلّات في واجهة الويب إذا كان مختلفًا عن مصدر واجهة الويب. يغلق هذا #26044. #26322 (alexey-milovidov).
- إضافة أحداث إلى profile لاستدعاءات
sleep/sleepEachRow. #26320 (Raúl Marín). - السماح بإعادة استخدام اتصالات الشظايا بين المجموعات المختلفة. كما يجنّب ذلك إنشاء اتصالات جديدة عند استخدام table function
cluster. #26318 (Amos Bird). - التحكّم في الفترة الزمنية لتنفيذ تنظيف الدلائل المؤقتة القديمة عبر مُعامِل ذي قيمة افتراضية. #26212. #26313 (fastio).
- إضافة setting باسم
function_range_max_elements_in_blockلضبط حد الأمان لحجم البيانات الذي تولّده الدالةrange. يُغلق هذا #26303. #26305 (alexey-milovidov). - التحقّق من hash function عند إنشاء table، وليس عند sampling. وإضافة settings لـ MergeTree، بحيث إذا أنشأ أحدٌ table بعمود sampling غير صحيح ولكن لم يُستخدم sampling مطلقًا، يمكن تعطيل هذه settings لبدء server بدون Exception. #26256 (zhaoyu).
- تمت إضافة setting
output_format_avro_string_column_patternلوضع columns المحددة من نوع String في Avro كسلاسل نصية بدلًا من bytes الافتراضية. يطبّق هذا #22414. #26245 (Ilya Golshtein). - إضافة معلومات عن أحجام الأعمدة في table
system.columnsلجدوليLogوTinyLog. يُغلق هذا #9001. #26241 (Nikolay Degterinsky). - عدم إصدار Exception عند الاستعلام عن table
system.detached_partsإذا كان هناك disk configuration مخصص وكان directory detachedغير موجود على بعض disks. يُغلق هذا #26078. #26236 (alexey-milovidov). - التحقّق من الدوال غير deterministic في keys، بما في ذلك expressions الثابتة مثل
now()وtoday(). يُغلق هذا #25875. ويُغلق أيضًا #11333. #26235 (alexey-milovidov). - تحويل data types timestamp وtimestamptz إلى
DateTime64في PostgreSQL table engine. #26234 (jasine). - تطبيق index analysis أكثر صرامة لعبارة IN على projections بحيث يمكن اختيار projection أنسب. #26218 (Amos Bird).
- إزالة keyword GLOBAL من IN عند تمرير دالة scalar. في الإصدارات السابقة، إذا حدّد المستخدم
GLOBAL IN f(x)، كان يتم إصدار Exception. #26217 (Amos Bird). - إضافة معرّف error (مثل
BAD_ARGUMENTS) إلى رسائل Exception. يُغلق هذا #25862. #26172 (alexey-milovidov). - إصلاح المخرجات غير الصحيحة مع الخيار —progress في clickhouse-local. سيُمسح شريط Progress بمجرد وصوله إلى 100%، تمامًا كما يحدث في clickhouse-client. يُغلق #17484. #26128 (Kseniia Sumarokova).
- إضافة setting
merge_selecting_sleep_ms. #26120 (lthaooo). - أزل الاستخدام المعقّد لـ Linux AIO مع القراءة الاستباقية لكتلة واحدة، واستبدله بـ IO متزامن مباشر وبسيط باستخدام O_DIRECT. في الإصدارات السابقة، قد لا يعمل الإعداد
min_bytes_to_use_direct_ioبشكل صحيح إذا كانت قيمةmax_threadsأكبر من واحد. وستعمل القراءة باستخدام direct IO (وهو معطّل افتراضيًا للاستعلامات ومفعّل افتراضيًا لعمليات الدمج الكبيرة) بكفاءة أقل. يُغلق هذا #25997. #26003 (alexey-milovidov). - نفّذ flush لجدول
Distributedعند استعلامREPLACE TABLE. يحل #24566 - لا تستبدل الجدول (أو تنشئه) في استعلام[CREATE OR] REPLACE TABLE ... AS SELECTإذا فشل الإدراج في الجدول الجديد. يحل #23175. #25895 (tavplubix). - أضف العمود
viewsإلى system.query_log ليحتوي على أسماء الـ views (المادة أو الحية) التي ينفذها الاستعلام. ويضيف أيضًا جدول سجل جديدًا (system.query_views_log) يتضمن معلومات عن كل view نُفِّذ أثناء الاستعلام. كما يعدّل تنفيذ الـ view على النحو التالي: عند حدوث استثناء أثناء تنفيذ view، فإن أي view بدأ بالفعل سيستمر في العمل حتى يكتمل. كان هذا هو السلوك عند parallel_view_processing=true، والآن أصبح هذا هو السلوك دائمًا. - أصبحت الـ views التابعة الآن تُبلّغ عن تقدّم القراءة إلى السياق. #25714 (Raúl Marín). - نفّذ تصريف الاتصالات بشكل غير متزامن عند الانتهاء من تنفيذ distributed queries. أُضيف إعداد server جديد هو
max_threads_for_connection_collectorيحدّد عدد الـ workers لإعادة تدوير الاتصالات في الخلفية. وإذا كانت الـ pool ممتلئة، فسيُصرَّف الاتصال بشكل متزامن ولكن بطريقة مختلفة قليلًا عن السابق: إذ يُصرَّف بعد إرسال EOS إلى client، وينجح الاستعلام فور تلقّي قدر كافٍ من البيانات، ويُسجَّل أي استثناء بدلًا من تمريره إلى client. وأُضيف أيضًا الإعدادdrain_timeout(3 ثوانٍ افتراضيًا). وسيؤدي تصريف الاتصال إلى قطع الاتصال عند انتهاء المهلة. #25674 (Amos Bird). - دعم تعدد التضمينات في configuration. أصبح من الممكن تضمين إعدادات المستخدمين وإعدادات الخوادم البعيدة من مصادر متعددة. ما عليك سوى وضع العنصر
<include />مع الخاصيةfrom_zkأوfrom_envأوincl، وسيُستبدل بالقيمة الناتجة عن substitution. #24404 (nvartolomei). - أصلح إدراج عدة blocks في distributed table مع
insert_distributed_one_random_shard = 1. هذه ميزة هامشية. صُنّفت كتحسين. #23140 (Amos Bird). - دعم مفاتيح وقيم
LowCardinalityوFixedStringلنوعMap. #21543 (hexiaoting). - فعّل إعادة تحميل إعدادات القرص المحلي. #19526 (taiyang-li).
إصلاح خلل
- إصلاح خطأين قد يؤديان إلى تباعد النسخ المتماثلة. #27808 (tavplubix).
- إصلاح خطأ نادر في
DROP PARTقد يؤدي إلى ظهور الخطأUnexpected merged part intersects drop range. #27807 (alesapin). - منع الأعطال في بعض التنسيقات عند ورود رسالة NULL (tombstone) من Kafka. يُغلق #19255. #27794 (filimonov).
- إصلاح تصفية الأعمدة مع
union distinctفي استعلام فرعي. يُغلق #27578. #27689 (Kseniia Sumarokova). - إصلاح تحويل أنواع غير صحيح عند تطبيق دوال مثل
arrayHasعلى مصفوفات من LowCardinality من Nullable لأنواع غير رقمية مختلفة مثلDateTimeوDateTime64. في الإصدارات السابقة كان يحدث تحويل غير صحيح، أما في الإصدار الجديد فسيؤدي ذلك إلى استثناء. يُغلق هذا #26330. #27682 (alexey-milovidov). - إصلاح دالة الجدول الخاصة بـ PostgreSQL التي كانت تؤدي إلى اتصالات لا تُغلَق. يُغلق #26088. #27662 (Kseniia Sumarokova).
- إصلاح حالة أخرى من الخطأ
Unexpected merged part ... intersecting drop range .... #27656 (tavplubix). - إصلاح خطأ في عمود ذي اسم مستعار في جدول
Distributed. #27652 (Vladimir C). - بعد ضبط
max_memory_usage*على قيمة غير صفرية، لم يكن من الممكن إعادته إلى 0 (غير محدود). تم إصلاح ذلك. #27638 (tavplubix). - إصلاح حدوث underflow في قيمة الوقت عند إنشائها من المكوّنات. يُغلق #27193. #27605 (Vasily Nemkov).
- إصلاح تعطل أثناء materialization للـ projection عندما تحتوي بعض الأجزاء على أعمدة مفقودة. يُصلح هذا #27512. #27528 (Amos Bird).
- إصلاح المقياس
BackgroundMessageBrokerSchedulePoolTask، وربما كان الاسم مكتوبًا خطأً. #27452 (Ben). - إصلاح الاستعلامات الموزعة مع صفر shards وعمليات التجميع. #27427 (Azat Khuzhin).
- تحسين التوافق عندما لا يحتوي
/proc/meminfoعلى اللاحقة KB. #27361 (Mike Kot). - إصلاح نتيجة غير صحيحة لاستعلام يحتوي على أمان على مستوى الصفوف وPREWHERE ومرشح LowCardinality. يُصلح #27179. #27329 (Nikolai Kochetov).
- تم إصلاح التحقق غير الصحيح من معرّف partition في جداول MergeTree التي أُنشئت باستخدام الصياغة القديمة. #27328 (tavplubix).
- إصلاح protocol الخاص بـ MySQL عند استخدام formats المتوازية (CSV / TSV). #27326 (Raúl Marín).
- إصلاح الخطأ
Cannot find columnفي queries التي تستخدم sampling. وقد أُدخل هذا الخطأ في #24574. ويعالج #26522. #27301 (Nikolai Kochetov). - إصلاح أخطاء مثل
Expected ColumnLowCardinality, gotUInt8أوBad cast from type DB::ColumnVector<char8_t> to DB::ColumnLowCardinalityلبعض queries التي تتضمنLowCardinalityفيPREWHERE. والأهم من ذلك، إصلاح غياب المسافة في رسالة الخطأ. ويعالج #23515. #27298 (Nikolai Kochetov). - إصلاح
distributed_group_by_no_merge = 2معdistributed_push_down_limit = 1أوoptimize_distributed_group_by_sharding_key = 1معLIMIT BYوLIMIT OFFSET. #27249 (Azat Khuzhin). هذا مزيج نادر من الإعدادات لا يكاد أحد يستخدمه. - إصلاح mutation العالقة على partitions غير الصالحة في MergeTree غير المكررة. #27248 (Azat Khuzhin).
- في حال الالتباس، تفضّل lambda functions وسيطاتها على aliases أو المعرّفات الأخرى. #27235 (Raúl Marín).
- إصلاح بنية الأعمدة في merge join، وإغلاق #27091. #27217 (Vladimir C).
- في حالات نادرة، قد يحتوي جدول
system.detached_partsعلى معلومات غير صحيحة لبعض parts، وقد تم إصلاح ذلك. ويعالج #27114. #27183 (tavplubix). - إصلاح memory غير المهيأة في الدوال
multiSearch*عند وجود Array فارغة، وإغلاق #27169. #27181 (Vladimir C). - إصلاح التزامن في GRPCServer. يعالج طلب السحب هذا #27024. #27064 (Vitaly Baranov).
- تم إصلاح parsing الخاص بإعدادات
cacheوcomplex_key_cacheوssd_cacheوcomplex_key_ssd_cache. لم تكن الخياراتallow_read_expired_keysوmax_update_queue_sizeوupdate_queue_push_timeout_millisecondsوquery_wait_timeout_millisecondsتُحلَّل للقواميس التي لا يكون نوعهاcache. #27032 (Maksim Kita). - إصلاح احتمال تعطل stack الخاص بـ mutation بسبب تسابق مع DROP_RANGE. #27002 (Azat Khuzhin).
- أصبح الآن يتم التحقق من صحة معرّف القسم في استعلامات مثل
ALTER TABLE ... PARTITION ID xxx. يُصلح #25718. #26963 (alesapin). - إصلاح الخطأ “اسم العمود غير معروف” عند وجود عدة عمليات JOIN في بعض الحالات، وإغلاق #26899. #26957 (Vladimir C).
- إصلاح قراءة نطاقات TLD المخصصة (كانت المعالجة تتوقف عند استخدام buffer أصغر أو file أكبر). #26948 (Azat Khuzhin).
- إصلاح الخطأ
Missing columns: 'xxx'عندما يشير عمودDEFAULTإلى عمود آخر غير materialized ولا يحتوي على تعبيرDEFAULT. يُصلح #26591. #26900 (alesapin). - إصلاح تحميل مفاتيح Dictionary في
library-bridgeلمصدر Dictionary من نوعlibrary. #26834 (Kseniia Sumarokova). - قد تُفقد Parameters الخاصة بـ aggregate function عند تطبيق بعض combinators، مما يؤدي إلى ظهور استثناءات مثل
Conversion from AggregateFunction(topKArray, Array(String)) to AggregateFunction(topKArray(10), Array(String)) is not supported. تم إصلاح ذلك. يُصلح #26196 و#26433. #26814 (tavplubix). - إضافة القيمة
event_time_microsecondsإلىREMOVE_PARTفيsystem.part_log. في الإصدارات السابقة، لم تكن هذه القيمة تُضبط. #26720 (Azat Khuzhin). - عدم إزالة البيانات عند إيقاف جدول ReplicatedMergeTree لتجنّب حدوث عدم اتساق بين البيانات وmetadata. #26716 (nvartolomei).
- أحيانًا كان
SET ROLEيعمل بشكل غير صحيح، ويُصلح هذا التغيير ذلك. #26707 (Vitaly Baranov). - بعض الإصلاحات المتعلقة بـ formatting المتوازي (https://github.com/ClickHouse/ClickHouse/issues/26694). #26703 (Raúl Marín).
- إصلاح احتمال فك مرجع nullptr في window functions. يُصلح هذا #25276. #26668 (Alexander Kuzmenkov).
- إصلاح تحويل ملف history في clickhouse-client (عند الترقية من format إصدار clickhouse-client يعود إلى 3 سنوات) إذا كان الملف فارغًا. #26589 (Azat Khuzhin).
- إصلاح أسماء الدوال غير الصحيحة لـ groupBitmapAnd/Or/Xor (قد تظهر في بعض الحالات). تم الإصلاح. #26557 (Amos Bird).
- تحديث فحص أمر
chownفي نقطة دخول Docker الخاصة بـ clickhouse-server. يُصلح هذا الخلل الذي كان يتسبب في فشل إعادة تشغيل pod في cluster (أو حدوث timeout) على Kubernetes. #26545 (Ky Li). - إصلاح تعطل عند إيقاف تشغيل
RabbitMQإذا لم يكن إعدادRabbitMQقد بدأ. يُغلق #26504. #26529 (Kseniia Sumarokova). - إصلاح مشكلات في الاستعلام
CREATE DICTIONARYإذا كان اسم Dictionary أو اسم قاعدة البيانات موضوعًا بين علامتَي اقتباس. يُغلق #26491. #26508 (Maksim Kita). - إصلاح تعطل تحليل أسماء الأعمدة بعد إعادة كتابة الأسماء المستعارة للأعمدة. يُصلح هذا #26432. #26475 (Amos Bird).
- إصلاح بعض حالات تعطل msan الناتجة عن الاختبار العشوائي. يُصلح #22517. #26428 (Nikolai Kochetov).
- إصلاح تدفق block غير المنضم اللامتناهي في
partial_merge_join. يُغلق #26325. #26374 (Vladimir C). - إصلاح احتمال حدوث تعطل عند تسجيل الدخول كمستخدم محذوف. يُصلح طلب السحب هذا #26073. #26363 (Vitaly Baranov).
- إصلاح
optimize_distributed_group_by_sharding_keyلعدة أعمدة (إذ كان يؤدي إلى نتيجة غير صحيحة معoptimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1ومع وجود عدة أعمدة في تعبير مفتاح sharding). #26353 (Azat Khuzhin). - إصلاح خطأ نادر أثناء recovery للنسخة المتماثلة المفقودة قد يتسبب في تباعد replicas. #26321 (tavplubix).
- إصلاح فك ضغط zstd (للاستيراد/التصدير بتنسيق zstd framing غير المرتبط ببيانات الجداول) في حال وجود محارف هروب في نهاية المخزن المؤقت الداخلي. يُغلق #26013. #26314 (Kseniia Sumarokova).
- إصلاح logical error عند إجراء join مع totals. يُغلق #26017. #26250 (Vladimir C).
- إزالة سطر جديد زائد في العمود
thread_nameفي جدولsystem.stack_trace. يُصلح هذا #24124. #26210 (alexey-milovidov). - إصلاح احتمال حدوث تعطل إذا استُخدم أكثر من تعبير
untuple. #26179 (alexey-milovidov). - عدم رمي Exception في
toStringلـ Nullable Enum إذا لم تكن لدى Enum قيمة للصفر. يُغلق #25806. #26123 (Vladimir C). - تم إصلاح
sequence_idغير الصحيح في حزم بروتوكول MySQL التي يرسلها ClickHouse عند حدوث استثناء أثناء تنفيذ الاستعلام. وقد يتسبب ذلك في أن يعيد عميل MySQL ضبط الاتصال بخادم ClickHouse. يعالج #21184. #26051 (tavplubix). - إصلاح للحالة التي تُرجِع فيها
cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()نوعًا غير صحيح للثوابت، وبالتالي لا يعملoptimize_skip_unused_shards:. #26041 (Azat Khuzhin). - إصلاح احتمال عدم تطابق الترويسة عند استخدام projection عادي مع prewhere. يعالج هذا #26020. #26038 (Amos Bird).
- إصلاح
sharding_keyمن عمود بلا دالة فيremote()(إذ كانselect * from remote('127.1', system.one, dummy)يؤدي سابقًا إلى الخطأUnknown column: dummy, there are only columns .). #25824 (Azat Khuzhin). - تم إصلاح الخطأين
Not found column ...وMissing column ...عند التحديد منMaterializeMySQL. يعالج #23708، #24830، #25794. #25822 (tavplubix). - إصلاح
optimize_skip_unused_shards_rewrite_inللأنواع غيرUInt64(إذ قد يختار في النهاية أجزاءً موزعة غير صحيحة أو يطلقCannot infer type of an empty tupleأوFunction tuple requires at least one argument). #25798 (Azat Khuzhin).
تحسينات البناء/الاختبار/التغليف
- أصبحنا الآن نشغّل الاختبارات ذات الحالة والاختبارات عديمة الحالة في مناطق زمنية عشوائية. يُصلح #12439. وأصبحت قراءة String على أنه DateTime وكتابة DateTime على أنه String في Protobuf format تراعيان الآن المنطقة الزمنية. كما أصبحت قراءة UInt16 على أنه DateTime في تنسيقات Arrow وParquet تتعامل معه على أنه Date أولًا، ثم تحوّله إلى DateTime مع مراعاة المنطقة الزمنية الخاصة بـ DateTime، لأن Date يُسلسَل في Arrow وParquet على أنه UInt16. وأصبح GraphiteMergeTree يراعي الآن المنطقة الزمنية عند تقريب الأوقات. يُصلح #5098. المؤلف: @alexey-milovidov. #15408 (alesapin).
- يدعم
clickhouse-testاختبارات SQL باستخدام قوالب Jinja2. #26579 (Vladimir C). - أُضيف دعم للبناء باستخدام
clang-13. هذا يغلق #27705. #27714 (alexey-milovidov). #27777 (Sergei Semin) - أُضيفت خيارات CMake للبناء مع مجموعة تعليمات CPU محددة أو بدونها. هذا متعلق بـ #17469 و#27509. #27508 (alexey-milovidov).
- أُصلح ربط البرامج المساعدة عند استخدام المكتبات الديناميكية. #26958 (Raúl Marín).
- جرى تحديث RocksDB إلى نسخة master بتاريخ
2021-07-16. #26411 (alexey-milovidov).
إصدار ClickHouse v21.8، 2021-08-12
ملاحظات الترقية
- يستخدم الإصدار الجديد نوع البيانات
Mapفي جداول سجلات النظام (system.query_log,system.query_thread_log,system.processes,system.opentelemetry_span_log). ستُنشأ هذه الجداول تلقائيًا بأنواع البيانات الجديدة. كما تُنشأ أعمدة افتراضية لدعم الاستعلامات القديمة. أُغلقت في #18698. #23934, #25773 (hexiaoting, sundy-li, Maksim Kita). إذا كنت تريد الرجوع إلى إصدار أقدم من الإصدار 21.8 إلى إصدارات أقدم، فستحتاج إلى تنظيف جداول النظام الخاصة بالسجلات يدويًا. راجع/var/lib/clickhouse/data/system/*_log.
الميزات الجديدة
- إضافة دعم لجزء من معيار SQL/JSON. #24148 (l1tsolaiki، Kseniia Sumarokova).
- جمع مقاييس النظام الشائعة (في
system.asynchronous_metricsوsystem.asynchronous_metric_log) مثل استخدام CPU، واستخدام القرص، واستخدام الذاكرة، وIO، والشبكة، والملفات، ومتوسط الحمل، وترددات CPU، والمستشعرات الحرارية، وعدادات EDAC، ومدة التشغيل؛ كما أُضيفت مقاييس عن تفاوت scheduling والزمن المستغرَق في جمع المقاييس. يعمل ذلك بصورة مشابهة لأداةatopفي ClickHouse، ويتيح الوصول إلى بيانات Monitoring حتى في حال عدم تثبيت أدوات إضافية. إغلاق #9430. #24416 (alexey-milovidov، Yegor Levankov). - إضافة محرك الجدول وdatabase engine باسم MaterializedPostgreSQL. يتيح هذا database engine استنساخ database كاملة أو أي subset من database tables. #20470 (Kseniia Sumarokova).
- إضافة الدوال الجديدة
leftPad(),rightPad(),leftPadUTF8(),rightPadUTF8(). #26075 (Vitaly Baranov). - إضافة الكلمة المفتاحية
FIRSTإلى الأمرADD INDEXبحيث يمكن إضافة الـ index في بداية قائمة الـ فهارس. #25904 (xjewer). - تقديم table باسم
system.data_skipping_indicesتحتوي على معلومات حول data skipping فهارس الموجودة. إغلاق #7659. #25693 (Dmitry Novik). - إضافة دالتي
bin/unbin. #25609 (zhaoyu). - دعم النوع
MapوالأنواعUInt128,Int128,UInt256,Int256في الدالتينmapAddوmapSubtract. #25596 (Ildus Kurbangaliev). - دعم expression
DISTINCT ON (columns)، مع إغلاق #25404. #25589 (Zijie Lu). - إضافة إمكانية إعادة تعيين custom setting إلى default وإزالته من metadata الخاصة بالـ table. يتيح ذلك التراجع عن التغيير من دون معرفة القيمة الافتراضية للنظام/الـ config. إغلاق #14449. #17769 (xjewer).
- عرض pipelines على شكل graphs في web UI إذا تم إرسال query
EXPLAIN PIPELINE graph = 1. #26067 (alexey-milovidov).
تحسينات الأداء
- دعم ترجمة الدوال التجميعية برمجيًا. استخدم الخيار
compile_aggregate_expressionsلتمكين ذلك. #24789 (Maksim Kita). - تقليل زمن استجابة الاستعلامات القصيرة التي تتطلب القراءة من جداول تحتوي على عدد كبير من الأعمدة. #26371 (Anton Popov).
تحسينات
- استخدام نوع البيانات
Mapلجداول سجلات النظام (system.query_log,system.query_thread_log,system.processes,system.opentelemetry_span_log). ستُنشأ هذه الجداول تلقائيًا باستخدام أنواع البيانات الجديدة. وتُنشأ أعمدة افتراضية لدعم الاستعلامات القديمة. يغلق #18698. #23934، #25773 (hexiaoting، sundy-li، Maksim Kita). - بالنسبة إلى قاموس ذي مفتاح مركب يحتوي على سمة واحدة فقط، يُسمح بعدم تغليف تعبير المفتاح داخل tuple للدالتين
dictGetوdictHas. #26130 (Maksim Kita). - تنفيذ الدالتين
binوhexانطلاقًا من حالاتAggregateFunction. #26094 (zhaoyu). - دعم الوسائط من النوع
UUIDللدالتينemptyوnotEmpty. ويُعدUUIDفارغًا إذا كان كله أصفارًا (nil UUID). يغلق #3446. #25974 (zhaoyu). - إضافة دعم
SET SQL_SELECT_LIMITفي بروتوكول MySQL. يغلق #17115. #25972 (Kseniia Sumarokova). - المزيد من instrumentation لتفاعل الشبكة: إضافة counters لعدد بايتات recv/send، وإضافة gauges لعمليات recvs/sends. أُضيف التوثيق الناقص. يغلق #5897. #25962 (alexey-milovidov).
- إضافة setting
optimize_move_to_prewhere_if_final. إذا كان الاستعلام يحتوي علىFINAL، فلن يُفعَّل التحسينmove_to_prewhereإلا إذا كان كلٌّ منoptimize_move_to_prewhereوoptimize_move_to_prewhere_if_finalمفعّلًا. يغلق #8684. #25940 (Kseniia Sumarokova). - السماح بالمُعرّفات المركبة الموضوعة بين علامتَي اقتباس للجداول المُستخدمة في JOIN. يغلق #17861. #25924 (alexey-milovidov).
- إضافة دعم لمكوّنات Unicode (مثل الصينية والسيريلية) في أنواع البيانات
Nested. يغلق #25594. #25923 (alexey-milovidov). - السماح لدوال
quantiles*بالعمل معaggregate_functions_null_for_empty. يغلق #25892. #25919 (alexey-milovidov). - السماح بأن تكون المعلمات الخاصة بالدوال التجميعية البارامترية تعبيرات ثابتة اعتباطية (مثل
1 + 2)، لا مجرد قيم حرفية. كما يتيح ذلك استخدام معلمات الاستعلام (في الاستعلامات المعلّمة مثل{param:UInt8}) داخل الدوال التجميعية البارامترية. يغلق #11607. #25910 (alexey-milovidov). - طرح الاستثناء بشكل صحيح عند محاولة تحليل قيمة
Dateغير صالحة. يُغلق #6481. #25909 (alexey-milovidov). - دعم تضمينات متعددة في الإعدادات. يمكن تضمين إعدادات المستخدمين وإعدادات الخادم البعيد من مصادر متعددة. ما عليك سوى وضع العنصر
<include />مع السمةfrom_zkأوfrom_envأوincl، وسيُستبدل عبر الاستبدال. #24404 (nvartolomei). - دعم الاستعلامات التي تحتوي على عمود باسم
"null"(يجب تحديده بين علامتَي backtick أو علامتَي اقتباس مزدوجتين) ومعON CLUSTER. يُغلق #24035. #25907 (alexey-milovidov). - دعم
LowCardinalityوDecimalوUUIDفيJSONExtract. يُغلق #24606. #25900 (Kseniia Sumarokova). - تحويل ملف السجل من تنسيق
readlineإلى تنسيقreplxx. #25888 (Azat Khuzhin). - إصلاح مشكلة قد تؤدي إلى أجزاء متقاطعة بعد
DROP PARTأو الحذف في الخلفية لجزء فارغ. #25884 (alesapin). - تحسين التعامل مع الأجزاء المفقودة في جداول
ReplicatedMergeTree. إصلاح حالات نادرة من عدم الاتساق فيReplicationQueue. يُصلح #10368. #25820 (alesapin). - السماح ببدء
clickhouse-clientمع دليل عمل غير قابل للقراءة. #25817 (ianton-ru). - إصلاح خطأ “لا توجد أعمدة متاحة” في محرك التخزين
Merge. #25801 (Azat Khuzhin). - يدعم محرك MySQL الآن تبادل تعليقات الأعمدة بين MySQL وClickHouse. #25795 (Storozhuk Kostiantyn).
- إصلاح السلوك غير المتسق للثابت
GROUP BYعلى مجموعة فارغة. يُغلق #6842. #25786 (Kseniia Sumarokova). - إلغاء عمليات الدمج الجارية بالفعل في partition عند
DROP PARTITIONوTRUNCATEلـReplicatedMergeTree. يحل #17151. #25684 (tavplubix). - دعم نوع البيانات ENUM` في MaterializeMySQL. #25676 (Storozhuk Kostiantyn).
- دعم الأعمدة materialized وذات الأسماء المستعارة في JOIN، يُغلق #13274. #25634 (Vladimir C).
- إصلاح حالة تسابق منطقية محتملة بين
ALTER TABLE ... DETACHوعمليات الدمج في الخلفية. #25605 (Azat Khuzhin). - جعل المقياس
NetworkReceiveElapsedMicrosecondsيتضمن بشكل صحيح الوقت المستغرق في انتظار البيانات من العميل قبلINSERT. أُغلِق #9958. #25602 (alexey-milovidov). - دعم
TRUNCATE TABLEلـ S3 وHDFS. أُغلِق #25530. #25550 (Kseniia Sumarokova). - دعم إعادة تحميل الإعدادات ديناميكيًا لتغيير عدد خيوط التنفيذ في مجمع تنفيذ المهام في الخلفية (عمليات الدمج، وmutations، وfetches). #25548 (Nikita Mikhaylov).
- السماح باستخراج عنصر غير نصي كسلسلة نصية باستخدام
JSONExtract. هذا يخص #25414. #25452 (Amos Bird). - دعم التعبيرات النمطية في وسيطة
Databaseالخاصة بـStorageMerge. أُغلِق #776. #25064 (flynn). - واجهة الويب: إذا كانت القيمة تبدو كعنوان URL، فأنشئ رابطًا تلقائيًا. #25965 (alexey-milovidov).
- جعل
sudo service clickhouse-server startيعمل على الأنظمة التي تستخدمsystemdمثل Centos 8. أُغلِق #14298. أُغلِق #17799. #25921 (alexey-milovidov).
إصلاحات الأخطاء
- إصلاح
SET ROLEغير الصحيح في بعض الحالات. #26707 (Vitaly Baranov). - إصلاح احتمال فكّ الإشارة إلى
nullptrفي دوال النوافذ. إصلاح #25276. #26668 (Alexander Kuzmenkov). - إصلاح أسماء الدوال غير الصحيحة لـ
groupBitmapAnd/Or/Xor. إصلاح #26557 (Amos Bird). - إصلاح تعطل عند إيقاف RabbitMQ في حال لم يبدأ إعداد RabbitMQ. إغلاق #26504. #26529 (Kseniia Sumarokova).
- إصلاح مشكلات في استعلام
CREATE DICTIONARYإذا كان اسم القاموس أو اسم قاعدة البيانات موضوعًا بين علامتي اقتباس. إغلاق #26491. #26508 (Maksim Kita). - إصلاح تعذّر تحليل الأسماء بعد إعادة كتابة الأسماء المستعارة للأعمدة. إصلاح #26432. #26475 (Amos Bird).
- إصلاح تدفق غير منتهٍ للكتل غير المنضمّة في
partial_merge_join. إغلاق #26325. #26374 (Vladimir C). - إصلاح احتمال حدوث تعطل عند تسجيل الدخول كمستخدم محذوف. إصلاح #26073. #26363 (Vitaly Baranov).
- إصلاح
optimize_distributed_group_by_sharding_keyفي حالة وجود أعمدة متعددة (إذ يؤدي ذلك إلى نتيجة غير صحيحة معoptimize_skip_unused_shards=1/allow_nondeterministic_optimize_skip_unused_shards=1ومع وجود أعمدة متعددة في تعبير مفتاح التجزئة). #26353 (Azat Khuzhin). - لم يكن
CASTمنDateإلىDateTime(أوDateTime64) يستخدم المنطقة الزمنية الخاصة بنوعDateTime. وقد يؤثر ذلك أيضًا في المقارنة بينDateوDateTime. كذلك، لم يكن استنتاج النوع المشترك لـDateوDateTimeيستخدم المنطقة الزمنية المقابلة. وقد أثّر ذلك في نتائج الدالةifوإنشاءArray. إغلاق #24128. #24129 (Maksim Kita). - إصلاح خطأ نادر في استعادة replica مفقودة قد يؤدي إلى تباعد النسخ المتماثلة. #26321 (tavplubix).
- إصلاح فك ضغط zstd في حال وجود محارف هروب في نهاية المخزن المؤقت الداخلي. إغلاق #26013. #26314 (Kseniia Sumarokova).
- إصلاح logical error عند تنفيذ join مع totals. إغلاق #26017. #26250 (Vladimir C).
- إزالة فاصل سطر زائد في العمود
thread_nameفي جدولsystem.stack_trace. إصلاح #24124. #26210 (alexey-milovidov). - إصلاح
joinGetمع الأعمدةLowCarinality، وإغلاق #25993. #26118 (Vladimir C). - إصلاح احتمال حدوث crash في
pointInPolygonإذا كان الإعدادvalidate_polygonsمعطّلًا. #26113 (alexey-milovidov). - إصلاح رفع استثناء عند التكرار على directory بعيد غير موجود. #26087 (ianton-ru).
- إصلاح crash نادر في الخادم بسبب
abortفي عميل ZooKeeper. إصلاح #25813. #26079 (alesapin). - إصلاح تقدير غير صحيح لعدد الـ thread لعملية join الخاصة بالـ subquery اليمنى في بعض الحالات. إغلاق #24075. #26052 (Vladimir C).
- إصلاح
sequence_idغير الصحيح في حزم بروتوكول MySQL التي يرسلها ClickHouse عند حدوث Exception أثناء تنفيذ query. وقد يتسبب ذلك في أن يعيد عميل MySQL تعيين connection إلى ClickHouse server. إصلاح #21184. #26051 (tavplubix). - إصلاح احتمال عدم تطابق header عند استخدام projection عادي مع
PREWHERE. إصلاح #26020. #26038 (Amos Bird). - إصلاح تنسيق النوع
Mapذي المفاتيح الصحيحة إلىJSON. #25982 (Anton Popov). - إصلاح احتمال حدوث deadlock أثناء فك تكدس query profiler. إصلاح #25968. #25970 (Maksim Kita).
- إصلاح crash عند استدعاء
dictGet()باستخدام arguments غير صحيحة. #25913 (Vitaly Baranov). - إصلاح authentication من نوع
scram-sha-256لمحركات PostgreSQL. إغلاق #24516. #25906 (Kseniia Sumarokova). - إصلاح backoff طويل للغاية للـ tasks الخلفية عندما يكون background pool ممتلئًا. إصلاح #25836. #25893 (alesapin).
- إصلاح معالجة الاستثناءات على ARM مع حجم صفحة غير
default. يُصلح #25512، #25044، #24901، #23183، #20221، #19703، #19028، #18391، #18121، #17994، #12483. #25854 (Maksim Kita). - إصلاح
sharding_keyمن عمود من دون دالة فيremote()(إذ كانselect * from remote('127.1', system.one, dummy)يؤدي سابقًا إلى الخطأUnknown column: dummy, there are only columns .). #25824 (Azat Khuzhin). - إصلاح أخطاء
Not found column ...وMissing column ...عند الاستعلام منMaterializeMySQL. يُصلح #23708، #24830، #25794. #25822 (tavplubix). - إصلاح
optimize_skip_unused_shards_rewrite_inللأنواع غيرUInt64(إذ قد يختارshardsغير صحيحة في النهاية أو يطلقCannot infer type of an empty tupleأوFunction tuple requires at least one argument). #25798 (Azat Khuzhin). - إصلاح خلل نادر في الاستعلام
DROP PARTلجدولReplicatedMergeTreeيمكن أن يؤدي إلى رسالة الخطأUnexpected merged part intersecting drop range. #25783 (alesapin). - إصلاح خلل في
TTLمع تعبيرGROUP BYيمنع تنفيذTTLبعد أول تنفيذ داخل الـpart. #25743 (alesapin). - السماح لـ StorageMerge بالوصول إلى الجداول ذات الأسماء المستعارة. يُغلق #6051. #25694 (Kseniia Sumarokova).
- إصلاح بطء
joinمع القواميس في بعض الحالات، يُغلق #24209. #25618 (Vladimir C). - إصلاح
ALTER MODIFY COLUMNللأعمدة التي تدخل في تعبيراتTTL. #25554 (Anton Popov). - إصلاح فشل تحقق في
PREWHEREمع نوع غيرUInt8، يُغلق #19589. #25484 (Vladimir C). - إصلاح بعض أعطال
msanالناتجة عن الاختبار العشوائي. يُصلح #22517. #26428 (Nikolai Kochetov). - تحديث التحقق من أمر
chownفي نقطة بدء Docker الخاصة بـclickhouse-server. يُصلح ذلك الخطأ ‘فشلت إعادة تشغيل كبسولة العنقود (أو انتهت المهلة)’ على Kubernetes. #26545 (Ky Li).
إصدار ClickHouse v21.7، 2021-07-09
تغيير غير متوافق مع الإصدارات السابقة
- تم تحسين أداء الاستعلامات التي تستخدم مجموعات كبيرة معرّفة صراحةً. وأُضيف إعداد التوافق
legacy_column_name_of_tuple_literal. ويُستحسن ضبطه علىtrueعند إجراء تحديث متدرّج للعنقود من إصدار أقدم من 21.7 إلى أي إصدار أحدث. وإلا فقد تفشل الاستعلامات الموزعة التي تستخدم مجموعات معرّفة صراحةً في عبارةINأثناء التحديث. #25371 (Anton Popov). - تغيير غير متوافق مع الإصدارات السابقة واللاحقة في الحد الأقصى لحجم المخزن المؤقت في clickhouse-keeper (وهو بديل تجريبي لـ ZooKeeper). من الأفضل تنفيذ ذلك الآن (قبل الدخول إلى بيئة الإنتاج) بدلًا من تأجيله إلى وقت لاحق. #25421 (alesapin).
ميزة جديدة
- دعم التهيئة بتنسيق YAML كبديل لـ XML. هذا يغلق #3607. #21858 (BoloniniD).
- يوفّر طريقة لاستعادة الجدول المُكرَّر عندما تكون البيانات موجودة (على الأرجح)، لكن البيانات الوصفية لـ ZooKeeper مفقودة. يحل #13458. #13652 (Mike Kot).
- دعم البُنى والخرائط في Arrow/Parquet/ORC، ودعم القواميس في تنسيقات الإدخال/الإخراج Arrow. ويقدّم الإعداد الجديد
output_format_arrow_low_cardinality_as_dictionary. #24341 (Kruglov Pavel). - أُضيف دعم النوع
Arrayفي القواميس. #25119 (Maksim Kita). - أُضيفت الدالة
bitPositionsToArray. هذا يغلق #23792. المؤلف [Kevin Wan] (@MaxWk). #25394 (Maksim Kita). - أُضيفت الدالة
dateNameلإرجاع أسماء مثل ‘Friday’ أو ‘April’. المؤلف [Daniil Kondratyev] (@dankondr). #25372 (Maksim Kita). - أُضيفت الدالة
toJSONStringلتحويل الأعمدة إلى تمثيلاتها بصيغة JSON. #25164 (Amos Bird). - يحتوي
query_logالآن على عمودين جديدين:initial_query_start_timeوinitial_query_start_time_microsecondيسجّلان وقت بدء الاستعلام الموزّع، إن وجد. #25022 (Amos Bird). - أُضيفت الدالة التجميعية
segmentLengthSum. #24250 (flynn). - أُضيف إعداد Boolean جديد
prefer_global_in_and_joinيجعل جميع IN/JOIN افتراضيًا GLOBAL IN/JOIN. #23434 (Amos Bird). - دعم استعلامات
ALTER DELETEلمحرك الجدولJoin. #23260 (foolchi). - أُضيفت الدالة التجميعية
quantileBFloat16وكذلكquantilesBFloat16وmedianBFloat16المقابلتان لها. وهو مُقدِّر quantile بسيط وسريع جدًا بخطأ نسبي لا يزيد على 0.390625%. هذا يغلق #16641. #23204 (Ivan Novitskiy). - تنفيذ الدالة
sequenceNextNode()المفيدة فيتحليل التدفق. #19766 (achimbab).
الميزة التجريبية
- إضافة دعم نظام ملفات افتراضي عبر HDFS. #11058 (overshov) (Kseniia Sumarokova).
- يدعم clickhouse-keeper الآن (وهو بديل تجريبي لـ ZooKeeper) قوائم التحكم بالوصول (ACL) من نوع
digestعلى غرار ZooKeeper. #24448 (alesapin).
تحسين الأداء
- أُضيف تحسين يحوّل بعض الدوال إلى قراءة الأعمدة الفرعية لتقليل كمية البيانات المقروءة. على سبيل المثال، تتحول العبارة
col IS NULLإلى قراءة العمود الفرعيcol.null. يمكن تمكين هذا التحسين عبر الإعدادoptimize_functions_to_subcolumns، وهو معطّل افتراضيًا حاليًا. #24406 (Anton Popov). - أُعيدت كتابة مزيد من الأعمدة إلى تعبيرات الأسماء المستعارة حيث أمكن. وقد يتيح ذلك تحسينًا أفضل، مثل الإسقاطات. #24405 (Amos Bird).
- يمكن استخدام فهرس من النوع
bloom_filterمع التعبيرات التي تستخدم الدالةhasAnyمع المصفوفات الثابتة. ويغلق هذا: #24291. #24900 (Vasily Nemkov). - أُضيف backoff أسي لإعادة جدولة محاولة القراءة في حال كانت قوائم انتظار RabbitMQ فارغة. (يدعم ClickHouse استيراد البيانات من RabbitMQ). يغلق #24340. #24415 (Kseniia Sumarokova).
تحسينات
- إتاحة تقييد عرض النطاق الترددي للنسخ المتماثل. تمت إضافة إعدادَي Replicated*MergeTree التاليين:
max_replicated_fetches_network_bandwidthوmax_replicated_sends_network_bandwidth، وهما يتيحان تقييد السرعة القصوى لعمليات fetches/الإرسال المتماثلة للجدول. كما أُضيف إعدادان على مستوى الخادم (ضمن profile المستخدمdefault):max_replicated_fetches_network_bandwidth_for_serverوmax_replicated_sends_network_bandwidth_for_server، وهما يقيّدان السرعة القصوى للنسخ المتماثل لجميع الجداول. لا تُطبَّق هذه الإعدادات بدقة كاملة. وهي معطّلة افتراضيًا. يُصلح #1821. #24573 (alesapin). - قيود الموارد والعزل لجسور ODBC وLibrary. استخدام مجموعة ومستخدم
clickhouse-bridgeمنفصلين لعمليات الجسر. تعيين oom_score_adj بحيث تكون الجسور أول ما يستهدفه OOM killer. وتعيين الحد الأقصى لـ RSS إلى 1 GiB. يُغلق #23861. #25280 (Kseniia Sumarokova). - إضافة رابط رمزي مستقل
clickhouse-keeperإلى ملفclickhousebinary الرئيسي. أصبح من الممكن الآن تشغيل coordination من دون خادم ClickHouse الرئيسي. #24059 (alesapin). - استخدام الإعدادات العامة للاستعلامات إلى
VIEW. تم إصلاح السلوك الذي كانت فيه الاستعلامات إلىVIEWتستخدم إعدادات محلية، ما يؤدي إلى أخطاء إذا كانت الإعدادات فيCREATE VIEWوSELECTمختلفة. واعتبارًا من الآن، لن يستخدمVIEWهذه الإعدادات المعدّلة، لكن لا يزال بإمكانك تمرير إعدادات إضافية في قسمSETTINGSمن استعلامCREATE VIEW. يُغلق #20551. #24095 (Vladimir). - عند بدء تشغيل الخادم، لن تُزال الأجزاء ذات معرّف partition غير الصحيح أبدًا، بل ستُفصل دائمًا. #25070. #25166 (Nikolai Kochetov).
- زيادة حجم background schedule pool إلى 128 (الإعداد
background_schedule_pool_size). يتيح ذلك تجنّب تعطّل replication queue عند بطء اتصال ZooKeeper. #25072 (alesapin). - إضافة MergeTree setting باسم
max_parts_to_merge_at_once، الذي يقيّد عدد الأجزاء التي يمكن دمجها في الخلفية دفعة واحدة. لا يؤثر ذلك في استعلامOPTIMIZE FINAL. يُصلح #1820. #24496 (alesapin). - السماح باستخدام العامل
NOT INفي partition pruning. #24894 (Amos Bird). - التعرّف على عناوين IPv4 مثل
127.0.1.1على أنها محلية. هذا تغيير محل جدل ويُغلق #23504. وسيختبر Michael Filimonov هذه الميزة. #24316 (alexey-milovidov). - أصبحت قاعدة بيانات ClickHouse المُنشأة باستخدام MaterializeMySQL (وهي ميزة تجريبية) تحتوي الآن على جميع تعليقات الأعمدة من MySQL database التي تمت materialize لها. #25199 (Storozhuk Kostiantyn).
- إضافة إعدادات (
connection_auto_close/connection_max_tries/connection_pool_size) لمحرك تخزين MySQL. #24146 (Azat Khuzhin). - تحسين وقت بدء التشغيل لمحرك Distributed. #25663 (Azat Khuzhin).
- تحسين لجداول Distributed: إزالة أسماء النسخ المتماثلة من dirname عند
internal_replication=true(ما يتيح تنفيذ INSERT إلى Distributed مع cluster بأي عدد من النسخ المتماثلة؛ إذ كان الدعم سابقًا يقتصر على 15 نسخة متماثلة فقط، وأي عدد أكبر من ذلك كان يفشل مع ENAMETOOLONG أثناء إنشاء الدليل الخاص بـ async blocks). #25513 (Azat Khuzhin). - أُضيف دعم النوع
IntervalإلىLowCardinality. وهو مطلوب للقيم الوسيطة لبعض التعبيرات. يُغلق #21730. #25410 (Vladimir). - إضافة العامل
==إلى شروط الوقت في الدالتينsequenceMatchوsequenceCount. على سبيل المثال: sequenceMatch(’(?1)(?t==1)(?2)’)(time, data = 1, data = 2). #25299 (Christophe Kalenzaga). - إضافة الإعدادات
http_max_fields,http_max_field_name_size,http_max_field_value_size. #25296 (Ivan). - إضافة دعم للدالة
ifمع النوعينDecimalوIntفي فروعها. يُغلق هذا #20549. ويُغلق أيضًا #10142. #25283 (alexey-milovidov). - تحديث موجّه الأوامر في
clickhouse-clientوعرض رسالة عند إعادة الاتصال. يُغلق هذا #10577. #25281 (alexey-milovidov). - تصحيح تتبّع الذاكرة في الدالة التجميعية
topK. يُغلق هذا #25259. #25260 (alexey-milovidov). - إصلاح
topLevelDomainللمضيفات ذات IDN (مثلexample.рф)؛ إذ كان يُرجِع سابقًا سلسلة فارغة لهذه المضيفات. #25103 (Azat Khuzhin). - اكتشاف إصدار نواة Linux في وقت التشغيل (لتمكين عمل epoll المتداخل، وهو مطلوب لـ
async_socket_for_remote/use_hedged_requests، وإلا فقد تتعطل الاستعلامات البعيدة). #25067 (Azat Khuzhin). - في الاستعلام الموزّع، عند ضبط
optimize_skip_unused_shards=1، يُسمح بتخطي shard مع شرط مثل(sharding key) IN (one-element-tuple). (كانت Tuples متعددة العناصر مدعومة. أما Tuple أحادي العنصر فلم يكن يعمل لأنه كان يُحلَّل على أنه literal). #24930 (Amos Bird). - تحسين log messages الخاصة بأخطاء S3، بحيث لم تعد هناك مسافات بيضاء مزدوجة عند وجود keys وbuckets فارغة. #24897 (Vladimir Chebotarev).
- تتطلب بعض queries تحليلًا دلاليًا متعدد المراحل. محاولة إعادة استخدام sets المُنشأة لـ
INفي هذه الحالة. #24874 (Amos Bird). - مراعاة
max_distributed_connectionsعند استخدامinsert_distributed_sync(وإلا فقد يؤدي ذلك، في العناقيد الكبيرة جدًا ومع الإدراج المتزامن، إلى استنفادmax_thread_pool_size). #24754 (Azat Khuzhin). - تجنب إخفاء الأخطاء مثل
Limit for rows or bytes to read exceededفي الاستعلامات الفرعية القيَمية. #24545 (nvartolomei). - جعل محلل String-to-Int أكثر صرامة بحيث إن
toInt64('+')سيطرح استثناءً. #24475 (Amos Bird). - إذا أُنشئ
SSD_CACHEباستخدام استعلام DDL، فلا يمكن إنشاؤه إلا داخل الدليلuser_files. #24466 (Maksim Kita). - دعم PostgreSQL لتحديد مخطط غير افتراضي لاستعلامات الإدراج. يُغلق #24149. #24413 (Kseniia Sumarokova).
- إصلاح تحليل عناوين IPv6 (أي إصلاح
select * from remote('[::1]', system.one)). #24319 (Azat Khuzhin). - إصلاح المسافات البيضاء اللاحقة في عبارة FROM مع الاستعلامات الفرعية في وضع متعدد الأسطر، مع تعديل طفيف أيضًا على مخرجات الاستعلامات لتصبح أكثر سهولة للفهم. #24151 (Azat Khuzhin).
- تحسين للجداول الموزعة. إضافة إمكانية تقسيم الدفعة الموزعة عند حدوث إخفاقات (مثلًا بسبب حدود الذاكرة أو التلف)، عبر
distributed_directory_monitor_split_batch_on_failure(معطّل افتراضيًا). #23864 (Azat Khuzhin). - معالجة تعارض أسماء الأعمدة في محرك الجداول
Join. يُغلق #20309. #23769 (Vladimir). - عرض التقدم لمحرك الجداول
Fileفيclickhouse-localوعند تنفيذ استعلام INSERT فيclickhouse-clientعندما تُمرَّر البيانات إلى stdin. يُغلق #18209. #23656 (Kseniia Sumarokova). - إصلاحات للأخطاء وتحسينات في
clickhouse-copier. أصبح من الممكن نسخ الجداول ذات المخططات المختلفة ولكن المتوافقة. يغلق #9159. أُضيف اختبار لنسخ ReplacingMergeTree. يغلق #22711. دعم TTL على الأعمدة وفهارس تخطي البيانات. إذ تُزال هذه العناصر ببساطة عند إنشاء جدولDistributedداخلي (وسيحتفظ الجدول الأساسي بـ TTL وفهارس التخطي). يغلق #19384. أصبح نسخ الأعمدة MATERIALIZED وALIAS ممكنًا. وقد يكون ذلك مفيدًا في بعض الحالات (مثلًا إذا كان هذا العمود ضمن PRIMARY KEY). ويمكن الآن السماح بذلك عبر ضبط الخاصيةallow_to_copy_alias_and_materialized_columnsعلى true في إعدادات المهمة. يغلق #9177. يغلق [#11007] (https://github.com/ClickHouse/ClickHouse/issues/11007). يغلق #9514. أُضيفت الخاصيةallow_to_drop_target_partitionsإلى إعدادات المهمة لتنفيذ drop partition في الجدول الأصلي قبل نقل الجداول المساعدة. يغلق #20957. تم الاستغناء عن الاستعلامOPTIMIZE DEDUPLICATE. كانت هذه الحيلة مطلوبة لأنALTER TABLE MOVE PARTITIONكان يُعاد عدة مرات، ولأن جداول MergeTree العادية لا تدعم deduplication. يغلق #17966. كتابة Progress إلى عقدة ZooKeeper على المسارtask_path + /statusبصيغة JSON. يغلق #20955. دعم ReplicatedTables بدون arguments. يغلق #24834 .#23518 (Nikita Mikhaylov). - أُضيفت فترة sleep مع backoff بين retries القراءة من S3. #23461 (Vladimir Chebotarev).
- مراعاة
insert_allow_materialized_columns(يسمح بالأعمدة materialized) عند تنفيذ INSERT في جدولDistributed. #23349 (Azat Khuzhin). - إضافة إمكانية push down لـ LIMIT في distributed queries. #23027 (Azat Khuzhin).
- إصلاح zero-copy replication مع عدة وحدات تخزين S3 (إصلاح #22679). #22864 (ianton-ru).
- تحديد رقم المنفذ الفعلي المرتبط عندما يطلب المستخدم أي منفذ متاح من نظام التشغيل، لإظهاره في رسالة السجل. #25569 (bnaecker).
- إصلاح حالة كانت فيها عملية تحويل مصفوفات Postgres تؤدي أحيانًا إلى نوع البيانات String بدلًا من مصفوفة متعددة الأبعاد، لأن
attndimsيعمل بشكل غير صحيح في بعض الحالات. يغلق #24804. #25538 (Kseniia Sumarokova). - إصلاح تحويل DateTime مع timezone لكل من MySQL وPostgreSQL وODBC. يغلق #5057. #25528 (Kseniia Sumarokova).
- التمييز بين أوامر KILL MUTATION الخاصة بالجداول المختلفة (إصلاح الخطأ غير المتوقع
Cancelled mutating parts). #25025 (Azat Khuzhin). - السماح بتعريف قرص S3 في جذر الـbucket (نظام الملفات الافتراضي لـS3 ميزة تجريبية لا تزال قيد التطوير). #24898 (Vladimir Chebotarev).
- تمكين قراءة الأعمدة الفرعية (مثل مكوّنات Tuples) للجداول الموزعة. #24472 (Anton Popov).
- ميزة لبروتوكول التوافق مع MySQL: جعل الدالة
userتُرجع المخرجات الصحيحة. إغلاق #25697. #25697 (sundyli).
إصلاح خلل
- تحسين للتوافق مع الإصدارات السابقة. استخدم الإصدار القديم من دالة modulo عند استخدامها في مفتاح التقسيم. يُغلق #23508. #24157 (Kseniia Sumarokova).
- إصلاح خطأ نادر للغاية على الخوادم ذات الذاكرة المنخفضة قد يؤدي إلى تعذر إجراء عمليات الدمج دون إعادة التشغيل. ربما يُصلح #24603. #24872 (alesapin).
- إصلاح الخطأ النادر للغاية
Tagging already tagged partفي قائمة انتظار النسخ المتماثل أثناء تنفيذalter move/replace partitionبشكل متزامن. ربما يُصلح #22142. #24961 (alesapin). - إصلاح تعطل محتمل عند حساب حالات دوال التجميع عبر تجميع حالات دوال تجميع لدوال تجميع أخرى (ليست حالة استخدام عملية). راجع #24523. #25015 (alexey-milovidov).
- تم إصلاح السلوك في الحالات التي لا ينتهي فيها الاستعلام
SYSTEM RESTART REPLICAأوSYSTEM SYNC REPLICA. وقد اكتُشف ذلك على خادم ذي مقدار منخفض للغاية من RAM. #24457 (Nikita Mikhaylov). - إصلاح خطأ قد يؤدي إلى تعليق عميل ZooKeeper داخل clickhouse-server. #24721 (alesapin).
- إذا فُقد اتصال ZooKeeper وتم استنساخ replica بعد استعادة الاتصال، فقد تحتوي قائمة انتظار النسخ المتماثل الخاصة بها على إدخالات قديمة. وتم إصلاح assertion فاشل عند احتواء قائمة انتظار النسخ المتماثل على virtual parts متقاطعة. وقد يحدث ذلك نادرًا إذا فُقد بعض data part. وتُسجَّل الآن رسالة error في السجل بدلًا من إنهاء العملية. #24777 (tavplubix).
- إصلاح فقدان الشرط
WHEREفي تحسين expression-push-down ضمن query plan (الإعدادquery_plan_filter_push_down = 1مفعّل افتراضيًا). يُصلح #25368. #25370 (Nikolai Kochetov). - إصلاح خطأ قد يؤدي إلى intersecting parts بعد عمليات الدمج مع TTL:
Part all_40_40_0 is covered by all_40_40_1 but should be merged into all_40_41_1. This shouldn't happen often.. #25549 (alesapin). - عند فقدان اتصال ZooKeeper، قد ينتظر جدول
ReplicatedMergeTreeاكتمال العمليات الخلفية قبل محاولة إعادة الاتصال. تم إصلاح ذلك، وأصبحت العمليات الخلفية الآن تتوقف قسرًا. #25306 (tavplubix). - إصلاح الخطأ
Key expression contains comparison between inconvertible typesفي الاستعلامات التي تحتوي علىARRAY JOINإذا كانت المصفوفة مستخدمة في المفتاح الأساسي. يُصلح #8247. #25546 (Anton Popov). - إصلاح totals غير الصحيحة للاستعلام
WITH TOTALSوWITH FILL. يُصلح #20872. #25539 (Anton Popov). - إصلاح data race عند الاستعلام عن
system.clustersبالتزامن مع إعادة تحميل إعدادات cluster. #25737 (Amos Bird). - تم إصلاح الخطأ
No such file or directoryعند نقل جدولDistributedبين قواعد البيانات. يعالج #24971. #25667 (tavplubix). - قد يتم تجاهل
REPLACE PARTITIONفي حالات نادرة إذا كان partition المصدر فارغًا. تم إصلاح ذلك. يعالج #24869. #25665 (tavplubix). - تم إصلاح خطأ في محرك قاعدة البيانات
Replicatedكان قد يتسبب، في حالات نادرة، في تخطي بعض النسخ المتماثلة لاستعلام DDL الموضوع في قائمة الانتظار. #24805 (tavplubix). - تم إصلاح فك إشارة المؤشر الفارغ في
EXPLAIN ASTعند عدم وجود استعلام. #25631 (Nikolai Kochetov). - تم إصلاح انتظار الحذف التلقائي للأجزاء الفارغة. وكان ذلك قد يؤدي إلى امتلاء background pool بالكامل وتعطل replication. #23315 (Anton Popov).
- تم إصلاح استعادة جدول مخزَّن في virtual filesystem الخاصة بـ S3 (وهي ميزة تجريبية غير جاهزة لبيئات production). #25601 (ianton-ru).
- تم إصلاح فك إشارة nullptr في format
Arrowعند استخدامDecimal256. وأُضيف أيضًا دعمDecimal256إلى format Arrow. #25531 (Kruglov Pavel). - تم إصلاح الشرطة السفلية الزائدة قبل أسماء configuration files المُعالجة مسبقًا. #25431 (Vitaly Baranov).
- إصلاح لأداة
clickhouse-copier: تم إصلاح segfault عند غيابsharding_keyفي task config الخاصة بأداة copier. #25419 (Nikita Mikhaylov). - تم إصلاح مُحوِّل الأعمدة
REPLACEعند استخدامه في DDL، وذلك عبر وضع علامات اقتباس صحيحة حول الاستعلام المنسّق. هذا يعالج #23925. #25391 (Amos Bird). - تم إصلاح احتمال السلوك غير الحتمي للدالة
quantileDeterministicوالدوال المشابهة. هذا يغلق #20480. #25313 (alexey-milovidov). - تمت إضافة دعم
SimpleAggregateFunction(LowCardinality)إلىSummingMergeTree. يعالج #25134. #25300 (Nikolai Kochetov). - تم إصلاح خطأ منطقي مع رسالة الاستثناء “Cannot sum Array/Tuple in min/maxMap”. #25298 (Kruglov Pavel).
- تم إصلاح الخطأ
Bad cast from type DB::ColumnLowCardinality to DB::ColumnVector<char8_t>في الاستعلامات التي استُخدمت فيها الوسيطةLowCardinalityمع IN (ظهر هذا الخطأ في 21.6). يعالج #25187. #25290 (Nikolai Kochetov). - إصلاح السلوك غير الصحيح لـ
joinGetOrNullمع الأعمدة غير القابلة لأن تكونNULL. يُصلح هذا #24261. #25288 (Amos Bird). - إصلاح السلوك غير الصحيح وتقرير UBSan في الأعداد الصحيحة الكبيرة. في الإصدارات السابقة، كان
CAST(1e19 AS UInt128)يعيد الصفر. #25279 (alexey-milovidov). - تم إصلاح خطأ كان يحدث أثناء إدراج مجموعة فرعية من الأعمدة باستخدام تنسيق CSVWithNames. يُصلح #25129. #25169 (Nikita Mikhaylov).
- لا تستخدم إسقاط table من أجل
SELECTمعFINAL. هذا غير مدعوم بعد. #25163 (Amos Bird). - إصلاح احتمال فقدان الأجزاء بعد التحديث إلى 21.5 أو أحدث في حال كان الجدول يستخدم
UUIDفي مفتاح التقسيم. (لا يُنصح باستخدامUUIDفي مفتاح التقسيم). يُصلح #25070. #25127 (Nikolai Kochetov). - إصلاح تعطل في query مع ربط تبادلي و
joined_subquery_requires_alias = 0. يُصلح #24011. #25082 (Nikolai Kochetov). - إصلاح خلل في قيم maps الثابتة في الدالة mapContains كان يؤدي إلى الخطأ
empty column was returned by function mapContains. يُغلق #25077. #25080 (Kruglov Pavel). - إزالة إمكانية إنشاء جداول بأعمدة تشير إلى نفسها مثل
a UInt32 ALIAS a + 1أوb UInt32 MATERIALIZED b. يُصلح #24910, #24292. #25059 (alesapin). - إصلاح النتيجة الخاطئة عند استخدام الإسقاط التجميعي مع مفتاح
GROUP BYغير فارغ لتنفيذ query تحتوي علىGROUP BYبمفتاح فارغ. #25055 (Amos Bird). - إصلاح تسلسل الرسائل المتداخلة المُقسّمة في تنسيق Protobuf. يُصلح طلب السحب هذا #24647. #25000 (Vitaly Baranov).
- إصلاح إعدادات limit/offset للاستعلامات الموزعة (تُتجاهل على العُقد البعيدة). #24940 (Azat Khuzhin).
- إصلاح احتمال حدوث heap-buffer-overflow في تنسيق
Arrow. #24922 (Kruglov Pavel). - تم إصلاح الخطأ المحتمل ‘Cannot read from istream at offset 0’ عند قراءة ملف من DiskS3 (إن نظام الملفات الافتراضي S3 ميزة تجريبية قيد التطوير، ويجب عدم استخدامه في بيئة الإنتاج). #24885 (Pavel Kovalenko).
- إصلاح استثناء “Missing columns” عند ربط عرض متجسد موزع. #24870 (Azat Khuzhin).
- السماح بقيم
NULLفي بروتوكول التوافق مع PostgreSQL. يُغلق #22622. #24857 (Kseniia Sumarokova). - إصلاح خلل كان قد يؤدي إلى تمرير الاستثناء
Mutation was killedإلى العميل عند انتظار mutation، عندما لا تكون mutation قد حُمّلت إلى الذاكرة بعد. #24809 (alesapin). - إصلاح خلل في إلغاء تسلسل حالة مولّد الأعداد العشوائية، كان قد يتسبب في أن تتصرف بعض أنواع البيانات مثل
AggregateFunction(groupArraySample(N), T))بطريقة غير حتمية. #24538 (tavplubix). - منع بناء uniqXXXXStates من حالات aggregation أخرى. #24523 (Raúl Marín). ثم أُعيد السماح بذلك بعد إزالة السبب الجذري للمشكلة ذات الصلة فعليًا. (alexey-milovidov).
- إصلاح استخدام Tuples في استعلامات
CREATE .. AS SELECT. #24464 (Anton Popov). - إصلاح احتساب إجمالي البايتات في جدول
Buffer. في إصدار ClickHouse الحالي، ينخفض العداد total_writes.bytes أكثر من اللازم أثناء flush للمخزن المؤقت. ويؤدي ذلك إلى تجاوز سعة العداد، ما يجعل totalBytes يعيد قيمة تقارب 17.44 EB بعد فترة من الـ flush. #24450 (DimasKovas). - إصلاح معلومات غير صحيحة حول الرتابة في الدالة toWeek. يُصلح هذا #24422. أُدخل هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/5212، ثم انكشف لاحقًا بفضل مُهذِّب partition أكثر ذكاءً. #24446 (Amos Bird).
- عندما تكون authentication المستخدم مُدارة عبر LDAP، تم إصلاح احتمال حدوث توقف متبادل أثناء (إعادة) تعيين دور LDAP، وذلك عندما تُربط مجموعة LDAP بدور محلي غير موجود. #24431 (Denis Glazachev).
- في رسالة “multipart/form-data”، اعتُبر CRLF السابق للـ boundary جزءًا منه. يُصلح #23905. #24399 (Ivan).
- إصلاح عملية Drop partition مع الأجزاء الوهمية المتقاطعة. في حالات نادرة، قد توجد parts بإصدار mutation أكبر من رقم block الحالي. #24321 (Amos Bird).
- إصلاح خلل في نقل materialized view من قاعدة بيانات Ordinary إلى قاعدة بيانات Atomic (استعلام
RENAME TABLE). الآن يُنقل الجدول الداخلي إلى قاعدة البيانات الجديدة مع materialized view. يُصلح #23926. #24309 (tavplubix). - السماح برؤوس HTTP فارغة. يُصلح #23901. #24285 (Ivan).
- تصحيح معالجة mutations (ALTER UPDATE/DELETE) في جداول Memory. يُغلق #24274. #24275 (flynn).
- جعل خاصية LowCardinality للعمود في ناتج JOIN مماثلة لما هي عليه في الإدخال، إغلاق #23351 وإغلاق #20315. #24061 (Vladimir).
- إصلاح لجداول Kafka. إصلاح خلل في سلوك failover، إذ كان Engine = Kafka غير قادر على بدء استهلاك البيانات إذا كان لدى consumer نفسه تعيين فارغ سابقًا. إغلاق #21118. #21267 (filimonov).
تحسينات البناء/الاختبار/التغليف
- إضافة إصدارات
darwin-aarch64(Mac M1 / Apple Silicon) إلى CI #25560 (Ivan)، وإضافة الروابط إلى الوثائق والموقع الإلكتروني (alexey-milovidov). - إضافة تضمين متعدد المنصات للموارد الثنائية داخل الملفات التنفيذية. ويعمل ذلك على Illumos. #25146 (bnaecker).
- إضافة خيارات متعلقة بـ
joinإلى اختبارات الضغط لتحسين الاختبار العشوائي. #25200 (Vladimir). - تمكين البناء باستخدام وحدة S3 في osx #25217. #25218 (kevin wan).
- إضافة حالات من اختبارات التكامل لتغطية JDBC bridge. #25047 (Zhichun Wu).
- أصبح إعداد اختبارات التكامل يتضمن معالجة خاصة لـ القواميس. وأُزيل ما تبقى من الإعداد اليدوي لـ القواميس. #24728 (Ilya Yatsishin).
- إضافة اختبارات libfuzzer للفئة YAMLParser. #24480 (BoloniniD).
- يُستخدم Ubuntu 20.04 الآن لتشغيل اختبارات التكامل، كما تم تحديث إصدار docker-compose المستخدم لتشغيل اختبارات التكامل إلى 1.28.2. وأصبحت متغيرات البيئة تُطبَّق الآن على docker-compose. وأُعيدت صياغة test_dictionaries_all_layouts_separate_sources للسماح بالتشغيل المتوازي. #20393 (Ilya Yatsishin).
- إصلاح خطأ TOCTOU في برنامج التثبيت النصي. #25277 (alexey-milovidov).
إصدار ClickHouse 21.6، 2021-06-05
تغيير غير متوافق مع الإصدارات السابقة
- تُنتِج
uniqState/uniqHLL12State/uniqCombinedState/uniqCombined64Stateحالاتٍ غير متوافقة مع النوعUUID. #33607.
ملاحظات الترقية
- تم تحديث مكتبة الضغط
zstdإلى الإصدار v1.5.0. قد تظهر لك رسائل تفيد بأن “checksum does not match” في النسخ المتماثل. هذه الرسائل متوقعة بسبب تحديث خوارزمية الضغط، ويمكنك تجاهلها. وهي رسائل إعلامية ولا تشير إلى أي سلوك غير مرغوب فيه. - الإعداد
compile_expressionsمفعّل افتراضيًا. ورغم أنه خضع لاختبارات مكثفة في مجموعة متنوعة من السيناريوهات، فإذا لاحظت أي سلوك غير مرغوب فيه على خوادمك، يمكنك تجربة تعطيل هذا الإعداد. - لا يمكن مقارنة القيم من النوع
UUIDبعدد صحيح. على سبيل المثال، بدلًا من كتابةuuid != 0اكتبuuid != '00000000-0000-0000-0000-000000000000'.
ميزة جديدة
- أضف معامل CAST الشبيه بـ Postgres (
::). مثال:[1, 2]::Array(UInt8),0.1::Decimal(4, 4),number::UInt16. #23871 (Anton Popov). - اجعل الأعداد الصحيحة الكبيرة جاهزة للاستخدام في production. أضف دعم نوع البيانات
UInt128. أصلِح المشكلات المعروفة في نوع البياناتDecimal256. ادعم الأعداد الصحيحة الكبيرة في القواميس. ادعم الدالتينgcd/lcmللأعداد الصحيحة الكبيرة. ادعم الأعداد الصحيحة الكبيرة في دوال البحث في المصفوفات والدوال الشرطية. ادعمLowCardinality(UUID). ادعم الأعداد الصحيحة الكبيرة في دالة الجدولgenerateRandomوclickhouse-obfuscator. أصلِح الخطأ عند إرجاعUUIDمن الاستعلامات الفرعية scalar. هذا يُصلح #7834. وهذا يُصلح #23936. وهذا يُصلح #4176. وهذا يُصلح #24018. تغيير غير متوافق مع الإصدارات السابقة: لا يمكن مقارنة القيم من النوعUUIDبعدد صحيح. على سبيل المثال، بدلًا من كتابةuuid != 0اكتبuuid != '00000000-0000-0000-0000-000000000000'. #23631 (alexey-milovidov). - ادعم نوع البيانات
Arrayلإدراج البيانات واختيارها في تنسيقاتArrowوParquetوORC. #21770 (taylor12805). - نفّذ ميزة تعليقات الجداول. يُغلق #23225. #23548 (flynn).
- ادعم إنشاء القواميس باستخدام استعلامات DDL في
clickhouse-local. يُغلق #22354. أُضيف دعمDETACH DICTIONARY PERMANENTLY. وأُضيف دعمEXCHANGE DICTIONARIESلمحرك قاعدة البياناتAtomic. وأُضيف دعم نقل القواميس بين قواعد البيانات باستخدامRENAME DICTIONARY. #23436 (Maksim Kita). - أضف الدالة التجميعية
uniqThetaلدعم Theta Sketch في ClickHouse. #23894. #22609 (Ping Yu). - أضف الدالة
splitByRegexp. #24077 (abel-cheng). - أضف الدالة
arrayProductالتي تقبل مصفوفة كمعامل وتُرجع حاصل ضرب جميع عناصر المصفوفة. يُغلق #21613. #23782 (Maksim Kita). - أضف العمود
thread_nameإلىsystem.stack_trace. هذا يُغلق #23256. #24124 (abel-cheng). - إذا كانت
insert_null_as_default= 1، فأدرِج القيم الافتراضية بدلًا من NULL في استعلاماتINSERT ... SELECTوINSERT ... SELECT ... UNION ALL .... يُغلق #22832. #23524 (Kseniia Sumarokova). - إضافة دعم لمؤشر التقدّم في
clickhouse-localباستخدام الخيار--progress. #23196 (Egor Savin). - إضافة دعم ضغط HTTP (يُحدَّد عبر ترويسة HTTP
Content-Encoding) في dictionary source من نوعhttp. يُصلح هذا #8912. #23946 (FArthur-cmd). - تمت إضافة
SYSTEM QUERY RELOAD MODELوSYSTEM QUERY RELOAD MODELS. يُغلق هذا #18722. #23182 (Maksim Kita). - إضافة الإعداد
json(Boolean، والقيمة الافتراضية 0) إلى استعلامEXPLAIN PLAN. عند تمكينه، سيكون خرج الاستعلام صفًا واحدًا بصيغةJSON. ويُنصح باستخدام التنسيقTSVRawلتجنّب استخدام محارف الهروب دون داعٍ. #23082 (Nikolai Kochetov). - إضافة الإعداد
indexes(Boolean، وهو معطّل افتراضيًا) إلى استعلامEXPLAIN PIPELINE. عند تمكينه، يعرض الفهارس المستخدمة، وعدد الأجزاء وgranules المُصفّاة لكل فهرس مُطبَّق. وهو مدعوم في جداولMergeTree*. #22352 (Nikolai Kochetov). - LDAP: تنفيذ وظيفة اكتشاف user DN لاستخدامها عند ربط مجموعات Active Directory بـ roles في ClickHouse. #22228 (Denis Glazachev).
- دالة aggregate جديدة
deltaSumTimestampلجمع الفرق بين الصفوف المتتالية مع الحفاظ على الترتيب أثناء الدمج عبر تخزين timestamps. #21888 (Russ Frank). - تمت إضافة موفّر بيانات اعتماد IMDS أقل أمانًا لـ S3 ويعمل بشكل صحيح في docker. #21852 (Vladimir Chebotarev).
- إعادة إضافة الدالة
indexHint. هذا لأجل #21238. ويتراجع هذا عن #9542. ويُصلح هذا #9540. #21304 (Amos Bird).
ميزة تجريبية
تحسين الأداء
- تم تفعيل الإعداد
compile_expressionsافتراضيًا. عند تمكين هذا الإعداد، ستُصرَّف تراكيب الدوال البسيطة والمشغّلات إلى تعليمات برمجية أصلية باستخدام LLVM أثناء وقت التشغيل. #8482 (Maksim Kita, alexey-milovidov). ملاحظة: إذا واجهت مشكلات، فأوقف هذا الخيار. - تم تحديث مكتبة
re2. وقد تحسّن أداء مطابقة التعبيرات النمطية. كما يضيف هذا الطلب التوافق مع gcc-11. #24196 (Raúl Marín). - أصبحت قراءة تنسيق الإدخال ORC تتم على مستوى stripe بدلًا من قراءة الجدول بالكامل إلى الذاكرة دفعة واحدة، وهو ما كان يستهلك قدرًا كبيرًا من الذاكرة عند كِبر حجم الملف. #23102 (Chao Ma).
- تم دمج الدوال التجميعية
sumوcountوavgفي الاستعلام الواحد ضمن دالة تجميعية واحدة. ويجري التحكم في هذا التحسين بواسطة الإعدادoptimize_fuse_sum_count_avg. وقد نُفِّذ ذلك عبر دالة تجميعية جديدة هيsumCount. وتُرجع هذه الدالة Tuple مكوّنًا من حقلين:sumوcount. #21337 (hexiaoting). - تم تحديث
zstdإلى الإصدار v1.5.0. وقد تحسّن أداء الضغط بنسبة مئوية أحادية الرقم. #24135 (Raúl Marín). ملاحظة: قد تظهر لك رسائل تفيد بأن “checksum does not match” في النسخ المتماثل. هذه الرسائل متوقعة بسبب تحديث خوارزمية الضغط ويمكنك تجاهلها. - تحسّن أداء جداول
Buffer: لم يعد يتم الحصول على قفل لـ total_bytes/total_rows في محرّكBuffer. #24066 (Azat Khuzhin). - تمت استعادة دعم التخصيص المسبق لـ Dictionaries من نوع hashed/sparse_hashed. #23979 (Azat Khuzhin).
- تم تفعيل
async_socket_for_remoteافتراضيًا (عدد أقل من سلاسل التنفيذ عند الاستعلام عن الجداول الموزعة ذات fanout كبير). #23683 (Nikolai Kochetov).
تحسينات
- إضافة العمود الافتراضي
_partition_valueإلى عائلة جداول MergeTree. ويمكن استخدامه لتصفية partition بطريقة deterministic. وهو مطلوب لتنفيذ مطابقة partition من أجل mutations. #23673 (Amos Bird). - أُضيفت المعلمة
regionإلى S3 storage وdisk. #23846 (Vladimir Chebotarev). - إتاحة تهيئة log level مختلف لكل قناة logging. يُغلق #19569. #23857 (filimonov).
- الإبقاء على timezone الافتراضية في عمليات
DateTimeإذا لم تُحدَّد صراحةً. على سبيل المثال، إذا أضفت ثانية واحدة إلى قيمة من النوعDateTimeمن دون timezone، فستبقىDateTimeمن دون timezone. في الإصدارات السابقة، كانت قيمة timezone الافتراضية تُضاف صراحةً إلى Data type المُعادة، بحيث تصبح DateTime(‘something’). يُغلق هذا #4854. #23392 (alexey-milovidov). - السماح للمستخدم بتحديد سلسلة فارغة بدلًا من اسم database لتخزين
MySQL. وسيُستخدم database الافتراضي في queries. في الإصدارات السابقة، كان ذلك يعمل مع استعلامات SELECT، كما أُضيف أيضًا دعم INSERT. يُغلق هذا #19281. وقد يكون هذا مفيدًا عند العمل معSphinxأو غيره من قواعد البيانات الخارجية المتوافقة مع MySQL. #23319 (alexey-milovidov). - أُصلحت
quantile(s)TDigest. وأُضيفت معالجة خاصة لـ singleton centroids وفقًا لـ tdunning/t-digest 3.2+. كما أُصلح أيضًا خطأ يتعلق بالضغط المفرط للـ centroids في تنفيذ إصدار أقدم من الخوارزمية. #23314 (Vladimir Chebotarev). - أصبحت الدالة
now64تدعم الآن argument اختياريًا للـ timezone. #24091 (Vasily Nemkov). - إصلاح الحالة التي قد يؤدي فيها شريط التقدم في interactive mode في clickhouse-client، عند ظهوره في منتصف البيانات، إلى الكتابة فوق بعض أجزاء البيانات الظاهرة في الطرفية. يُغلق هذا #19283. #23050 (alexey-milovidov).
- إصلاح crash عند فشل تخصيص الذاكرة في simdjson. https://github.com/simdjson/simdjson/pull/1567 . وُسِم هذا كتَحسين لأنه خطأ نادر جدًا. #24147 (Amos Bird).
- الإبقاء على Dictionaries إلى حين إيقاف التخزين (لتجنب أخطاء محتملة مثل
external dictionary 'DICT' not foundعند إيقاف server أثناء flush النهائي لمحركBuffer). #24068 (Azat Khuzhin). - تنفيذ flush لجداول
Bufferقبل إيقاف الجداول (ضمن database واحدة)، لتجنب تجاهل blocks لأن underlying table قد فُصلت بالفعل (وظهور الخطأDestination table default.a_data_01870 doesn't exist. Block of data is discardedفي السجل). #24067 (Azat Khuzhin). - أصبح
prefer_column_name_to_alias = 1الآن يفضّل أيضًا أسماء الأعمدة فيgroup byوhavingوorder by. ويُصلح هذا #23882. #24022 (Amos Bird). - إضافة دعم
ORDER BY WITH FILLمعDateTime64. #24016 (kevin wan). - تمكين
DateTime64ليكون عمود إصدار فيReplacingMergeTree. #23992 (kevin wan). - تسجيل معلومات عن اسم نظام التشغيل وإصدار النواة ومعمارية المعالج عند بدء تشغيل الخادم. #23988 (Azat Khuzhin).
- دعم تحديد مخطط الجدول لمصدر القاموس
postgresql. يُغلق #23958. #23980 (Kseniia Sumarokova). - إضافة تلميحات لأسماء عناصر
Enum(اقتراح الأسماء في حال وجود أخطاء إملائية). يُغلق #17112. #23919 (flynn). - قياس معدل العثور (النسبة المئوية للحالات التي عُثر فيها على القيمة) للقواميس (راجع
found_rateفيsystem.dictionaries). #23916 (Azat Khuzhin). - السماح بإضافة إعدادات queue محددة عبر إعداد الجدول
rabbitmq_queue_settings_list. (يُغلق #23737 و#23918). كما يُسمح للمستخدم بالتحكم الكامل في إعداد RabbitMQ: إذا ضُبط إعداد الجدولrabbitmq_queue_consumeعلى1، فلن يقوم محرك جدول RabbitMQ إلا بالاتصال بالـ queue المحدد، ولن ينفذ أي إعداد من جهة consumer في RabbitMQ، مثل التصريح عن exchange أو queues أو bindings. (يُغلق #21757). وإضافة تنظيف مناسب عند حذف جدول RabbitMQ، وذلك بحذف الـ queues التي صرّح بها الجدول، وجميع الـ exchanges المرتبطة بها، إذا كان الجدول قد أنشأها. #23887 (Kseniia Sumarokova). - إضافة
broken_data_files/broken_data_compressed_bytesإلىsystem.distribution_queue. وإضافة مقياس لعدد الملفات الخاصة بـ asynchronous insertion في الجداول Distributed التي وُسِمت بأنها تالفة (BrokenDistributedFilesToInsert). #23885 (Azat Khuzhin). - الاستعلام عن
system.tablesلم يعد يذهب إلى ZooKeeper. #23793 (Fuwang Hu). - مراعاة
lock_acquire_timeout_for_background_operationsفي استعلاماتOPTIMIZE. #23623 (Azat Khuzhin). - إمكانية تغيير إعدادات قرص
S3في وقت التشغيل عبر أمر SQL الجديدSYSTEM RESTART DISK. #23429 (Pavel Kovalenko). - إذا طبّق المستخدم إعدادًا غير صحيح عن طريق تعيين
max_distributed_connectionsبالخطأ إلى القيمة صفر، فإن كل استعلام على جدولDistributedسيطرح استثناءً برسالة تحتوي على “خطأ منطقي”. لكن هذا في الواقع سلوك متوقع، وليس خطأ منطقيًا، لذا كانت رسالة الاستثناء غير دقيقة قليلًا. كما كان ذلك يُفعّل checks في بيئة CI لدينا، التي تضمن عدم حدوث أخطاء منطقية مطلقًا. وبدلًا من ذلك، سنتعامل مع ضبطmax_distributed_connectionsعلى الصفر على أنه الحد الأدنى الممكن (واحد). #23348 (Azat Khuzhin). - تعطيل
min_bytes_to_use_mmap_ioافتراضيًا. #23322 (Azat Khuzhin). - دعم إمكانية احتواء
LowCardinalityعلىNULLمعjoin_use_nulls، وإغلاق #15101. #23237 (vdimir). - أُضيفت إمكانية استعادة أجزاء
MergeTreeإلى الدليلdetachedعلى قرصS3. #23112 (Pavel Kovalenko). - إعادة المحاولة عند انقطاع اتصال HTTP في S3. #22988 (Vladimir Chebotarev).
- إضافة الإعدادين
external_storage_max_read_rowsوexternal_storage_max_read_rowsإلى محرك جدول MySQL، ومصدر القاموس، وعمليات الجلب الثانوية للبيانات في MaterializeMySQL. #22697 (TCeason). MaterializeMySQL(ميزة تجريبية): في السابق، لم يكن MySQL 5.7.9 مدعومًا بسبب عدم توافق SQL. الآن تُترك عملية التحقق من معلمات MySQL إلى MaterializeMySQL. #23413 (TCeason).- تمكين قراءة الأعمدة الفرعية للجداول الموزعة. #24472 (Anton Popov).
- إصلاح استخدام Tuple في استعلامات
CREATE .. AS SELECT. #24464 (Anton Popov). - دعم تنسيق
Parquetفي جداولKafka. #23412 (Chao Ma).
إصلاح الأخطاء
- استخدم الإصدار القديم من الدالة modulo عند استخدامها في مفتاح partition والمفتاح الأساسي. يغلق #23508. #24157 (Kseniia Sumarokova). وكان هذا سببًا في عدم التوافق مع الإصدارات السابقة.
- تم إصلاح السلوك الذي كانت فيه معالجة الاستعلام
SYSTEM RESTART REPLICAأوSYSTEM SYNC REPLICAتستمر بلا نهاية. وقد اكتُشف ذلك على خادم بذاكرة RAM قليلة جدًا. #24457 (Nikita Mikhaylov). - إصلاح خاصية الرتابة غير الصحيحة للدالة
toWeek. يُصلح هذا #24422. أُدخل هذا الخلل في #5212، ثم انكشف لاحقًا بفضل مُقلِّم partition أكثر ذكاءً. #24446 (Amos Bird). - إصلاح عملية drop partition مع أجزاء intersect الوهمية. في حالات نادرة، قد توجد parts بإصدار mutation أكبر من رقم block الحالي. #24321 (Amos Bird).
- تم إصلاح خلل في نقل materialized view من قاعدة بيانات Ordinary إلى قاعدة بيانات Atomic (استعلام
RENAME TABLE). والآن يُنقل الجدول الداخلي إلى قاعدة البيانات الجديدة مع materialized view. يُصلح #23926. #24309 (tavplubix). - السماح بوجود رؤوس HTTP فارغة في طلبات client. يُصلح #23901. #24285 (Ivan).
- اضبط
max_threads = 1لإصلاح فشل mutation في جداولMemory. يغلق #24274. #24275 (flynn). - إصلاح خطأ مطبعي في تنفيذ جداول
Memory، وقد أُدخل هذا الخلل في #15127. يغلق #24192. #24193 (张中南). - إصلاح الإنهاء غير الطبيعي للخادم بسبب تعذر الوصول إلى
HDFSأثناء تنفيذ الاستعلام. يغلق #24117. #24191 (Kseniia Sumarokova). - إصلاح crash عند تحديث العمود
Nestedباستخدام شرط const. #24183 (hexiaoting). - إصلاح حالة race condition كان يمكن أن تحدث في RBAC تحت حمل مرتفع. يُصلح طلب السحب هذا #24090، #24134. #24176 (Vitaly Baranov).
- إصلاح خلل نادر كان يمكن أن يؤدي إلى جدول مُهيأ جزئيًا وقادر على خدمة write requests (insert/alter/إلخ). الآن ستعمل مثل هذه الجداول في وضع readonly. #24122 (alesapin).
- إصلاح مشكلة: كان
EXPLAIN PIPELINEمعSELECT xxx FINALيعرض pipeline غير صحيحة. (hexiaoting). - تم إصلاح استخدام قيمة
DateTimeثابتة مقابل عمودDateTime64فيWHERE. #24100 (Vasily Nemkov). - إصلاح تعطل في عملية دمج JOIN، وإغلاق #24010. #24013 (vdimir).
- قد تتسبب بعض استعلامات
ALTER PARTITIONفي ظهور الخطأينPart A intersects previous part BوUnexpected merged part C intersecting drop range Dفي قائمة انتظار النسخ المتماثل. تم إصلاح ذلك. إصلاح #23296. #23997 (tavplubix). - إصلاح SIGSEGV عند استخدام GROUP BY الخارجي وصف الفائض (أي الاستعلامات مثل
SELECT FROM GROUP BY WITH TOTALS SETTINGS max_bytes_before_external_group_by>0, max_rows_to_group_by>0, group_by_overflow_mode='any', totals_mode='before_having'). #23962 (Azat Khuzhin). - إصلاح احتساب مقاييس المفاتيح لقاموس
CACHEعند وجود تكرارات في المصدر (ما يؤدي إلى تجاوزاتDictCacheKeysRequestedMiss). #23929 (Azat Khuzhin). - إصلاح تنفيذ مجمّع الاتصالات لمحرك
PostgreSQL. إغلاق #23897. #23909 (Kseniia Sumarokova). - إصلاح
distributed_group_by_no_merge = 2معGROUP BYودالة تجميعية مغلّفة داخل دالة عادية (وكان هذا قد تعطل في #23546). ويُصدر استثناء إذا حاول أحد استخدامdistributed_group_by_no_merge = 2مع دوال النوافذ. كما تم تعطيلoptimize_distributed_group_by_sharding_keyللاستعلامات التي تحتوي على دوال النوافذ. #23906 (Azat Khuzhin). - إصلاح للدالة الجدولية
s3: تحسين التعامل مع أخطاء HTTP. كانت أجسام استجابات أخطاء HTTP تُتجاهل سابقًا. #23844 (Vladimir Chebotarev). - إصلاح للدالة الجدولية
s3: تحسين التعامل مع URI. تم إصلاح حالة عدم توافق مع عناوين URL التي تحتوي على الرمز+، إذ لم يكن من الممكن سابقًا قراءة البيانات ذات هذه المفاتيح. #23822 (Vladimir Chebotarev). - إصلاح الخطأ
Can't initialize pipeline with empty pipeفي الاستعلامات التي تستخدمGLOBAL IN/JOINوuse_hedged_requests. إصلاح #23431. #23805 (Nikolai Kochetov). - إصلاح مشكلة عدم عمل
CLEAR COLUMNعندما يكون مُشارًا إليه بواسطة عرض مادي. إغلاق #23764. #23781 (flynn). - إصلاح مشكلة استخدام الذاكرة بعد تحريرها عند القراءة من HDFS إذا استُخدم التنسيق
Values. #23761 (Kseniia Sumarokova). - تجنب الخطأ المحتمل “يتعذر جدولة مهمة” (في حال وقوع استثناء ما) عند تنفيذ INSERT إلى Distributed. #23744 (Azat Khuzhin).
- أُصلِح خطأ في استعادة نسخة
ReplicatedMergeTreeالمتماثلة غير المتزامنة. كان من الممكن أن تتجاهل هذه النسخة بعض تحديثات البيانات الوصفية إذا نُفِّذ استعلامALTERأثناء فترة تعطل النسخة المتماثلة. #23742 (tavplubix). - أُصلِح خطأ يتعلق بـ
JoinوWITH TOTALS، ويُغلِق #17718. #23549 (vdimir). - أُصلِح خطأ محتمل من نوع
Block structure mismatchفي الاستعلامات التي تحتوي علىUNION، وكان يمكن أن يحدث بعد تحسين دفع التصفية. يُصلِح #23029. #23359 (Nikolai Kochetov). - أُضيف تحويل نوع عند تفعيل الإعداد
optimize_skip_unused_shards_rewrite_in. وهذا يُصلِح تقرير MSan. #23219 (Azat Khuzhin). - أُضيف فحص كان مفقودًا عند تحديث الأعمدة الفرعية المتداخلة، ويُغلِق المشكلة: #22353. #22503 (hexiaoting).
تحسينات في البناء/الاختبار/التحزيم
- دعم البناء على Illumos. #24144. يضيف دعماً للبناء على أنظمة التشغيل المشتقة من Solaris. #23746 (bnaecker).
- إضافة المزيد من اختبارات الأداء لجداول hash، بما في ذلك Swiss Table من Google (الذي بدا أبطأ من hash map في ClickHouse في سيناريو الاستخدام المحدد لدينا). #24111 (Maksim Kita).
- تحديث librdkafka من 1.6.0-RC3 إلى 1.6.1. #23874 (filimonov).
- تفعيل
asynchronous-unwind-tablesدائماً بشكل صريح. قد يؤدي ذلك إلى إصلاح محلل الاستعلامات على AArch64. #23602 (alexey-milovidov). - تجنب الاعتماد المحتمل أثناء البناء على إعدادات اللغة وترتيب نظام الملفات. يتيح ذلك عمليات بناء قابلة لإعادة الإنتاج. #23600 (alexey-milovidov).
- إزالة أحد مصادر عدم الحتمية من عملية البناء. أصبحت عمليات البناء الآن، حتى عند تنفيذها في أوقات مختلفة، تنتج ملفات ثنائية تنفيذية متطابقة على مستوى البايت. تمت معالجة #22113 جزئياً. #23559 (alexey-milovidov).
- إضافة أداة بسيطة لاختبار أداء (Zoo)Keeper. #23038 (alesapin).
إصدار ClickHouse 21.5، 2021-05-20
تغيير غير متوافق مع الإصدارات السابقة
- تغيير طريقة مقارنة الأعداد الصحيحة والأعداد ذات الفاصلة العائمة عندما يتعذر تمثيل العدد الصحيح بدقة في نوع البيانات ذي الفاصلة العائمة. في الإصدار الجديد ستُرجِع المقارنة القيمة false بسبب حدوث خطأ تقريب. مثال:
9223372036854775808.0 != 9223372036854775808، لأن العدد9223372036854775808لا يمكن تمثيله بدقة كعدد ذي فاصلة عائمة (ويُقرَّب9223372036854775808.0إلى9223372036854776000.0). أما في الإصدار السابق، فكانت المقارنة تُرجِع أن العددين متساويان، لأنه إذا حُوِّل العدد ذو الفاصلة العائمة9223372036854776000.0مرة أخرى إلى UInt64، فستكون النتيجة9223372036854775808. وللإشارة، فإن لغة البرمجة بايثون تتعامل أيضاً مع هذين العددين على أنهما متساويان. لكن هذا السلوك كان يعتمد على طراز CPU (مع نتائج مختلفة على AMD64 وAArch64 لبعض الأعداد الخارجة عن النطاق)، لذلك جعلنا المقارنة أكثر دقة. ولن تُعامل الأعداد الصحيحة والأعداد ذات الفاصلة العائمة على أنها متساوية إلا إذا كان العدد الصحيح مُمثَّلاً بدقة في نوع الفاصلة العائمة. #22595 (alexey-milovidov). - إزالة دعم
argMinوargMaxلوسيطTupleواحد. لم يكن الكود آمناً من ناحية الذاكرة. أُضيفت هذه الميزة عن طريق الخطأ، وهي مربكة للمستخدمين. ويمكن إعادة تقديم هاتين الدالتين لاحقاً تحت أسماء مختلفة. يُصلح هذا #22384 ويتراجع عن #17359. #23393 (alexey-milovidov).
ميزة جديدة
- تمت إضافة الدالتين
dictGetChildren(dictionary, key)وdictGetDescendants(dictionary, key, level). تُرجع الدالةdictGetChildrenجميع العناصر التابعة كمصفوفة من الفهارس. وهي تحويل عكسي للدالةdictGetHierarchy. وتُرجع الدالةdictGetDescendantsجميع العناصر التابعة المتفرعة كما لو كانتdictGetChildrenقد طُبّقتlevelمرةً بشكل تكراري. وتُعد قيمةlevelالتي تساوي صفرًا مكافئةً للمالانهاية. كما تم تحسين أداء الدالتينdictGetHierarchyوdictIsIn. يُغلق #14656. #22096 (Maksim Kita). - تمت إضافة الدالة
dictGetOrNull. وهي تعمل مثلdictGet، لكنها تُرجعNullإذا لم يُعثر على المفتاح في القاموس. يُغلق #22375. #22413 (Maksim Kita). - تمت إضافة دالة الجدول
s3Cluster، والتي تتيح معالجة الملفات منs3بالتوازي على كل عقدة في عنقود محدد. #22012 (Nikita Mikhaylov). - تمت إضافة دعم النسخ المتماثلة والشظايا في محرك جدول / دالة جدول MySQL/PostgreSQL. يمكنك كتابة
SELECT * FROM mysql('host{1,2}-{1|2}', ...). يُغلق #20969. #22217 (Kseniia Sumarokova). - تمت إضافة الاستعلام
ALTER TABLE ... FETCH PART .... وهو مشابه لـFETCH PARTITION، لكنه يجلب جزءًا واحدًا فقط. #22706 (turbo jason). - تمت إضافة الإعداد
max_distributed_depthالذي يحدّ من عمق الاستعلامات التكرارية إلى جداولDistributed. يُغلق #20229. #21942 (flynn).
تحسين الأداء
- تحسّن أداء
intDivمن خلال التوجيه الديناميكي لـ AVX2. يُغلق هذا #22314. #23000 (alexey-milovidov). - تحسّن أداء القراءة من input format
ArrowStreamللمصادر غير الملف المحلي (مثل URL). #22673 (nvartolomei). - عُطِّل الضغط افتراضيًا عند التفاعل مع localhost (باستخدام clickhouse-client أو من server إلى server مع distributed queries) عبر native protocol. قد يحسّن ذلك أداء بعض عمليات الاستيراد/التصدير. يُغلق هذا #22234. #22237 (alexey-milovidov).
- استبعاد values التي لا تنتمي إلى shard من الجزء الأيمن من قسم IN في distributed queries (ضمن
optimize_skip_unused_shards_rewrite_in، وهو enabled افتراضيًا، مع أنه لا يزال يتطلبoptimize_skip_unused_shards). #21511 (Azat Khuzhin). - تحسّن أداء قراءة subset من columns مع محرك جدول شبيه بـ File وformat موجّه بالأعمدة مثل Parquet أو Arrow أو ORC. يُغلق هذا #issue:20129. #21302 (keenwolf).
- السماح بنقل المزيد من الشروط إلى
PREWHEREكما كان الحال قبل الإصدار 21.1 (مع تعديل الاستدلالات الداخلية). وقد يؤدّي العدد غير الكافي من الشروط المنقولة إلى تراجع الأداء. #23397 (Anton Popov). - تحسّن أداء اتصالات ODBC، وأُصلحت جميع المشكلات المتبقية في قائمة الأعمال المتراكمة. استُخدمت مكتبة
nanodbcبدلًا منPoco::ODBC. يُغلق هذا #9678. أُضيف دعم لـ DateTime64 وDecimal* في محرك جدول ODBC. يُغلق هذا #21961. وأُصلحت مشكلة اقتطاع النصوص السيريلية. يُغلق هذا #16246. وأُضيفت connection pools إلى odbc bridge. #21972 (Kseniia Sumarokova).
تحسينات
- زِيدت قيمة
max_uri_size(الحد الأقصى لحجم عنوان URL في واجهة HTTP) إلى 1 MiB افتراضيًا. يُغلق هذا #21197. #22997 (alexey-milovidov). - ضُبط
background_fetches_pool_sizeعلى8، وهو أفضل لاستخدامات بيئات الإنتاج مع عمليات insert الصغيرة المتكررة أو عند بطء عنقود ZooKeeper. #22945 (alexey-milovidov). - أُضيف الخياران
initial_array_sizeوmax_array_sizeإلى FlatDictionary. #22521 (Maksim Kita). - أُضيف الإعداد الجديد
non_replicated_deduplication_windowلإزالة التكرار في عمليات insert الخاصة بـ MergeTree غير المكررة. #22514 (alesapin). - حُدِّثت المسارات إلى إعدادات نموذج
CatBoostعند إعادة تحميل config. #22434 (Kruglov Pavel). - أُضيف دعم النوع
Decimal256في القواميس. ويُعدDecimal256ميزة تجريبية. يُغلق هذا #20979. #22960 (Maksim Kita). - جرى تمكين
async_socket_for_remoteافتراضيًا (باستخدام عدد أقل من خيوط نظام التشغيل للاستعلامات الموزعة). #23683 (Nikolai Kochetov). - أُصلحت
quantile(s)TDigest. وأُضيفت معالجة خاصة لـ singleton centroids وفقًا لـ tdunning/t-digest 3.2+. كما أُصلح خطأ متعلق بالإفراط في ضغط centroids في تنفيذ إصدار أقدم من الخوارزمية. #23314 (Vladimir Chebotarev). - أصبح اسم الدالة
unhexغير حساس لحالة الأحرف للتوافق مع MySQL. #23229 (alexey-milovidov). - نُفِّذت الدوال
arrayHasAnyوarrayHasAllوhasوindexOfوcountEqualللحالة العامة عندما تختلف أنواع عناصر المصفوفة. في الإصدارات السابقة، كانت الدالتانarrayHasAnyوarrayHasAllتُرجعان false، بينما كانتhasوindexOfوcountEqualتُطلق استثناءً. كما أُضيف دعمDecimalوأنواع الأعداد الصحيحة الكبيرة في الدالةhasوما شابهها. يُغلق هذا #20272. #23044 (alexey-milovidov). - رُفعت العتبة الخاصة بالحد الأقصى لعدد التطابقات في نتيجة الدالة
extractAllGroupsHorizontal. #23036 (Vasily Nemkov). - لا يُنفَّذ
optimize_skip_unused_shardsلعنقود يتكون من عقدة واحدة. #22999 (Azat Khuzhin). - أُضيفت إمكانية تشغيل clickhouse-keeper (بديل تجريبي مباشر لـ ZooKeeper) مع SSL. ويمكن استخدام إعدادات config
keeper_server.tcp_port_secureللتفاعل الآمن بين العميل وkeeper-server. كما يمكن استخدامkeeper_server.raft_configuration.secureلتمكين الاتصال الداخلي الآمن بين العقد. #22992 (alesapin). - أُضيفت إمكانية تفريغ المخزن المؤقت في الخلفية فقط بالنسبة إلى جداول
Buffer. #22986 (Azat Khuzhin). - عند الاستعلام من جدول MergeTree مع وجود NULL في شرط WHERE، كان يُرمى استثناء في حالات نادرة. هذا يُغلق #20019. #22978 (alexey-milovidov).
- إصلاح معالجة الأخطاء في Poco HTTP Client لـ AWS. #22973 (kreuzerkrieg).
- مراعاة
max_part_removal_threadsفيReplicatedMergeTree. #22971 (Azat Khuzhin). - إصلاح حالة طرفية غامضة في إعدادات MergeTree: inactive_parts_to_throw_insert = 0 مع inactive_parts_to_delay_insert > 0. #22947 (Azat Khuzhin).
- تعمل
dateDiffالآن مع الوسائطDateTime64(حتى للقيم الواقعة خارج نطاقDateTime) #22931 (Vasily Nemkov). - MaterializeMySQL (ميزة تجريبية): أُضيفت إمكانية نسخ قواعد بيانات MySQL التي تحتوي على عروض دون حدوث فشل، وذلك بتجاهل هذه العروض. #22760 (Christian).
- السماح بسياسة الصفوف في RBAC عبر بروتوكول PostgreSQL. هذا يُغلق #22658. بروتوكول PostgreSQL مُمكَّن افتراضيًا في التهيئة. #22755 (Kseniia Sumarokova).
- إضافة مقياس لتتبّع مقدار الوقت المستغرَق أثناء انتظار قفل Buffer layer. #22725 (Azat Khuzhin).
- السماح باستخدام CTE في تعريف VIEW. هذا يُغلق #22491. #22657 (Amos Bird).
- مسح بقية الشاشة وإظهار المؤشر في
clickhouse-clientإذا كان البرنامج السابق قد ترك آثارًا غير مرغوب فيها في الطرفية. هذا يُغلق #16518. #22634 (alexey-milovidov). - جعل الدالة
roundتتصرف بشكل متّسق على المنصات غير x86_64. ويُستخدم التقريب من المنتصف إلى أقرب عدد زوجي (تقريب Banker’s). #22582 (alexey-milovidov). - التحقق بشكل صحيح من بنية كتل البيانات التي ترسلها Distributed tables. #22325 (Azat Khuzhin).
- السماح بنشر أخطاء Kafka إلى عمود افتراضي في Kafka engine، مع التحكّم في ذلك عبر الإعداد
kafka_handle_error_mode. #21850 (fastio). - إضافة أسماء بديلة
simpleJSONExtract/simpleJSONHasإلىvisitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. يُصلح #21383. #21519 (fastio). - تمت إضافة
clickhouse-library-bridgeلمصدر القاموس من نوع library. يغلق #9502. #21509 (Kseniia Sumarokova). - منع حذف عمود إذا كان مُشارًا إليه من قِبل materialized view. يغلق #21164. #21303 (flynn).
- دعم بيانات اعتماد ديناميكية بين الخوادم (تدوير بيانات الاعتماد من دون توقف). #14113 (johnskopis).
- تمت إضافة دعم لتخزين Kafka مع رسائل بتنسيق
ArrowوArrowStream. #23415 (Chao Ma). - إصلاح الفاصلة المنقوطة المفقودة في رسالة الاستثناء. وقد يجد المستخدم هذه الرسالة غير مريحة للقراءة. #23208 (alexey-milovidov).
- إصلاح المسافة المفقودة في بعض رسائل الاستثناء المتعلقة بالنوع
LowCardinality. #23207 (alexey-milovidov). - كانت بعض values تُنسَّق بمحاذاة إلى الوسط داخل خلايا الجدول بتنسيق
Markdown، ولم يعد ذلك يحدث. #23096 (alexey-milovidov). - إزالة التفاصيل غير الأساسية من الاقتراحات في clickhouse-client. هذا يغلق #22158. #23040 (alexey-milovidov).
- تصحيح حساب الحقل
bytes_allocatedفي system.dictionaries للقواميسsparse_hashed. #22867 (Azat Khuzhin). - إصلاح الحساب التقريبي لإجمالي rows عند القراءة العكسية من MergeTree. #22726 (Azat Khuzhin).
- إصلاح الحالة التي كان فيها من الممكن تهيئة قاموس بمصدر ClickHouse يشير إلى نفسه، مما يؤدي إلى حلقة لا نهائية. يغلق #14314. #22479 (Maksim Kita).
إصلاح الأخطاء
- عدة إصلاحات للطلبات الاحتياطية. تم إصلاح الخطأ
Can't initialize pipeline with empty pipeفي الاستعلامات التي تتضمنGLOBAL IN/JOINعند تفعيل الإعدادuse_hedged_requests. إصلاح لـ #23431. #23805 (Nikolai Kochetov). كما تم إصلاح حالة تسابق في الاتصالات الاحتياطية كانت تؤدي إلى تعطل. وهذا يصلح #22161. #22443 (Kruglov Pavel). وتم أيضًا إصلاح تعطل محتمل عند تلقيunknown packetمن استعلام بعيد (مع تفعيلasync_socket_for_remote). إصلاح لـ #21167. #23309 (Nikolai Kochetov). - تم إصلاح السلوك الذي كان يؤدي، عند تعطيل الإعداد
input_format_with_names_use_header، إلى تجاهل جميع المدخلات بتنسيق CSVWithNames. وهذا يصلح #22406. #23202 (Nikita Mikhaylov). - تم إصلاح مشكلة مهلة الاتصال في جسر JDBC البعيد. يغلق #9609. #23771 (Maksim Kita, alexey-milovidov).
- تم إصلاح منطق التحميل الأولي لـ
complex_key_hashedإذا كانupdate_fieldمحددًا. يغلق #23800. #23824 (Maksim Kita). - تم إصلاح التعطل الذي كان يحدث عند تطبيق كلٍّ من
PREWHEREومرشح سياسة الصفوف مع نتيجة فارغة. #23763 (Amos Bird). - تجنّب الخطأ المحتمل “Cannot schedule a task” (في حال وقوع استثناء) عند INSERT إلى Distributed. #23744 (Azat Khuzhin).
- تمت إضافة استثناء في حال كانت القيم متطابقة تمامًا في كلتا العينتين في الدالة التجميعية
mannWhitneyUTest. وهذا يصلح #23646. #23654 (Nikita Mikhaylov). - تم إصلاح عطل في الخادم كان يحدث عندما يتسبب إدراج البيانات عبر HTTP في وقوع استثناء. وهذا يصلح #23512. #23643 (Nikita Mikhaylov).
- تم إصلاح سوء تفسير بعض تعبيرات
LIKEالتي تتضمن تسلسلات هروب. #23610 (alexey-milovidov). - تم إصلاح تعليق أمرَي إعادة التشغيل والإيقاف. يغلق #20214. #23552 (filimonov).
- تم إصلاح المطابق
COLUMNSفي حالة وجود عدة JOINs في استعلام select. يغلق #22736. #23501 (Maksim Kita). - تم إصلاح تعطل كان يحدث عند تعديل القيمة الافتراضية لعمود عندما يكون العمود نفسه مستخدمًا كمعامل في
ReplacingMergeTree. #23483 (hexiaoting). - تم إصلاح الحالات الطرفية في الدمج العمودي مع
ReplacingMergeTree. وفي حالات نادرة، كان ذلك قد يؤدي إلى فشل عمليات الدمج مع استثناءات مثلIncomplete granules are not allowed while blocks are granules size. #23459 (Anton Popov). - تم إصلاح خطأ كان يمنع إجراء cast من قيمة Array حرفية فارغة إلى Array ذات أبعاد أكبر من 1، مثل
CAST([] AS Array(Array(String))). يغلق #14476. #23456 (Maksim Kita). - تم إصلاح خطأ كانت فيه الدالة التجميعية
deltaSumتنتج نتيجة غير صحيحة بعد إعادة تعيين العداد. #23437 (Russ Frank). - تم إصلاح الخطأ
Cannot unlink fileعند فشل إنشاء جدول ReplicatedMergeTree مع تهيئة متعددة الأقراص. هذا يغلق #21755. #23433 (tavplubix). - تم إصلاح توليد تعبير ثابت غير متوافق أثناء تقليم الأقسام استنادًا إلى الأعمدة الافتراضية. هذا يصلح https://github.com/ClickHouse/ClickHouse/pull/21401#discussion_r611888913. #23366 (Amos Bird).
- تم إصلاح تعطل كان يحدث عند ضبط
join_algorithmعلى ‘auto’ وتنفيذ Join باستخدام Dictionary. يغلق #23002. #23312 (Vladimir). - لا تُخفِّف شروط NOT أثناء تقليم الأقسام. هذا يصلح #23305 و#21539. #23310 (Amos Bird).
- تم إصلاح حالة تسابق نادرة جدًا أثناء التنظيف الخلفي للكتل القديمة. وقد يؤدي ذلك إلى عدم إزالة تكرار كتلة إذا كانت قريبة جدًا من نهاية نافذة إزالة التكرار. #23301 (tavplubix).
- تم إصلاح حالة تسابق نادرة جدًا (موزعة) بين إنشاء جداول ReplicatedMergeTree وإزالتها. وقد يتسبب ذلك في استثناءات مثل
node doesn't existعند محاولة إنشاء جدول replicated. يصلح #21419. #23294 (tavplubix). - تم إصلاح إنشاء Dictionary بمفتاح بسيط من DDL إذا لم يكن المفتاح الأساسي هو السمة الأولى. يصلح #23236. #23262 (Maksim Kita).
- تم إصلاح القراءة من ODBC عند وجود عدد كبير من أسماء الأعمدة الطويلة في جدول. يغلق #8853. #23215 (Kseniia Sumarokova).
- MaterializeMySQL (ميزة تجريبية): تم إصلاح الخطأ
Not found columnعند الاستعلام منMaterializeMySQLمع شرط على عمود المفتاح. يُصلح #22432. #23200 (tavplubix). - تصحيح معالجة الأسماء المستعارة إذا اختُزل الاستعلام الفرعي إلى ثابت. يُصلح #22924. يُصلح #10401. #23191 (Maksim Kita).
- قد يفشل الخادم في بدء التشغيل إذا كان الإعداد
data_type_default_nullableمفعّلًا في ملف التعريف الافتراضي، وقد أُصلح ذلك. يُصلح #22573. #23185 (tavplubix). - تم إصلاح تعطل عند إيقاف التشغيل كان يحدث بسبب احتساب غير صحيح للاتصالات الحالية. #23154 (Vitaly Baranov).
- تم إصلاح الخطأ
Table .inner_id... doesn't existعند الاستعلام من العرض المادي بعد فصله عن قاعدة بيانات Atomic ثم إرفاقه مجددًا. #23047 (tavplubix). - تم إصلاح الخطأ
Cannot find column in ActionsDAG resultالذي قد يحدث إذا كان الاستعلام الفرعي يستخدمuntuple. يُصلح #22290. #22991 (Nikolai Kochetov). - تم إصلاح استخدام الأعمدة الثابتة من النوع
Mapذات القيم القابلة لأن تكون NULL. #22939 (Anton Popov). - تم إصلاح
formatDateTime()معDateTime64ومحدِّد التنسيق “%C”، كما تم إصلاحtoDateTime64()للقيم الكبيرة وscale غير الصفري. #22937 (Vasily Nemkov). - تم إصلاح تعطل عند استخدام
mannWhitneyUTestوrankCorrمع window functions. يُصلح هذا #22728. #22876 (Nikita Mikhaylov). - LIVE VIEW (ميزة تجريبية): تم إصلاح احتمال حدوث تعليق عند تنفيذ DROP/CREATE بشكل متزامن لـ TEMPORARY LIVE VIEW في
TemporaryLiveViewCleaner، انظر. #22858 (Vitaly Baranov). - تم إصلاح pushdown لـ
HAVINGفي الحالة التي يُستخدم فيها عمود التصفية في aggregation. #22763 (Anton Popov). - تم إصلاح حالات تعليق محتملة في طلبات ZooKeeper عند حدوث استثناء نفاد الذاكرة (OOM). يُصلح #22438. #22684 (Nikolai Kochetov).
- تم إصلاح انتظار mutations على عدة replicas لمحركات الجداول ReplicatedMergeTree. سابقًا، كان من الممكن أن ينتهي استعلام mutation/alter قبل تنفيذ mutation فعليًا على replicas الأخرى. #22669 (alesapin).
- تم إصلاح الاستثناء الخاص بـ Log مع الأنواع المتداخلة من دون أعمدة في عبارة SELECT. #22654 (Azat Khuzhin).
- تم إصلاح الانتظار غير المحدود لطلبات AWS المساعدة. #22594 (Vladimir Chebotarev).
- تم إصلاح تعطل يحدث عندما يغلق العميل الاتصال مبكرًا جدًا #22579. #22591 (nvartolomei).
- نوع البيانات
Map(ميزة تجريبية): تم إصلاح تنسيق غير صحيح للدالةmapفي الاستعلامات الموزعة. #22588 (foolchi). - تم إصلاح إلغاء تسلسل السلسلة الفارغة من دون سطر جديد في نهاية تنسيق TSV. وهذا يغلق #20244. حل بديل ممكن من دون تحديث الإصدار: اضبط
input_format_null_as_defaultعلى صفر. وكانت قيمته صفرًا في الإصدارات القديمة. #22527 (alexey-milovidov). - تم إصلاح تحويل نوع غير صحيح لعمود من النوع
LowCardinalityفي خوارزمية Merge Join. إغلاق #22386، وإغلاق #22388. #22510 (Vladimir). - كان من الممكن حدوث تجاوز سعة في المخزن المؤقت (عند القراءة) في فهرس النص الكامل
tokenbf_v1. لا تُستخدم البايتات الزائدة، لكن عملية القراءة قد تؤدي إلى تعطل في حالات نادرة. وهذا يغلق #19233. #22421 (alexey-milovidov). - لا تقيّد حجم مقاطع HTTP. يُصلح #21907. #22322 (Ivan).
- تم إصلاح خطأ يؤدي إلى تجميع ناقص للبيانات عند تفعيل
optimize_aggregation_in_orderووجود عدد كبير من الأجزاء في الجدول. كما تم تحسين أداء التجميع قليلًا عند تفعيلoptimize_aggregation_in_order. #21889 (Anton Popov). - تحقّق مما إذا كانت table function
viewمستخدمة كعمود. وهذا يُكمل #20350. #21465 (Amos Bird). - تم إصلاح خطأ “عمود غير معروف” للجداول التي تستخدم المحرك
Mergeفي الاستعلامات التي تحتوي علىJOINوaggregation. يغلق #18368، وإغلاق #22226. #21370 (Vladimir). - تم إصلاح تعارضات الأسماء في تحسين pushdown. وكان هذا يسبب ترشيح
WHEREغير صحيح بعد FULL JOIN. إغلاق #20497. #20622 (Vladimir). - تم إصلاح خطأ نادر جدًا حيث لا يكون إدراج quorum مع
quorum_parallel=1في الواقع “quorum” بسبب deduplication. #18215 (filimonov - أبلغ عنه، alesapin - أصلحه).
تحسينات في البناء/الاختبار/التحزيم
- تشغيل الاختبارات عديمة الحالة بالتوازي في CI. #22300 (alesapin).
- تبسيط حزم Debian. يُصلح هذا #21698. #22976 (alexey-milovidov).
- تمت إضافة دعم لبناء ClickHouse على Apple M1. #21639 (changvvb).
- تم إصلاح بناء ClickHouse Keeper على MacOS. #22860 (alesapin).
- تم إصلاح بعض الاختبارات على منصة AArch64. #22596 (alexey-milovidov).
- تمت إضافة محاذاة للدوال لتحسين الأداء المحتمل. #21431 (Danila Kutenin).
- تعديل بعض الاختبارات لإخراج نتائج متطابقة على amd64 و aarch64 (qemu). إذ كانت النتيجة تعتمد على سلوك CPU خاص بالتنفيذ. #22590 (alexey-milovidov).
- السماح بتنميط الاستعلام على x86_64 فقط. راجع #15174 و #15638. يُغلق هذا #15638. #22580 (alexey-milovidov).
- السماح بالبناء باستخدام xz (lzma) غير المضمّن عبر خيار CMake
USE_INTERNAL_XZ_LIBRARY=OFF. #22571 (Kfir Itzhak). - تمكين
openldapالمضمّن علىppc64le#22487 (Kfir Itzhak). - تعطيل المكتبات غير المتوافقة (والمرتبطة عادةً بالمنصة) على
ppc64le#22475 (Kfir Itzhak). - إضافة اختبار Jepsen في CI لـ ClickHouse Keeper. #22373 (alesapin).
- بناء
jemallocمع دعم تنميط heap. #22834 (nvartolomei). - تجنّب السلوك غير المعرّف (UB) في محركات
*Logعند فك قفل rwlock بسبب فك القفل من thread أخرى. #22583 (Azat Khuzhin). - تم إصلاح السلوك غير المعرّف (UB) عبر فك قفل rwlock الخاصة بـ TinyLog من thread نفسها. #22560 (Azat Khuzhin).
إصدار ClickHouse 21.4
إصدار ClickHouse 21.4.1 2021-04-12
تغيير غير متوافق مع الإصدارات السابقة
- ستُحاذي الدالة
toStartOfIntervalFunctionالفواصل الزمنية بالساعات إلى منتصف الليل (في الإصدارات السابقة كانت تُحاذى إلى بداية حقبة يونكسunix epoch). على سبيل المثال، ستقسّمtoStartOfInterval(x, INTERVAL 11 HOUR)كل يوم إلى ثلاث فواصل:00:00:00..10:59:59و11:00:00..21:59:59و22:00:00..23:59:59. هذا السلوك أنسب للاحتياجات العملية. وبذلك يُغلق #9510. #22060 (alexey-milovidov). - يجب أن تزداد قيمتا
AgeوPrecisionفي إعدادات rollup الخاصة بـ graphite من فترة احتفاظ إلى التي تليها. ويجري الآن التحقق من ذلك، كما أن الإعداد الخاطئ يؤدي إلى ظهور استثناء. #21496 (Mikhail f. Shiryaev). - إصلاح
cutToFirstSignificantSubdomainCustom()/firstSignificantSubdomainCustom()التي كانت تُرجع نتائج غير صحيحة للنطاقات ذات ثلاثة مستويات أو أكثر الموجودة في قائمة نطاقات المستوى الأعلى المخصّصة. بالنسبة إلى نطاقات الإدخال المطابقة لنطاقات المستوى الأعلى المخصّصة هذه، كان نطاق المستوى الثالث يُعتبر أول نطاق فرعي مهم. وقد أُصلح ذلك الآن. قد يتسبب هذا التغيير في عدم توافق إذا كانت الدالة مستخدمة، على سبيل المثال، في مفتاح التقسيم الأفقي. #21946 (Azat Khuzhin). - استُبدل العمود
keysفي الجدولsystem.dictionariesبالعمودينkey.namesوkey.types. ولا تتطلب الأعمدةkey.namesوkey.typesوattribute.namesوattribute.typesمن الجدولsystem.dictionariesأن يكون القاموس محمّلًا. #21884 (Maksim Kita). - أصبحت النسخ المتماثلة التي تعالج الأمر
ALTER TABLE ATTACH PART[ITION]تبحث في مجلداتdetached/الخاصة بها قبل جلب البيانات من النسخ المتماثلة الأخرى. وكتفصيل على مستوى التنفيذ، أُضيف أمر جديد هوATTACH_PARTإلى السجل المتماثل. ويجري البحث عن الأجزاء ومقارنتها باستخدام قيم التحقق الخاصة بها. #18978 (Mike Kot). ملاحظة:- قد لا تعمل استعلامات
ATTACH PART[ITION]أثناء ترقية المجموعة. - لا يمكن التراجع إلى إصدار أقدم من ClickHouse بعد تنفيذ استعلام
ALTER ... ATTACHفي الإصدار الجديد، لأن الخوادم القديمة ستفشل في تمرير المُدخلATTACH_PARTفي السجل المتماثل.
- قد لا تعمل استعلامات
- في هذا الإصدار، سيؤدي العنصر الفارغ
<remote_url_allow_hosts></remote_url_allow_hosts>إلى حظر جميع عمليات الوصول إلى المضيفين البعيدين، بينما لم يكن له أي تأثير في الإصدارات السابقة. إذا كنت تريد الإبقاء على السلوك القديم وكان لديك عنصرremote_url_allow_hostsفارغ في ملف الإعداد، فأزِله. #20058 (Vladimir Chebotarev).
ميزة جديدة
- توسيع نطاق
DateTime64لدعم التواريخ من عام 1925 إلى 2283. وتحسين دعمDateTimeحول التاريخ الصفري (1970-01-01). #9404 (alexey-milovidov، Vasily Nemkov). لا تعمل جميع دوال الوقت والتاريخ مع نطاق التواريخ الموسّع. - إضافة دعم مصادقة Kerberos للمستخدمين المُعدّين مسبقًا وطلبات HTTP (GSS-SPNEGO). #14995 (Denis Glazachev).
- إضافة الإعداد
prefer_column_name_to_aliasلاستخدام أسماء الأعمدة الأصلية بدلًا من الأسماء المستعارة. وهذا مطلوب لتحقيق توافق أكبر مع قواعد استخدام الأسماء المستعارة الشائعة في قواعد البيانات. هذا مرتبط بـ #9715 و#9887. #22044 (Amos Bird). - إضافة الدالتين
dictGetChildren(dictionary, key)وdictGetDescendants(dictionary, key, level). تُرجع الدالةdictGetChildrenجميع العناصر الفرعية كمصفوفة من الفهارس. وهي تحويل عكسي للدالةdictGetHierarchy. وتُرجع الدالةdictGetDescendantsجميع العناصر المتحدّرة كما لو أنdictGetChildrenطُبّقتlevelمرة بشكل递归. وتكون قيمةlevelصفر مكافئة لللانهاية. يُغلق #14656. #22096 (Maksim Kita). - إضافة مصدر القاموس
executable_pool. إغلاق #14528. #21321 (Maksim Kita). - إضافة table function
dictionary. وهي تعمل بالطريقة نفسها التي يعمل بها المحرّكDictionary. يُغلق #21560. #21910 (Maksim Kita). - دعم النوع
NullableلسمةPolygonDictionary. #21890 (Maksim Kita). - تستخدم الدالتان
dictGetوdictHasاسم قاعدة البيانات الحالية إذا لم يتم تحديده للقواميس التي أُنشئت باستخدام DDL. يُغلق #21632. #21859 (Maksim Kita). - إضافة الدالة
dictGetOrNull. وهي تعمل مثلdictGet، لكنها تُرجعNullإذا لم يتم العثور على المفتاح في القاموس. يُغلق #22375. #22413 (Maksim Kita). - إضافة التحديث غير المتزامن في قواميس
ComplexKeyCacheوSSDCacheوSSDComplexKeyCache. وإضافة دعم النوعNullableفي قواميسCacheوComplexKeyCacheوSSDCacheوSSDComplexKeyCache. وإضافة دعم جلب سمات متعددة باستخدام الدالتينdictGetوdictGetOrDefault. إصلاح #21517. #20595 (Maksim Kita). - دعم الدالة
dictHasللقاموسRangeHashedDictionary. إصلاح #6680. #19816 (Maksim Kita). - أضِف الدالة
timezoneOfالتي تُرجع اسم المنطقة الزمنية لأنواع البياناتDateTimeأوDateTime64. لا يؤدي ذلك إلى إغلاق #9959. وأصلِح حالات عدم الاتساق في أسماء الدوال: أضِف أيضًا الأسماء المستعارةtimezoneوtimeZone، وكذلكtoTimezoneوtoTimeZoneوtimezoneOfوtimeZoneOf. #22001 (alexey-milovidov). - أضِف البند الاختياري الجديد
GRANTEESإلى أوامرCREATE/ALTER USER. يحدّد هذا البند المستخدمين أو الأدوار المسموح لهم بتلقي grants من هذا المستخدم، بشرط أن يكون هذا المستخدم قد مُنح أيضًا جميع امتيازات الوصول المطلوبة مع خيار المنح. يُستخدمGRANTEES ANYافتراضيًا، ما يعني أن المستخدم الذي لديه خيار المنح يمكنه منح الامتيازات لأي شخص. الصياغة:CREATE USER ... GRANTEES {user | role | ANY | NONE} [,...] [EXCEPT {user | role} [,...]]. #21641 (Vitaly Baranov). - أضِف العمود الجديد
slowdowns_countإلىsystem.clusters. عند استخدام الطلبات المتحوطة، يعرض هذا العمود عدد المرات التي تم فيها التبديل إلى replica أخرى لأن هذه replica كانت تستجيب ببطء. كما يعرض أيضًا القيمة الفعلية لـerrors_countفيsystem.clusters. #21480 (Kruglov Pavel). - أضِف العمود الافتراضي
_partition_idلمحركاتMergeTree*. واسمح باستبعاد partitions باستخدام_partition_id. وأضِف الدالةpartitionID()لحساب سلسلة معرّف partition. #21401 (Amos Bird). - أضِف الدالة
isIPAddressInRangeللتحقق مما إذا كان عنوان IPv4 أو IPv6 يقع ضمن بادئة شبكة CIDR معيّنة. #21329 (PHO). - أُضيف أمر SQL جديد
ALTER TABLE 'table_name' UNFREEZE [PARTITION 'part_expr'] WITH NAME 'backup_name'. هذا الأمر مطلوب لإزالة partitions ‘المجمّدة’ من جميع disks على نحو صحيح. #21142 (Pavel Kovalenko). - يدعم التحويل الضمني لنوع المفتاح في JOIN. #19885 (Vladimir).
ميزة تجريبية
- دعم إطار
RANGE OFFSET(لدوال النافذة) لأنواع الفاصلة العائمة. وإضافة دالتي النافذةlagInFrame/leadInFrame، وهما مماثلتان لـlag/lead، لكنهما تلتزمان بإطار النافذة. وتتطابقان عندما يكون الإطارbetween unbounded preceding and unbounded following. وبذلك أُغلقت #5485. #21895 (Alexander Kuzmenkov). - النسخ المتماثل دون نسخ لـ
ReplicatedMergeTreeعبر تخزين S3. #16240 (ianton-ru). - أُضيفت إمكانية ترحيل قرص S3 موجود إلى مخطط يدعم إمكانات النسخ الاحتياطي والاستعادة. #22070 (Pavel Kovalenko).
تحسين الأداء
- دعم التنسيق المتوازي في
clickhouse-localوفي سائر المواضع أيضًا. #21630 (Nikita Mikhaylov). - دعم التحليل المتوازي لتنسيقَي
CSVWithNamesوTSVWithNames. ويغلق هذا #21085. #21149 (Nikita Mikhaylov). - تمكين القراءة باستخدام mmap IO لنطاقات الملفات بدءًا من 64 MiB (الإعداد
min_bytes_to_use_mmap_io). قد يؤدي ذلك إلى تحسين متوسط في الأداء. #22326 (alexey-milovidov). - إضافة ذاكرة تخزين مؤقت للملفات المقروءة باستخدام الإعداد
min_bytes_to_use_mmap_io. يحقق ذلك تحسنًا كبيرًا في الأداء (بمقدار الضعف أو أكثر) عندما تكون قيمة الإعداد صغيرة، من خلال تجنب استدعاءات mmap/munmap المتكررة وما يترتب عليها من أخطاء صفحات. لاحظ أن mmap IO له عيوب كبيرة تجعله أقل موثوقية في بيئة الإنتاج (مثل التعليق أو SIGBUS عند وجود أعطال في الأقراص، وكذلك صعوبة أكبر في التحكم في استهلاك الذاكرة). ومع ذلك، فهو جيد في اختبارات الأداء. #22206 (alexey-milovidov). - تجنب النسخ غير الضروري للبيانات عند استخدام codec
NONE. يُرجى ملاحظة أن codecNONEغير مفيد في معظم الحالات — ويُنصح دائمًا باستخدام الضغط (LZ4هو الافتراضي). وخلافًا للاعتقاد الشائع، فإن تعطيل الضغط قد لا يحسن الأداء (وقد يحدث العكس). يكون codecNONEمفيدًا في بعض الحالات: - عندما تكون البيانات غير قابلة للضغط؛ - في اختبارات الأداء الاصطناعية. #22145 (alexey-milovidov). - تسريع
GROUP BYعند صِغر قيمةmax_rows_to_group_byوgroup_by_overflow_mode='any'. #21856 (Nikolai Kochetov). - تحسين أداء الاستعلامات من النوع
SELECT ... FINAL ... WHERE. أصبح مسموحًا الآن، في الاستعلامات التي تحتوي علىFINAL، بالنقل إلى أعمدةPREWHEREالموجودة في مفتاح الفرز. #21830 (foolchi). - تحسين الأداء عبر استبدال
memcpyبتنفيذ آخر. ويغلق هذا #18583. #21520 (alexey-milovidov). - تحسين أداء التجميع وفق ترتيب مفتاح الفرز (مع تمكين الإعداد
optimize_aggregation_in_order). #19401 (Anton Popov).
تحسينات
- إضافة connection pool لمحرك table/database في PostgreSQL ولمصدر dictionary. من المفترض أن يعالج ذلك #21444. #21839 (Kseniia Sumarokova).
- دعم schema غير
defaultلآلية postgres storage/table-function. يُغلق هذا #21701. #21711 (Kseniia Sumarokova). - دعم أولوية replicas لمصدر postgres dictionary. #21710 (Kseniia Sumarokova).
- تقديم إعداد merge tree جديد باسم
min_bytes_to_rebalance_partition_over_jbodيتيح توزيع parts الجديدة على disks مختلفة ضمن وحدة JBOD بشكل متوازن. #16481 (Amos Bird). - إضافة القيم
GrantوRevokeوSystemإلى column query_kindللاستعلامات المقابلة فيsystem.query_log. #21102 (Vasily Nemkov). - السماح بتخصيص timeout لاتصالات HTTP المستخدمة في replication بشكل مستقل عن مهلات HTTP الأخرى. #20088 (nvartolomei).
- تحسين رسالة Exception في client عند حدوث Exception أثناء كتابة server لـ blocks. في الإصدارات السابقة، كان قد يتلقى client رسالة مضللة مثل
Data compressed with different methods. #22427 (alexey-milovidov). - إصلاح الخطأ
Directory tmp_fetch_XXX already existsالذي كان قد يحدث بعد fetch part فاشل. يُحذف directory المؤقت الخاص بـ fetch إذا كان موجودًا بالفعل. يصلح هذا #14197. #22411 (nvartolomei). - إصلاح تقرير MSan للدالة
rangeمع argument من النوعUInt256(دعم الأعداد الصحيحة الكبيرة ما يزال Experimental). يُغلق هذا #22157. #22387 (alexey-milovidov). - إضافة column
current_databaseإلى table system.processes. يحتوي على database الحالية الخاصة بالـ query. #22365 (Alexander Kuzmenkov). - إضافة ميزات البحث/التنقل في history بدون حساسية لحالة الأحرف، والتنقل على مستوى subword، إلى
clickhouse-client. #22105 (Amos Bird). - إذا كانت Tuple من قيم NULL، مثل
(NULL, NULL)، في الجهة اليسرى من العاملINوكانت Tuples في الجهة اليمنى تتكون من قيم non-NULL، مثلSELECT (NULL, NULL) IN ((0, 0), (3, 1))، فأعِد 0 بدلًا من throwing an exception بسبب عدم توافق types. وقد يظهر هذا expression أيضًا نتيجة تحسين تعبير مثلSELECT (NULL, NULL) = (8, 0) OR (NULL, NULL) = (3, 2) OR (NULL, NULL) = (0, 0) OR (NULL, NULL) = (3, 1). يُغلق هذا #22017. #22063 (alexey-milovidov). - تحديث version المستخدمة من simdjson إلى 0.9.1. يصلح هذا #21984. #22057 (Vitaly Baranov).
- تمت إضافة أسماء بديلة غير حساسة لحالة الأحرف للدالتين
CONNECTION_ID()وVERSION(). يُصلح هذا #22028. #22042 (Eugene Klimov). - أُضيف الخيار
strict_increaseإلى الدالةwindowFunnelلاحتساب كل حدث مرة واحدة فقط (حلّ #21835). #22025 (Vladimir). - إذا كان مفتاح التقسيم لجدول
MergeTreeلا يتضمن أعمدةDateأوDateTime، لكنه يتضمن عمودDateTime64واحدًا فقط، فستُعرَض قيمه في العمودينmin_timeوmax_timeفي جدوليsystem.partsوsystem.parts_columns. كما أُضيف العمودانmin_timeوmax_timeإلى جدولsystem.parts_columns(إذ كان هناك عدم اتساق مع جدولsystem.parts). يُغلق هذا #18244. #22011 (alexey-milovidov). - تمت إضافة دعم الإعداد
replication_alter_partitions_sync=1فيclickhouse-copierلنقل الأقسام من الجدول المساعد إلى الوجهة. كما خُفِّضت قيم timeout الافتراضية. يُصلح #21911. #21912 (turbo jason). - عرض مسار دليل البيانات لجداول
EmbeddedRocksDBفي جداول النظام. #21903 (tavplubix). - أُضيف حدث profile باسم
HedgedRequestsChangeReplica، كما تغيّرت مهلة timeout لقراءة البيانات من الثواني إلى الملّي ثانية. #21886 (Kruglov Pavel). - DiskS3 (ميزة تجريبية قيد التطوير). تم إصلاح خطأ كان يمنع نقل الدليل إذا كانت الوجهة غير فارغة وكان cache disk مستخدمًا. #21837 (Pavel Kovalenko).
- تحسين التنسيق لأنواع البيانات
ArrayوMapفي واجهة الويب. #21798 (alexey-milovidov). - حدِّث clusters فقط إذا جرى تحديث configurations الخاصة بها. #21685 (Kruglov Pavel).
- تمرير إعدادات query وsession إلى distributed DDL queries. اضبط
distributed_ddl_entry_format_versionعلى 2 لتمكين ذلك. أُضيف أيضًا الإعدادdistributed_ddl_output_mode. الأوضاع المدعومة:noneوthrow(الافتراضي) وnull_status_on_timeoutوnever_throw. كما أُجريت إصلاحات وتحسينات متنوعة على محرك قاعدة البياناتReplicated. #21535 (tavplubix). - إذا جرى إنشاء
PODArrayبحجم عنصر ليس قاسمًا لـ 16 ولا مضاعفًا لها، فقد كان من الممكن حدوث overflow في buffer. لا توجد أخطاء في الإصدارات الحالية. #21533 (alexey-milovidov). - أُضيفت الأعمدة
last_error_time/last_error_message/last_error_stacktrace/remoteإلىsystem.errors. #21529 (Azat Khuzhin). - أُضيفت الأسماء البديلة
simpleJSONExtract/simpleJSONHasإلىvisitParam/visitParamExtract{UInt, Int, Bool, Float, Raw, String}. يُصلح هذا #21383. #21519 (fastio). - أضِف الإعداد
optimize_skip_unused_shards_limitلتقييد عدد قيم مفتاح التجزئة لـoptimize_skip_unused_shards. #21512 (Azat Khuzhin). - حسِّن
clickhouse-formatبحيث لا يطلق استثناءً عند وجود مسافات إضافية أو تعليق بعد الاستعلام الأخير، وأن يطلق استثناءً مبكرًا برسالة واضحة عند تنسيقASTInsertQueryمع البيانات. #21311 (flynn). - حسِّن دعم المفاتيح الصحيحة في نوع البيانات
Map. #21157 (Anton Popov). MaterializeMySQL: محاولة إعادة الاتصال بـ MySQL إذا انقطع الاتصال. #20961 (Håvard Kvålen).- دعم المزيد من الحالات لإعادة كتابة
CROSS JOINإلىINNER JOIN. #20392 (Vladimir). - عدم إنشاء أجزاء فارغة عند INSERT عندما يكون الإعداد
optimize_on_insertمفعّلًا. يُصلح #20304. #20387 (Kruglov Pavel). MaterializeMySQL: أضِف فهرس تخطٍّ من نوع minmax للعمود_version. #20382 (Stig Bakken).- أضِف الخيار
--backslashإلىclickhouse-format، لإضافة الشرطة المائلة العكسية في نهاية كل سطر من الاستعلام المنسّق. #21494 (flynn). - الآن لن يطلق ClickHouse الاستثناء
LOGICAL_ERRORعند محاولة تنفيذ mutation على جزء مغطّى بالفعل. يُصلح #22013. #22291 (alesapin).
إصلاح الأخطاء
- إزالة الـ socket من epoll قبل إلغاء مستقبل الحزم في
HedgedConnectionsلمنع احتمال حدوث حالة تسابق. يُصلح #22161. #22443 (Kruglov Pavel). - إضافة احتساب الذاكرة (المفقود) في إجراءات parsing التي تعمل بالتوازي. في الإصدارات السابقة، كان من الممكن حدوث OOM عندما كانت مجموعة النتائج تحتوي على blocks كبيرة جدًا من البيانات. هذا يُغلق #22008. #22425 (alexey-milovidov).
- إصلاح Exception قد يحدث عندما تحتوي
SELECTعلى condition ثابت فيWHEREويحتوي source table على columns أسماؤها أرقام. #22270 (LiuNeng). - إصلاح إلغاء query عند استخدام
use_hedged_requests=0وasync_socket_for_remote=1. #22183 (Azat Khuzhin). - إصلاح Exception غير مُلتقطة في
InterserverIOHTTPHandler. #22146 (Azat Khuzhin). - إصلاح نقطة الدخول في Docker في حال لم يكن
http_portموجودًا في config. #22132 (Ewout). - إصلاح الخطأ
Invalid number of rows in ChunkفيJOINمعTOTALSوarrayJoin. يُغلق #19303. #22129 (Vladimir). - إصلاح اسم thread pool في الخلفية المستخدم لـ poll الرسائل من Kafka. كان Kafka engine الذي يستخدم thread pool المعطوب يتعذر عليه استهلاك الرسائل من message queue. #22122 (fastio).
- إصلاح انتظار queries
OPTIMIZEوALTERلمحركات الجداولReplicatedMergeTree. الآن لن يعلق query عندما يكون الجدول قد فُصل أو أُعيد تشغيله. #22118 (alesapin). - تعطيل
async_socket_for_remote/use_hedged_requestsعلى نوى Linux التي بها علل. #22109 (Azat Khuzhin). - نقطة دخول Docker: تجنب تنفيذ chown على
.عندما يكونLOG_PATHفارغًا. يُغلق #22100. #22102 (filimonov). - كانت الدالة
decryptتفتقر إلى تحقّق من الحد الأدنى لحجم البيانات المُشفّرة في وضعAEAD. هذا يُغلق #21897. #22064 (alexey-milovidov). - في حالات نادرة، قد يُنشئ merge في
CollapsingMergeTreegranule تحتوي علىindex_granularity + 1rows. وبسبب ذلك، قد يفشل الفحص الداخلي المُضاف في #18928 (ويؤثر في 21.2 و21.3) مع الخطأIncomplete granules are not allowed while blocks are granules size. وكان هذا الخطأ يمنع parts من الاندماج. #21976 (Nikolai Kochetov). - التراجع عن #15454 الذي قد يتسبب في زيادة كبيرة في استخدام الذاكرة أثناء تحميل القواميس الخارجية من النوع hashed. هذا يُغلق #21935. #21948 (Maksim Kita).
- منع تداخل الاتصالات الاحتياطية (الخطأ
Unknown packet 9 from server). #21941 (Azat Khuzhin). - إصلاح قراءة طلب HTTP POST ذي نوع المحتوى “multipart/form-data” في بعض الحالات. #21936 (Ivan).
- إصلاح نتائج
ORDER BYغير الصحيحة عندما يحتوي الاستعلام على window functions، ويُطبَّق تحسين القراءة بترتيب المفتاح الأساسي. يُصلح هذا #21828. #21915 (Alexander Kuzmenkov). - إصلاح حالة تعطل متبادل عند أول تنفيذ لنموذج catboost. يُغلق #13832. #21844 (Kruglov Pavel).
- إصلاح نتيجة query غير صحيحة (واحتمال حدوث crash) كان يمكن أن تحدث عندما يُدفَع الشرط
WHEREأوHAVINGقبلGROUP BY. يُصلح #21773. #21841 (Nikolai Kochetov). - تحسين معالجة الأخطاء وlogging في
WriteBufferFromS3. #21836 (Pavel Kovalenko). - إصلاح أعطال محتملة في aggregate functions مع combinator
Distinctعند استخدام two-level aggregation. هذا إصلاح لاحق لـ #18365 . ولا يمكن إعادة إنتاجه إلا في بيئة production. #21818 (Amos Bird). - إصلاح index analysis للاستعلام الفرعي scalar. يُصلح هذا #21717، والذي أُدخل في #18896. #21766 (Amos Bird).
- إصلاح خلل في table engines
ReplicatedMergeحيث لا يغيّر استعلامALTER MODIFY COLUMNنوع العمودDecimalإذا لم يتغير حجمه (32 bit أو 64 bit). #21728 (alesapin). - إصلاح احتمال الانتظار إلى ما لا نهاية عند تشغيل
OPTIMIZEوDROPبشكل concurrent علىReplicatedMergeTree. #21716 (Azat Khuzhin). - إصلاح الدالة
arrayElementمع النوعMapلوسائط integer الثابتة. #21699 (Anton Popov). - إصلاح SIGSEGV عند الوصول إلى attributes غير الموجودة من
ip_trieمعaccess_to_key_from_attributes. #21692 (Azat Khuzhin). - أصبح الخادم الآن يقبل الاتصالات فقط بعد اكتمال تهيئة
DDLWorkerوdictionaries. #21676 (Azat Khuzhin). - تمت إضافة تحويل النوع لمفاتيح الجداول من النوع
Join(كان هذا يؤدي سابقًا إلى SIGSEGV). #21646 (Azat Khuzhin). - تم إصلاح إلغاء الطلبات الموزعة (على سبيل المثال،
selectبسيط من عدة shards مع limit، أيselect * from remote('127.{2,3}', system.numbers) limit 100) عند استخدامasync_socket_for_remote=1. #21643 (Azat Khuzhin). - تم إصلاح
fsync_part_directoryلعمليات الدمج الأفقي. #21642 (Azat Khuzhin). - تمت إزالة الأعمدة غير المعروفة من الجدول المنضم في
WHEREللاستعلامات الموجهة إلى محركات قواعد البيانات الخارجية (MySQL, PostgreSQL). إغلاق #14614، إغلاق #19288 (مكرر)، إغلاق #19645 (مكرر). #21640 (Vladimir). - كان يتم استدعاء
std::terminateعند حدوث خطأ أثناء كتابة البيانات إلى S3. #21624 (Vladimir). - تم إصلاح الخطأ المحتمل
Cannot find columnعندما يكونoptimize_skip_unused_shardsمُمكّنًا ولا يتم استخدام أي shard. #21579 (Azat Khuzhin). - إذا كان الاستعلام يحتوي على شرط
WHEREثابت، وكان الإعدادoptimize_skip_unused_shardsمُمكّنًا، فقد يتم تخطي جميع الـ shards وقد يعيد الاستعلام نتيجة فارغة غير صحيحة. #21550 (Amos Bird). - تم إصلاح إرجاع table function
clusterAllReplicasلقيمة_shard_numغير صحيحة. إغلاق #21481. #21498 (flynn). - تم إصلاح احتفاظ جدول S3 ببيانات الاعتماد القديمة بعد تحديث الإعدادات. #21457 (Grigory Pervakov).
- تم إصلاح حالة تسابق على كائن SSL داخل
SecureSocketفي Poco. #21456 (Nikita Mikhaylov). - تم إصلاح parsing لتنسيق
AvroفيKafka. يُصلح #21437. #21438 (Ilya Golshtein). - تم إصلاح مهلات الاستقبال والإرسال، وكذلك القراءة غير الحاجزة في socket الآمن. #21429 (Kruglov Pavel).
- لم تكن العلامة
force_drop_tableتعمل معMATERIALIZED VIEW، وقد تم إصلاح ذلك. يُصلح #18943. #20626 (tavplubix). - تم إصلاح تعارضات الأسماء في
PredicateRewriteVisitor. وكان ذلك يتسبب في ترشيحWHEREبشكل غير صحيح بعد full join. إغلاق #20497. #20622 (Vladimir).
تحسينات في البناء/الاختبار/التحزيم
- إضافة اختبارات Jepsen إلى ClickHouse Keeper. #21677 (alesapin).
- تشغيل الاختبارات عديمة الحالة بالتوازي في CI. يعتمد ذلك على #22181. #22300 (alesapin).
- تفعيل فحص الحالة لتشغيل CI الخاص بـ SQLancer. #22015 (Ilya Yatsishin).
- عدة تحسينات لبنيات PowerPC: تفعيل openldap المضمّن على
ppc64le. #22487 (Kfir Itzhak). تفعيل التجميع علىppc64leباستخدام Clang. #22476 (Kfir Itzhak). إصلاح تجميع boost علىppc64le. #22474 (Kfir Itzhak). إصلاح خطأ CMake المتعلق بعدم تعيين متغير CMake الداخليCMAKE_ASM_COMPILE_OBJECTعلىppc64le. #22469 (Kfir Itzhak). إصلاح مشكلة عدم عثور Fedora/RHEL/CentOS علىlibclang_rt.builtinsعلىppc64le. #22458 (Kfir Itzhak). تفعيل البناء باستخدامjemallocعلىppc64le. #22447 (Kfir Itzhak). إصلاح تضمين config الخاص بـ ClickHouse وتضمين timezone الخاصة بـ cctz علىppc64le. #22445 (Kfir Itzhak). إصلاح التجميع علىppc64leواستخدام سجل مؤشر التعليمات الصحيح علىppc64le. #22430 (Kfir Itzhak). - إعادة تفعيل مكتبة S3 (AWS) على
aarch64. #22484 (Kfir Itzhak). - إضافة
tzdataإلى حاويات Docker لأن قراءة تنسيقاتORCتتطلبه. هذا يُغلق #14156. #22000 (alexey-milovidov). - تقديم وسيطتين لملف Dockerfile الخاص بصورة
clickhouse-server:deb_locationوsingle_binary_location. #21977 (filimonov). - السماح باستخدام clang-tidy مع بنيات release عبر تفعيل assertions عند استخدامه. #21914 (alexey-milovidov).
- إضافة اسم الملفات التنفيذية llvm-12 إلى مسار البحث في سكربتات cmake. تحويلات ضمنية للثوابت لكتم تحذيرات clang. تحديث الوحدات الفرعية للبناء باستخدام CMake 3.19. كتم الاستدعاء التعاودي في توسيع macro في مكتبة
readpassphrase. استُبدل الخيار-fuse-ldالمتقادَم بـ--ld-pathفي clang. #21597 (Ilya Yatsishin). - تحديث
docker/test/testflows/runner/dockerd-entrypoint.shلاستخدام dockerhub-proxy الخاص بـ Yandex، لأن Docker Hub فعّل قيودًا شديدة جدًا على معدل الطلبات #21551 (vzakaznikov). - إصلاح بناء المكتبة المشتركة على macOS. #20184 (nvartolomei).
- إضافة الخيار
ctimeإلىzookeeper-dump-tree. يتيح ذلك استخراج وقت إنشاء العقدة. #21842 (Ilya).
إصدار ClickHouse 21.3 (LTS)
إصدار ClickHouse v21.3، 2021-03-12
تغيير غير متوافق مع الإصدارات السابقة
- لم يعد مسموحًا بإنشاء جداول MergeTree بالبنية القديمة مع table TTL، لأنه كان يُتجاهل ببساطة. ولا يزال Attach للجداول القديمة ممكنًا. #20282 (alesapin).
- ستُعاد الآن كتابة جميع أسماء الدوال غير الحساسة لحالة الأحرف إلى صيغها المعيارية. وهذا مطلوب لتوجيه استعلامات الإسقاطات (الميزة القادمة). #20174 (Amos Bird).
- إصلاح إنشاء
TTLفي الحالات التي يكون فيها التعبير دالة ويطابق مفتاحORDER BY. وأصبح مسموحًا الآن بتعيين تجميع مخصص لأعمدة المفتاح الأساسي فيTTLمعGROUP BY. تغيير غير متوافق مع الإصدارات السابقة: بالنسبة إلى أعمدة المفتاح الأساسي غير الموجودة فيGROUP BYوغير المعيّنة صراحةً، ستُطبَّق الآن الدالةanyبدلًا منmaxعند انتهاءTTL. كذلك، إذا كنت تستخدمTTLمعWHEREأوGROUP BY، فقد تظهر استثناءات أثناء عمليات الدمج عند إجراء تحديث متدرّج. #15450 (Anton Popov).
ميزة جديدة
- إضافة إعدادات لمحرك File:
engine_file_empty_if_not_existsوengine_file_truncate_on_insert. #20620 (M0r64n). - إضافة دالة تجميعية
deltaSumلجمع الفروق بين الصفوف المتتالية. #20057 (Russ Frank). - إضافة عمود جديد باسم
event_time_microsecondsفي الجدولsystem.part_log. #20027 (Bharat Nallan). - إضافة الدالة
timezoneOffset(datetime)التي تُرجع الإزاحة عن UTC بالثواني. يُغلق هذا #issue:19850. #19962 (keenwolf). - إضافة الإعداد
insert_shard_idلدعم insert البيانات إلى shard محدد من distributed table. #19961 (flynn). - تم تحديث الدالة
reinterpretAsلدعم الأعداد الصحيحة الكبيرة. يُصلح هذا #19691. #19858 (Maksim Kita). - تمت إضافة دعم مفاتيح التشفير التي يوفّرها العميل للتشفير من جهة server (الترويسة
x-amz-server-side-encryption-customer-(key/md5)) في عميل S3. راجع الرابط. يُغلق هذا #19428. #19748 (Vladimir Chebotarev). - تمت إضافة الخيار
implicit_keyلمصدر القاموسexecutable. ويتيح ذلك تجنب طباعة المفتاح لكل سجل إذا كانت السجلات تأتي بالترتيب نفسه لمفاتيح الإدخال. ينفّذ هذا #14527. #19677 (Maksim Kita). - إضافة نوع QUOTA
query_selectsوquery_inserts. #19603 (JackyWoo). - إضافة الدالة
extractTextFromHTML#19600 (zlx19950903), (alexey-milovidov). - أصبحت الجداول التي تستخدم المحرك
MergeTree*تحتوي الآن على إعدادين جديدين على مستوى الجدول للتحكم في Concurrency الخاصة بالاستعلامات. يحدّ الإعدادmax_concurrent_queriesمن عدد queries التي تُنفَّذ بالتوازي والمرتبطة بهذا الجدول. ويحدّد الإعدادmin_marks_to_honor_max_concurrent_queriesتطبيق الإعداد السابق فقط إذا كان query يقرأ على الأقل هذا العدد من marks. #19544 (Amos Bird). - تمت إضافة الدالة
fileلقراءة file من الدليلuser_filesكسلسلة String. ويختلف هذا عن دالة جدول file. ينفّذ هذا #issue:18851. #19204 (keenwolf).
ميزة تجريبية
- إضافة محرك قاعدة البيانات التجريبي
Replicated. وهو ينسخ استعلامات DDL عبر عدة مضيفين. #16193 (tavplubix). - تقديم دعم تجريبي لدوال النافذة، ويُفعَّل باستخدام
allow_experimental_window_functions = 1. هذا تنفيذ أولي بجودة ألفا، وهو غير مناسب للاستخدام في بيئات الإنتاج، وسيتغير في الإصدارات المستقبلية بطرق غير متوافقة مع الإصدارات السابقة. يُرجى مراجعة الوثائق للاطلاع على قائمة الميزات المدعومة. #20337 (Alexander Kuzmenkov). - إضافة إمكانية إجراء النسخ الاحتياطي/الاستعادة لملفات البيانات الوصفية الخاصة بـ DiskS3. #18377 (Pavel Kovalenko).
تحسين الأداء
- طلبات Hedged للاستعلامات البعيدة. عند تمكين الإعداد
use_hedged_requests(وهو معطّل افتراضيًا)، يمكن إنشاء عدة اتصالات مع replicas مختلفة للاستعلام نفسه. ويُنشأ اتصال جديد إذا لم يتم إنشاء الاتصال أو الاتصالات الحالية مع replica أو replicas خلالhedged_connection_timeout، أو إذا لم يتم استلام أيDataخلالreceive_data_timeout. يستخدم الاستعلام أول اتصال يرسل حزمةProgressغير فارغة (أو حزمةDataإذا كانallow_changing_replica_until_first_data_packetمفعّلًا)؛ وتُلغى الاتصالات الأخرى. الاستعلامات التي تستخدمmax_parallel_replicas > 1مدعومة. #19291 (Kruglov Pavel). يتيح ذلك تقليل زمن الاستجابة الطرفي بشكل كبير في clusters الكبيرة جدًا. - أُضيف دعم
PREWHERE(مع تمكين التحسين المقابل) عندما تكون الجداول تحتوي على تعبيرات أمان على مستوى الصف محددة. #19576 (Denis Glazachev). - أصبح الإعداد
distributed_aggregation_memory_efficientمفعّلًا افتراضيًا. سيؤدي ذلك إلى خفض استهلاك الذاكرة وتحسين أداء الاستعلامات الموزعة. #20599 (alexey-milovidov). - تحسين أداء GROUP BY للمفاتيح المتعددة ذات الحجم الثابت. #20472 (alexey-milovidov).
- تحسين أداء الدوال التجميعية عبر تطبيق aliasing أكثر صرامة. #19946 (alexey-milovidov).
- تسريع القراءة من جداول
Memoryفي الحالات القصوى (عندما تكون سرعة القراءة في حدود 50 GB/sec) من خلال تبسيط pipeline، وبالتالي تقليل التنافس على الأقفال في scheduling الخاصة بها. #20468 (alexey-milovidov). - أُعيد تنفيذ HTTP server جزئيًا لتقليل عدد نسخ البيانات الواردة والصادرة. ويحقق ذلك تحسنًا في الأداء يصل إلى 1.5 مرة عند إدراج سجلات طويلة عبر HTTP. #19516 (Ivan).
- أُضيف الإعداد
compressإلى جداولMemory. إذا كان مفعّلًا فسيستخدم الجدول مقدارًا أقل من RAM. وعلى بعض الأجهزة ومع بعض datasets قد يكون أيضًا أسرع في SELECT، لكن هذا ليس الحال دائمًا. هذا يُغلق #20093. ملاحظة: توجد أسباب تجعل جداول Memory أبطأ من MergeTree: (1) غياب Compression (2) الحجم الثابت لـ blocks (3) غياب الفهارس وprewhere… #20168 (alexey-milovidov). - تحسين طفيف في الشيفرة ضمن aggregation. #20978 (alexey-milovidov).
- أُعيدت إضافة تخصيصات
intDiv/moduloلتحسين الأداء. هذا يُصلح #21293 . تم إدخال هذا التراجع في https://github.com/ClickHouse/ClickHouse/pull/18145 . #21307 (Amos Bird). - عدم Squash لـ blocks بشكل مفرط في INSERT SELECT عند الإدراج في جدول من نوع Memory. في الإصدارات السابقة، كان يتم إنشاء تمثيل بيانات غير فعّال في جدول Memory بعد INSERT SELECT. هذا يُغلق #13052. #20169 (alexey-milovidov).
- إصلاح حالة واحدة على الأقل قد يمتلك فيها parser الخاص بـ DataType تعقيدًا أسيًا (اكتشفها fuzzer). هذا يُغلق #20096. #20132 (alexey-milovidov).
- تنفيذ
SELECTمعFINALبالتوازي لجزء واحد ذي مستوى > 0 عندما يكون الإعدادdo_not_merge_across_partitions_select_finalمضبوطًا على 1. #19375 (Kruglov Pavel). - تعبئة الأعمدة المطلوبة فقط عند الاستعلام عن
system.partsوsystem.parts_columns. يُغلق #19570. #21035 (Anmol Arora). - إجراء تحسينات جبرية على التعبيرات الحسابية داخل الدالة التجميعية
avg. يُغلق #20092. #20183 (flynn).
تحسين
- دعم طرق ضغط غير حساسة لحالة الأحرف في دوال الجداول. كما أُصلحت أيضًا طريقة الضغط LZMA التي كان يُتحقَّق منها بالأحرف الكبيرة. #21416 (Vladimir Chebotarev).
- إضافة إعدادين لتأخير الإدراج أو إصدار خطأ أثناء الإدراج عند وجود عدد كبير جدًا من الأجزاء غير النشطة. وهذا مفيد عندما يفشل الخادم في تنظيف الأجزاء بالسرعة الكافية. #20178 (Amos Bird).
- تحسين التوافق مع عملاء mysql. 1. mysql jdbc 2. mycli. #21367 (Amos Bird).
- منع حذف عمود إذا كان مشارًا إليه من خلال عرض مادي. يُغلق #21164. #21303 (flynn).
- سيُعيد مصدر القاموس في MySQL الآن المحاولة عند حدوث حالات فشل غير متوقعة في الاتصال (Lost connection to MySQL server during query)، والتي تحدث أحيانًا في اتصالات SSL/TLS. #21237 (Alexander Kazakov).
- تحسين في سهولة الاستخدام: جعل parsing لـ
DateTime64أكثر اتساقًا، مع التعرّف على الحالة التي يُحدَّد فيها Unix timestamp بدقة جزء من الثانية على هيئة عدد صحيح مُحجَّم (مثل1111111111222بدلًا من1111111111.222). يُغلق هذا #13194. #21053 (alexey-milovidov). - قصر العملية على دمج الكتل المرتبة فقط على initiator مع distributed_group_by_no_merge. #20882 (Azat Khuzhin).
- عند تحميل config لمصدر mysql، سيُرتّب ClickHouse الآن قائمة replicas ذات الأولوية نفسها عشوائيًا لضمان منطق round-robin عند اختيار mysql endpoint. يُغلق هذا #20629. #20632 (Alexander Kazakov).
- أُعيدت تسمية الدالة ‘reinterpretAs(x, Type)’ إلى ‘reinterpret(x, Type)’. #20611 (Maksim Kita).
- دعم vhost لمحرك RabbitMQ #20576. #20596 (Kseniia Sumarokova).
- تحسين serialization لأنواع البيانات المؤلفة من Arrays وTuples. وتحسين مطابقة أنواع بيانات enum مع نوع protobuf enum. وإصلاح serialization لنوع البيانات
Map. وتُضبط القيم المحذوفة الآن افتراضيًا. #20506 (Vitaly Baranov). - إصلاح حالة تعارض بين تنفيذ مهام distributed DDL وتنظيف DDL queue. ولم يعد بالإمكان إزالة مهمة DDL من ZooKeeper إذا كان هناك workers نشطون. يُصلح #20016. #20448 (tavplubix).
- جعل FQDN وغيرها من الدوال المرتبطة بـ DNS تعمل بشكل صحيح في صور alpine. #20336 (filimonov).
- عدم السماح بالطيّ المبكر للثوابت في الدوال المحظورة صراحةً. #20303 (Azat Khuzhin).
- كان التحويل الضمني من عدد صحيح إلى النوع Decimal قد ينجح حتى إذا كانت قيمة العدد الصحيح لا تتسع لها قيمة من النوع Decimal. الآن يُطلق الخطأ
ARGUMENT_OUT_OF_BOUND. #20232 (tavplubix). SYSTEM FLUSH DISTRIBUTEDمن دون أقفال. #20215 (Azat Khuzhin).- توحيد count(constant) و sum(1) إلى count(). هذا مطلوب لتوجيه استعلامات projection. #20175 (Amos Bird).
- دعم جميع أنواع الأعداد الصحيحة native في دوال bitmap. #20171 (Amos Bird).
- تم تحديث
CacheDictionaryوComplexCacheDictionaryوSSDCacheDictionaryوSSDComplexKeyDictionaryلاستخدام LRUHashMap بوصفه الفهرس الأساسي. #20164 (Maksim Kita). - أصبح الإعداد
access_managementقابلاً للضبط عند بدء التشغيل من خلال توفيرCLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT، وتبقى قيمته الافتراضية هي التعطيل (0) كما كانت سابقاً. #20139 (Marquitos). - إصلاح toDateTime64(toDate()/toDateTime()) لـ DateTime64 - تنفيذ حصر قيم DateTime64 ليتوافق مع سلوك DateTime. #20131 (Azat Khuzhin).
- تحسينات الحصص: يُحتسب SHOW TABLES الآن استعلاماً واحداً في حسابات الحصص، وليس استعلامين. كما أن استعلامات SYSTEM تستهلك الحصة الآن. وإصلاح حساب نهاية interval في استهلاك الحصة. #20106 (Vitaly Baranov).
- دعم تعبيرات
path IN (set)لجدولsystem.zookeeper. #20105 (小路). - عرض التفاصيل الكاملة لجداول
MaterializeMySQLفيsystem.tables. #20051 (Stig Bakken). - إصلاح حالة data race في القاموس executable، والتي لم تكن ممكنة إلا في حالة سوء الاستخدام (عندما يعيد السكربت البيانات متجاهلاً مدخلاته). #20045 (alexey-milovidov).
- أصبح بالإمكان الآن التحكم في قيمة الخيار MYSQL_OPT_RECONNECT عبر المعامل “opt_reconnect” في قسم config الخاص بالنسخة replica من mysql. #19998 (Alexander Kazakov).
- إذا استدعى المستخدم الدالة
JSONExtractمع طلب النوعFloat32، فسيُسمح بتحويل غير دقيق إلى نوع النتيجة. على سبيل المثال، العدد0.1في JSON ذو دقة مزدوجة ولا يمكن تمثيله في Float32، لكن المستخدم لا يزال يرغب في الحصول عليه. كانت الإصدارات السابقة تعيد 0 للنوع non-Nullable و NULL للنوع Nullable للإشارة إلى أن التحويل غير دقيق. كان هذا المنطق صحيحاً بنسبة 100%، لكنه كان مفاجئاً للمستخدمين ويؤدي إلى تساؤلات. هذا يغلق #13962. #19960 (alexey-milovidov). - إضافة تحويل بنية block لعملية INSERT إلى الجداول Distributed إذا لم تكن متطابقة. #19947 (Azat Khuzhin).
- تحسين لجدول
system.distributed_ddl_queue. تتم تهيئة MaxDDLEntryID إلى آخر قيمة له بعد إعادة التشغيل. قبل طلب السحب هذا، كان MaxDDLEntryID يبقى صفراً حتى تتم معالجة DDLTask جديدة. #19924 (Amos Bird). - إظهار جداول
MaterializeMySQLفيsystem.parts. #19770 (Stig Bakken). - إضافة توجيه config منفصل لملف تعريف
Buffer. #19721 (Azat Khuzhin). - نقل الشروط غير المرتبطة بـ
JOINإلى عبارةWHERE. #18720. #19685 (hexiaoting). - إضافة إمكانية تقييد INSERT إلى
Distributedبناءً على حجم البايتات المعلّقة للإرسال غير المتزامن (تمت إضافة الإعداداتbytes_to_delay_insert/max_delay_to_insertوbytes_to_throw_insertإلى محرّكDistributed). #19673 (Azat Khuzhin). - إصلاح بعض الحالات النادرة التي قد يتم فيها تجاهل أخطاء الكتابة داخل الدوال الهدّامة. #19451 (Azat Khuzhin).
- طباعة الإطارات المضمّنة في تتبعات المكدس للأخطاء الفادحة. #19317 (Ivan).
إصلاحات الأخطاء
- إصلاح عمليات إعادة الاتصال الزائدة بـ ZooKeeper وإمكانية وجود جلستين نشطتين لخادم ClickHouse واحد. أُدخلت كلتا المشكلتين في #14678. #21264 (alesapin).
- إصلاح الخطأ
Bad cast from type ... to DB::ColumnLowCardinalityعند الإدراج في جدول يحتوي على عمودLowCardinalityمن تنسيقValues. يُصلح هذا #21140 #21357 (Nikolai Kochetov). - إصلاح حالة توقف متبادل في mutations الخاصة بـ
ALTER DELETEلمحركات الجداول غير replicated من عائلة MergeTree عندما يحتوي predicate على الجدول نفسه. يُصلح هذا #20558. #21477 (alesapin). - إصلاح SIGSEGV في distributed queries عند حدوث أعطال. #21434 (Azat Khuzhin).
- أصبحت استعلامات
ALTER MODIFY COLUMNالآن تؤثر بشكل صحيح في التغييرات على partition key، وفهارس التخطي، وTTLs، وما إلى ذلك. يُصلح هذا #13675. #21334 (alesapin). - إصلاح خلل في
join_use_nullsوعند joining لـTOTALSمن subqueries. يُغلق هذا #19362 و#21137. #21248 (vdimir). - إصلاح crash في
EXPLAINلاستعلام يحتوي علىUNION. يُصلح هذا #20876، #21170. #21246 (flynn). - أصبحت mutations الآن مسموحًا بها فقط لمحركات الجداول التي تدعمها (عائلة MergeTree، وMemory، وMaterializedView). وستُبلغ المحركات الأخرى عن error أوضح. يُصلح هذا #21168. #21183 (alesapin).
- يُصلح #21112. تم إصلاح خلل كان قد يتسبب في ظهور تكرارات مع insert query (إذا وصل أحد الـ callbacks متأخرًا قليلًا). #21138 (Kseniia Sumarokova).
- إصلاح عمل
input_format_null_as_defaultبشكل فعّال عندما تكون types من النوع Nullable. يُصلح هذا #21116. #21121 (Amos Bird). - إصلاح خلل متعلق بتحويل Tuple إلى Map. يُغلق هذا #21029. #21120 (hexiaoting).
- إصلاح تسرّب metadata عند حذف Replicated*MergeTree مع ZooKeeper cluster مخصص (غير default). #21119 (fastio).
- إصلاح مشكلة عدم تطابق الأنواع عند استخدام مفاتيح LowCardinality في joinGet. يُصلح هذا #21114. #21117 (Amos Bird).
- إصلاح مشكلة عدم جدوى قيمتَي default_replica_path و default_replica_name في محرك Replicated(*)MergeTree عندما يتطلب المحرك تحديد معاملات أخرى. #21060 (mxzlxy).
- كان من الممكن الوصول إلى الذاكرة خارج الحدود عند تنسيق قيمة مُعدّة خصيصًا وخارج النطاق من النوع
DateTime64. يُغلق هذا #20494. ويُغلق أيضًا #20543. #21023 (alexey-milovidov). - منع عمليات insert المتوازية إلى storage join. #21009 (vdimir).
- إصلاح السلوك الذي كان فيه
ALTER MODIFY COLUMNينشئ mutation يُعرف مسبقًا أنها ستفشل. #21007 (Anton Popov). - يُغلق #9969. إصلاح خطأ ضغط Brotli عبر http، الذي كان يظهر مع أحجام بيانات كبيرة وبنية معقدة نسبيًا ومع JSON output format. وتم تحديث Brotli إلى أحدث إصدار ليتضمن “إصلاح الوصول النادر إلى بيانات غير مهيأة في ring-buffer”. #20991 (Kseniia Sumarokova).
- إصلاح الخطأ ‘Empty task was returned from async task queue’ عند إلغاء query. #20881 (Azat Khuzhin).
- لم تكن query
USE database;تعمل عند استخدام عميل MySQL 5.7 للاتصال بـ ClickHouse server، وقد أُصلحت هذه المشكلة. يُصلح #18926. #20878 (tavplubix). - إصلاح استخدام combinator
-Distinctمع combinator -Stateفي aggregate functions. #20866 (Anton Popov). - إصلاح subquery مع union distinct وعبارة limit. يُغلق #20597. #20610 (flynn).
- إصلاح السلوك غير المتسق لـ dictionary في queries التي نبحث فيها عن مفاتيح غير موجودة فيها. #20578 (Nikita Mikhaylov).
- إصلاح عدد threads في scalar subqueries وsubqueries الخاصة بالفهرس (بعد #19007 كان يُستخدم دائمًا thread واحد). يُصلح #20457، #20512. #20550 (Nikolai Kochetov).
- إصلاح تعطل كان يمكن أن يحدث عند استلام packet غير معروف من remove query (أُدخل هذا الخلل في #17868). #20547 (Azat Khuzhin).
- إضافة تحققات مناسبة أثناء parsing أسماء الأدلة لـ async INSERT (ما يُصلح SIGSEGV). #20498 (Azat Khuzhin).
- إصلاح الخلل الذي كان يمنع الدالة
transformمن العمل بشكل صحيح مع مفاتيح الأعداد ذات الفاصلة العائمة. يغلق #20460. #20479 (flynn). - إصلاح حلقة لا نهائية عند تمرير الأسماء المستعارة لـ WITH إلى الاستعلامات الفرعية. يُصلح هذا #20388. #20476 (Amos Bird).
- إصلاح الإنهاء غير الطبيعي للخادم عند انقطاع عميل http. #20464 (Azat Khuzhin).
- إصلاح
LOGICAL_ERRORعندjoin_use_nulls=1عندما يحتوي JOIN على ثابت من SELECT. #20461 (Azat Khuzhin). - التحقق مما إذا كانت table function
viewمستخدمة في قائمة التعبيرات، وإصدار خطأ عند ذلك. يُصلح هذا #20342. #20350 (Amos Bird). - تجنّب إلغاء مرجع غير صالح في Dictionary RANGE_HASHED(). #20345 (Azat Khuzhin).
- إصلاح إلغاء مرجع NULL مع
join_use_nulls=1. #20344 (Azat Khuzhin). - إصلاح النتيجة غير الصحيحة للعمليات الثنائية بين قيمتين Decimal ثابتتين بمقياسين مختلفين. يُصلح #20283. #20339 (Maksim Kita).
- إصلاح تكرار retries بشكل مفرط للمهام الخلفية الفاشلة في عائلة محركات الجداول
ReplicatedMergeTree. وقد يؤدي ذلك إلى logging مفرط وزيادة حمل CPU. يُصلح #20203. #20335 (alesapin). - تقييد
DROPأوRENAMEلعمود الإصدار في محركات الجداول*CollapsingMergeTreeوReplacingMergeTree. #20300 (alesapin). - إصلاح السلوك الذي كان يؤدي، عند وجود JSON تالف، إلى محاولة قراءة الملف بالكامل في الذاكرة، مما يتسبب في Exception من allocator. يُصلح #19719. #20286 (Nikita Mikhaylov).
- إصلاح Exception أثناء vertical merge لعائلة محركات الجداول
MergeTreeالتي لا تسمح بإجراء عمليات vertical merge. يُصلح #20259. #20279 (alesapin). - إصلاح crash نادر للخادم عند إعادة تحميل config أثناء إيقاف التشغيل. يُصلح #19689. #20224 (alesapin).
- إصلاح CTE عند استخدامه في INSERT SELECT. يُصلح هذا #20187، ويُصلح #20195. #20211 (Amos Bird).
- إصلاح #19314. #20156 (Ivan).
- إصلاح الدالة toMinute للتعامل بشكل صحيح مع المنطقة الزمنية الخاصة. #20149 (keenwolf).
- إصلاح تعطل الخادم بعد استعلام يستخدم الدالة
ifمع نوعTupleفي نتيجة فرعي then/else. ويجب أن يحتوي النوعTupleعلىArrayأو نوع معقد آخر. إصلاح #18356. #20133 (alesapin). - أصبح محرك الجدول
MongoDBينشئ الاتصال فقط عند الاستعداد لقراءة البيانات. ولم يعدATTACH TABLEيحاول الاتصال. #20110 (Vitaly Baranov). - إصلاح خلل في StorageJoin. #20079 (vdimir).
- إصلاح الحالة التي عند حساب باقي قسمة عدد سالب على مقسوم عليه صغير، لم يكن نوع البيانات الناتج كبيرًا بما يكفي لاستيعاب النتيجة السالبة. وهذا يغلق #20052. #20067 (alexey-milovidov).
- MaterializeMySQL: إصلاح النسخ المتماثل لعبارات SQL التي تُحدّث عدة جداول. #20066 (Håvard Kvålen).
- منع ظهور “Connection refused” في docker أثناء تنفيذ برنامج التهيئة النصي. #20012 (filimonov).
EmbeddedRocksDBوحدة تخزين تجريبية. إصلاح مشكلة غياب التحقق المناسب من الأنواع. وتبسيط الشيفرة. وهذا يغلق #19967. #19972 (alexey-milovidov).- إصلاح خطأ
segfaultفي الدالةfromModifiedJulianDayعندما يكون نوع الوسيطةNullable(T)لأي نوع عددي صحيح باستثناء Int32. #19959 (PHO). - إصلاح تعطل فهرس BloomFilter. إصلاح #19757. #19884 (Maksim Kita).
- كان من الممكن حدوث حالة توقف تام إذا كان system.text_log مفعّلًا. وهذا يُصلح #19874. #19875 (alexey-milovidov).
- إصلاح بدء تشغيل الخادم مع جداول تحتوي على تعبيرات افتراضية تتضمن dictGet(). والسماح بالحصول على نوع الإرجاع لـ dictGet() دون تحميل القاموس. #19805 (Vitaly Baranov).
- إصلاح استثناء الإنهاء في clickhouse-client عند تنفيذ
selectفقط. #19790 (taiyang-li). - إصلاح خطأ قد يؤدي إلى فشل نقل الأجزاء إلى جدول الوجهة عند تشغيل عدة نُسخ من clickhouse-copiers. #19743 (madianjun).
- قد يعلق خيط المعالجة الذي يعمل في الخلفية وينفّذ استعلامات
ON CLUSTERمنتظرًا أن يقوم الجدول المكرّر المحذوف بإجراء ما. تم إصلاح ذلك. #19684 (yiguolei).
تحسينات في البناء/الاختبار/التحزيم
- إتاحة بناء ClickHouse مع تمكين AVX-2 على مستوى عام. يوفّر ذلك تحسنًا طفيفًا في الأداء على وحدات CPU الحديثة. لا يُنصح به في بيئة الإنتاج، ولن يكون مدعومًا كبناء رسمي في الوقت الحالي. #20180 (alexey-milovidov).
- إصلاح بعض المشكلات التي اكتشفها Coverity. راجع #19964. #20010 (alexey-milovidov).
- إتاحة بدء التشغيل باستخدام ملف تنفيذي مُعدَّل تحت gdb. في الإصدار السابق، إذا ضبطت نقطة توقّف في gdb قبل البدء، كان الخادم يرفض بدء التشغيل بسبب فشل فحص التكامل. #21258 (alexey-milovidov).
- إضافة اختبار لطرائق الضغط المختلفة في Kafka. #21111 (filimonov).
- إصلاح تعارض المنافذ في الاختبار test_storage_kerberized_hdfs. #19974 (Ilya Yatsishin).
- طباعة
stdoutوstderrفي السجل عند فشل تشغيل docker في اختبارات التكامل. قبل هذا PR، كانت تظهر في هذه الحالة رسالة خطأ قصيرة جدًا لا تساعد على استقصاء المشكلات. #20631 (Vitaly Baranov).
إصدار ClickHouse 21.2
إصدار ClickHouse v21.2.2.8-stable، 2021-02-07
تغيير غير متوافق مع الإصدارات السابقة
- لم يعد يُسمح باستخدام الدوال البتّية (
bitAnd,bitOr، إلخ) مع الوسائط ذات الفاصلة العائمة. ويجب الآن إجراء تحويل صريح إلى عدد صحيح. #19853 (Azat Khuzhin). - حظر استخدام
lcm/gcdمع القيم ذات الفاصلة العائمة. #19532 (Azat Khuzhin). - إصلاح تتبّع الذاكرة لـ
OPTIMIZE TABLE/عمليات الدمج؛ مع احتساب حدود ذاكرة الاستعلام وأخذ العينات لـOPTIMIZE TABLE/عمليات الدمج. #18772 (Azat Khuzhin). - منع استخدام عمود ذي فاصلة عائمة كمفتاح تقسيم، راجع #18421. #18464 (hexiaoting).
- لم يعد يُدعَم استخدام الأقواس الزائدة في تعريفات الأنواع، مثال:
Array((UInt8)).
ميزة جديدة
- أُضيف محرك الجدول
PostgreSQL(لكلٍّ من select/insert، مع دعم المصفوفات متعددة الأبعاد)، وكذلك كدالة جدول. كما أُضيف مصدر القاموسPostgreSQL، وأُضيف أيضًا محرك قاعدة البياناتPostgreSQL. #18554 (Kseniia Sumarokova). - أصبح نوع البيانات
Nestedيدعم الآن مستويات تعشيق اعتباطية. كما أُضيفت الأعمدة الفرعية للأنواع المعقدة، مثلsize0فيArray، وnullفيNullable، وأسماء عناصرTuple، والتي يمكن قراءتها دون الحاجة إلى قراءة العمود بالكامل. #17310 (Anton Popov). - أُضيف دعم
NullableإلىFlatDictionaryوHashedDictionaryوComplexKeyHashedDictionaryوDirectDictionaryوComplexKeyDirectDictionaryوRangeHashedDictionary. #18236 (Maksim Kita). - أُضيف جدول جديد باسم
system.distributed_ddl_queueيعرض الاستعلامات الموجودة في قائمة انتظار عامل DDL. #17656 (Bharat Nallan). - أُضيف دعم لربط أسماء مجموعات LDAP، وقيم السمات عمومًا، بالأدوار المحلية للمستخدمين القادمين من user directories في LDAP. #17211 (Denis Glazachev).
- أُضيف دعم insert إلى دالة الجدول
cluster، كما أُضيف دعم توزيع البيانات عبر العُقد لكلتا دالتي الجدولremoteوclusterعبر تحديد sharding key. أُغلقت #16752. #18264 (flynn). - أُضيفت الدالة
decodeXMLComponentلفك ترميز محارف XML. Example:SELECT decodeXMLComponent('Hello,"world"!')#17659. #18542 (nauta). - أُضيفت الدالتان
parseDateTimeBestEffortUSOrZeroوparseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita). - أُضيفت الدالة الرياضية
sign. #19527 (flynn). - أُضيفت معلومات عن الميزات المستخدمة (الدوال، ومحركات الجداول، وما إلى ذلك) إلى
system.query_log. #18495. #19371 (Kseniia Sumarokova). - تدعم الدالة
formatDateTimeالمُعدِّل%Qلتنسيق التاريخ على هيئة ربع سنة. #19224 (Jianmei Zhang). - أُضيف دعم ربط اختصار MetaKey+Enter في واجهة play. #19012 (sundyli).
- أُضيفت ثلاث دوال لنوع البيانات map: 1.
mapContains(map, key)للتحقق مما إذا كانتmap.keysتتضمن المعامل الثانيkey. 2.mapKeys(map)تُرجع جميع المفاتيح بتنسيقArray3.mapValues(map)تُرجع جميع القيم بتنسيقArray. #18788 (hexiaoting). - أُضيف الإعداد
log_commentالمرتبط بـ #18494. #18549 (Zijie Lu). - إضافة دعم لوسيط من النوع
Tupleفي الدالتينargMinوargMax. #17359 (Ildus Kurbangaliev). - دعم صيغة
EXISTS VIEW. #18552 (Du Chuan). - إضافة صيغة
SELECT ALL. يُغلق #18706. #18723 (flynn).
تحسين الأداء
- تسريع إزالة
partsعبر خفض عدد استدعاءات النظامstat. يعيد هذا التحسين القائم الذي كان موجودًا سابقًا. كما أصبحت واجهةIDiskأكثر أمانًا. هذا يُغلق #19065. #19086 (alexey-milovidov). - أصبحت الأسماء المستعارة المعرَّفة في عبارة
WITHتُستخدم بشكل صحيح في تحليل الفهارس. ويمكن الآن للاستعلامات مثلWITH column AS alias SELECT ... WHERE alias = ...استخدام الفهرس. #18896 (Amos Bird). - إضافة
optimize_alias_column_prediction(مفعّل افتراضيًا)، ويقوم بما يلي: - مراعاة الأعمدة ذات الأسماء المستعارة في WHERE أثناء تقليم الأقسام وتخطي البيانات باستخدام الفهارس الثانوية؛ - مراعاة الأعمدة ذات الأسماء المستعارة في WHERE في استعلامات العدّ البسيطة ضمن optimize_trivial_count؛ - مراعاة الأعمدة ذات الأسماء المستعارة في GROUP BY/ORDER BY ضمن optimize_aggregation_in_order/optimize_read_in_order. #16995 (sundyli). - تسريع الدالة التجميعية
sum. لا يظهر هذا التحسين إلا في اختبارات الأداء الاصطناعية، وليس ذا فائدة عملية كبيرة. #19216 (alexey-milovidov). - تحديث libc++ واستخدام ABI مختلف لتوفير أداء أفضل. #18914 (Danila Kutenin).
- إعادة كتابة الدالتين
sumIf()وsum(if())إلى الدالةcountIf()عندما تكونان متكافئتين منطقيًا. #17041 (flynn). - استخدام connection pool لاتصالات S3، تتحكم فيه إعدادات
s3_max_connections. #13405 (Vladimir Chebotarev). - إضافة دعم للخيار الطويل في zstd لتحسين ضغط الأعمدة النصية وتوفير المساحة. #17184 (ygrek).
- تحسين latency الخادم قليلًا عبر إلغاء الوصول إلى الإعدادات عند كل connection. #19863 (alexey-milovidov).
- تقليل التنازع على الأقفال عند وجود طبقات متعددة من المحرك
Buffer. #19379 (Azat Khuzhin). - دعم تقسيم خطوة
Filterفي query plan إلى زوجExpression + Filter. ومع تحسين دمجExpression + Expression(#17458)، قد يؤخر ذلك تنفيذ بعض التعبيرات إلى ما بعد خطوةFilter. #19253 (Nikolai Kochetov).
تحسين
- أصبح بالإمكان الآن تنفيذ
SELECT count() FROM tableإذا كان بالإمكان اختيار عمودanyواحد فقط منtable. يُصلح هذا #10639. #18233 (Vitaly Baranov). - تم تعيين مجموعة المحارف إلى
utf8mb4عند التعامل مع خوادم MySQL البعيدة. يُصلح هذا #19795. #19800 (alexey-milovidov). - تدعم table function
S3الآن وضع Compressionauto(الاكتشاف التلقائي). يُغلق هذا #18754. #19793 (Vladimir Chebotarev). - إخراج الوسيطات غير المنتهية للدالة
formatReadableTimeDeltaبشكل صحيح. في الإصدارات السابقة، كان هناك تحويل ضمني إلى قيمة عددية صحيحة خاصة بالتنفيذ. #19791 (alexey-milovidov). - ستستخدم table function
S3المنطقة العامة إذا تعذر تحديد Region بدقة. يُغلق هذا #10998. #19750 (Vladimir Chebotarev). - في distributed queries، إذا كان الإعداد
async_socket_for_remoteمُمكّنًا، فقد كان من الممكن حدوث تجاوز سعة المكدس، على الأقل في إعداد build الخاص بالتصحيح، إذا استُخدم Data type متداخل بعمق شديد في table (مثلArray(Array(Array(...more...)))). يُصلح هذا #19108. ويُدخل هذا التغيير قدرًا طفيفًا من عدم التوافق مع الإصدارات السابقة: لم يعد الاستخدام المفرط للأقواس في تعريفات الأنواع مدعومًا، مثال:Array((UInt8)). #19736 (alexey-milovidov). - إضافة pool منفصل لوسطاء الرسائل (RabbitMQ و Kafka). #19722 (Azat Khuzhin).
- إصلاح تجاوز نادر للحد
max_number_of_merges_with_ttl_in_pool(إذ يمكن إسناد merges إضافية مع TTL) في MergeTree غير replicated. #19708 (alesapin). - Dictionary: تحسين رسالة error أثناء parsing الخاص بـ attribute. #19678 (Maksim Kita).
- إضافة خيار لتعطيل التحقق من checksums عند القراءة. يجب ألا يُستخدم هذا مطلقًا في production. يُرجى عدم توقع أي فائدة من تعطيله. وقد يُستخدم فقط للتجارب وbenchmarkات الأداء. ينطبق هذا الإعداد فقط على الجداول من MergeTree family. ويجري دائمًا التحقق من checksums بالنسبة إلى table engines الأخرى وعند استلام البيانات عبر الشبكة. وبحسب ملاحظاتي، لا يوجد فرق في الأداء أو أنه أقل من 0.5%. #19588 (alexey-milovidov).
- دعم نتيجة ثابتة في الدالة
multiIf. #19533 (Maksim Kita). - تمكين الدوال length/empty/notEmpty لنوع البيانات Map، بحيث تُرجع عدد المفاتيح في Map. #19530 (taiyang-li).
- إضافة الخيار
--reconnectإلىclickhouse-benchmark. عند تحديد هذا الخيار، سيُعاد الاتصال قبل كل طلب. وهذا مطلوب لأغراض الاختبار. #19872 (alexey-milovidov). - دعم استخدام الموقع الجديد لملف
.debug. يُصلح هذا #19348. #19520 (Amos Bird). - الدالة
toIPv6تُحلّل عناوينIPv4. #19518 (Bharat Nallan). - إضافة الحقل
http_refererإلىsystem.query_logوsystem.processesوغيرهما. يُغلق هذا #19389. #19390 (alexey-milovidov). - تحسين التوافق مع MySQL بجعل المزيد من الدوال غير حساسة لحالة الأحرف وإضافة أسماء مستعارة. #19387 (Daniil Kondratyev).
- إضافة مقاييس لأنواع أجزاء MergeTree (Wide/Compact/InMemory). #19381 (Azat Khuzhin).
- السماح بتشغيل Docker باستخدام uid عشوائي. #19374 (filimonov).
- إصلاح المحاذاة غير الصحيحة لقيم نوع البيانات
IPv4في تنسيقات Pretty. إذ كانت تُحاذى إلى اليمين بدلًا من اليسار. يُغلق هذا #19184. #19339 (alexey-milovidov). - السماح بتغيير
max_server_memory_usageدون إعادة تشغيل. يُغلق هذا #18154. #19186 (alexey-milovidov). - قد يكون الاستثناء عند استدعاء الدالة
barباستخدام وسيط NaN معيّن مضلّلًا بعض الشيء في الإصدارات السابقة. يُصلح هذا #19088. #19107 (alexey-milovidov). - تعيين uid / gid الخاصَّين بمستخدم ومجموعة clickhouse صراحةً إلى القيم الثابتة (101) في صور clickhouse-server. #19096 (filimonov).
- إصلاح الخطأ
PeekableReadBuffer: Memory limit exceedعند إدراج بيانات تحتوي على سلاسل نصية كبيرة جدًا. يُصلح هذا #18690. #18979 (tavplubix). - صورة Docker: عدة تحسينات على نقطة دخول clickhouse-server. #18954 (filimonov).
- إضافة
normalizeQueryKeepNamesوnormalizedQueryHashKeepNamesلتطبيع الاستعلامات دون إخفاء الأسماء الطويلة باستخدام?. يساعد هذا على تحليل سجلات الاستعلامات المعقّدة بشكل أفضل. #18910 (Amos Bird). - التحقق من checksum لكل block في الدفعة الموزعة على جهة الإرسال قبل الإرسال (من دون قراءة الملف مرتين، إذ سيجري التحقق من checksums أثناء القراءة)، ما يمنع تعليق عملية INSERT على جهة الاستقبال (عند وجود ملف .bin مبتور على جهة الإرسال). كما جرى تفادي قراءة ملفات .bin مرتين عند تنفيذ INSERT على دفعات (كان ذلك مطلوبًا لحساب rows/bytes لأخذ squashing في الاعتبار، أما الآن فأصبحت هذه المعلومات مضمنة في header، مع الحفاظ على التوافقية الخلفية). #18853 (Azat Khuzhin).
- إصلاح المشكلات المتعلقة بـ
RIGHTوFULL JOINللجداول التي تحتوي على حالات الدوال التجميعية. في الإصدارات السابقة، كان يُلقى استثناء متعلق بالدالةcloneResized. #18818 (templarzq). - تمت إضافة إعدادات نقطة نهاية S3 المعتمدة على البادئة. #18812 (Vladimir Chebotarev).
- إضافة دعم لأنواع الوسائط [UInt8, UInt16, UInt32, UInt64] في الدوال bitmapTransform وbitmapSubsetInRange وbitmapSubsetLimit وbitmapContains. يُغلق هذا #18713. #18791 (sundyli).
- السماح بإسناد أسماء مستعارة إضافية إلى CTE (تعبيرات الجدول المشتركة). وتمرير CSE (إزالة التعبيرات الفرعية المشتركة) إلى الاستعلامات الفرعية على المستوى نفسه عندما تكون
enable_global_with_statement = 1. يُصلح هذا #17378. ويُصلح أيضًا https://github.com/ClickHouse/ClickHouse/pull/16575#issuecomment-753416235 . #18684 (Amos Bird). - تم تحديث librdkafka إلى v1.6.0-RC2. يُصلح هذا #18668. #18671 (filimonov).
- في حال حدوث استثناءات غير متوقعة، ستُعاد تلقائيًا تشغيل خيط التنفيذ الخلفي المسؤول عن تنفيذ استعلامات DDL الموزعة. يُصلح هذا #17991. #18285 (徐炘).
- تم تحديث AWS C++ SDK للاستفادة من المناطق العامة في S3. #17870 (Vladimir Chebotarev).
- تمت إضافة دعم للعبارة
WITH ... [AND] [PERIODIC] REFRESH [interval_in_sec]عند إنشاء جداولLIVE VIEW. #14822 (vzakaznikov). - تقييد استعلامات
MODIFY TTLلجداولMergeTreeالمُنشأة ببناء الجملة القديم. في السابق كان الاستعلام ينجح، لكنه فعليًا لم يكن له أي تأثير. #19064 (Anton Popov).
إصلاحات الأخطاء
- إصلاح تحليل الفهرس للدوال الثنائية ذات الوسيط الثابت الذي يؤدي إلى نتائج استعلامات خاطئة. يُصلح هذا #18364. #18373 (Amos Bird).
- إصلاح بدء تشغيل الخادم مع الجداول التي تحتوي على تعبيرات افتراضية تتضمن
dictGet(). كما يتيح الحصول على نوع الإرجاع للدالةdictGet()دون تحميل القاموس. #19805 (Vitaly Baranov). - إصلاح تعطل الخادم بعد استعلام يستخدم الدالة
ifمع النوعTupleلنتيجة فرعي then/else. ويجب أن يحتوي النوعTupleعلىArrayأو نوع معقد آخر. يُصلح #18356. #20133 (alesapin). MaterializeMySQL(ميزة تجريبية): إصلاح النسخ المتماثل لعبارات SQL التي تُحدّث عدة جداول. #20066 (Håvard Kvålen).- منع ظهور الخطأ “Connection refused” في Docker أثناء تنفيذ برنامج التهيئة النصي. #20012 (filimonov).
EmbeddedRocksDBهو محرك تخزين تجريبي. إصلاح المشكلة المتعلقة بغياب التحقق المناسب من الأنواع. كما تم تبسيط الشيفرة. يُغلق هذا #19967. #19972 (alexey-milovidov).- إصلاح
segfaultفي الدالةfromModifiedJulianDayعندما يكون نوع الوسيطNullable(T)لأي نوع عددي صحيح بخلاف Int32. #19959 (PHO). - كانت الدالة
greatCircleAngleتُرجع نتائج غير دقيقة في الإصدارات السابقة. يُغلق هذا #19769. #19789 (alexey-milovidov). - إصلاح خطأ نادر كان يمنع بعض العمليات المكررة، مثل
mutation، من معالجة بعض الأجزاء بعد تلف البيانات. يُصلح #19593. #19702 (alesapin). - قد يعلق الخيط الخلفي الذي ينفذ استعلامات
ON CLUSTERأثناء انتظار الجدول المكرر المحذوف ليفعل شيئًا ما. تم إصلاح ذلك. #19684 (yiguolei). - إصلاح إلغاء التسلسل الخاطئ لوصف الأعمدة. وكان هذا يجعل
INSERTفي جدول يحتوي على عمود اسمه\مستحيلًا. #19479 (alexey-milovidov). - وسم الدفعة الموزعة على أنها تالفة في حال وجود كتلة بيانات فارغة في أحد الملفات. #19449 (Azat Khuzhin).
- إصلاح خطأ نادر جدًا كان قد يؤدي إلى تعليق
mutationبعدDROP/DETACH/REPLACE/MOVE PARTITION. وكان قد أُصلح جزئيًا بواسطة #15537 في معظم الحالات. #19443 (tavplubix). - إصلاح الخطأ المحتمل
Extremes transform was already added to pipeline. يُصلح #14100. #19430 (Nikolai Kochetov). - إصلاح القيمة الافتراضية في أنواع join ذات القيم الافتراضية غير الصفرية (مثل بعض Enums). يُغلق #18197. #19360 (vdimir).
- عدم اعتبار ملف العلامات الخاص بالإرسال الموزّع تالفًا عند EOF. #19290 (Azat Khuzhin).
- إصلاح تسرّب واصف ملف لـ pipe في
async_socket_for_remote. #19153 (Azat Khuzhin). - إصلاح القراءة اللانهائية من ملف بتنسيق
ORC(أُدخل هذا الخلل في #10580). يُصلح #19095. #19134 (Nikolai Kochetov). - إصلاح مشكلة في كاتب بيانات MergeTree قد تؤدي إلى marks بحجم أكبر من حجم granularity الثابت. يُصلح #18913. #19123 (alesapin).
- إصلاح خطأ عند بدء التشغيل عندما لم يكن ClickHouse قادرًا على قراءة compression codec من
LowCardinality(Nullable(...))ويطلق الاستثناءAttempt to read after EOF. يُصلح #18340. #19101 (alesapin). - تبسيط تنفيذ
tupleHammingDistance. دعم tuples ذات أي طول متساوٍ. يُصلح #19029. #19084 (Nikolai Kochetov). - التأكد من أن
groupUniqArrayيعيد النوع الصحيح لوسيطة من نوع Enum. هذا يُغلق #17875. #19019 (alexey-milovidov). - إصلاح خطأ محتمل
Expected single dictionary argument for functionعند استخدام الدالةignoreمع وسيطة من نوعLowCardinality. يُصلح #14275. #19016 (Nikolai Kochetov). - إصلاح إدراج column من نوع
LowCardinalityفي table بمحركTinyLog. يُصلح #18629. #19010 (Nikolai Kochetov). - إصلاح مشكلة طفيفة في JOIN: يحاول Join تحويل الأعمدة الثابتة إلى أعمدة فعلية، بينما تتوقع شيفرتنا وجودها بهذه الصورة في مواضع أخرى. #18982 (Nikita Mikhaylov).
- تعطيل
optimize_move_functions_out_of_anyلأن هذا التحسين ليس صحيحًا دائمًا. هذا يُغلق #18051. هذا يُغلق #18973. #18981 (alexey-milovidov). - إصلاح استثناء محتمل
QueryPipeline stream: different number of columnsناتج عن دمج خطواتExpressionفي خطة الاستعلام. يعالج #18190. #18980 (Nikolai Kochetov). - إصلاح حالة تعطل تزامني نادرة جدًا عند الإيقاف. #18977 (tavplubix).
- إصلاح حالات تعطل نادرة عند نفاد ذاكرة الخادم. #18976 (tavplubix).
- إصلاح سلوك غير صحيح عندما يزيل الاستعلام
ALTER TABLE ... DROP PART 'part_name'جميع كتل إزالة التكرار الخاصة بالقسم بالكامل. يعالج #18874. #18969 (alesapin). - إصلاح المشكلة #18894 عبر إضافة تحقق لتجنب حدوث استثناء عندما يكون الاسم المستعار الطويل للعمود (بنمط ‘table.column’، ويُنشأ تلقائيًا عادةً بواسطة أدوات BI مثل Looker) مساويًا لاسم جدول طويل. #18968 (Daniel Qin).
- إصلاح الخطأ
Task was not found in task queue(لا يمكن أن يحدث إلا في الاستعلامات البعيدة، معasync_socket_for_remote = 1). #18964 (Nikolai Kochetov). - إصلاح خلل يؤدي إلى تسلسل mutation يحتوي على نص مُهرَّب بشكل غير صحيح بشكل غير صحيح (مثل
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')). يعالج #18878. #18944 (alesapin). - سيؤدي
ATTACH PARTITIONإلى إعادة تعيين mutations. #18804. #18935 (fastio). - إصلاح مشكلة في
bitmapOrCardinalityقد تؤدي إلى فك إشارة مرجع nullptr. هذا يُغلق #18911. #18912 (sundyli). - إصلاح الخطأ
Attempt to read after eofعند محاولةCASTللقيمةNULLمنNullable(String)إلىNullable(Decimal(P, S)). تُرجع الدالةCASTالآن القيمةNULLعندما يتعذر عليها تحليل قيمة عشرية من سلسلة نصية قابلة لأن تكونNULL. يعالج #7690. #18718 (Winter Zhang). - إصلاح مشكلة تحويل نوع البيانات لمحرك MySQL. #18124 (bo zeng).
- إصلاح استثناء الإجهاض في clickhouse-client عند تنفيذ
selectفقط. #19790 (taiyang-li).
تحسينات في البناء/الاختبار/التحزيم
- تشغيل SQLancer (مُشغِّل fuzzing منطقي لـ SQL) ضمن CI. #19006 (Ilya Yatsishin).
- سيجري Query Fuzzer عمليات fuzzing أوسع للاختبارات المضافة حديثًا. يُغلق هذا #18916. #19185 (alexey-milovidov).
- التكامل مع Big List of Naughty Strings لتحسين fuzzing. #19480 (alexey-milovidov).
- إضافة اختبارات تكامل تعمل باستخدام MSan. #18974 (alesapin).
- إصلاح أخطاء MemorySanitizer في cyrus-sasl و musl. #19821 (Ilya Yatsishin).
- تسبّب فحص الوسائط غير الكافية في الدالة
positionCaseInsensitiveUTF8في تفعيل address sanitizer. #19720 (alexey-milovidov). - إزالة
--project-directoryمن docker-compose في اختبار التكامل. وإصلاح تنسيق السجلات القادمة من حاوية docker. #19706 (Ilya Yatsishin). - تسهيل إنشاء macros.xml لاختبارات التكامل. ولم تعد هناك logging مفرطة من dicttoxml. مشروع dicttoxml غير نشط منذ أكثر من 5 سنوات. #19697 (Ilya Yatsishin).
- السماح بتمكين watchdog أو تعطيله صراحةً عبر متغير البيئة
CLICKHOUSE_WATCHDOG_ENABLE. ويكون مفعّلًا افتراضيًا إذا لم يكن server متصلًا بالطرفية. #19522 (alexey-milovidov). - السماح ببناء ClickHouse مع دعم Kafka على arm64. #19369 (filimonov).
- السماح ببناء librdkafka بدون ssl. #19337 (filimonov).
- استعادة إدخال Kafka في إصدارات FreeBSD المبنية. #18924 (Alexandre Snarskii).
- إصلاح احتمال إلغاء مرجع nullptr في table function
VALUES. #19357 (alexey-milovidov). - تجنّب تقارير UBSan في الدالة
arrayElementوsubstringوarraySum. يُصلح #19305. يُصلح #19287. يُغلق هذا #19336. #19347 (alexey-milovidov).
إصدار ClickHouse 21.1
إصدار ClickHouse v21.1.3.32-stable، 2021-02-03
إصلاحات الأخطاء
- إصلاح تعطل فهرس BloomFilter. يُصلح #19757. #19884 (Maksim Kita).
- إصلاح التعطل عند دفع شروط التصفية إلى الاستعلام الفرعي union distinct. يُصلح هذا #19855. #19861 (Amos Bird).
- إصلاح التصفية على قيم UInt8 الأكبر من 127. #19799 (Anton Popov).
- في الإصدارات السابقة، قد تتسبب الوسيطات غير المعتادة للدالة arrayEnumerateUniq في حدوث تعطل أو حلقة لا نهائية. يُغلق هذا #19787. #19788 (alexey-milovidov).
- إصلاح تجاوز سعة المكدس عند استخدام مقارنة دقيقة بين نوع حسابي ونوع String. #19773 (tavplubix).
- إصلاح التعطل عند استخدام اسم عمود Nested في
WHEREأوPREWHERE. يُصلح #19755. #19763 (Nikolai Kochetov). - إصلاح خطأ تجزئة في الدالة
bitmapAndnot. يُصلح #19668. #19713 (Maksim Kita). - قد تتسبب بعض الدوال التي تستخدم أعدادًا صحيحة كبيرة في حدوث segfault. الأعداد الصحيحة الكبيرة ميزة تجريبية. يُغلق هذا #19667. #19672 (alexey-milovidov).
- إصلاح النتيجة غير الصحيحة للدالة
neighborمع الوسيطLowCardinality. يُصلح #10333. #19617 (Nikolai Kochetov). - إصلاح مشكلة use-after-free في CompressedWriteBuffer داخل Connection بعد قطع الاتصال. #19599 (Azat Khuzhin).
- قد يعلق الاستعلام
DROP/DETACH TABLE table ON CLUSTER cluster SYNC، وقد تم إصلاح ذلك. يُصلح #19568. #19572 (tavplubix). - إصلاح تعبير id في استعلام CREATE DICTIONARY. #19571 (Maksim Kita).
- إصلاح SIGSEGV مع merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX. #19528 (Azat Khuzhin).
- كان من الممكن حدوث تجاوز سعة المخزن المؤقت (عند القراءة من الذاكرة) إذا استُدعيت الدالة
addMonthبوسائط مُصاغة خصيصًا. يُصلح هذا #19441. ويُصلح أيضًا #19413. #19472 (alexey-milovidov). - كان من الممكن حدوث قراءة من ذاكرة غير مهيأة في دوال التشفير/فك التشفير إذا مُرِّرت سلسلة فارغة باعتبارها IV. يُغلق هذا #19391. #19397 (alexey-milovidov).
- إصلاح احتمال حدوث تجاوز سعة المخزن المؤقت في مكتبة Uber H3. راجع https://github.com/uber/h3/issues/392. يُغلق هذا #19219. #19383 (alexey-milovidov).
- إصلاح عمود system.parts _state (كان يحدث LOGICAL_ERROR عند الاستعلام عن هذا العمود بسبب ترتيب غير صحيح). #19346 (Azat Khuzhin).
- تم إصلاح احتمال ظهور نتيجة غير صحيحة أو حدوث segfault عند aggregation عندما يكون للعرض المادي والجدول الهدف بنية مختلفة. يُصلح #18063. #19322 (tavplubix).
- إصلاح الخطأ
Cannot convert column now64() because it is constant but values of constants are different in source and result. استكمال لـ #7156. #19316 (Nikolai Kochetov). - إصلاح خلل قد يؤدي إلى تعليق استعلامات
ALTERوDROPالمتزامنة أثناء معالجة جدول ReplicatedMergeTree. #19237 (alesapin). - تم إصلاح الخطأ
There is no checkpointعند إدراج البيانات عبر واجهة HTTP باستخدام format TemplateأوCustomSeparated. يُصلح #19021. #19072 (tavplubix). - تعطيل طيّ الثوابت للاستعلامات الفرعية في مرحلة التحليل عندما يتعذر حساب النتيجة. #18446 (Azat Khuzhin).
- كان من الممكن أن تتعطل mutation أثناء انتظار part غير موجود بعد
MOVEأوREPLACE PARTITIONأو، في حالات نادرة، بعدDETACHأوDROP PARTITION. وقد تم إصلاح ذلك. #15537 (tavplubix).
إصدار ClickHouse v21.1.2.15-stable 2021-01-18
تغيير غير متوافق مع الإصدارات السابقة
- أصبح الإعداد
input_format_null_as_defaultمفعّلًا افتراضيًا. #17525 (alexey-milovidov). - التحقق من قيود الإعدادات الخاصة بإعدادات profile من config. سيفشل server في التشغيل إذا كان ملف users.xml يحتوي على إعدادات لا تستوفي القيود المقابلة. #18486 (tavplubix).
- تقييد
ALTER MODIFY SETTINGلمنع تغيير إعدادات Storage التي تؤثر في data parts (write_final_markوenable_mixed_granularity_parts). #18306 (Amos Bird). - تعيين
insert_quorum_parallelإلى 1 افتراضيًا. وهذا أكثر سهولةً في الاستخدام بكثير من quorum inserts بنمط “sequential”. لكن إذا كنت تعتمد على sequential consistency، فيجب إعادة هذا الإعداد إلى الصفر. #17567 (alexey-milovidov). - إزالة الدالة
sumburConsistentHash. وهذا يُغلق #18120. #18656 (alexey-milovidov). - أُزيلت aggregate functions
timeSeriesGroupSumوtimeSeriesGroupRateSumلأن صديقًا لي قال إنها لم تعمل قط. وهذا يُصلح #16869. إذا حالفك الحظ في استخدام هاتين الدالتين، فأرسل رسالة بريد إلكتروني إلى feedback@clickhouse.com. #17423 (alexey-milovidov). - حظر
toUnixTimestamp(Date())(إذ كان في السابق يعيد فقط تمثيل UInt16 لـ Date). #17376 (Azat Khuzhin). - السماح باستخدام أنواع الأعداد الصحيحة الموسعة (
Int128وInt256وUInt256) في الدالتينavgوavgWeighted. كما أصبح مسموحًا أيضًا باستخدام أنواع مختلفة (عدد صحيح، Decimal، فاصلة عائمة) للقيمة والوزن في الدالةavgWeighted. هذا تغيير غير متوافق مع الإصدارات السابقة: إذ تُرجع الدالتانavgوavgWeightedالآن دائمًاFloat64(كما هو موثّق). قبل هذا التغيير، كان return type لوسائطDecimalهو أيضًاDecimal. #15419 (Mike). - لم يعد التعبير
toUUID(N)يعمل. استبدله بـtoUUID('00000000-0000-0000-0000-000000000000'). وقد جاء هذا التغيير بسبب النتائج غير الواضحة لـtoUUID(N)عندما تكون N غير صفرية. - تُرفض SSL Certificates ذات “key usage” غير الصحيح. في الإصدارات السابقة، كانت تُقبل. راجع #19262.
- أُزيلت مراجع
inclإلى ملف substitution (/etc/metrika.xml) من config الافتراضي (<remote_servers>,<zookeeper>,<macros>,<compression>,<networks>). إذا كنت تستخدم ملف substitution وتعتمد على تلك المراجع الضمنية، فيجب عليك إعادتها يدويًا وبشكل صريح بإضافة الأقسام المقابلة مع السماتincl="..."قبل التحديث. راجع #18740 (alexey-milovidov).
ميزة جديدة
- تنفيذ بروتوكول gRPC في ClickHouse. #15111 (Vitaly Baranov).
- إتاحة استخدام مجموعات ZooKeeper متعددة. #17070 (fastio).
- تم تنفيذ الاستعلامين
REPLACE TABLEوCREATE OR REPLACE TABLE. #18521 (tavplubix). - تنفيذ
UNION DISTINCTواعتبار عبارةUNIONالعاديةUNION DISTINCTافتراضيًا. وإضافة الإعدادunion_default_modeالذي يتيح اعتبارهاUNION ALLأو اشتراط تحديد الوضع صراحةً. #16338 (flynn). - أُضيفت الدالة
accurateCastOrNull. ويغلق هذا #10290. كما أُضيفت تحويلات الأنواع في التعبيراتx IN (subquery). ويغلق هذا #10266. #16724 (Maksim Kita). - يدعم IP Dictionary النوعين
IPv4وIPv6مباشرةً. #17571 (vdimir). - يدعم IP Dictionary الجلب بالمفتاح. ويحل هذا #18241. #18480 (vdimir).
- إضافة دعم الضغط/فك الضغط
*.zstلاستيراد البيانات وتصديرها. ويتيح ذلك استخدام*.zstفي الدالةfile()وContent-encoding: zstdفي عميل HTTP. ويغلق هذا #16791 . #17144 (Abi Palagashvili). - أُضيفت الدوال التجميعية
mannWitneyUTestوstudentTTestوwelchTTest. كما أُعيدت هيكلةrankCorrقليلًا. #16883 (Nikita Mikhaylov). - إضافة الدالتين
countMatches/countMatchesCaseInsensitive. #17459 (Azat Khuzhin). - تنفيذ
countSubstrings()/countSubstringsCaseInsensitive()/countSubstringsCaseInsensitiveUTF8()(عدّ عدد مرات ظهور السلسلة الفرعية). #17347 (Azat Khuzhin). - إضافة معلومات عن قواعد البيانات والجداول والأعمدة المستخدمة في system.query_log. وإضافة الحقلين
query_kindوnormalized_query_hash. #17726 (Amos Bird). - إضافة الإعداد
optimize_on_insert. عند تمكينه، يُجرى على كتلة البيانات المُدرجة نفس التحويل كما لو أُجريت عليها عملية دمج (مثل Replacing وCollapsing وAggregating…). هذا الإعداد مُمكّن افتراضيًا. وقد يؤثر ذلك في سلوكmaterialized viewوMaterializeMySQL (انظر الوصف التفصيلي). ويغلق هذا #10683. #16954 (Kruglov Pavel). - مصادقة Kerberos لـ HDFS. #16621 (Ilya Golshtein).
- دعم العبارة
SHOW SETTINGSلعرض المعلمات في system.settings. كما يدعم أيضًاSHOW CHANGED SETTINGSوعبارةLIKE/ILIKE. #18056 (Jianmei Zhang). - أصبحت الدالة
positionتدعم الآن الصياغةPOSITION(needle IN haystack)لتحقيق التوافق مع SQL. وهذا يغلق #18701. … #18779 (Jianmei Zhang). - يتوفر الآن إعداد تخزين جديد
max_partitions_to_readللجداول في MergeTree family. وهو يحدّ من العدد الأقصى لـ partitions التي يمكن الوصول إليها في query واحدة. وأُضيف أيضًا إعداد مستخدمforce_max_partition_limitلفرض هذا القيد. #18712 (Amos Bird). - إضافة عمود
query_idإلىsystem.part_logللأجزاء المُدرجة. يغلق #10097. #18644 (flynn). - السماح بإنشاء table بصيغة AS SELECT مع تحديد columns. مثال:
CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;. #18060 (Maksim Kita). - أُضيفت دوال aggregation
arrayMinوarrayMaxوarrayAvg. #18032 (Maksim Kita). - جرى تنفيذ query
ATTACH TABLE name FROM 'path/to/data/' (col1 Type1, .... وهي تنشئ table جديدة بالبنية المحددة وتربط بيانات table من directory المحدد فيuser_files. #17903 (tavplubix). - إضافة دعم mutation إلى StorageMemory. وهذا يغلق #9117. #15127 (flynn).
- دعم الصياغة
EXISTS DATABASE name. #18458 (Du Chuan). - دعم الدالتين المضمّنتين
isIPv4StringوisIPv6Stringعلى غرار MySQL. #18349 (Du Chuan). - إضافة إعداد جديد
insert_distributed_one_random_shard = 1للسماح بعملية insert إلى distributed table متعددة المقاطع من دون أي مفتاح distributed. #18294 (Amos Bird). - إضافة الإعدادين
min_compress_block_sizeوmax_compress_block_sizeإلى MergeTreeSettings، وتكون لهما أولوية أعلى من الإعدادات العامة ويسري مفعولهما عند تعيينهما. يُغلق 13890. #17867 (flynn). - إضافة دعم bitmaps من نوع roaring 64bit. #17858 (Andy Yang).
- توسيع صياغة
OPTIMIZE ... DEDUPLICATEللسماح بقائمة صريحة (أو ضمنية باستخدام asterisk/column transformers) من columns للتحقق من التكرارات فيها. … #17846 (Vasily Nemkov). - تمت إضافة الدوال
toModifiedJulianDayوfromModifiedJulianDayوtoModifiedJulianDayOrNullوfromModifiedJulianDayOrNull. تُحوِّل هذه الدوال بين تاريخ التقويم الميلادي الممتد ورقم Modified Julian Day. #17750 (PHO). - تمت إضافة إمكانية استخدام custom TLD list: أُضيفت الدالتان
firstSignificantSubdomainCustomوcutToFirstSignificantSubdomainCustom. #17748 (Azat Khuzhin). - تمت إضافة دعم بروتوكول
PROXYv1لتغليف واجهة native TCP. كما أصبح من الممكن أن تستند quotas إلى عنوان IP المُمرَّر عبر proxy (ويُطبَّق ذلك على عنوانPROXYv1وعلىX-Forwarded-Forمن HTTP interface). يفيد ذلك عند إتاحة الوصول إلى ClickHouse فقط عبر proxy موثوق (مثل CloudFlare)، مع الحاجة إلى احتساب موارد المستخدمين بحسب عناوين IP الأصلية الخاصة بهم. يُصلح هذا #17268. #17707 (alexey-milovidov). - يدعم
clickhouse-clientالآن فتحEDITORلتحرير الأوامر.Alt-Shift-E. #17665 (Amos Bird). - تمت إضافة الدالة
encodeXMLComponentلتهريب المحارف بهدف وضع سلسلة نصية داخل عقدة نصية في XML أو ضمن attribute. #17659 (nauta). - تم تقديم الصياغة
DETACH TABLE/VIEW ... PERMANENTLY، بحيث لا يعود الجدول للظهور تلقائيًا بعد إعادة التشغيل (بل عند طلب صريح فقط). ولا يزال بالإمكان إعادة Attach للجدول باستخدام الصياغة المختصرة ATTACH TABLE. يحقق ذلك #5555. ويُصلح #13850. #17642 (filimonov). - تمت إضافة metrics غير متزامنة لإجمالي عدد rows والبايتات وparts في MergeTree tables. يُصلح هذا #11714. #17639 (flynn).
- تمت إضافة الإعدادين
limitوoffsetلترقيم الصفحات خارج SQL: #16176 وهما مفيدان لبناء واجهات API. سيؤثر هذان الإعدادان في استعلام SELECT كما لو تمت إضافتهما على النحو التالي:select * from (your_original_select_query) t limit xxx offset xxx;. #17633 (hexiaoting). - تم توفير combinator جديد للمُجمِّع:
-SimpleStateلبناء أنواعSimpleAggregateFunctionعبر query. وهو مفيد لتعريف MaterializedView لمحرك AggregatingMergeTree، وسيفيد projections أيضًا. #16853 (Amos Bird). - تمت إضافة parameter
queries-fileلكل منclickhouse-clientوclickhouse-local. #15930 (Maksim Kita). - تمت إضافة parameter
queryإلىclickhouse-benchmark. #17832 (Maksim Kita). - أصبح
EXPLAIN ASTالآن يدعم queries أخرى غيرSELECTأيضًا. #18136 (taiyang-li).
ميزة تجريبية
- أُضيفت دوال لحساب minHash وsimHash لـ n-grams النصية وshingles. وهي مخصّصة للبحث عن العناصر شبه المكررة. كما أُضيفت الدالتان
bitHammingDistanceوtupleHammingDistance. #7649 (flynn). - أُضيف نوع بيانات جديد هو
Map. راجع #1841. لا يدعم الإصدار الأول منMapسوى النوعStringلكلٍّ من المفتاح والقيمة. #15806 (hexiaoting). - تنفيذ محلل SQL بديل يستند إلى بيئة تشغيل ANTLR4 ومولَّد من قواعد EBNF. #11298 (Ivan).
تحسين الأداء
- تنفيذ جديد لـ IP Dictionary باستهلاك أقل للذاكرة، مع تحسين الأداء في بعض الحالات وإصلاح بعض الأخطاء. #16804 (vdimir).
- تنسيق متوازٍ لتصدير البيانات. #11617 (Nikita Mikhaylov).
- تكامل LDAP: أُضيفت المعلَمة
verification_cooldownإلى إعداد اتصال خادم LDAP للسماح بالتخزين المؤقت لمحاولات “bind” الناجحة لمدة قابلة للتهيئة. #15988 (Denis Glazachev). - أُضيف الخيار
--no-system-tableإلىclickhouse-localللتشغيل دون جداول النظام. وهذا يتجنب تهيئةDateLUTالتي قد تستغرق وقتًا ملحوظًا (عشرات المللي ثانية) عند بدء التشغيل. #18899 (alexey-milovidov). - استُبدل
PODArrayبـPODArrayWithStackMemoryفيAggregateFunctionWindowFunnelDataلتحسين أداء الدالةwindowFunnel. #18817 (flynn). - عدم إرسال كتل فارغة إلى
shardsعند تنفيذ INSERT متزامن إلى جدول Distributed. هذا يُغلق #14571. #18775 (alexey-milovidov). - تحسين القراءة في StorageMemory. #18052 (Maksim Kita).
- استخدام خوارزمية Dragonbox لتحويل float إلى string بدلًا من ryu. وهذا يحسن أداء تحويل float إلى string بشكل ملحوظ. #17831 (Maksim Kita).
- تسريع تنفيذ
IPv6CIDRToRange. #17569 (vdimir). - إضافة الإعداد
remerge_sort_lowered_memory_bytes_ratio(إذا لم ينخفض استخدام الذاكرة بعد إعادة الدمج بهذه النسبة، فستُعطَّل إعادة الدمج). #17539 (Azat Khuzhin). - تحسين أداء AggregatingMergeTree مع SimpleAggregateFunction(String) في PK. #17109 (Azat Khuzhin).
- أصبح الآن المجمِّع
-Ifمنزوع الافتراضية، وأصبحتcountتُنفَّذ بشكل متجهي على نحو صحيح. وذلك في طلب السحب هذا. #17043 (Amos Bird). - إصلاح مشكلة الأداء عند القراءة من جداول
Mergeعبر عدد كبير جدًا من جداولMergeTree. ويُصلح هذا #7748. #16988 (Anton Popov). - تحسين أداء الدالة
repeat. #16937 (satanson). - تحسين طفيف في أداء تحليل الأعداد العائمة. #16809 (Maksim Kita).
- إضافة إمكانية تخطي الأقسام المدمجة في
OPTIMIZE TABLE ... FINAL. #15939 (Kruglov Pavel). - الدمج مع fast_float from Daniel Lemire لتحليل الأعداد ذات الفاصلة العائمة. #16787 (Maksim Kita). وهو غير مفعّل لأن أداءه لا يزال أقل من أداء محلّل الأعداد العائمة التقريبي في ClickHouse.
- إصلاح max_distributed_connections (يؤثر في
prefer_localhost_replica = 1وmax_threads != max_distributed_connections). #17848 (Azat Khuzhin). - اختيار تكيّفي بين الرفع بجزء واحد والرفع متعدد الأجزاء عند إرسال البيانات إلى S3. ويجري التحكّم في الرفع بجزء واحد بواسطة إعداد جديد
max_single_part_upload_size. #17934 (Pavel Kovalenko). - دعم المهام غير المتزامنة في
PipelineExecutor. ودعم أولي للمقابس غير المتزامنة للاستعلامات البعيدة. #17868 (Nikolai Kochetov). - السماح باستخدام التحسين
optimize_move_to_prewhereمع الأجزاء المدمجة عندما تكون أحجام الأعمدة غير معروفة. #17330 (Anton Popov).
تحسينات
- تجنّب حدوث حالة deadlock عند تنفيذ
INSERT SELECTإلى الجدول نفسه من جدول يستخدم محركي الجدولTinyLogأوLog. يُغلق هذا #6802. يُغلق هذا #18691. يُغلق هذا #16812. يُغلق هذا #14570. #15260 (alexey-milovidov). - دعم البنية
SHOW CREATE VIEW nameعلى غرار MySQL. #18095 (Du Chuan). - أصبحت جميع الاستعلامات من النوع
Decimal * Floatأو بالعكس مدعومة، بما في ذلك الاستعلامات التجميعية (مثلSELECT sum(decimal_field * 1.1)أوSELECT dec_col * float_col)، ويكون نوع النتيجة Float32 أو Float64. #18145 (Mike). - تحسين واجهة الويب المبسطة: إضافة السجل؛ وإضافة دعم المشاركة؛ وتجنّب حالة تسابق بين الطلبات المختلفة؛ وإضافة مؤشرات للطلبات أثناء التنفيذ وعند الجاهزية؛ وإضافة favicon؛ واكتشاف Ctrl+Enter إذا لم تكن منطقة النص في وضع التركيز. #17293 #17770 (alexey-milovidov).
- لم يكن clickhouse-server يرسل طلب
closeإلى خادم ZooKeeper. #16837 (alesapin). - تجنّب التوقف غير الطبيعي للخادم في حال كانت حدود الذاكرة منخفضة جدًا (
max_memory_usage = 1/max_untracked_memory = 1). #17453 (Azat Khuzhin). - إصلاح النتيجة غير الحتمية للدالة
windowFunnelفي حال وجود نفس الطابع الزمني لأحداث مختلفة. #18884 (Fuwang Hu). - Docker: تعيين uid / gid لمستخدم ومجموعة clickhouse صراحةً إلى القيم الثابتة (101) في صور Docker الخاصة بـ clickhouse-server. #19096 (filimonov).
- عمليات
INSERTغير المتزامنة إلى جداولDistributed: تمت إضافة إعدادين جديدين (على غرار عائلة MergeTree): -fsync_after_insert- ينفّذ fsync بعد كل عملية إدراج. سيؤدي ذلك إلى خفض أداء عمليات الإدراج. -fsync_directories- ينفّذ fsync للدليل المؤقت (المستخدَم فقط معINSERTغير المتزامن) بعد جميع العمليات (الكتابة، وإعادة التسمية، وما إلى ذلك). #18864 (Azat Khuzhin). - أصبح الأمر
SYSTEM KILLيعمل في Docker. يُغلق هذا #18847. #18848 (alexey-milovidov). - توسيع وحدات الماكرو في مسار zk عند تنفيذ
FETCH PARTITION. #18839 (fastio). - تطبيق
ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ...على جميع النسخ المتماثلة، لأن أوامر ALTER من هذا النوع لا تُنسخ متماثلًا. #18789 (Amos Bird). - السماح لمحوّل الأعمدة
EXCEPTبقبول سلسلة نصية كمطابِق للتعبير النمطي. هذا يحل #18685. #18699 (Amos Bird). - إصلاح
SimpleAggregateFunctionفيSummingMergeTree. الآن يعمل مثلAggregateFunction. في الإصدارات السابقة، كانت القيم تُجمع معًا بغض النظر عن الدالة التجميعية. هذا يصلح #18564. #8052. #18637 (Amos Bird). وإصلاح آخر لاستخدامSimpleAggregateFunctionفيSummingMergeTree. هذا يصلح #18676. #18677 (Amos Bird). - إصلاح خطأ assertion داخل allocator في الحالة التي تكون فيها الوسيطة الأخيرة للدالة bar هي NaN. والآن يُطرَح استثناء عادي من ClickHouse. هذا يصلح #17876. #18520 (Nikita Mikhaylov).
- إصلاح مشكلة في سهولة الاستخدام: عدم وجود سطر جديد بعد رسالة الاستثناء في بعض الأدوات. #18444 (alexey-milovidov).
- إضافة إمكانية تعديل نوع عمود المفتاح الأساسي وعمود مفتاح partition من
LowCardinality(Type)إلىTypeوالعكس. وإضافة إمكانية تعديل نوع عمود المفتاح الأساسي منEnumXإلىIntX. يصلح #5604. #18362 (alesapin). - تنفيذ الوصول إلى الحقول باستخدام
untuple. #18133. #18309 (hexiaoting). - السماح بتحليل حقول Array من CSV إذا كانت ممثلة كسلسلة نصية تحتوي على مصفوفة جرى تسلسلها كـ CSV متداخل. مثال:
"[""Hello"", ""world"", ""42"""" TV""]"سيُحلَّل إلى['Hello', 'world', '42" TV']. والسماح بتحليل Array في CSV من سلسلة نصية من دون أقواس إحاطة. مثال:"'Hello', 'world', '42"" TV'"سيُحلَّل إلى['Hello', 'world', '42" TV']. #18271 (alexey-milovidov). - تحسين حساب adaptive granularity لأجزاء MergeTree الواسعة. #18223 (alesapin).
- أصبح
clickhouse installيعمل الآن على Mac. كانت المشكلة أنه لا يوجد procfs على هذه المنصة. #18201 (Nikita Mikhaylov). - تحسين التلميحات الخاصة بصياغة استعلام
SHOW .... #18183 (Du Chuan). - دعم دوال تجميع المصفوفات
arrayMinوarrayMaxوarraySumوarrayAvgللأنواعInt128وInt256وUInt256. #18147 (Maksim Kita). - إضافة
diskإلى إعدادات التخزين لـSetوJoin. #18112 (Grigory Pervakov). - التحكم في الوصول: تتطلب دالة الجدول
merge()الآن أن يمتلك المستخدم الحالي امتيازSELECTعلى كل جدول يقرأ منه البيانات. يُصلح طلب السحب هذا #16964. #18104 #17983 (Vitaly Baranov). - أصبحت الجداول المؤقتة تظهر الآن في جدولي النظام
system.tablesوsystem.columnsفقط ضمن الجلسة التي أُنشئت فيها. كما أُخفيت الآن قاعدة البيانات الداخلية_temporary_and_external_tablesمن جدولي النظام هذين؛ وبدلًا من ذلك، تُعرض الجداول المؤقتة كجداول ذات قاعدة بيانات فارغة مع تعيين الرايةis_temporary. #18014 (Vitaly Baranov). - إصلاح مشكلة في عرض
clickhouse-clientعند تغيّر حجم نافذة الطرفية. #18009 (Amos Bird). - خفض مستوى تفصيل السجل للأحداث عند قطع العميل الاتصال من Warning إلى Information. #18005 (filimonov).
- إزالة ملفات البيانات الوصفية الفارغة أو التالفة قسرًا من نظام الملفات لـ DiskS3. تُعد S3 ميزة تجريبية. #17935 (Pavel Kovalenko).
- التحكم في الوصول: لم يعد
allow_introspection_functions=0يمنع منح الامتيازات لدوال الاستبطان، رغم أنه لا يزال يمنع استخدامها (وسيحتاج الطرف الممنوح إلى ضبطallow_introspection_functions=1لنفسه حتى يتمكن من استخدام هذا الامتياز). وبالمثل، فإنallow_ddl=0يمنع استخدام أوامر DDL، لكنه لم يعد يمنع منح الامتيازات لها. #17908 (Vitaly Baranov). - تحسين في سهولة الاستخدام: تلميحات لأسماء الأعمدة. #17112. #17857 (fastio).
- إضافة معلومات تشخيصية عندما يحاول جدولان من نوع Merge قراءة بيانات بعضهما البعض. #17854 (徐炘).
- إتاحة إمكانية تجاوز قيمة
timeoutللسكريبت الجاري تشغيله باستخدام صورة Docker الخاصة بـ ClickHouse. #17818 (Guillaume Tassery). - التحقق من القواعد النحوية لتعريفات المحرك في جداول سجل النظام لمنع بعض أخطاء الإعداد. لاحظ أن هذا التحقق النحوي ليس دلاليًا، ما يعني أن أخطاء مثل الأعمدة غير الموجودة أو دوال expression لن تُكتشف إلا عند إنشاء الجدول. #17739 (Du Chuan).
- أُزيل إطلاق الاستثناء عند تهيئة جدول
RabbitMQإذا لم يكن هناك اتصال (إذ ستُجرى إعادة الاتصال في الخلفية). #17709 (Kseniia Sumarokova). - عدم تجاهل حدود ذاكرة الخادم أثناء عملية flush الخاصة بـ Buffer. #17646 (Azat Khuzhin).
- التحول إلى نسخة مُرقّعة من RocksDB (من ClickHouse-Extras) لإصلاح خطأ use-after-free. #17643 (Nikita Mikhaylov).
- أُضيفت إزاحة إلى رسالة الاستثناء في parsing المتوازي. يُصلح هذا #17457. #17641 (Nikita Mikhaylov).
- عدم طرح الخطأ “Too many parts” في منتصف استعلام
INSERT. #17566 (alexey-milovidov). - السماح باستخدام query parameters في عبارة
UPDATEضمن استعلامALTER. يُصلح #10976. #17563 (alexey-milovidov). - مُعمِّي الاستعلامات: تجنّب استخدام بعض كلمات SQL المفتاحية كأسماء لمعرّفات. #17526 (alexey-milovidov).
- تصدير أكبر DDL entry مُنفَّذ حاليًا بواسطة DDLWorker عبر Metric على الخادم. يفيد ذلك في التحقق مما إذا كان DDLWorker عالقًا في مكان ما. #17464 (Amos Bird).
- تصدير Asynchronous metrics الخاصة بالخيوط الحالية في جميع الخوادم. يفيد ذلك في تتبّع مشكلات مثل هذه. #17463 (Amos Bird).
- تضمين الأعمدة الديناميكية مثل
MATERIALIZEDوALIASفي wildcard query عند تفعيل الإعدادينasterisk_include_materialized_columnsوasterisk_include_alias_columns. #17462 (Ken Chen). - السماح بتحديد TTL لإزالة الإدخالات القديمة من جداول سجلّات النظام، باستخدام السمة
<ttl>فيconfig.xml. #17438 (Du Chuan). - أصبح للاستعلامات الواردة إلى الخادم عبر بروتوكولي MySQL و PostgreSQL أنواع interface مميزة (يمكن رؤيتها في العمود
interfaceمن الجدولsystem.query_log):4لـ MySQL و5لـ PostgreSQL، بدلًا من1المستخدم سابقًا، والذي أصبح الآن مخصصًا للبروتوكول native فقط. #17437 (Vitaly Baranov). - إصلاح parsing لعبارة SETTINGS في الاستعلام
INSERT ... SELECT ... SETTINGS. #17414 (Azat Khuzhin). - احتساب الذاكرة بشكل صحيح في RadixSort. #17412 (Nikita Mikhaylov).
- إضافة فحص eof في
receiveHelloعلى الخادم لمنع ظهور الاستثناءAttempt to read after eof. #17365 (Kruglov Pavel). - تجنّب احتمال حدوث تجاوز سعة المكدس عند تحويل bigint. الأعداد الصحيحة الكبيرة ما تزال تجريبية. #17269 (flynn).
- ستعمل الآن فهارس
setمعGLOBAL IN. يُصلح هذا #17232 و#5576. #17253 (Amos Bird). - إضافة حدّ لعمليات إعادة توجيه HTTP في الطلبات إلى S3 storage (
s3_max_redirects). #17220 (ianton-ru). - عند دمج المُركِّب
-OrNullمع المُركِّبات-Ifو-Mergeو-MergeStateو-State، يجب وضع-OrNullفي البداية. #16935 (flynn). - دعم إعداد وكيل HTTP ونقطة نهاية S3 عبر HTTPS. #16861 (Pavel Kovalenko).
- أُضيفت مصادقة صحيحة باستخدام متغيرات البيئة و
~/.awsوAssumeRoleلعميل S3. #16856 (Vladimir Chebotarev). - إضافة المزيد من spans في OpenTelemetry، وإضافة مثال على كيفية تصدير بيانات span إلى Zipkin. #16535 (Alexander Kuzmenkov).
- قواميس cache: إزالة callbacks والأقفال اللازمة للوصول إليها بالكامل. لم تعد المفاتيح تُقسَّم إلى “غير موجودة” و”منتهية الصلاحية”، بل تُخزَّن في الخريطة نفسها أثناء الاستعلام. #14958 (Nikita Mikhaylov).
- إصلاح
fsync_part_directory/fsync_after_insert/in_memory_parts_insert_syncالتي لم تعمل مطلقًا (ميزة تجريبية). #18845 (Azat Khuzhin). - السماح باستخدام المحرّك
Atomicلقاعدة البيانات المتداخلة الخاصة بالمحرّكMaterializeMySQL. #14849 (tavplubix).
إصلاحات الأخطاء
- إصلاح المشكلة التي قد تتسبب، في حالات نادرة جدًا، في توقف الخادم عن قبول الاتصالات. #17542 (Amos Bird, alexey-milovidov).
- إصلاح تحليل الفهرس للدوال الثنائية ذات الوسيطة الثابتة، والذي كان يؤدي إلى نتائج استعلام خاطئة. يُصلح هذا #18364. #18373 (Amos Bird).
- إصلاح احتمال حدوث تحليل فهرس غير صحيح عندما تختلف أنواع مقارنة الفهرس. يُصلح هذا #17122. #17145 (Amos Bird).
- تعطيل الكتابة باستخدام AIO أثناء عمليات الدمج، لأنه قد يؤدي في حالات نادرة للغاية إلى تلف البيانات في أعمدة المفتاح الأساسي أثناء الدمج. #18481 (alesapin).
- تقييد عمليات الدمج من wide إلى compact parts. وفي حالة vertical merge، كان ذلك يؤدي إلى جزء ناتج تالف. #18381 (Anton Popov).
- إصلاح احتمال عدم اكتمال نتيجة الاستعلام أثناء القراءة من
MergeTree*في حالة read backoff (الرسالة<Debug> MergeTreeReadPool: Will lower number of threadsفي السجلات). أُدخل هذا في #16423. يُصلح #18137. #18216 (Nikolai Kochetov). - إصلاح خطأ use after free في مكتبة
rocksdb. #18862 (sundyli). - إصلاح مشكلة القراءة اللانهائية من file بتنسيق
ORC(أُدخلت في #10580). يُصلح #19095. #19134 (Nikolai Kochetov). - إصلاح خطأ في merge tree data writer قد يؤدي إلى marks بحجم أكبر من حجم granularity الثابت. يُصلح #18913. #19123 (alesapin).
- إصلاح خطأ عند بدء التشغيل، حيث لم يكن ClickHouse قادرًا على قراءة compression codec من
LowCardinality(Nullable(...))ويطرح الاستثناءAttempt to read after EOF. يُصلح #18340. #19101 (alesapin). - تقييد استعلامات
MODIFY TTLلجداولMergeTreeالتي أُنشئت باستخدام الصياغة القديمة. سابقًا كان الاستعلام ينجح، لكنه فعليًا لم يكن له أي تأثير. #19064 (Anton Popov). - التأكد من أن
groupUniqArrayيعيد النوع الصحيح للوسيطة من نوع Enum. يُغلق هذا #17875. #19019 (alexey-milovidov). - إصلاح الخطأ المحتمل
Expected single dictionary argument for functionعند استخدام الدالةignoreمع وسيطة من نوعLowCardinality. يُصلح #14275. #19016 (Nikolai Kochetov). - إصلاح إدراج عمود
LowCardinalityفي جدول يستخدم المحركTinyLog. يُصلح #18629. #19010 (Nikolai Kochetov). - تحاول عملية Join تجسيد الأعمدة الثابتة، لكن الشيفرة تحتاجها في مواضع أخرى. #18982 (Nikita Mikhaylov).
- تعطيل
optimize_move_functions_out_of_anyلأن هذا التحسين ليس صحيحًا دائمًا. هذا يُغلق #18051. هذا يُغلق #18973. #18981 (alexey-milovidov). - إصلاح الاستثناء المحتمل
QueryPipeline stream: different number of columnsالناتج عن دمج خطواتExpressionفي خطة الاستعلام. يُصلح #18190. #18980 (Nikolai Kochetov). - إصلاح حالة توقف متبادل نادرة جدًا عند الإنهاء. #18977 (tavplubix).
- إصلاح السلوك غير الصحيح عندما يزيل الاستعلام
ALTER TABLE ... DROP PART 'part_name'جميع كتل إزالة التكرار الخاصة بالقسم بالكامل. يُصلح #18874. #18969 (alesapin). - يجب أن تؤدي عملية Attach partition إلى إعادة تعيين mutation. #18804. #18935 (fastio).
- إصلاح مشكلة في
bitmapOrCardinalityقد تؤدي إلى فكّ مرجع nullptr. هذا يُغلق #18911. #18912 (sundyli). - إصلاح احتمال حدوث تعليق عند الإنهاء في
clickhouse-local. هذا يُصلح #18891. #18893 (alexey-milovidov). - أُعيدت كتابة الاستعلامات الموجّهة إلى قواعد البيانات الخارجية (MySQL و ODBC و JDBC) بشكل غير صحيح إذا وُجد تعبير بصيغة
x IN table. هذا يُصلح #9756. #18876 (alexey-milovidov). - إصلاح المُركِّب *If مع دالة أحادية المعامل وأنواع Nullable. #18806 (Azat Khuzhin).
- إصلاح المشكلة التي قد تؤدي إلى رفض الخادم لعمليات INSERT الموزعة غير المتزامنة إذا كان الإعداد
network_compression_methodمضبوطًا على مستوى عام على قيمة غير افتراضية. هذا يُصلح #18741. #18776 (alexey-milovidov). - إصلاح الخطأ
Attempt to read after eofعند محاولةCASTللقيمةNULLمنNullable(String)إلىNullable(Decimal(P, S)). تُرجِع الدالةCASTالآن القيمةNULLعندما يتعذر عليها تحليل قيمة عشرية من سلسلة نصية Nullable. يُصلح #7690. #18718 (Winter Zhang). - إصلاح مشكلة طفيفة في التسجيل. #18717 (sundyli).
- إصلاح إزالة الأجزاء الفارغة في جداول
ReplicatedMergeTreeالمُنشأة باستخدام الصياغة القديمة. يُصلح هذا #18582. #18614 (Anton Popov). - إصلاح الخلل السابق عند تجاوز قيمة التاريخ الحد المسموح به مع قيم مختلفة. تم تقييد قيمة Date تقييدًا صارمًا عند “2106-02-07”، وتحويل أي تاريخ أكبر من “2106-02-07” إلى القيمة 0. #18565 (hexiaoting).
- إضافة دعم نوع البيانات FixedString للنسخ المتماثل من MySQL. ويُعد النسخ المتماثل من MySQL ميزة تجريبية. تُصلح هذه الرقعة #18450 كما تُصلح أيضًا #6556. #18553 (awesomeleo).
- إصلاح خطأ محتمل
Pipeline stuckعند استخدامORDER BYبعد استعلام فرعي يتضمن عمليةjoinمن النوعRIGHTأوFULL. #18550 (Nikolai Kochetov). - إصلاح خلل قد يؤدي إلى تعليق استعلامات
ALTERبعد إيقاف عملية mutation المقابلة. اكتُشف ذلك بواسطة thread fuzzer. #18518 (alesapin). - دعم صحيح لـ 12AM في الدالة
parseDateTimeBestEffort. يُصلح هذا #18402. #18449 (vladimir-golovchenko). - إصلاح الخطأ
value is too shortعند تنفيذ الدوالtoType(...)(toDate,toUInt32, إلخ) مع وسيطة من النوعNullable(String). تُرجع هذه الدوال الآنNULLعند أخطاء التحليل بدلًا من إطلاق استثناء. يُصلح هذا #7673. #18445 (tavplubix). - إصلاح السلوك غير المتوقع لـ
SHOW TABLES. #18431 (fastio). - إصلاح خلل في المُركِّب -SimpleState كان يولّد نوع وسيطة ونوع إرجاع غير متوافقين. #18404 (Amos Bird).
- إصلاح احتمال حدوث حالة تسابق عند الاستخدام المتزامن لجداول
SetأوJoinواستعلاماتSELECTمنsystem.tables. #18385 (alexey-milovidov). - إصلاح تعبئة الجدول
system.settings_profile_elements. يُصلح طلب السحب هذا #18231. #18379 (Vitaly Baranov). - إصلاح أعطال محتملة في الدوال التجميعية مع المُركِّب
Distinctعند استخدام التجميع ثنائي المستوى. يُصلح هذا #17682. #18365 (Anton Popov). - أُصلحت مشكلة تحدث عندما يتعذر على الخادم الوصول إلى عملية
clickhouse-odbc-bridgeعلى الأجهزة ذات مكدس IPv4/IPv6 المزدوج؛ وأُصلحت مشكلة كانت تظهر عند تنفيذ تحديثات قاموس ODBC باستخدام استعلامات غير صحيحة و/أو تتسبب في تعطل عمليةodbc-bridge؛ وقد يُغلق هذا #14489. #18278 (Denis Glazachev). - التحكم في الوصول: يمكن الآن تنفيذ
SELECT count() FROM tableإذا كان لدى المستخدم حق الوصول إلى عمود واحد على الأقل من الجدول. يُصلح طلب السحب هذا #10639. #18233 (Vitaly Baranov). - التحكم في الوصول: يتطلب
SELECT JOINالآن امتيازSELECTعلى كل جدول من الجداول المنضمة. يُصلح طلب السحب هذا #17654. #18232 (Vitaly Baranov). - إصلاح مقارنة المفاتيح بين النوعين Enum و Int. يُصلح هذا #17989. #18214 (Amos Bird).
- النسخ المتماثل من MySQL (ميزة تجريبية). يُصلح #18186 و#16372، ويُصلح مشكلة تحويل المفتاح الفريد في محرك قاعدة البيانات MaterializeMySQL. #18211 (Winter Zhang).
- إصلاح عدم الاتساق في الاستعلامات التي تتضمن كلًّا من
WITH FILLوWITH TIES#17466. #18188 (hexiaoting). - إصلاح إدراج صف بقيمة افتراضية عند حدوث خطأ تحليل في العمود الأخير. يُصلح #17712. #18182 (Jianmei Zhang).
- إصلاح الخطأ
Unknown setting profileعند محاولة تعيين ملف إعدادات. #18167 (tavplubix). - إصلاح خطأ يحدث عندما لا يؤدي الاستعلام
MODIFY COLUMN ... REMOVE TTLفعليًا إلى إزالة TTL الخاص بالعمود. #18130 (alesapin). - أُصلح الخطأ
std::out_of_range: basic_stringأثناء تحليل عنوان URL في S3. #18059 (Vladimir Chebotarev). - إصلاح المقارنة بين
DateTime64وDate. يُصلح #13804 و #11222. … #18050 (Vasily Nemkov). - النسخ المتماثل من MySQL (ميزة تجريبية): يُصلح #15187 و#17912، ويُصلح دعم تحويل فهرس البادئة في MySQL لـ MaterializeMySQL. #17944 (Winter Zhang).
- عند تهيئة تدوير سجل الخادم باستخدام المعامل
logger.sizeبقيمة رقمية أكبر من 2^32، لم تكن السجلات تُدوَّر بشكل صحيح. تم إصلاح ذلك. #17905 (Alexander Kuzmenkov). - كان تحسين الاستعلامات البسيطة يُنتج نتيجة غير صحيحة إذا كان الاستعلام يحتوي على ARRAY JOIN (أي إن الاستعلام في الواقع ليس بسيطًا). #17887 (sundyli).
- إصلاح احتمال حدوث segfault في الدالة التجميعية
topK. يُغلق هذا #17404. #17845 (Maksim Kita). - WAL (ميزة تجريبية): لا تستعِد الأجزاء من WAL إذا كان
in_memory_parts_enable_walمعطّلًا. #17802 (detailyang). - كانت رسالة Exception المتعلقة بالحد الأقصى لحجم الجدول المراد حذفه تُعرَض بشكل غير صحيح. #17764 (alexey-milovidov).
- إصلاح احتمال حدوث segfault عند عدم توفر مساحة كافية أثناء الإدراج في جدول
Distributed. #17737 (tavplubix). - إصلاح المشكلة التي كانت تتسبب في فشل ClickHouse في استئناف الاتصال بخوادم MySQL. #17681 (Alexander Kazakov).
- Windows: تم إصلاح الخطأ
Function not implementedعند تنفيذ استعلامRENAMEفي قاعدة بياناتAtomicمع تشغيل ClickHouse على Windows Subsystem for Linux. يُصلح هذا #17661. #17664 (tavplubix). - كان من الممكن تحديد ما إذا كانت المجموعة تعتمد نسخًا متماثلًا دائريًا (ومتقاطعًا) بشكل غير صحيح عند تنفيذ استعلام
ON CLUSTERبسبب race condition عندما تكون قيمةpool_size> 1. تم إصلاح ذلك. #17640 (tavplubix). - إصلاح مشكلة ظهور جدول
system.stack_traceفارغًا عندما يعمل الخادم في وضع daemon. #17630 (Amos Bird). - كان من الممكن تسجيل Exception
fmt::v7::format_errorفي الخلفية لِـ MergeTree tables. يُصلح هذا #17613. #17615 (alexey-milovidov). - عند استخدام clickhouse-client في interactive mode مع استعلامات multiline، كان التعليق أحادي السطر يمتدّ بالخطأ حتى نهاية الاستعلام. يُصلح هذا #13654. #17565 (alexey-milovidov).
- إصلاح تعليق استعلام alter عندما تكون mutation المقابلة قد أُوقفت على replica مختلفة. يُصلح هذا #16953. #17499 (alesapin).
- إصلاح مشكلة في احتساب الذاكرة عندما كان ClickHouse يقلّل تقدير حجم mark cache. قد يحدث ذلك عند وجود عدد كبير من الملفات الصغيرة جدًا التي تحتوي على marks. #17496 (alesapin).
- إصلاح
ORDER BYعند تفعيل الإعدادoptimize_redundant_functions_in_order_by. #17471 (Anton Popov). - إصلاح التكرارات بعد
DISTINCTالتي كان من الممكن أن تحدث بسبب تحسين غير صحيح. يُصلح #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - تم إصلاح الارتفاع في استخدام CPU في المهام الخلفية لجداول *MergeTree. #17416 (tavplubix).
- إصلاح احتمال حدوث crash أثناء القراءة من جدول
JOINمع الأنواعLowCardinality. يُصلح #17228. #17397 (Nikolai Kochetov). - النسخ المتماثل من MySQL (ميزة تجريبية): يُصلح #16835 مشكلة عدم تطابق header مع عبارة SHOW في MySQL. #17366 (Winter Zhang).
- إصلاح مشكلة في الدوال غير الحتمية مع مُحسِّن predicate. يُصلح هذا #17244. #17273 (Winter Zhang).
- إصلاح احتمال ظهور الخطأ
Unexpected packet Data received from clientفي الاستعلامات الموزعة معLIMIT. #17254 (Azat Khuzhin). - إصلاح إبطال فهرس Set عند وجود أعمدة const في الاستعلام الفرعي. يُصلح هذا #17246. #17249 (Amos Bird).
- clickhouse-copier: إصلاح للجداول غير المُقسَّمة إلى partition #15235. #17248 (Qi Chen).
- تم إصلاح احتمال عدم عمل mutations للأجزاء المخزنة على قرص S3 (ميزة تجريبية). #17227 (Pavel Kovalenko).
- إصلاح خطأ في الدالة
fuzzBits، المشكلة ذات الصلة: #16980. #17051 (hexiaoting). - إصلاح
optimize_distributed_group_by_sharding_keyللاستعلام الذي يحتوي على OFFSET فقط. #16996 (Azat Khuzhin). - إصلاح الاستعلامات من جداول
Mergeعلى جداولDistributedمع عمليات JOIN. #16993 (Azat Khuzhin). - إصلاح تحسين ORDER BY مع الدوال الرتيبة. يُصلح #16107. #16956 (Anton Popov).
- إصلاح المقارنة غير الصحيحة للأنواع
DateTime64ذات scale المختلفة. يُصلح #16655 … #16952 (Vasily Nemkov). - إصلاح تحسين GROUP BY عند تفعيل الإعداد
optimize_aggregators_of_group_by_keysومع عمليات JOIN. يعالج #12604. #16951 (Anton Popov). - إصلاح طفيف في استعلام SHOW ACCESS. #16866 (tavplubix).
- إصلاح السلوك عند تفعيل الإعداد
optimize_trivial_count_queryمع شرط التقسيم. #16767 (Azat Khuzhin). - إرجاع عدد الصفوف المتأثرة لاستعلامات INSERT عبر بروتوكول MySQL wire. كان ClickHouse يعيد دائمًا القيمة 0 سابقًا، وقد تم إصلاح ذلك. يعالج #16605. #16715 (Winter Zhang).
- إصلاح السلوك غير المتسق الذي يسببه
select_sequential_consistencyفي استعلام العدّ البسيط المُحسَّن وجداول النظام. #16309 (Hao Chen). - إصدار خطأ عندما يعمل محوِّل الأعمدة
REPLACEعلى عمود غير موجود. #16183 (hexiaoting). - رفع استثناء إذا لم يكن تعبير ON في RIGH|FULL JOIN من نوع equi-join. #15162 (Artem Zuikov).
تحسينات البناء/الاختبار/التحزيم
- إضافة فحص سلامة بسيط لملف ClickHouse التنفيذي. يتيح ذلك اكتشاف التلف الناتج عن عتاد معيب (مثل تآكل البتات في وسائط التخزين أو انقلاب البتات في RAM). #18811 (alexey-milovidov).
- تغيير
OpenSSLإلىBoringSSL. يتيح ذلك تجنب المشكلات المتعلقة بـ sanitizers. يُصلح هذا #12490. يُصلح هذا #17502. يُصلح هذا #12952. #18129 (alexey-milovidov). - تبسيط سكربت التهيئة
Sys/V. لم يكن يعمل على Ubuntu 12.04 أو الإصدارات الأقدم. #17428 (alexey-milovidov). - تحسينات متعددة على سكربت
./clickhouse install. #17421 (alexey-milovidov). - يمكن لـ ClickHouse الآن أن يتظاهر بأنه ZooKeeper وهمي. حاليًا، تنفيذ التخزين ليس سوى جدول hash داخل الذاكرة، كما أن الخادم يدعم بروتوكول ZooKeeper جزئيًا. #16877 (alesapin).
- إصلاح إزالة watches الميتة في TestKeeperStorage (محاكاة لـ ZooKeeper). #18065 (alesapin).
- إضافة الأمر
SYSTEM SUSPENDلحقن الأعطال. يمكن استخدامه لتسهيل اختبارات failover. يُغلق هذا #15979. #18850 (alexey-milovidov). - إنشاء معرّف build عندما يكون ClickHouse مرتبطًا مع
lld. وقد تبيّن أنlldلا ينشئه افتراضيًا على جهازي. يُستخدم معرّف build في تقارير crash وعمليات introspection. #18808 (alexey-milovidov). - إصلاح أخطاء shellcheck في فحص Style check. #18566 (Ilya Yatsishin).
- تحديث معلومات المناطق الزمنية إلى 2020e. #18531 (alesapin).
- إصلاح تحذيرات codespell. تقسيم فحوصات التنسيق إلى أجزاء منفصلة. تحديث صورة Docker الخاصة بفحوصات التنسيق. #18463 (Ilya Yatsishin).
- فحص آلي لاكتشاف بقايا علامات التعارض في الوثائق. #18332 (alexey-milovidov).
- تمكين Thread Fuzzer لفحص flaky في stateless tests. #18299 (alesapin).
- عدم استخدام الدالة غير thread-safe
strerror. #18204 (alexey-milovidov). - تحديث إجراء سير العمل
anchore/scan-action@main(نُقل منmasterإلىmain). #18192 (Stig Bakken). - ينفّذ
clickhouse-testالآن عمليتي DROP/CREATE لقواعد البيانات مع timeout. #18098 (alesapin). - تم تمكين الدعم التجريبي لإطار العمل Pytest للاختبارات الوظيفية عديمة الحالة. #17902 (Ivan).
- نستخدم الآن إصدارًا أحدث من docker daemon في اختبارات التكامل. #17671 (alesapin).
- إرسال معلومات عن البنية الرسمية والذاكرة وCPU ومساحة القرص الحرة إلى Sentry إذا كانت مُمكّنة. وتُعد Sentry ميزة اختيارية لمساعدة مطوري ClickHouse. يُغلق هذا #17279. #17543 (alexey-milovidov).
- كانت هناك قيمة لمتغير غير مهيّأة في شيفرة clickhouse-copier. #17363 (Nikita Mikhaylov).
- إصلاح أحد تقارير MSan من #17309. #17344 (Nikita Mikhaylov).
- إصلاح مشكلة IPv6 في مكتبة Arrow Flight. راجع التعليقات لمزيد من التفاصيل. #16664 (Zhanna).
- إضافة مكتبة تستبدل بعض دوال
libcبمصائد تؤدي إلى إنهاء العملية. #16366 (alexey-milovidov). - توفير معلومات تشخيصية في سجلات الخادم عند حدوث تجاوز لسعة المكدس، مع إرسال رسالة خطأ إلى clickhouse-client. يُغلق هذا #14840. #16346 (alexey-milovidov).
- يمكننا الآن تشغيل معظم الاختبارات الوظيفية عديمة الحالة بالتوازي. #15236 (alesapin).
- إصلاح تلف في فك ضغط snappy في
librdkafka(كانت المشكلة تظهر فقط في البنيات التي تستخدم gcc10، لكن البنيات الرسمية تستخدم clang بالفعل، لذا فإن الإصدارات الرسمية الحديثة على الأقل غير متأثرة). #18053 (Azat Khuzhin). - إذا أُنهي الخادم بواسطة OOM killer، فستُطبع رسالة في السجل. #13516 (alexey-milovidov).
- PODArray: تجنّب استدعاء memcpy باستخدام الوسيطات (nullptr, 0) (إصلاح تقرير UBSan). يُصلح هذا #18525. #18526 (alexey-milovidov).
- تحسين طفيف لربط مسارات ZooKeeper داخل DDLWorker. #17767 (Bharat Nallan).
- السماح بإعادة تحميل الرموز من ملف debug. ويُصلح طلب السحب هذا أيضًا مشكلة في build-id. #17637 (Amos Bird).