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

إصدار 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 محتمل في hdfs table 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، فسيتم إرسال عدد الصفوف في الـ chunk rows&#95;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 مع الجدول أعلاه، فإن query‏ select * 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_functions enabled. #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 COLUM T إلى 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&#95;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 إلى ملف clickhouse binary الرئيسي. أصبح من الممكن الآن تشغيل 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&#95;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).

ميزة تجريبية

  • إضافة دعم PROJECTION إلى جداول MergeTree*. #20202 (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&#95;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&#95;r611888913. #23366 (Amos Bird).
  • تم إصلاح تعطل كان يحدث عند ضبط join&#95;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. يُرجى ملاحظة أن codec NONE غير مفيد في معظم الحالات — ويُنصح دائمًا باستخدام الضغط (LZ4 هو الافتراضي). وخلافًا للاعتقاد الشائع، فإن تعطيل الضغط قد لا يحسن الأداء (وقد يحدث العكس). يكون codec NONE مفيدًا في بعض الحالات: - عندما تكون البيانات غير قابلة للضغط؛ - في اختبارات الأداء الاصطناعية. #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 في CollapsingMergeTree granule تحتوي على index_granularity + 1 rows. وبسبب ذلك، قد يفشل الفحص الداخلي المُضاف في #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,&quot;world&quot;!') #17659. #18542 (nauta).
  • أُضيفت الدالتان parseDateTimeBestEffortUSOrZero وparseDateTimeBestEffortUSOrNull. #19712 (Maksim Kita).
  • أُضيفت الدالة الرياضية sign. #19527 (flynn).
  • أُضيفت معلومات عن الميزات المستخدمة (الدوال، ومحركات الجداول، وما إلى ذلك) إلى system.query&#95;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) تُرجع جميع المفاتيح بتنسيق Array 3. 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 الآن وضع Compression auto (الاكتشاف التلقائي). يُغلق هذا #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).
آخر تعديل في ٢٩ يونيو ٢٠٢٦