إصدار ClickHouse 22.12، 2022-12-15. العرض التقديمي، الفيديو
ملاحظات الترقية
- تم إصلاح عدم التوافق مع الإصدارات السابقة في تسلسل/إلغاء تسلسل حالات الدوال التجميعية
minوmaxوany*وargMinوargMaxالتي تأخذ وسيطًا من النوعString. يؤثر هذا الخلل في فروع 22.9 و22.10 و22.11 (وقد أُصلح بدءًا من 22.9.6 و22.10.4 و22.11.2 على التوالي). كما تتأثر أيضًا بعض الإصدارات الفرعية من فروع 22.3 و22.7 و22.8: 22.3.13…22.3.14 (أُصلح بدءًا من 22.3.15)، و22.8.6…22.8.9 (أُصلح بدءًا من 22.8.10)، و22.7.6 وما بعده (لن يُصلح في 22.7، ونوصي بالترقية من 22.7.* إلى 22.8.10 أو أحدث). لا تهم ملاحظة الإصدار هذه المستخدمين الذين لم يسبق لهم استخدام الإصدارات المتأثرة. تضيف الإصدارات غير المتوافقة محرف'\0'إضافيًا إلى السلاسل النصية عند قراءة حالات الدوال التجميعية المذكورة أعلاه. على سبيل المثال، إذا حفظ إصدار أقدم حالةanyState('foobar')فيstate_column، فسيطبع الإصدار غير المتوافق'foobar\0'عندanyMerge(state_column). كما أن الإصدارات غير المتوافقة تكتب حالات الدوال التجميعية من دون'\0'ختامية. يمكن للإصدارات الأحدث (التي تتضمن الإصلاح) قراءة البيانات المكتوبة بواسطة جميع الإصدارات، بما في ذلك الإصدارات غير المتوافقة، بشكل صحيح، باستثناء حالة نادرة واحدة. فإذا حفظ إصدار غير متوافق حالةً تحتوي على سلسلة نصية تنتهي فعليًا بمحرف null، فسيحذف الإصدار الأحدث'\0'الختامية عند قراءة حالة الدالة التجميعية المتأثرة. على سبيل المثال، إذا حفظ إصدار غير متوافق حالةanyState('abrac\0dabra\0')فيstate_column، فستطبع الإصدارات الأحدث'abrac\0dabra'عندanyMerge(state_column). تؤثر هذه المشكلة أيضًا في الاستعلامات الموزعة عندما يعمل إصدار غير متوافق ضمن cluster مع إصدارات أقدم أو أحدث. #43038 (Alexander Tokmakov, Raúl Marín). ملاحظة: تتضمن جميع البُنى الرسمية لـ ClickHouse هذه الترقيعات بالفعل. ولا ينطبق ذلك بالضرورة على البُنى غير الرسمية من جهات خارجية، والتي ينبغي تجنبها.
ميزة جديدة
- إضافة تنسيق الإدخال/الإخراج
BSONEachRow. في هذا التنسيق، يقوم ClickHouse بتنسيق/تحليل كل صف على أنه مستند BSON مستقل، كما يُنسَّق/يُحلَّل كل عمود على أنه حقل BSON واحد، ويكون اسم العمود هو المفتاح. #42033 (mark-polokhov). - إضافة خوارزمية JOIN
grace_hash، ويمكن تفعيلها باستخدامSET join_algorithm = 'grace_hash'. #38191 (BigRedEye, Vladimir C). - السماح بتهيئة قواعد تعقيد كلمات المرور وعمليات التحقق عند إنشاء المستخدمين وتغييرهم. #43719 (Nikolay Degterinsky).
- إخفاء المعلومات الحساسة في السجلات؛ وإخفاء الأجزاء السرية في مخرجات الاستعلامين
SHOW CREATE TABLEوSELECT FROM system.tables. كما يعالج أيضًا #41418. #43227 (Vitaly Baranov). - إضافة صياغة
GROUP BY ALL: #37631. #42265 (刘陶峰). - إضافة صياغة
FROM table SELECT column. #41095 (Nikolay Degterinsky). - إضافة الدالة
concatWithSeparator، وإضافةconcat_wsكاسم مستعار للتوافق مع Spark SQL. كما أُضيفت الدالةconcatWithSeparatorAssumeInjectiveكصيغة أخرى لتمكين تحسين GROUP BY، على نحو مماثل لـconcatAssumeInjective. #43749 (李扬). - إضافة الدالتين
multiplyDecimalوdivideDecimalلعمليات Decimal ذات الدقة الثابتة. #42438 (Andrey Zvonov). - إضافة الجدول
system.movesمع قائمة بالأجزاء الجاري نقلها حاليًا. #42660 (Sergei Trifonov). - إضافة دعم نقطة نهاية Prometheus المضمّنة لـ ClickHouse Keeper. #43087 (Antonio Andelic).
- دعم القيم العددية الحرفية التي تستخدم
_فاصلًا، على سبيل المثال1_000_000. #43925 (jh0x). - إضافة إمكانية استخدام Array كمعامل ثانٍ للدالة
cutURLParameter. وسيتيح ذلك إزالة عدة معاملات. يغلق #6827. #43788 (Roman Vasin). - إضافة عمود يتضمن expression الخاصة بالـ index في الجدول
system.data_skipping_indices. #43308 (Guillaume Tassery). - إضافة العمود
engine_fullإلى جدول النظامdatabasesبحيث يمكنك الوصول إلى تعريف engine الكامل لقاعدة البيانات عبر جداول النظام. #43468 (凌涛). - تمت إضافة hash function جديدة هي xxh3. كما جرى تحسين أداء
xxHash32وxxHash64على ARM بفضل تحديث المكتبة. #43411 (Nikita Taranov). - أُضيف دعم لتحديد قيود على إعدادات MergeTree. على سبيل المثال، يمكنك منع المستخدمين من تجاوز
storage_policy. #43903 (Sergei Trifonov). - أُضيف إعداد جديد
input_format_json_read_objects_as_stringsيتيح تحليل كائنات JSON المتداخلة كـ Strings في جميع تنسيقات إدخال JSON. هذا الإعداد معطّل افتراضيًا. #44052 (Kruglov Pavel).
ميزة تجريبية
- دعم إزالة الازدواجية لعمليات الإدراج غير المتزامنة. قبل هذا التغيير، لم تكن عمليات الإدراج غير المتزامنة تدعم إزالة الازدواجية، لأن عدة عمليات insert صغيرة كانت تُدمج ضمن Batch واحدة مُدرجة. يُغلق #38075. #43304 (Han Fei).
- إضافة دعم cosine distance إلى فهرس Annoy التجريبي (vector similarity search). #42778 (Filatenkov Artur).
- إضافة استعلامات
CREATE / ALTER / DROP NAMED COLLECTION. #43252 (Kseniia Sumarokova). هذه الميزة قيد التطوير، وهذه الاستعلامات ليست فعّالة حتى الإصدار 22.12. أُضيف بند changelog هذا فقط لتجنب الالتباس. تم تقييد الوصول الافتراضي إلى named collections بالمستخدم المعرّف في config. ويتطلب ذلك ضبطshow_named_collections = 1لكي تصبح مرئية. #43325 (Kseniia Sumarokova). وتمت إضافة table system.named_collections#43147 (Kseniia Sumarokova).
تحسين الأداء
- أُضيف الإعدادان
max_streams_for_merge_tree_readingوallow_asynchronous_read_from_io_pool_for_merge_tree. يحدّ الإعدادmax_streams_for_merge_tree_readingمن عدد تدفقات القراءة في جداول MergeTree. ويُفعّل الإعدادallow_asynchronous_read_from_io_pool_for_merge_treeتجمّع I/O في الخلفية للقراءة من جداولMergeTree. قد يؤدي ذلك إلى تحسين الأداء في الاستعلامات المقيّدة بـ I/O إذا استُخدم معmax_streams_to_max_threads_ratioأوmax_streams_for_merge_tree_reading. #43260 (Nikolai Kochetov). ويمكن أن يحسّن هذا الأداء بما يصل إلى 100 مرة في حالات التخزين ذي زمن الوصول المرتفع، والعدد المنخفض من CPU، والعدد الكبير من أجزاء البيانات. - لم تكن الإعدادات
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystemتراعي adaptive granularity. كما أن الصفوف الكبيرة لم تكن تقلّل عدد الصفوف المقروءة (كما هو الحال معmerge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read)، ما قد يؤدي إلى ارتفاع استهلاك الذاكرة عند استخدام أنظمة الملفات البعيدة. #43965 (Nikolai Kochetov). - جرى تحسين عدد طلبات القائمة المرسلة إلى ZooKeeper أو ClickHouse Keeper عند اختيار جزء لدمجه. في السابق، كان ذلك قد ينتج آلاف الطلبات في بعض الحالات. يُصلح #43647. #43675 (Alexander Tokmakov).
- يُتجاوز هذا التحسين الآن إذا كانت قيمة
max_size_to_preallocate_for_aggregationصغيرة جدًا. كما زادت القيمة الافتراضية لهذا الإعداد إلى10^8. #43945 (Nikita Taranov). - تسريع إيقاف الخادم عبر تجنّب تنظيف أجزاء البيانات القديمة، لأن ذلك لم يعد ضروريًا بعد https://github.com/ClickHouse/ClickHouse/pull/41145. #43760 (Sema Checherinda).
- أصبح الدمج على العقدة البادئة يستخدم الآن النهج نفسه المقيّد بالذاكرة المستخدم في دمج نتائج التجميع المحلية إذا كان
enable_memory_bound_merging_of_aggregation_resultsمضبوطًا. #40879 (Nikita Taranov). - تحسين في Keeper: محاولة مزامنة السجلات إلى القرص بالتوازي مع النسخ المتماثل. #43450 (Antonio Andelic).
- تحسين في Keeper: تُجمَّع الطلبات على دفعات بوتيرة أكبر. ويمكن التحكّم في هذا التجميع عبر الإعداد الجديد
max_requests_quick_batch_size. #43686 (Antonio Andelic).
تحسينات
- تنفيذ التبعيات المرجعية واستخدامها لإنشاء الجداول بالترتيب الصحيح أثناء الاستعادة من نسخة احتياطية. #43834 (Vitaly Baranov).
- استبدال UDFs في استعلام
CREATEلتجنّب حالات الإخفاق أثناء التحميل عند بدء التشغيل. بالإضافة إلى ذلك، يمكن الآن استخدام UDFs كتعبيراتDEFAULTللأعمدة. #43539 (Antonio Andelic). - تغيير آلية حذف الأجزاء في الاستعلامات التالية: TRUNCATE TABLE و ALTER TABLE DROP PART و ALTER TABLE DROP PARTITION. تُنشئ هذه الاستعلامات الآن أجزاءً فارغة تغطي الأجزاء القديمة. وهذا يجعل استعلام TRUNCATE يعمل من دون قفل followedexclusive، ما يعني أن عمليات القراءة المتزامنة لا تُحظر. كما تحققت المتانة في جميع هذه الاستعلامات. وإذا نجح الطلب، فلن تظهر لاحقًا أجزاء أُعيد إحياؤها. لاحظ أن atomicity لا تتحقق إلا ضمن نطاق transaction. #41145 (Sema Checherinda).
- لم يعد استعلام
SET param_xيتطلب إجراء serialization نصي يدوي لقيمة المعلَمة. على سبيل المثال، يمكن الآن كتابة الاستعلامSET param_a = '[\'a\', \'b\']'على النحوSET param_a = ['a', 'b']. #41874 (Nikolay Degterinsky). - عرض الصفوف المقروءة في مؤشر التقدم أثناء القراءة من stdin من client. يُغلق #43423. #43442 (Kseniia Sumarokova).
- عرض شريط التقدم أثناء القراءة من S3 table function / engine. #43454 (Kseniia Sumarokova).
- سيعرض شريط التقدم كلاً من الصفوف المقروءة والمكتوبة. #43496 (Ilya Yatsishin).
- تدعم
filesystemAvailableوالدوال ذات الصلة وسيطًا اختياريًا واحدًا لاسم disk، كما تم تغييرfilesystemFreeإلىfilesystemUnreserved. يُغلق #35076. #42064 (flynn). - التكامل مع LDAP: زيادة default value لـ search_limit إلى 256، وإضافة خيار config لخادم LDAP لتغييرها إلى أي قيمة. يُغلق: #42276. #42461 (Vasily Nemkov).
- السماح أيضًا بإزالة المعلومات الحساسة (راجع
query_masking_rulesفي configuration file) من رسائل الاستثناء. يحل #41418. #42940 (filimonov). - دعم استعلامات مثل
SHOW FULL TABLES ...للتوافق مع MySQL. #43910 (Filatenkov Artur). - تحسين في Keeper: إضافة الأمر 4lw
rqldالذي يتيح تعيين عقدة يدويًا كـ leader. #43026 (JackyWoo). - تطبيق إعدادات Connection timeout على Distributed async INSERT من الاستعلام. #43156 (Azat Khuzhin).
- تدعم الدالة
unhexالآن argument من نوعFixedString. issue42369. #43207 (DR). - تُعطى الأولوية لحذف الأجزاء المنتهية الصلاحية بالكامل وفقًا لقواعد TTL، راجع #42869. #43222 (zhongyuankai).
- عرض أكثر دقة واستجابةً لحمل CPU في clickhouse-client. #43307 (Sergei Trifonov).
- دعم قراءة الأعمدة الفرعية للأنواع المتداخلة من وحدة التخزين
S3ودالة الجدولs3بالتنسيقاتParquetوArrowوORC. #43329 (chen). - إضافة العمود
table_uuidإلى الجدولsystem.parts. #43404 (Azat Khuzhin). - أُضيف خيار للعميل لعرض عدد الصفوف المُعالجة محليًا في الوضع غير التفاعلي (
--print-num-processed-rows). #43407 (jh0x). - تنفيذ تحسين
aggregation-in-orderعلى مستوى خطة الاستعلام. وهو مُمكّن افتراضيًا (لكنه لا يعمل إلا معoptimize_aggregation_in_order، وهو معطّل افتراضيًا). اضبطquery_plan_aggregation_in_order = 0لاستخدام الإصدار السابق المستند إلى AST. #43592 (Nikolai Kochetov). - السماح بجمع profile events مع
trace_type = 'ProfileEvent'فيsystem.trace_logعند كل زيادة، مع المكدس الحالي واسم profile event وقيمة الزيادة. يمكن تمكين ذلك عبر الإعدادtrace_profile_eventsواستخدامه للتحقيق في أداء الاستعلامات. #43639 (Anton Popov). - إضافة إعداد جديد
input_format_max_binary_string_sizeلتقييد حجم السلسلة النصية في تنسيق RowBinary. #43842 (Kruglov Pavel). - عندما يرسل ClickHouse طلبًا إلى خادم HTTP بعيد ويُرجع هذا الخادم خطأً، لم يكن رمز HTTP الرقمي يُعرض بشكل صحيح في رسالة الاستثناء. يُغلق #43919. #43920 (Alexey Milovidov).
- الإبلاغ عن الأخطاء في الاستعلامات بشكل صحيح حتى عند تنفيذ تحسين عمليات JOIN المتعددة. #43583 (Salvatore).
تحسينات في البناء/الاختبار/التحزيم
- يُخطر تكامل Systemd الآن systemd بشكل صحيح بأن الخدمة قد بدأت بالفعل وأصبحت جاهزة لمعالجة الطلبات. #43400 (Коренберг Марк).
- أُضيف خيار لبناء ClickHouse باستخدام OpenSSL مع OpenSSL FIPS Module. لم يخضع هذا النوع من البناء للاختبار للتحقق من الأمان، وهو غير مدعوم. #43991 (Boris Kuschel).
- ترقية إلى compression codec الجديد
DeflateQpl، الذي جرى تنفيذه في PR سابق (التفاصيل: https://github.com/ClickHouse/ClickHouse/pull/39494). يُحسّن هذا التصحيح الـ codec من الجوانب التالية: 1. الترقية من QPL v0.2.0 إلى QPL v0.3.0 Intel® Query Processing Library (QPL) 2. تحسين ملف CMake لمعالجة مشكلات build في QPL v0.3.0. 3. ربط مكتبة QPL مع libaccel-config في وقت build بدلاً من التحميل في وقت runtime في QPL v0.2.0 (dlopen) 4. إصلاح مشكلة طباعة السجل في CompressionCodecDeflateQpl.cpp. #44024 (jasperzhu).
إصلاح خلل (سلوك خاطئ ظاهر للمستخدم في إصدار رسمي مستقر أو ما قبل الاستقرار)
- تم إصلاح خطأ كان قد يؤدي إلى توقف تام عند استخدام asynchronous inserts. #43233 (Anton Popov).
- إصلاح بعض المنطق غير الصحيح في تحسينات مستوى AST
optimize_normalize_count_variants. #43873 (Duc Canh Le). - إصلاح حالة لا تُحرِز فيها mutations أي تقدم عندما لا تتطابق checksums بين replicas (على سبيل المثال، بسبب تغيّر في format البيانات أثناء الترقية). #36877 (nvartolomei).
- إصلاح تحسين
skip_unavailable_shardsالذي لم يكن يعمل مع table function hdfsCluster. #43236 (chen). - إصلاح دعم
s3للرمز البديل?. يُغلق هذا #42731. #43253 (chen). - إصلاح الدالتين
arrayFirstOrNullوarrayLastOrNullبحيث تُرجعان null عندما تحتوي المصفوفة على عناصرNullable. #43274 (Duc Canh Le). - إصلاح احتساب
UserTimeMicroseconds/SystemTimeMicrosecondsغير الصحيح المرتبط بـ Kafka tables. #42791 (Azat Khuzhin). - عدم كتم الاستثناءات في أقراص
web. وإصلاح retries الخاصة بالقرصweb. #42800 (Azat Khuzhin). - تم إصلاح race condition (منطقية) بين inserts وdropping materialized views. كانت race condition تحدث عند حذف materialized view بالتزامن مع عملية INSERT، حيث تكون MVs موجودة كتبعية لعملية insert في بداية التنفيذ، لكن يكون الجدول قد حُذف بحلول الوقت الذي تحاول فيه سلسلة insert الوصول إليه، ما يؤدي إلى الاستثناء
UNKNOWN_TABLEأوTABLE_IS_DROPPEDويوقف insertion. بعد هذا التغيير، أصبحنا نتجنب هذه الاستثناءات ونواصل عملية insert ببساطة إذا كانت التبعية قد اختفت. #43161 (AlfVII). - إصلاح سلوك غير معرّف في الدالة
quantilesقد يؤدي إلى استخدام ذاكرة غير مهيأة. اكتُشف ذلك بواسطة fuzzer. يُغلق هذا #44066. #44067 (Alexey Milovidov). - تمت إضافة check إضافي على كون uncompressed size صفراً إلى
CompressionCodecDelta. #43255 (Nikita Taranov). - تسطيح المصفوفات من Parquet لتجنّب مشكلة تتعلق بعدم اتساق البيانات داخل المصفوفات. ويمكن أن تُنشئ Apache Iceberg هذه الملفات غير الصحيحة. #43297 (Arthur Passos).
- إصلاح cast غير صحيح من column
LowCardinalityعند استخدام تنفيذ الدوال بأسلوب short circuit. #43311 (Kruglov Pavel). - تم إصلاح queries التي تستخدم
SAMPLE BYمع تحسين prewhere على الجداول التي تستخدم engine Merge. #43315 (Antonio Andelic). - التحقق من محتوى الملف
format_versionفيMergeTreeDataومقارنته، بحيث يمكن تحميل الجداول حتى إذا تم تغيير storage policy. #43328 (Antonio Andelic). - إصلاح الخطأ المنطقي المحتمل (وإن كان غير مرجح جدًا) “لا يوجد عمود للتراجع” أثناء INSERT في جداول
Buffer. #43336 (Azat Khuzhin). - إصلاح خلل كان يسمح للمحلل اللغوي بتحليل عدد غير محدود من الأقواس المستديرة ضمن دالة واحدة إذا كان
allow_function_parametersمفعّلًا. #43350 (Nikolay Degterinsky). - يدعم
MaterializeMySQL(ميزة تجريبية) أوامر DDL التالية:drop table t1, t2، وهو متوافق مع معظم أوامر DROP DDL في MySQL. #43366 (zzsmdfj). session_log(ميزة تجريبية): تم إصلاح مشكلة تعذر تسجيل الدخول (بسبب الفشل في إنشاء إدخال session_log) في حالة نادرة جدًا من اضطراب setting profiles. #42641 (Vasily Nemkov).- إصلاح احتمال ظهور الخطأ
Cannot create non-empty column with type Nothingفي الدالتينif/multiIf. يغلق #43356. #43368 (Kruglov Pavel). - إصلاح خلل عند استخدام عامل تصفية على مستوى الصف يعتمد على القيمة الافتراضية لعمود. #43387 (Alexander Gololobov).
- قد يُرجع الاستعلام الذي يحتوي على
DISTINCT+LIMIT BY+LIMITعددًا من الصفوف أقل من المتوقع. يصلح #43377. #43410 (Igor Nikonov). - إصلاح
sumMapلـNullable(Decimal(...)). #43414 (Azat Khuzhin). - إصلاح
date_diffللساعات/الدقائق على MacOS. يغلق #42742. #43466 (zzsmdfj). - إصلاح احتساب الذاكرة غير الصحيح بسبب merges/mutations. #43516 (Azat Khuzhin).
- تم إصلاح تحليل primary key مع الشروط التي تتضمن
toString(enum). #43596 (Nikita Taranov). اكتشف @tisonkun هذا الخطأ. - ضمان الاتساق عند تحديث
clickhouse-copierلكلٍّ من الحالة وattach_is_doneفي Keeper بعد اكتمال إرفاق partition. #43602 (lzydmxy). - أثناء استعادة replica مفقودة لقاعدة بيانات
Replicated(ميزة تجريبية)، قد تنشأ حالة نحتاج فيها إلى swap ذري بين اسمي جدولين (باستخدام EXCHANGE). في السابق، كنا نحاول استخدام استعلامَي RENAME، وكان ذلك يفشل بوضوح، بل ويتسبب أيضًا في فشل عملية استعادة replica قاعدة البيانات بالكامل. #43628 (Nikita Mikhaylov). - إصلاح الحالة التي تُطلق فيها الدالة
s3ClusterالخطأNOT_FOUND_COLUMN_IN_BLOCK. يغلق #43534. #43629 (chen). - إصلاح خطأ منطقي محتمل
Array sizes mismatchedأثناء تحليل كائن JSON يحتوي على مصفوفات بأسماء مفاتيح متطابقة ولكن بمستويات تداخل مختلفة. يغلق #43569. #43693 (Kruglov Pavel). - إصلاح استثناء محتمل في حالة
GROUP BYالموزع مع وجود عمودALIASبين مفاتيح التجميع. #43709 (Nikita Taranov). - إصلاح خطأ قد يؤدي إلى تلف projections إذا كان zero-copy replication (ميزة تجريبية) مُمكّنًا ويُستخدم. #43764 (alesapin).
- إصلاح استخدام multipart upload للكائنات الكبيرة جدًا في AWS S3. #43824 (ianton-ru).
- إصلاح
ALTER ... RESET SETTINGمعON CLUSTER. كان من الممكن أن يُطبَّق على replica واحدة فقط. يصلح #43843. #43848 (Elena Torró). - إصلاح خطأ منطقي في JOIN مع محرك الجدول
Joinفي الطرف الأيمن، عند استخدامUSING. #43963 (Vladimir C). إصلاح خطأ متعلق بالترتيب غير الصحيح للمفاتيح في محرك الجدولJoin. #44012 (Vladimir C). - إصلاح في Keeper: تنفيذ throw إذا كان منفذ الاتصال بين الخوادم الخاص بـ Raft مستخدمًا بالفعل. #43984 (Antonio Andelic).
- إصلاح الوسيطة الموضعية في ORDER BY (مثال:
ORDER BY 1, 2) في حالة pruning الأعمدة غير اللازمة من subqueries. يغلق #43964. #43987 (Kseniia Sumarokova). - إصلاح استثناء عند احتواء subquery على HAVING من دون أن تتضمن aggregation فعلية. #44051 (Nikita Taranov).
- إصلاح حالة تسابق في s3 multipart upload. وكان من الممكن أن تتسبب هذه الحالة في ظهور الخطأ
Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR)أثناء restoring من نسخة احتياطية. #44065 (Vitaly Baranov).
إصدار ClickHouse 22.11، 2022-11-17. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- ستحاول الآن دوال عائلة
JSONExtractتحويل القيم قسرًا إلى النوع المطلوب. #41502 (Márcio Martins).
ميزة جديدة
- يضيف دعمًا لإعادة المحاولة أثناء عمليات
INSERTإلىReplicatedMergeTreeعند فقدان الجلسة مع ClickHouse Keeper. وإلى جانب تحمّل الأعطال، يهدف هذا إلى تحسين تجربة المستخدم وتجنّب إرجاع خطأ إليه أثناء الإدراج إذا أُعيد تشغيل Keeper (على سبيل المثال، بسبب الترقية). #42607 (Igor Nikonov). - يضيف محركَي الجداول
HudiوDeltaLakeبوضع القراءة فقط، وذلك للجداول الموجودة على S3 فقط. #41054 (Daniil Rubin, Kseniia Sumarokova). - يضيف table function
hudiوdeltaLake. #43080 (flynn). - دعم للفواصل الزمنية المركّبة. 1. أصبحت عمليات الجمع والطرح والنفي متاحة الآن على Intervals. وفي حال اختلفت أنواع Intervals، فستُحوَّل إلى Tuple من تلك الأنواع. 2. يمكن إضافة tuple of intervals إلى حقل Date/DateTime أو طرحها منه. 3. أُضيف دعم parsing لـ Intervals من أنواع مختلفة، على سبيل المثال:
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'. #42195 (Nikolay Degterinsky). - أُضيف دعم glob
**للاجتياز التكراري لـ directory في filesystem وS3. يحلّ #36316. #42376 (SmitaRKulkarni). - تقديم disk type
s3_plainلعمليات الكتابة مرة واحدة والقراءة مرات عديدة. وتنفيذATTACHلجدولMergeTreeعلى قرصs3_plain. #42628 (Azat Khuzhin). - أُضيفت سياسات row-level المطبَّقة إلى
system.query_log. #39819 (Vladimir Chebotaryov). - إضافة الأمر ذي الأحرف الأربعة
csnpلإنشاء snapshots يدويًا في ClickHouse Keeper. بالإضافة إلى ذلك، أُضيفlgifللحصول على معلومات Raft لعقدة محددة (مثلًا، فهرس آخر snapshot تم إنشاؤها، وفهرس آخر سجل committed). #41766 (JackyWoo). - إضافة الدالة
asciiكما في Apache Spark: https://spark.apache.org/docs/latest/api/sql/#ascii. #42670 (李扬). - إضافة الدالة
pmodالتي تُرجع نتيجة غير سالبة استنادًا إلى modulo. #42755 (李扬). - إضافة الدالة
formatReadableDecimalSize. #42774 (Alejandro). - إضافة الدالة
randCanonical، وهي مشابهة للدالةrandفي Apache Spark أو Impala. تُولّد الدالة نتائج عشوائية زائفة بقيم موزعة توزيعًا منتظمًا، ومستقلة ومتماثلة التوزيع، ضمن [0, 1). #43124 (李扬). - إضافة الدالة
displayName، مع إغلاق #36770. #37681 (hongbin). - إضافة الإعداد
min_age_to_force_merge_on_partition_onlyلتحسين الأجزاء القديمة على مستوى partition بالكامل فقط. #42659 (Antonio Andelic). - إضافة تنفيذ عام للمجموعات المسماة ذات البنية الاعتباطية، ولنمط الوصول و
system.named_collections. #43147 (Kseniia Sumarokova).
تحسين الأداء
- يمكن للدالة
matchاستخدام الفهرس إذا كان الشرط متعلقًا ببادئة سلسلة نصية. هذا يُغلق #37333. #42458 (clarkcaoliu). - تسريع معاملي AND وOR عند استخدامهما بشكل متسلسل. #42214 (Zhiguo Zhou).
- دعم parsing المتوازي لـ input format
LineAsString. يحسّن هذا الأداء بدرجة طفيفة فقط. هذا يُغلق #42502. #42780 (Kruglov Pavel). - تحسين أداء ClickHouse Keeper: تحسين أداء commit في الحالات التي تكون فيها لدى العديد من العقد المختلفة حالات غير committed. من المفترض أن يساعد هذا في الحالات التي يتعذر فيها على عقدة follower المزامنة بالسرعة الكافية. #42926 (Antonio Andelic).
- يمكن لشرط مثل
NOT LIKE 'prefix%'استخدام primary index. #42209 (Duc Canh Le).
ميزة تجريبية
- دعم النوع
Objectداخل أنواع أخرى، مثلArray(JSON). #36969 (Anton Popov). - تجاهل حدث SAVEPOINT في سجل binlog الخاص بـ MySQL ضمن MaterializedMySQL. #42931 (zzsmdfj). معالجة استعلامات SAVEPOINT في MaterializedMySQL (بتجاهلها). #43086 (Stig Bakken).
تحسينات
- ستحدّد الاستعلامات البسيطة ذات
LIMITالصغير عدد الصفوف التقديري المطلوب قراءتها على نحو صحيح، بحيث يُفحَص الحدّ الفاصل بشكل صحيح. يُغلق #7071. #42580 (Han Fei). - إضافة دعم للمعلمات التفاعلية في استعلامات
INSERT VALUES. #43077 (Nikolay Degterinsky). - أُضيف الحقل الجديد
allow_readonlyفيsystem.table_functionsللسماح باستخدام وظائف الجداول في وضع القراءة فقط. يحلّ #42414 التنفيذ: * أُضيف حقل جديد allow_readonly إلى الجدول system.table_functions. * تم التحديث لاستخدام الحقل الجديد allow_readonly للسماح باستخدام وظائف الجداول في وضع القراءة فقط. الاختبار: * أُضيف اختبار لـ filesystem tests/queries/0_stateless/02473_functions_in_readonly_mode.sh التوثيق: * تم تحديث التوثيق الإنجليزي لـ Table Functions. #42708 (SmitaRKulkarni). - أصبح
system.asynchronous_metricsيتضمن توثيقًا مضمّنًا. ويُصدَّر هذا التوثيق أيضًا إلى Prometheus. كما أُصلح خطأ في المقاييس الخاصة بأقراصcache، إذ كانت تُحتسب لقرص cache عشوائي واحد فقط بدلًا من جميعها. يُغلق هذا #7644. #43194 (Alexey Milovidov). - تم تغيير خوارزمية throttling إلى token bucket. #42665 (Sergei Trifonov).
- إخفاء كلمات المرور والمفاتيح السرية في كلٍّ من
system.query_logو/var/log/clickhouse-server/*.log، وكذلك في رسائل الخطأ. #42484 (Vitaly Baranov). - إزالة الأجزاء المغطاة للجزء الذي تم جلبه (لتجنّب الزيادات المحتملة في تأخر النسخ المتماثل). #39737 (Azat Khuzhin).
- إذا كان
/dev/ttyمتاحًا، فسيُعرَض التقدّم في clickhouse-client و clickhouse-local مباشرةً على الطرفية، من دون الكتابة إلى STDERR. يتيح ذلك عرض التقدّم حتى إذا أُعيد توجيه STDERR إلى ملف، كما لن يتلوّث الملف بتسلسلات الهروب الخاصة بالطرفية. يمكن تعطيل التقدّم عبر--progress false. يُغلق هذا #32238. #42003 (Alexey Milovidov). - إضافة دعم لإدخال
FixedStringإلى دوال ترميز base64. #42285 (ltrk2). - إضافة العمودين
bytes_on_diskوpathإلىsystem.detached_parts. يُغلق #42264. #42303 (chen). - تحسين استخدام البنية من جدول الإدراج في وظائف الجداول، إذ أصبحت هناك قيمة جديدة ممكنة للإعداد
use_structure_from_insertion_table_in_table_functionsهي2، وتعني أن ClickHouse سيحاول تلقائيًا تحديد ما إذا كان يمكن استخدام البنية من جدول الإدراج أم لا. يُغلق #40028. #42320 (Kruglov Pavel). - إصلاح غياب مؤشر التقدّم في
INSERT FROM INFILE. يُغلق #42548. #42634 (chen). - إعادة هيكلة الدالة
tokensلتمكين تحديد الحد الأقصى لعدد الـ tokens المُعادة في الدوال ذات الصلة (وهو معطّل افتراضيًا). #42673 (李扬). - السماح باستخدام الوسيطات
Date32في الدالتينformatDateTimeوFROM_UNIXTIME. #42737 (Roman Vasin). - تحديث tzdata إلى 2022f. لن تعود المكسيك تعتمد التوقيت الصيفي إلا بالقرب من الحدود الأمريكية: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html. وستنتقل Chihuahua إلى UTC-6 على مدار العام اعتبارًا من 2022-10-30. كما أن Fiji لم تعد تعتمد التوقيت الصيفي. راجع https://github.com/google/cctz/pull/235 و https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209. #42796 (Alexey Milovidov).
- إضافة مقياس الحدث
FailedAsyncInsertQueryلعمليات الإدراج غير المتزامنة. #42814 (Krzysztof Góralski). - تنفيذ تحسين
read-in-orderبالاعتماد على query plan. وهو مفعّل افتراضيًا. اضبطquery_plan_read_in_order = 0لاستخدام الإصدار السابق المستند إلى AST. #42829 (Nikolai Kochetov). - زيادة حجم جزء الرفع بشكل أُسّي عند النسخ الاحتياطي إلى S3 لتجنّب الأخطاء المرتبطة بالحد الأقصى البالغ 10 000 جزء في multipart upload إلى S3. #42833 (Vitaly Baranov).
- عندما تكون مهمة الدمج مشغولة باستمرار وتكون مساحة القرص غير كافية، يتعذر تحديد الأجزاء المنتهية الصلاحية بالكامل وإزالتها، مما يؤدي إلى نقص في مساحة القرص. والفكرة هنا هي أنه عندما تنتهي صلاحية الـ Part بالكامل، فلا حاجة إلى حجز مساحة إضافية على القرص، بما يضمن التنفيذ الطبيعي لـ TTL. #42869 (zhongyuankai).
- إضافة الدالة
ossوtable engine OSS(وهذا أكثر ملاءمة للمستخدمين). oss متوافق بالكامل مع S3. #43155 (zzsmdfj). - تحسين الإبلاغ عن الأخطاء عند جمع المعلومات المتعلقة بنظام التشغيل لجدول
system.asynchronous_metrics. #43192 (Alexey Milovidov). - تعديل جداول
INFORMATION_SCHEMAبحيث يتمكن ClickHouse من الاتصال بنفسه باستخدام compatibility protocol الخاصة بـ MySQL. وإضافة columns بدلًا من aliases (على صلة بـ #9769). سيؤدي ذلك إلى تحسين التوافق مع مختلف عملاء MySQL. #43198 (Filatenkov Artur). - إضافة بعض الدوال لتحسين التوافق مع PowerBI عند اتصاله باستخدام بروتوكول MySQL #42612 (Filatenkov Artur).
- تحسين سهولة استخدام لوحة المعلومات عند إجراء التغييرات #42872 (Vladimir C).
تحسينات البناء/الاختبار/التحزيم
- شغّل SQLancer لكل طلب سحب ولكل commit على master. SQLancer هو fuzzer مفتوح المصدر يركّز على الاكتشاف التلقائي للأخطاء المنطقية. #42397 (Ilya Yatsishin).
- حدِّث إلى أحدث إصدار من zlib-ng. #42463 (Boris Kuschel).
- أضِف دعمًا لاختبار ClickHouse server باستخدام Jepsen. وبالمناسبة، لدينا بالفعل دعم لاختبار ClickHouse Keeper باستخدام Jepsen. يوسّع طلب السحب هذا هذا الدعم ليشمل الجداول Replicated. #42619 (Antonio Andelic).
- استخدم https://github.com/matus-chochlik/ctcache للتخزين المؤقت لنتائج clang-tidy. #42913 (Mikhail f. Shiryaev).
- قبل هذا الإصلاح، كان RPM يحتفظ بملف config الذي يحدده المستخدم في
$file.rpmsave. يُصلح طلب السحب هذا المشكلة، ولن يستبدل ملفات المستخدم القادمة من الحزم. #42936 (Mikhail f. Shiryaev). - أزِل بعض المكتبات من Docker image الخاصة بـ Ubuntu. #42622 (Alexey Milovidov).
إصلاح خلل (سلوك غير صحيح ظاهر للمستخدم في إصدار مستقر أو ما قبل الاستقرار رسمي)
- تم تحديث المُطبِّع لاستنساخ alias ast. يحلّ هذا #42452 التنفيذ: * تم تحديث QueryNormalizer لاستنساخ alias ast عند استبداله. في السابق، كان مجرد إسناد الكائن نفسه يؤدي إلى ظهور استثناء في LogicalExpressinsOptimizer، لأن الأصل نفسه كان يُدرَج مرة أخرى. * لا تظهر هذه المشكلة مع analyzer الجديد (allow_experimental_analyzer)، لذلك لم تُجرَ أي تغييرات عليه. كما أُضيف اختبار للحالة نفسها. #42827 (SmitaRKulkarni).
- إصلاح حالة تسابق في النسخ الاحتياطي للجداول في قواعد البيانات
Lazy. #43104 (Vitaly Baranov). - إصلاح لـ
skip_unavailable_shards: لم يكن يعمل مع دالة الجدولs3Cluster. #43131 (chen). - إصلاح schema inference في
s3Clusterوتحسين فيhdfsCluster. #41979 (Kruglov Pavel). - إصلاح إعادة المحاولات أثناء القراءة من محركات الجداول URL / دالة الجدول. (كان يمكن إعادة محاولة الأخطاء القابلة لإعادة المحاولة مرات أكثر من اللازم، بينما كانت الأخطاء غير القابلة لإعادة المحاولة تؤدي إلى فشل assertion في الشيفرة). #42224 (Kseniia Sumarokova).
- تم الإبلاغ عن fault تجزئة متعلق بـ DNS و c-ares وتم إصلاحه. #42234 (Arthur Passos).
- إصلاح
LOGICAL_ERRORArguments of 'plus' have incorrect data typesالذي قد يحدث أثناء تحليل PK (فحص الرتابة). كما أُصلح تحليل PK غير الصحيح للدوال الثنائية الرتيبة ذات الوسيط الثابت الأول. #42410 (Nikolai Kochetov). - إصلاح تحليل المفتاح غير الصحيح عندما لا يمكن أن تكون أنواع المفاتيح ضمن Nullable. يحلّ هذا #42456. #42469 (Amos Bird).
- إصلاح خطأ مطبعي في اسم أحد الإعدادات أدى إلى استخدام غير صحيح لذاكرة التخزين المؤقت الخاصة بـ schema inference عند استخدام الإعداد
input_format_csv_use_best_effort_in_schema_inference. يغلق هذا #41735. #42536 (Kruglov Pavel). - إصلاح إنشاء Set بترويسة غير صحيحة عندما يكون نوع البيانات LowCardinality. يغلق هذا #42460. #42579 (flynn).
- بات التحقق من قيم
(U)Int128و(U)Int256يتم بشكل صحيح فيPREWHERE. #42605 (Antonio Andelic). - إصلاح خطأ في parser الدوال كان يمكن أن يؤدي إلى fault تجزئة. #42724 (Nikolay Degterinsky).
- إصلاح آلية القفل في
truncate table. #42728 (flynn). - إصلاح احتمال حدوث crash في أقراص
webعندما لا يكون الملف موجودًا (أو فيOPTIMIZE TABLE FINAL، إذ قد ينتهي الأمر به أيضًا إلى الخطأ نفسه). #42767 (Azat Khuzhin). - إصلاح تعيين
auth_typeفيsystem.session_logعبر تضمينSSL_CERTIFICATEضمن قيم enum. #42782 (Miel Donkers). - إصلاح مشكلة
stack-use-after-returnفي نسخة ASAN ضمن محلل استعلام Create User. #42804 (Nikolay Degterinsky). - إصلاح
lowerUTF8/upperUTF8عندما يقع الرمز بين حدَّي 16 بايت (وهي حالة شائعة جدًا إذا كانت السلاسل النصية أطول من 16 بايت). #42812 (Azat Khuzhin). - أُضيف فحص إضافي للحدود إلى إجراء فك ضغط LZ4 لإصلاح السلوك غير الصحيح عند وجود إدخال غير صالح. #42868 (Nikita Taranov).
- إصلاح احتمال نادر لحدوث تعليق عند إلغاء الاستعلام. #42874 (Azat Khuzhin).
- إصلاح سلوك غير صحيح عند وجود عدة شروط منفصلة في hash join، يغلق #42832. #42876 (Vladimir C).
- قد يتولّد مؤشّر NULL عند استخدام select if as from في ‘three table join’، على سبيل المثال، في استعلام SQL التالي: #42883 (zzsmdfj).
- إصلاح تقرير memory sanitizer في Cluster Discovery، يغلق #42763. #42905 (Vladimir C).
- تحسين استنباط مخطط DateTime في حالة السلسلة النصية الفارغة. #42911 (Kruglov Pavel).
- إصلاح خطأ NOT_FOUND_COLUMN_IN_BLOCK نادر عند إمكان استخدام projection مع عدم توفّر أي projection فعليًا. يُصلح هذا #42771. أُدخل هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/25563. #42938 (Amos Bird).
- إصلاح ATTACH TABLE في engine قاعدة البيانات
PostgreSQLإذا كان الجدول يحتوي على نوع البيانات DATETIME. يغلق #42817. #42960 (Kseniia Sumarokova). - إصلاح parsing لتعبيرات lambda. يغلق #41848. #42979 (Nikolay Degterinsky).
- إصلاح التحليل غير الصحيح للمفاتيح عند ظهور مفاتيح Nullable في وسط مستطيل فائق. يُصلح هذا #43111. #43133 (Amos Bird).
- إصلاح عدة قراءات زائدة من المخزن المؤقت أثناء deserialization لحالات aggregate function states المُعدّة بعناية. #43159 (Raúl Marín).
- إصلاح الدالة
ifفي حالة NULL ووسائط Nullable الثابتة. يغلق #43069. #43178 (Kruglov Pavel). - إصلاح تجاوز السعة في حسابات Decimal عند تحليل DateTime باستخدام خوارزمية ‘best effort’. يُغلق #43061. #43180 (Kruglov Pavel).
- كان حساب الحقل
indentالذي تُنتجه أداةgit-importغير صحيح. راجع https://clickhouse.com/docs/getting-started/example-datasets/github/. #43191 (Alexey Milovidov). - إصلاح سلوك غير متوقع لأنواع
Intervalمع الاستعلامات الفرعية والتحويل بين الأنواع. #43193 (jh0x).
إصدار ClickHouse 22.10، 2022-10-25. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- إعادة تسمية أوامر ذاكرة التخزين المؤقت:
show caches->show filesystem caches، وdescribe cache->describe filesystem cache. #41508 (Kseniia Sumarokova). - إزالة دعم القسم
WITH TIMEOUTفيLIVE VIEW. وبذلك يُغلَق #40557. #42173 (Alexey Milovidov). - إزالة دعم الماكرو
{database}من موجّه client. كان يُعرَض بشكل غير صحيح إذا لم تكن قاعدة البيانات محددة، كما أنه لم يكن يُحدَّث عند تنفيذ عباراتUSE. وبذلك يُغلَق #25891. #42508 (Alexey Milovidov).
ميزة جديدة
- تمت إضافة إعدادات بروتوكولات قابلة للتركيب. ويمكن الآن إعداد بروتوكولات مختلفة مع مضيفات استماع مختلفة. كما يمكن إعداد أغلفة البروتوكول مثل PROXYv1 فوق أي بروتوكولات أخرى (TCP، وTCP secure، وMySQL، وPostgres). #41198 (Yakov Olkhovskiy).
- تمت إضافة
S3كنوع جديد من وجهات النسخ الاحتياطية. كما أصبح BACKUP إلى S3 مدعومًا مع الحفاظ على بنية path/data كما هي. #42333 (Vitaly Baranov), #42232 (Azat Khuzhin). - أضيفت دوال (
randUniform,randNormal,randLogNormal,randExponential,randChiSquared,randStudentT,randFisherF,randBernoulli,randBinomial,randNegativeBinomial,randPoisson) لتوليد قيم عشوائية وفقًا للتوزيعات المحددة. وبذلك يُغلَق #21834. #42411 (Nikita Mikhaylov). - تحسين في ClickHouse Keeper: إضافة دعم لرفع snapshots إلى S3. ويمكن تعريف معلومات S3 داخل
keeper_server.s3_snapshot. #41342 (Antonio Andelic). - تمت إضافة دالة تجميعية
analysisOfVariance(anova) لإجراء اختبار إحصائي على عدة مجموعات من المشاهدات ذات التوزيع الطبيعي لمعرفة ما إذا كان متوسط جميع المجموعات متساويًا أم لا. Original PR #37872. #42131 (Nikita Mikhaylov). - دعم تقييد حجم البيانات المؤقتة المخزنة على disk باستخدام settings
max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_query. #40893 (Vladimir C). - إضافة setting
format_json_object_each_row_column_for_object_nameلكتابة/تحليل اسم object كقيمة column في format JSONObjectEachRow. #41703 (Kruglov Pavel). - إضافة دالة hash BLAKE3 إلى SQL. #33435 (BoloniniD).
- تم توسيع الدالة
javaHashلتشمل الأعداد الصحيحة. #41131 (JackyWoo). - إضافة دعم OpenTelemetry إلى ON CLUSTER DDL (يتطلب ضبط
distributed_ddl_entry_format_versionعلى 4). #41484 (Frank Chen). - تمت إضافة جدول النظام
asynchronous_insert_log. ويحتوي على معلومات حول asynchronous inserts (بما في ذلك نتائج الاستعلامات في وضع fire-and-forget (معwait_for_async_insert=0)) لتحسين إمكانية الفحص الداخلي. #42040 (Anton Popov). - إضافة دعم للطرق
lz4,bz2,snappyفيAccept-Encodingالخاص بـ HTTP، وهو امتداد غير قياسي لـ HTTP protocol. #42071 (Nikolay Degterinsky). - تمت إضافة دوال ترميز/فك ترميز Morton Coding (ZCurve). #41753 (Constantine Peresypkin).
- إضافة دعم لعبارة
SET setting_name = DEFAULT. #42187 (Filatenkov Artur).
ميزة تجريبية
- تمت إضافة بنية تحتية جديدة لتحليل الاستعلام وتخطيطه ضمن الإعداد
allow_experimental_analyzer. #31796 (Maksim Kita). - التنفيذ الأولي للغة Kusto Query Language. يُرجى عدم استخدامها. #37961 (Yong Wang).
تحسين الأداء
- تخفيف حدّ “Too many parts”. يُغلق هذا #6551. يتيح ClickHouse الآن عددًا أكبر من الأجزاء في partition إذا كان متوسط part size كبيرًا بما يكفي (10 GiB على الأقل). ويجعل ذلك من الممكن الوصول إلى ما يصل إلى petabytes من البيانات ضمن partition واحد في table واحدة على server واحد، وهو ما يمكن تحقيقه باستخدام رفوف الأقراص أو object storage. #42002 (Alexey Milovidov).
- تنفيذ parser لعناصر أسبقية operator لتقليل حجم stack المطلوب. #34892 (Nikolay Degterinsky).
- يستفيد تحسين DISTINCT in order من خصائص فرز streams البيانات. يتيح هذا التحسين القراءة بالترتيب لـ DISTINCT عند انطباق ذلك (إذ كان من الضروري سابقًا توفير ORDER BY للأعمدة الموجودة في DISTINCT). #41014 (Igor Nikonov).
- ColumnVector: تحسين فهرس UInt8 باستخدام AVX512VBMI. #41247 (Guo Wangyang).
- تحسين التنافس على الأقفال الخاصة بـ
ThreadGroupStatus::mutex. تُظهر تجارب الأداء الخاصة بـ SSB (Star Schema Benchmark) على جهاز ICX (Intel Xeon Platinum 8380 CPU، 80 نواة، 160 thread) أن هذا التغيير يمكن أن يحقق تحسنًا بمقدار 2.95x في المتوسط الهندسي لـ QPS عبر جميع الحالات الفرعية. #41675 (Zhiguo Zhou). - إضافة capabilities
ldaprإلى builds الخاصة بـ AArch64. هذا مدعوم على Graviton 2+، وفي instances Azure وGCP. ولم يظهر ذلك إلا في clang-15 منذ وقت ليس ببعيد. #41778 (Daniel Kutenin). - تحسين الأداء عند مقارنة strings عندما يكون أحد argument عبارة عن string constant فارغ. #41870 (Jiebin Sun).
- تحسين
insertFromفي ColumnAggregateFunction لمشاركة aggregate state في بعض الحالات. #41960 (flynn). - جعل الكتابة إلى disks
azure_blob_storageأسرع (مع مراعاةmax_single_part_upload_sizeبدلًا من كتابة block لكل حجم buffer). ذُكر هذا القصور في #41754. #42041 (Kseniia Sumarokova). - جعل معرّفات thread في قائمة العمليات و
query_logفريدة لتجنّب الهدر. #42180 (Alexey Milovidov). - دعم تجاوز cache بالكامل (سواء التنزيل إلى cache أو قراءة البيانات المخزنة مؤقتًا) إذا تجاوز نطاق القراءة المطلوب threshold المحددة في إعداد cache
bypass_cache_threashold، ويتطلب ذلك تفعيله عبرenable_bypass_cache_with_threshold. #42418 (Han Shukai). يساعد هذا مع الأقراص المحلية البطيئة.
تحسينات
- إضافة الإعداد
allow_implicit_no_password: بالاقتران معallow_no_password، يمنع إنشاء مستخدم من دون كلمة مرور ما لم يُحدَّدIDENTIFIED WITH no_passwordصراحةً. #41341 (Nikolay Degterinsky). - سيبدأ Embedded Keeper دائمًا في الخلفية، مما يتيح لـ ClickHouse البدء من دون تحقيق quorum. #40991 (Antonio Andelic).
- جُعلت إعادة إنشاء connection جديدة إلى ZooKeeper أكثر سرعة في الاستجابة عند انتهاء صلاحية الاتصال السابق. في السابق، كانت هناك مهمة تُشغَّل افتراضيًا كل دقيقة، ولذلك كان يمكن أن يبقى table في حالة readonly لهذه المدة تقريبًا. #41092 (Nikita Mikhaylov).
- يمكن الآن استخدام projections مع zero copy replication (تُعد zero-copy replication ميزة غير مخصصة لبيئات production). #41147 (alesapin).
- دعم expression
(EXPLAIN SELECT ...)داخل subquery. وأصبحت queries مثلSELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)صالحة الآن. #40630 (Vladimir C). - السماح بتغيير
async_insert_max_data_sizeأوasync_insert_busy_timeout_msضمن نطاق query. على سبيل المثال، قد ترغب مستخدمة في insert data على فترات متباعدة، لكنها لا تملك صلاحية الوصول إلى config الخاص بـ server لضبط الإعدادات الافتراضية. #40668 (Nikita Mikhaylov). - تحسينات على القراءة من remote filesystems، مع إتاحة تهيئة حجم threadpool لعمليات reads/writes. يُغلق #41070. #41011 (Kseniia Sumarokova).
- دعم جميع تركيبات combinators في versioning الخاصة بـ WindowTransform/arratReduce*/initializeAggregation/aggregate functions. سابقًا، لم تكن combinators مثل
ForEach/Resample/Mapتعمل في هذه المواضع، وكان استخدامها يؤدي إلى exception مثلState function ... inserts results into non-state column. #41107 (Kruglov Pavel). - إضافة الدالة
tryDecryptالتي تُرجع NULL عند فشل فك التشفير (مثلًا عند فك التشفير بمفتاح غير صحيح) بدلًا من إطلاق استثناء. #41206 (Duc Canh Le). - إضافة العمود
unreserved_spaceإلى table system.disksللتحقق من مقدار المساحة غير المشغولة بالحجوزات على كل disk. #41254 (filimonov). - دعم headers الخاصة بالتفويض في s3 ضمن arguments الخاصة بـ table function. #41261 (Kseniia Sumarokova).
- إضافة دعم MultiRead في Keeper وclient الداخلي لـ ZooKeeper (وهذا extension لبروتوكول ZooKeeper، ومتاح فقط في ClickHouse Keeper). #41410 (Antonio Andelic).
- إضافة دعم مقارنة النوع Decimal مع قيمة floating point literal في المعامل IN. #41544 (liang.huang).
- السماح باستخدام values ذات حجم قابل للقراءة (مثل
1TB) في config الخاص بـ cache. #41688 (Kseniia Sumarokova). - كان ClickHouse يحتفظ مؤقتًا بإدخالات DNS قديمة لبعض الوقت (15 ثانية افتراضيًا) إلى أن يجري تحديث الذاكرة المؤقتة بشكل غير متزامن. وخلال هذه الفترات، كان بإمكان ClickHouse مع ذلك محاولة إنشاء اتصال والتسبب في أخطاء. تم إصلاح هذا السلوك. #41707 (Nikita Mikhaylov).
- إضافة بحث تفاعلي في السجل باستخدام أداة شبيهة بـ fzf (fzf/sk) لـ
clickhouse-client/clickhouse-local(لاحظ أنه يمكنك استخدامFZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONSلتهيئة السلوك بشكل إضافي). #41730 (Azat Khuzhin). - لا يُسمح الآن للعملاء الذين يتصلون بخادم آمن بشهادة غير صالحة بالمتابعة إلا باستخدام الخيار
--accept-certificate. #41743 (Yakov Olkhovskiy). - إضافة الدالة
tryBase58Decode، على غرار الدالة الحاليةtryBase64Decode. #41824 (Robert Schulze). - تحسين الرسائل عند استبدال partition بمفتاح أساسي مختلف. يُصلح #34798. #41838 (Salvatore).
- إصلاح التحليل المتوازي: إذ يتحقق segmentator الآن من
max_block_size. وقد أصلح ذلك التخصيص الزائد للذاكرة في حالة التحليل المتوازي مع LIMIT صغير. #41852 (Vitaly Baranov). - لا تُضِف الاستثناء
"TABLE_IS_DROPPED"إلىsystem.errorsإذا حدث أثناء تنفيذ SELECT من جدول نظام وتم تجاهله. #41908 (AlfVII). - تحسين الخيار
enable_extended_results_for_datetime_functionsلإرجاع نتائج من النوع DateTime64 للدوالtoStartOfDayوtoStartOfHourوtoStartOfFifteenMinutesوtoStartOfTenMinutesوtoStartOfFiveMinutesوtoStartOfMinuteوtimeSlot. #41910 (Roman Vasin). - تحسين استنتاج النوع
DateTimeفي التنسيقات النصية. فهو الآن يراعي الإعدادdate_time_input_formatولا يحاول استنتاج قيم التاريخ والوقت من الأرقام على أنها timestamps. يُغلق #41389 ويُغلق #42206. #41912 (Kruglov Pavel). - إزالة التحذير المربك عند الإدراج مع
perform_ttl_move_on_insert= false. #41980 (Vitaly Baranov). - السماح للمستخدم بكتابة
countState(*)على غرارcount(*). هذا يُغلق #9338. #41983 (Amos Bird). - إصلاح تجاوز السعة في حجم
rankCorr. #42020 (Duc Canh Le). - أُضيف خيار لتحديد سلسلة نصية عشوائية كاسم للبيئة في إعدادات Sentry لتسهيل التقارير. #42037 (Nikita Mikhaylov).
- إصلاح تحليل قيم Date الخارجة عن النطاق من CSV. #42044 (Andrey Zvonov).
- يدعم
parseDataTimeBestEffortالآن استخدام الفاصلة بين التاريخ والوقت. يُغلق #42038. #42049 (flynn). - تم تحسين آلية استعادة النسخة المتماثلة المتقادمة في
ReplicatedMergeTree. إذا كانت النسخة المتماثلة المفقودة تحتوي على بعض الأجزاء غير الموجودة في نسخة متماثلة سليمة، لكن من المفترض أن تظهر هذه الأجزاء لاحقًا وفقًا لطابور النسخ المتماثل للنسخة السليمة، فستحتفظ النسخة المتماثلة المفقودة بهذه الأجزاء بدلًا من فصلها. #42134 (Alexander Tokmakov). - أُضيفت إمكانية استخدام معاملات
Date32مع الدالة date_diff. كما أُصلحت مشكلة في الدالة date_diff عند استخدام معاملات DateTime64 مع تاريخ بداية يسبق Unix epoch وتاريخ نهاية يليه. #42308 (Roman Vasin). - عند رفع أجزاء كبيرة إلى Minio، قد تستغرق ‘Complete Multipart Upload’ وقتًا طويلًا. يرسل Minio نبضات حياة كل 10 ثوانٍ (انظر https://github.com/minio/minio/pull/7198). لكن ClickHouse تنتهي مهلته قبل ذلك، لأن مهلة الإرسال/الاستقبال الافتراضية مضبوطة على 5 ثوانٍ. #42321 (filimonov).
- أُصلح خلل نادر في تحويل الأنواع لحالات التجميع عند التعامل مع أنواع معقدة مثل Decimal. وهذا يُصلح #42408. #42417 (Amos Bird).
- أصبح من الممكن استخدام معاملات
Date32مع الدالةdateName. #42554 (Roman Vasin). - ستُستخدم الآن المرشحات التي تحتوي على قيم NULL حرفية أثناء تحليل الفهرس. #34063. #41842 (Amos Bird).
- تُدمج الأجزاء إذا كان كل جزء ضمن النطاق أقدم من عتبة معينة. ويمكن ضبط هذه العتبة باستخدام
min_age_to_force_merge_seconds. هذا يُغلق #35836. #42423 (Antonio Andelic). وهذا استكمال لـ #39550i من @fastio، الذي نفّذ معظم هذا المنطق. - أُضيفت بنية تحتية جديدة لتحليل الاستعلامات وتخطيطها ضمن الإعداد
allow_experimental_analyzer. #31796 (Maksim Kita). - تحسين الوقت اللازم لاستعادة اتصالات Keeper المفقودة. #42541 (Raúl Marín).
تحسينات البناء/الاختبار/التغليف
- إضافة fuzzer لتعريفات الجداول #40096 (Anton Popov). ويمثل هذا أكبر تقدم في اختبارات ClickHouse خلال هذا العام حتى الآن.
- إصدار النسخة التجريبية Beta من خدمة ClickHouse Cloud: https://console.clickhouse.cloud/. وهي توفّر أسهل طريقة لاستخدام ClickHouse (بل أسهل قليلًا حتى من التثبيت بأمر واحد).
- إضافة دعم توليد WHERE clause إلى AST Fuzzer، مع إمكانية إضافة ORDER BY وWHERE clause أو إزالتهما. #38519 (Ilya Yatsishin).
- أصبحت الملفات التنفيذية لـ Aarch64 تتطلب الآن ARMv8.2 على الأقل، الذي صدر في عام 2016. والأهم من ذلك أن هذا يتيح استخدام ARM LSE، أي العمليات الذرية الأصلية. كذلك أُضيف خيار build في CMake باسم “NO_ARMV81_OR_HIGHER” للسماح بترجمة الملفات التنفيذية للأجهزة الأقدم من ARMv8.0، مثل Raspberry Pi 4. #41610 (Robert Schulze).
- إتاحة build لـ ClickHouse باستخدام Musl (مع تعديلات طفيفة بعد أن كان مدعومًا بالفعل لكنه كان معطّلًا). #41987 (Alexey Milovidov).
- إضافة التحقق من الملف
$CLICKHOUSE_CRONFILEلتجنّب تشغيل الأمرsedفقط للوصول إلى خطأ يفيد بعدم العثور على الملف أثناء التثبيت. #42081 (Chun-Sheng, Li). - تحديث cctz إلى
2022eلدعم تغييرات timezone الجديدة. أصبحت التحولات في فلسطين الآن أيام السبت عند الساعة 02:00. كما جرى دمج المناطق الزمنية الثلاث في أوكرانيا في منطقة واحدة. وانتقلت الأردن وسوريا من +02/+03 مع التوقيت الصيفي إلى +03 على مدار العام. (https://data.iana.org/time-zones/tzdb/NEWS). يغلق هذا #42252. #42327 (Alexey Milovidov). #42273 (Dom Del Nano). - إضافة دعم لشفرة Rust في ClickHouse، مع مكتبة دالة التجزئة BLAKE3 كمثال. #33435 (BoloniniD).
إصلاح خلل (سلوك غير صحيح ظاهر للمستخدم في إصدار مستقر رسمي أو إصدار ما قبل الاستقرار رسمي)
- اختيار طريقة التجميع الصحيحة لـ
LowCardinalityمع أنواع الأعداد الصحيحة الكبيرة. #42342 (Duc Canh Le). - عدة إصلاحات لقرص
web. #41652 (Kseniia Sumarokova). - إصلاح مشكلة تؤدي إلى فشل
docker runإذا لم يكنhttps_portموجودًا في ملف config. #41693 (Yakov Olkhovskiy). - لم يكن إلغاء عمليات mutations يتم على نحو صحيح عند إيقاف الخادم أو عند تنفيذ الاستعلام
SYSTEM STOP MERGES، كما كان الإلغاء قد يستغرق وقتًا طويلًا. تم إصلاح ذلك. #41699 (Alexander Tokmakov). - إصلاح النتائج الخاطئة للاستعلامات التي تستخدم
ORDER BYأوGROUP BYعلى أعمدة من بادئة مفتاح الفرز، والمغلفة داخل دوال رتيبة، عند تفعيل تحسين “read in order” (الإعدادانoptimize_read_in_orderوoptimize_aggregation_in_order). #41701 (Anton Popov). - إصلاح تعطل محتمل في
SELECTمن جدولMergeعند تفعيل الإعدادoptimize_monotonous_functions_in_order_by. يصلح #41269. #41740 (Nikolai Kochetov). - إصلاح الخطأ “Part … intersects part …” الذي قد يحدث في حالات نادرة جدًا إذا أُعيد تشغيل النسخة المتماثلة مباشرة بعد فصل part باعتباره تالفًا. #41741 (Alexander Tokmakov).
- عدم السماح بإنشاء جداول MergeTree أو تعديلها إذا كان اسم أحد الأعمدة
_row_exists، لأنه محجوز لميزة lightweight delete. أُصلح #41716. #41763 (Jianmei Zhang). - إصلاح خلل يؤدي إلى غياب headers الخاصة بـ CORS في بعض استجابات HTTP. #41792 (Frank Chen).
- كان الإصدار 22.9 قد يفشل في تشغيل جدول
ReplicatedMergeTreeإذا كان هذا الجدول قد أُنشئ في الإصدار 20.3 أو إصدار أقدم ولم يُعدّل مطلقًا، وقد تم إصلاح ذلك. يصلح #41742. #41796 (Alexander Tokmakov). - عند فشل إرسال الـ Batch لأي سبب، لا يمكن التعافي منه تلقائيًا، وإذا لم يُعالج في الوقت المناسب فسيتسبب ذلك في التراكم، كما ستزداد رسالة الخطأ المطبوعة طولًا باستمرار، مما قد يؤدي إلى حظر thread الخاص بـ HTTP. #41813 (zhongyuankai).
- إصلاح compact parts مع إعداد العلامات المضغوطة. يصلح #41783 و #41746. #41823 (alesapin).
- لا تحتوي الإصدارات القديمة من قاعدة البيانات Replicated على علامة خاصة في [Zoo]Keeper. نحتاج فقط إلى التحقق مما إذا كانت العقدة تحتوي على بعض البيانات غير المعتادة بدلًا من علامة خاصة. #41875 (Nikita Mikhaylov).
- إصلاح Exception محتمل في
fs cache. #41884 (Kseniia Sumarokova). - إصلاح
use_environment_credentialsفي دالة الجدول S3. #41970 (Kseniia Sumarokova). - تم إصلاح الخطأ “الدليل موجود بالفعل وليس فارغًا” عند فصل part تالف، وهو ما كان قد يمنع جدول
ReplicatedMergeTreeمن بدء النسخ المتماثل. يُصلح #40957. #41981 (Alexander Tokmakov). - تُرجع
toDateTime64الآن الناتج نفسه عند استخدام argumentات صحيحة وسالبة عائمة. #42025 (Robert Schulze). - إصلاح الكتابة إلى
azure_blob_storage. يُغلق جزئيًا #41754. #42034 (Kseniia Sumarokova). - إصلاح مشكلة فك ترميز
bzip2لبعض ملفاتbzip2المحددة. #42046 (Nikolay Degterinsky). - إصلاح دالة SQL
toLastDayOfMonthمع الإعداد “enable_extended_results_for_datetime_functions = 1” عند بداية النطاق الموسّع (يناير 1900). - إصلاح دالة SQL “toRelativeWeekNum()” مع الإعداد “enable_extended_results_for_datetime_functions = 1” عند نهاية النطاق الموسّع (ديسمبر 2299). - تحسين أداء دوال SQL “toISOYear()” و”toFirstDayNumOfISOYearIndex()” و”toYearWeekOfNewyearMode()” عبر تجنّب العمليات الحسابية غير الضرورية على الفهرس. #42084 (Roman Vasin). - تم عن طريق الخطأ تعيين الحد الأقصى لعمليات fetches لكل table إلى 8، رغم أن حجم pool قد يكون أكبر. الآن أصبح الحد الأقصى لعمليات fetches لكل table مساويًا لحجم pool. #42090 (Nikita Mikhaylov).
- كان من الممكن إيقاف table وفصل Dictionary قبل التحقق مما إذا كان يمكن إسقاطه من دون كسر dependencies الخاصة بالجدول، وقد تم إصلاح ذلك. يُصلح #41982. #42106 (Alexander Tokmakov).
- إصلاح ضعف الكفاءة في
remote_filesystem_read_method=readمع filesystem cache. يُغلق #42125. #42129 (Kseniia Sumarokova). - إصلاح Exception مهلة محتملة في distributed queries مع use_hedged_requests = 0. #42130 (Azat Khuzhin).
- تم إصلاح خطأ طفيف داخل الدالة
runningDifferenceعند استخدامها مع النوعDate32. كان النوعDateيُستخدم سابقًا، وقد يؤدي ذلك إلى بعض logical errors مثلBad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'. #42143 (Alfred Xu). - إصلاح إعادة استخدام الملفات التي يزيد حجمها على 4GB من base backup. #42146 (Azat Khuzhin).
- يفشل
DISTINCT in orderمع LOGICAL_ERROR إذا كان العمود الأول في sorting key يحتوي على دالة. #42186 (Igor Nikonov). - إصلاح خطأ في projections والإعداد
aggregate_functions_null_for_empty. هذا الخطأ نادر جدًا، ولا يظهر إلا عند تفعيل الإعدادaggregate_functions_null_for_emptyفي config الخاصة بـ server. يغلق هذا #41647. #42198 (Alexey Milovidov). - إصلاح القراءة من جداول
Bufferعند القراءة بترتيب تنازلي. #42236 (Duc Canh Le). - إصلاح خطأ يمنع ClickHouse من البدء عندما يكون
background_pool_size settingمضبوطًا في profile الافتراضي، بينما لا يكونbackground_merges_mutations_concurrency_ratioمضبوطًا. #42315 (nvartolomei). - كان
ALTER UPDATEلجزء attached (بـ columns تختلف عن schema الخاص بالجدول) قد يؤدي إلى إنشاء metadata غير صالحة فيcolumns.txtعلى disk. وقد تفشل القراءة من هذا الجزء مع أخطاء أو تُرجع data غير صالحة. يُصلح هذا #42161. #42319 (Nikolai Kochetov). - لم يكن الإعداد
additional_table_filtersيُطبَّق على تخزينDistributed. يُصلح هذا #41692. #42322 (Nikolai Kochetov). - إصلاح data race عند إنهاء query أو إلغائها. يغلق هذا #42346. #42362 (Alexey Milovidov).
- يتراجع هذا عن #40217، الذي تسبب في تراجع في دوال التاريخ/الوقت. #42367 (Alexey Milovidov).
- إصلاح assert cast في join عند condition غير متحقق. يغلق هذا #42380. #42407 (Vladimir C).
- إصلاح buffer overflow في معالجة data types من نوع Decimal. يغلق هذا #42451. #42465 (Alexey Milovidov).
- يعمل
AggregateFunctionQuantileالآن بشكل صحيح مع columns من نوع UInt128. سابقًا، كانت حالة quantile تفسّر columns من نوعUInt128على أنهاInt128، ما كان قد يؤدي إلى نتائج غير صحيحة. #42473 (Antonio Andelic). - إصلاح assert من نوع bad_cast أثناء INSERT في indexes الخاصة بـ
Annoyعلى columns ليست من نوع Float32. وتُعد indexes الخاصة بـAnnoyميزة تجريبية. #42485 (Robert Schulze). - كان العامل الحسابي مع Date أو DateTime ومع عدد صحيح بعرض 128 أو 256 بت يشير إلى ذاكرة غير مهيأة. #42453. #42573 (Alexey Milovidov).
- إصلاح خطأ غير متوقع أثناء تحميل الجدول عند احتواء مفتاح التقسيم على أسماء دوال مستعارة أثناء ترقية الخادم. #36379 (Amos Bird).
إصدار ClickHouse 22.9، 2022-09-22. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- يجب تنفيذ الترقية من 20.3 وما قبله إلى 22.9 وما بعده عبر إصدار وسيط إذا كانت هناك أي جداول
ReplicatedMergeTree، وإلا فلن يبدأ ClickHouse server بالإصدار الجديد. #40641 (Alexander Tokmakov). - إزالة الدالتين
accurate_Castوaccurate_CastOrNull(وهما تختلفان عنaccurateCastوaccurateCastOrNullبوجود الشرطة السفلية في الاسم، كما أنهما لا تتأثران بقيمة الإعدادcast_keep_nullable). كانت هاتان الدالتان غير موثقتين وغير مختبرتين وغير مستخدمتين وغير لازمتين. ويبدو أنهما بقيتا موجودتين بسبب تعميم الشيفرة. #40682 (Alexey Milovidov). - إضافة اختبار لضمان توثيق كل table function جديدة. انظر #40649. إعادة تسمية table function
MeiliSearchإلىmeilisearch. #40709 (Alexey Milovidov). - إضافة اختبار لضمان توثيق كل دالة جديدة. انظر #40649. كانت الدوال
lemmatizeوsynonymsوstemغير حساسة لحالة الأحرف عن طريق الخطأ، وهي الآن حساسة لحالة الأحرف. #40711 (Alexey Milovidov). - لأسباب تتعلق بالأمان والاستقرار، لم يعد يجري تقييم نماذج catboost داخل ClickHouse server. وبدلاً من ذلك، أصبح التقييم الآن يُجرى في clickhouse-library-bridge، وهي عملية منفصلة تحمّل مكتبة catboost وتتواصل مع server process عبر HTTP. #40897 (Robert Schulze).
- جعل تفسير إعدادات YAML أكثر توافقًا مع المتعارف عليه. #41044 (Vitaly Baranov).
ميزة جديدة
- دعم
insert_quorum = 'auto'لاستخدام عدد الأغلبية. #39970 (Sachin). - إضافة لوحات معلومات مضمّنة إلى ClickHouse server. هذا مشروع تجريبي يوضّح كيفية تحقيق 90% من النتائج ببذل 1% من الجهد باستخدام ميزات ClickHouse. #40461 (Alexey Milovidov).
- أُضيف نوع جديد لقابلية كتابة قيد الإعدادات
changeable_in_readonly. #40631 (Sergei Trifonov). - إضافة دعم
INTERSECT DISTINCTوEXCEPT DISTINCT. #40792 (Duc Canh Le). - إضافة تنسيق إدخال/إخراج جديد
JSONObjectEachRow- دعم الاستيراد للتنسيقاتJSON/JSONCompact/JSONColumnsWithMetadata. إضافة إعداد جديدinput_format_json_validate_types_from_metadataيتحكّم في ما إذا كان ينبغي التحقق من تطابق أنواع البيانات في البيانات الوصفية مع أنواع البيانات في الترويسة. - إضافة إعداد جديدinput_format_json_validate_utf8، وعند تمكينه، ستتحقق جميع تنسيقاتJSONمن تسلسلات UTF-8. وسيكون معطّلاً افتراضياً. لاحظ أن هذا الإعداد لا يؤثر في تنسيقات الإخراجJSON/JSONCompact/JSONColumnsWithMetadata، إذ تتحقق هذه التنسيقات دائماً من تسلسلات UTF-8 (وقد أُجري هذا الاستثناء لأسباب تتعلق بالتوافق). - إضافة إعداد جديدinput_format_json_read_numbers_as_stringsيتيح تحليل الأرقام في عمود String، ويكون هذا الإعداد معطّلاً افتراضياً. - إضافة إعداد جديدoutput_format_json_quote_decimalsيتيح إخراج القيم العشرية بين علامتَي اقتباس مزدوجتين، وهو معطّل افتراضياً. - السماح بتحليل القيم العشرية بين علامتَي اقتباس مزدوجتين أثناء استيراد البيانات. #40910 (Kruglov Pavel). - دعم معلمات الاستعلام في استعلام DESCRIBE TABLE. #40952 (Nikita Taranov).
- إضافة دعم Parquet Time32/64 عبر تحويله إلى DateTime64. يمثّل Parquet time32/64 الوقت المنقضي منذ منتصف الليل، بينما يمثّل DateTime32/64 طابعاً زمنياً فعلياً من نوع Unix timestamp. ويجري التحويل ببساطة عبر الإزاحة من
0. #41333 (Arthur Passos). - تنفيذ عمليات المجموعات على Apache Datasketches. #39919 (Fangyuan Deng). ملاحظة: لا جدوى من استخدام Apache Datasketches، فهي أدنى من ClickHouse ولا يكون لها معنى إلا للتكامل مع أنظمة أخرى.
- السماح بتسجيل الأخطاء في ملف محدد أثناء قراءة التنسيقات النصية (
CSV,TSV). #40516 (zjial).
الميزة التجريبية
- إضافة فهرس ANN (أقرب جار تقريبي) يستند إلى
Annoy. #40818 (Filatenkov Artur). #37215 (VVMak). - إضافة محرك تخزين جديد
KeeperMapيستخدم ClickHouse Keeper أو ZooKeeper كمخزن مفتاح-قيمة. #39976 (Antonio Andelic). صُمم محرك التخزين هذا لتخزين كمية صغيرة من البيانات الوصفية. - تحسين لأجزاء البيانات الموجودة في الذاكرة: إزالة ملفات WAL التي تمت معالجتها بالكامل. #40592 (Azat Khuzhin).
تحسين الأداء
- تنفيذ ضغط العلامات والمفتاح الأساسي. إغلاق #34437. #37693 (zhongyuankai).
- السماح بتحميل العلامات مسبقًا باستخدام threadpool. يتحكم في ذلك الإعداد
load_marks_asynchronously(الافتراضي: 0). #40821 (Kseniia Sumarokova). - سيستخدم نظام الملفات الافتراضي فوق S3 أسماء كائنات عشوائية موزعة على عدة بادئات مسارات لتحسين الأداء على AWS. #40968 (Alexey Milovidov).
- أخذ قيمة
max_block_sizeفي الاعتبار عند إنتاج نتائج التجميع أحادي المستوى. يتيح ذلك تنفيذ خطوات خطة الاستعلام التالية باستخدام عدد أكبر من مؤشرات الترابط. #39138 (Nikita Taranov). - يُستخدم الجلب المسبق البرمجي في التجميع لتسريع العمليات على جداول التجزئة. ويتحكم في ذلك الإعداد
enable_software_prefetch_in_aggregation، وهو مفعّل افتراضيًا. #39304 (Nikita Taranov). - تحسين دعم
optimize_read_in_orderعندما تكون بعض أعمدة sorting key ثابتة دائمًا بعد تطبيق جملةWHERE. على سبيل المثال، استعلام مثلSELECT ... FROM table WHERE a = 'x' ORDER BY a, b، حيث يملكtableتعريف التخزين التالي:MergeTree ORDER BY (a, b). #38715 (Anton Popov). - ترشيح streams الموصولة في
full_sorting_joinبعضها ببعض قبل الفرز. #39418 (Vladimir C). - تحسين فك ضغط LZ4 عبر تخطي معالجة القيم الحرفية الفارغة. #40142 (Nikita Taranov).
- تسريع عملية النسخ الاحتياطي باستخدام
copyالأصلي عند الإمكان بدلًا من النسخ عبر ذاكرةclickhouse-server. #40395 (alesapin). - عدم الحصول على snapshot للتخزين لكل block من INSERT (مما يحسن الأداء قليلًا). #40638 (Azat Khuzhin).
- تنفيذ المعالجة الدفعية للدوال التجميعية ذات الوسائط Nullable المتعددة. #41058 (Raúl Marín).
- تسريع قراءة UniquesHashSet (مثل
uniqStateمن القرص، على سبيل المثال). #41089 (Raúl Marín). - إصلاح الارتفاع الكبير في استخدام الذاكرة أثناء تنفيذ mutations للأجزاء compact في الجداول التي تحتوي على عدد هائل من الأعمدة. #41122 (lthaooo).
- تمكين مكتبة vectorscan على ARM، مما يسرّع تقييم Regexp. #41033 (Robert Schulze).
- ترقية vectorscan إلى 5.4.8، التي تتضمن العديد من تحسينات الأداء لتسريع تقييم Regexp. #41270 (Robert Schulze).
- إصلاح fallback غير الصحيح الذي يؤدي إلى تخطي local filesystem cache في VFS (مثل S3)، والذي كان يحدث عند مستويات مرتفعة جدًا من التزامن. #40420 (Kseniia Sumarokova).
- إذا كان مرشح سياسة الصف دائمًا false، فأعِد نتيجة فارغة فورًا من دون قراءة أي بيانات. ويغلق هذا #24012. #40740 (Amos Bird).
- قد لا يكون Parallel hash JOIN لأنواع البيانات Float الخيار الأمثل. تحسينه. #41183 (Alexey Milovidov).
تحسين
- أثناء بدء التشغيل وعند استدعاء ATTACH، ستكون جداول
ReplicatedMergeTreeللقراءة فقط إلى أن يتم الاتصال بـ ZooKeeper ويكتمل الإعداد. #40148 (Antonio Andelic). - إضافة الخيار
enable_extended_results_for_datetime_functionsلإرجاع نتائج من النوع Date32 للدوال toStartOfYear و toStartOfISOYear و toStartOfQuarter و toStartOfMonth و toStartOfWeek و toMonday و toLastDayOfMonth عندما تكون الوسيطة من النوع Date32 أو DateTime64، وإلا فستُرجع نتائج من النوع Date. ولأسباب التوافق، تكون القيمة الافتراضية هي ‘0’. #41214 (Roman Vasin). - لأسباب تتعلق بالأمان والاستقرار، لم تعد نماذج CatBoost تُقيَّم داخل خادم ClickHouse. وبدلًا من ذلك، أصبح التقييم يُجرى الآن في clickhouse-library-bridge، وهي عملية منفصلة تُحمِّل مكتبة catboost وتتواصل مع عملية الخادم عبر HTTP. وقد استُبدلت الدالة
modelEvaluate()بـcatboostEvaluate(). #40897 (Robert Schulze). #39629 (Robert Schulze). - إضافة المزيد من المقاييس للبيانات المؤقتة المخزنة على القرص، وإغلاق #40206. #40239 (Vladimir C).
- إضافة خيار config
warning_supress_regexp، وإغلاق #40330. #40548 (Vladimir C). - إضافة إعداد لتعطيل الحد المفروض على kafka_num_consumers. إغلاق #40331. #40670 (Kruglov Pavel).
- دعم
SETTINGSفي استعلامDELETE .... #41533 (Kseniia Sumarokova). - إضافة أحداث profile تفصيلية لـ S3
DiskS3*، مقسّمة حسب كل استدعاء لـ API في S3 لـ S3 ObjectStorage. #41532 (Sergei Trifonov). - مقياسان جديدان في
system.asynchronous_metrics: NumberOfDetachedPartsوNumberOfDetachedByUserParts. #40779 (Sema Checherinda). - السماح باستخدام CONSTRAINTs مع جداول ODBC و JDBC. #34551 (Alexey Milovidov).
- عدم طباعة
SETTINGSأكثر من مرة أثناء تنسيق الاستعلام إذا لم يظهر أكثر من مرة في الاستعلام الأصلي. #38900 (Raúl Marín). - تحسين تمرير سياق tracing (OpenTelemetry) بين threads. #39010 (Frank Chen).
- ClickHouse Keeper: إضافة listeners لـ
interserver_listen_hostفي Keeper فقط إذا كان محددًا. #39973 (Antonio Andelic). - تحسين recovery لمخزن وصول المستخدم Replicated بعد الأخطاء. #39977 (Vitaly Baranov).
- إضافة دعم TTL إلى
EmbeddedRocksDB. #39986 (Lloyd-Pottiger). - إضافة استنتاج المخطط إلى
clickhouse-obfuscator، بحيث لم يعد الوسيط--structureمطلوبًا. #40120 (Nikolay Degterinsky). - تحسين القواميس وإصلاحها في تنسيق
Arrow. #40173 (Kruglov Pavel). - تحويل أكثر سلاسة من
Date32وDateTime64وDateإلى الأنواع الأضيق: تؤخذ القيمة الطبيعية العليا أو الدنيا في الاعتبار عند الخروج عن النطاق الطبيعي. #40217 (Andrey Zvonov). - إصلاح الحالة التي يتعذر فيها على جدول
Mergeالمبني علىViewاستخدام الفهرس. #40233 (Duc Canh Le). - أسماء مفاتيح مخصّصة لسجلات JSON الخاصة بالخادم. #40251 (Mallik Hassan).
- أصبح من الممكن الآن تعيين رمز خطأ مخصّص للاستثناء الذي تطرحه الدالة
throwIf. #40319 (Robert Schulze). - تحسين ذاكرة التخزين المؤقت لاستنتاج المخطط، مع مراعاة إعدادات التنسيق التي يمكن أن تغيّر المخطط. #40414 (Kruglov Pavel).
- السماح بتحليل
DateباعتبارهDateTimeوDateTime64. ينفّذ هذا التحسين المقترح في #36949. #40474 (Alexey Milovidov). - السماح بالتحويل من
StringمعDateTime64مثل2022-08-22 01:02:03.456إلىDateوDate32. كما يُسمح بالتحويل منStringمعDateTimeمثل2022-08-22 01:02:03إلىDate32. ويغلق هذا #39598. #40475 (Alexey Milovidov). - دعم أفضل لهياكل البيانات المتداخلة في تنسيق Parquet. #40485 (Arthur Passos).
- دعم قراءة Array(Record) إلى جدول Nested مسطّح في Avro. #40534 (Kruglov Pavel).
- إضافة دعم وضع القراءة فقط إلى
EmbeddedRocksDB. #40543 (Lloyd-Pottiger). - التحقق من صحة معامل أسلوب الضغط لمحرك الجدول URL. #40600 (Frank Chen).
- تحسين اكتشاف التنسيق لوظيفة/محرك الجدول URL عند وجود سلسلة استعلام بعد اسم ملف. ويغلق هذا #40315. #40636 (Kruglov Pavel).
- تعطيل الإسقاط عند استخدام مجموعة التجميع، إذ كان يولّد نتيجة خاطئة. ويصلح هذا #40635. #40726 (Amos Bird).
- إصلاح التنسيق غير الصحيح لمحوّل الأعمدة
APPLY، والذي قد يؤدي إلى إتلاف البيانات الوصفية إذا استُخدم في تعريف الجدول. يُصلح هذا #37590. #40727 (Amos Bird). - دعم الواصف
%zلتنسيق إزاحة المنطقة الزمنية فيformatDateTime. #40736 (Cory Levy). - أصبح الوضع التفاعلي في
clickhouse-clientيفسّر الآن.و/على أنهما “تشغيل الأمر الأخير”. #40750 (Robert Schulze). - إصلاح مشكلة في تمرير مهلات MySQL إلى محرك قاعدة بيانات MySQL ودالة جدول MySQL. يُغلق هذا #34168. #40751 (Kseniia Sumarokova).
- إنشاء ملف status لدليل filesystem cache للتأكد من عدم مشاركة أدلة cache بين خوادم أو caches مختلفة. #40820 (Kseniia Sumarokova).
- إضافة دعم
DELETEوUPDATEإلى التخزينEmbeddedRocksDB. #40853 (Antonio Andelic). - ClickHouse Keeper: إصلاح الإيقاف أثناء commit طويل وزيادة الحجم المسموح به للطلبات. #40941 (Antonio Andelic).
- إصلاح حالة تسابق في WriteBufferFromS3، وإضافة annotations الخاصة بـ TSA. #40950 (Kseniia Sumarokova).
- يجب أن تحوّل مجموعات التجميع مع group_by_use_nulls الأعمدة المفتاحية فقط إلى Nullable. #40997 (Duc Canh Le).
- تحسين قابلية الرصد لعمليات INSERT على distributed table. #41034 (Frank Chen).
- المزيد من المقاييس منخفضة المستوى للتفاعل مع S3. #41039 (mateng915).
- دعم المسار النسبي في ترويسة Location بعد إعادة توجيه HTTP. يُغلق هذا #40985. #41162 (Kruglov Pavel).
- تطبيق التغييرات على معالجات HTTP مباشرةً دون إعادة تشغيل الخادم. #41177 (Azat Khuzhin).
- ClickHouse Keeper: إغلاق الجلسات النشطة بشكل صحيح أثناء الإيقاف. #41215 (Antonio Andelic). يقلّل هذا من مدة أخطاء “الجدول للقراءة فقط”.
- إضافة إمكانية التعليق التلقائي على استعلامات SQL في clickhouse-client/local (باستخدام
Alt-#، كما في readline). #41224 (Azat Khuzhin). - إصلاح عدم توافق cache بعد تبديل الإعداد
do_no_evict_index_and_mark_filesمن 1 إلى 0 أو من 0 إلى 1. #41330 (Kseniia Sumarokova). - أُضيف الإعداد
allow_suspicious_fixed_string_typesلمنع المستخدمين من إنشاء أعمدة من النوع FixedString بحجم يزيد على 256. #41495 (Duc Canh Le). - أُضيف
has_lightweight_deleteإلى system.parts. #41564 (Kseniia Sumarokova).
تحسينات في البناء والاختبار والتحزيم
- فرض توثيق لكل إعداد. #40644 (Alexey Milovidov).
- فرض توثيق لكل مقياس حالي. #40645 (Alexey Milovidov).
- فرض توثيق لكل عدّاد أحداث profile، وكتابة التوثيق حيثما كان مفقودًا. #40646 (Alexey Milovidov).
- إتاحة إنشاء بنية مصغّرة من
clickhouse-localعبر تصحيح بعض الاعتماديات. #40460 (Alexey Milovidov). ويبلغ حجمها أقل من 50 MiB. - حساب تغطية دوال SQL في الاختبارات والإبلاغ عنها. #40593. #40647 (Alexey Milovidov).
- فرض توثيق لكل إعداد من إعدادات MergeTree. #40648 (Alexey Milovidov).
- نموذج أولي لتوثيق مرجعي مضمّن لمكوّنات الخادم عالية المستوى والموحّدة. #40649 (Alexey Milovidov).
- سنتحقق من جميع الاستعلامات في اختبارات الأداء المعدّلة لضمان اختبار جميع الاستعلامات التي تغيّرت. #40322 (Nikita Taranov).
- إصلاح حزم TGZ. #40681 (Mikhail f. Shiryaev).
- إصلاح رموز التنقيح. #40873 (Azat Khuzhin).
- توسيع إعدادات CI لإنشاء بنية x86 تدعم SSE2 فقط. وهذا مفيد للأجهزة القديمة أو المضمّنة. #40999 (Robert Schulze).
- التحويل إلى llvm/clang 15. #41046 (Azat Khuzhin).
- استكمال لـ #40938. إصلاح انتهاك ODR للفئة
Loggers. ويعالج #40398، #40937. #41060 (Dmitry Novik). - إضافة الملفات التنفيذية الخاصة بـ macOS إلى أصول إصدار GitHub، ما يُصلح #37718. #41088 (Mikhail f. Shiryaev).
- أصبحت مكتبة c-ares الآن مضمّنة في نظام بناء ClickHouse. #41239 (Robert Schulze).
- التخلّص من
dlopenفي الشيفرة الرئيسية لـ ClickHouse. ولا يزال موجودًا في library-bridge و odbc-bridge. #41428 (Alexey Milovidov). - عدم السماح باستخدام
dlopenفي الملف التنفيذي الرئيسي لـ ClickHouse، لأنه مضر وغير آمن. نحن لا نستخدمه. لكن قد تستخدمه بعض المكتبات لتنفيذ “الإضافات”. ونحن نثني بشدة عن الأسلوب القديم المتمثل في تحميل مكتبات خطِرة وغير خاضعة للرقابة من جهات خارجية إلى مساحة عناوين العملية، لأن ذلك تصرّف غير معقول. #41429 (Alexey Milovidov). - إضافة الحقل
sourceإلى حزم deb، وتحديثnfpm. #41531 (Mikhail f. Shiryaev). - دعم DWARF-5 في محلل DWARF الداخلي. #40710 (Azat Khuzhin).
- إضافة حقن الأعطال إلى عميل ZooKeeper لأغراض الاختبار #30498 (Alexander Tokmakov).
- إضافة اختبارات عديمة الحالة مع تخزين S3 باستخدام debug و tsan #35262 (Kseniia Sumarokova).
- تجربة اختبارات الضغط على S3 #36837 (alesapin).
- تفعيل
concurrency-mt-unsafeفيclang-tidy#40224 (Alexey Milovidov).
إصلاح الأخطاء
- إصلاح احتمال فقدان البيانات بسبب خلل في AWS SDK. لا يظهر هذا الخلل إلا عند استخدام ClickHouse عبر S3. #40506 (alesapin). ظل هذا الخلل مفتوحًا لمدة 5 سنوات في AWS SDK، وأُغلق بعد بلاغنا.
- قد تتسبب البيانات الخبيثة بتنسيق Native في حدوث تعطل. #41441 (Alexey Milovidov).
- كانت خصائص الدالة التجميعية
categorialInformationValueمعرّفة على نحو غير صحيح، ما قد يؤدي إلى فكّ إشارة مؤشر فارغ وقت التشغيل. ويغلق هذا #41443. #41449 (Alexey Milovidov). - قد تؤدي كتابة البيانات بتنسيق Apache
ORCإلى تجاوز سعة المخزن المؤقت. #41458 (Alexey Milovidov). - إصلاح مشكلات سلامة الذاكرة في الدالتين
encryptوcontingencyعند استخدامArrayمنNullableكوسيطة. ويصلح هذا #41004. #40195 (Alexey Milovidov). - إصلاح أخطاء في MergeJoin عندما لا تكون ‘not_processed’ بقيمة NULL. #40335 (liql2007).
- إصلاح النتائج غير الصحيحة في حالة فقدان الدقة العشرية في المعامل IN، راجع #41125. #41130 (Vladimir C).
- إصلاح ملء أعمدة
Nestedالمفقودة ذات المستويات المتعددة. #37152 (Anton Popov). - إصلاح الاستعلام SYSTEM UNFREEZE لقاعدة البيانات Ordinary (Deprecated). إصلاح لـ https://github.com/ClickHouse/ClickHouse/pull/36424. #38262 (Vadim Volodin).
- إصلاح الأعمدة المجهولة غير المستخدمة التي أدخلتها عبارة WITH. ويصلح هذا #37812 . #39131 (Amos Bird).
- إصلاح تحليل الاستعلام لعبارة ORDER BY عند وجود دوال النوافذ. يصلح #38741 ويصلح #24892. #39354 (Dmitry Novik).
- إصلاح استثناء
Unknown identifier (aggregate-function)الذي يظهر عندما يحاول المستخدم حساب تعبيرات WINDOW ORDER BY/PARTITION BY على الدوال التجميعية. #39762 (Vladimir Chebotaryov). - تقييد عدد مرات التحليل للاستعلام الواحد باستخدام الإعداد
max_analyze_depth. يمنع ذلك التضخم الأسي في وقت التحليل للاستعلامات التي تحتوي على عدد هائل من الاستعلامات الفرعية. #40334 (Vladimir C). - إصلاح خلل نادر في TTL الأعمدة لعائلة محركات MergeTree: في حال تكرار vertical merge، قد يظهر الخطأ
Cannot unlink file ColumnName.bin ... No such file or directory.. #40346 (alesapin). - استخدم سجلات DNS لكلٍّ من IPv4 وIPv6 إذا كانت موجودة. #40353 (Maksim Kita).
- السماح بقراءة الملفات المضغوطة بـ snappy من Hadoop. #40482 (Kruglov Pavel).
- إصلاح تعطل أثناء تحليل قيم من النوع
Object(ميزة تجريبية) تحتوي على مصفوفات ذات أبعاد متغيرة. #40483 (Duc Canh Le). - إصلاح الإعداد
input_format_tsv_skip_first_lines. #40491 (mini4). - إصلاح خطأ (حالة سباق) عند بدء تشغيل محرك قاعدة البيانات/الجدول MaterializedPostgreSQL. #40262. وإصلاح خطأ عند بلوغ الحد الأقصى لفتحات relcache_callback_list. #40511 (Maksim Buren).
- إصلاح الخطأ المحتمل ‘Decimal math overflow’ أثناء تحليل DateTime64. #40546 (Kruglov Pavel).
- إصلاح الدمج العمودي للأجزاء التي تحتوي على صفوف محذوفة بحذف خفيف. #40559 (Alexander Gololobov).
- إصلاح خطأ segmentation fault عند كتابة البيانات إلى محرك الجدول URL إذا كان الضغط مفعّلًا. #40565 (Frank Chen).
- إصلاح الخطأ المنطقي المحتمل
'Invalid Field get from type UInt64 to type String'في الدالة arrayElement مع Map. #40572 (Kruglov Pavel). - إصلاح حالة سباق محتملة في filesystem cache. #40586 (Kseniia Sumarokova).
- إزالة تخطي الـ mutations في الأقسام غير المتأثرة من جداول
MergeTree، لأن هذه الميزة لم تعمل قط بشكل صحيح وقد تتسبب في إحياء mutations المكتملة من جديد. #40589 (Alexander Tokmakov). - سيتعطل خادم ClickHouse إذا أضفنا أثناء وقت التشغيل منفذ GRPC مشغولًا بالفعل إلى الإعداد. #40597 (何李夫).
- إصلاح تعامل
base58Encode / base58Decodeمع الصفر البادئ / ‘1’. #40620 (Andrey Zvonov). - keeper-fix: إصلاح حالة سباق عند الوصول إلى السجلات أثناء تثبيت snapshot. #40627 (Antonio Andelic).
- إصلاح التنفيذ قصير المسار للدالة toFixedString. يحلّ هذا (جزئيًا) #40622. #40628 (Kruglov Pavel).
- إصلاح تحويل عمود SQLite من int8 إلى عمود int64 في ClickHouse. يعالج #40639. #40642 (Barum Rho).
- إصلاح تجاوز سعة المكدس في جداول
Bufferالتكرارية. هذا يغلق #40637. #40643 (Alexey Milovidov). - أثناء إدراج استعلام جديد في
ProcessListتحدث عمليات تخصيص للذاكرة. وإذا وصلنا إلى حد الذاكرة أثناء هذه العمليات، فلا يمكن استخدامOvercommitTrackerلأنProcessList::mutexيكون قد تم الاستحواذ عليه بالفعل. يُصلح #40611. #40677 (Dmitry Novik). - إصلاح LOGICAL_ERROR مع max_read_buffer_size=0 أثناء قراءة marks. #40705 (Azat Khuzhin).
- إصلاح تسرّب للذاكرة أثناء الدفع إلى MVs بدون سياق استعلام (من Kafka/…). #40732 (Azat Khuzhin).
- إصلاح الخطأ المحتمل Attempt to read after eof أثناء schema inference في CSV. #40746 (Kruglov Pavel).
- إصلاح خطأ منطقي في write-through cache: “File segment completion can be done only by downloader”. يُغلق #40748. #40759 (Kseniia Sumarokova).
- جعل نتيجة الدالة GROUPING مطابقة لما هي عليه في SQL وأنظمة إدارة قواعد البيانات الأخرى. #40762 (Dmitry Novik).
- في #40595، تم الإبلاغ عن أن وظيفة
host_regexpلم تكن تعمل بشكل صحيح مع تحليل الاسم إلى عنوان في/etc/hosts. وقد تم إصلاح ذلك. #40769 (Arthur Passos). - إصلاح النسخ الاحتياطية التزايدية لعائلة Log. #40827 (Vitaly Baranov).
- إصلاح خلل نادر للغاية قد يؤدي إلى فقدان محتمل للبيانات في zero-copy replication. #40844 (alesapin).
- إصلاح أعطال تحليل شرط المفتاح عند إنشاء تعبير set نفسه من عمود أو أعمدة مختلفة. #40850 (Duc Canh Le).
- إصلاح schema inference لكائنات JSON المتداخلة. #40851 (Kruglov Pavel).
- إصلاح عدم حذف الدليل ذي البادئة المكوّنة من 3 أرقام لملفات filesystem cache إذا كان فارغًا. يُغلق #40797. #40867 (Kseniia Sumarokova).
- إصلاح DNS_ERROR غير المُعالَج عند فشل الاتصال بالنسخ المتماثلة. #40881 (Robert Coelho).
- إصلاح خلل عند إزالة الأعمدة غير اللازمة في استعلام فرعي. #40884 (luocongkai).
- إصلاح تخصيص إضافي للذاكرة لمخازن القراءة المؤقتة البعيدة. #40896 (Kseniia Sumarokova).
- تم إصلاح سلوك كان يسمح لمستخدم سُحبت منه صلاحية حذف قواعد البيانات صراحةً بأن يظل قادرًا على حذفها. #40906 (Nikita Mikhaylov).
- إصلاح لـ ClickHouse Keeper: مقارنة المسارات بشكل صحيح في write requests مع مسارات عُقد النظام الداخلية في Keeper. #40918 (Antonio Andelic).
- إصلاح حالة deadlock في WriteBufferFromS3. #40943 (Kseniia Sumarokova).
- إصلاح access rights لـ
DESCRIBE TABLE url()وبعض حالاتDESCRIBE TABLE <table_function>()الأخرى. #40975 (Vitaly Baranov). - إزالة منطق parser خاطئ لـ
WITH GROUPING SETSقد يؤدي إلى dereference لمؤشر nullptr. #41049 (Duc Canh Le). - إصلاح لـ ClickHouse Keeper: إصلاح segfault محتمل أثناء إيقاف Keeper. #41075 (Antonio Andelic).
- إصلاح حالات segfault محتملة، واستخدام الذاكرة بعد تحريرها، وتسرّب الذاكرة في aggregate function combinators. يُغلق #40848. #41083 (Kruglov Pavel).
- إصلاح query_views_log مع Window views. #41132 (Raúl Marín).
- تعطيل optimize_monotonous_functions_in_order_by افتراضيًا، للتخفيف من: #40094. #41136 (Denny Crane).
- إصلاح الخطأ “possible deadlock avoided” عند التحويل التلقائي لـ database engine من Ordinary إلى Atomic. #41146 (Alexander Tokmakov).
- إصلاح SIGSEGV في SortedBlocksWriter عند وجود block فارغة (وقد يحدث ذلك مع
optimize_aggregation_in_orderوjoin_algorithm=auto). #41154 (Azat Khuzhin). - إصلاح نتيجة query غير صحيحة عندما يكون تحسين العدّ البسيط مفعّلًا مع ARRAY JOIN. هذا يصلح #39431. #41158 (Denny Crane).
- إصلاح stack-use-after-return في GetPriorityForLoadBalancing::getPriorityFunc(). #41159 (Azat Khuzhin).
- إصلاح استثناء positional arguments Positional argument out of bounds. يُغلق #40634. #41189 (Kseniia Sumarokova).
- إصلاح التنظيف في الخلفية لـ broken detached parts. #41190 (Kseniia Sumarokova).
- إصلاح query rewrite الأسي في حالة وجود عدد كبير من CROSS JOIN مع where، وإغلاق #21557. #41223 (Vladimir C).
- إصلاح خطأ منطقي محتمل في
write-through cache، وكان يحدث لأن بعض أنواع الاستثناءات لم تكن تُعالَج كما ينبغي. يغلق #41208. #41232 (Kseniia Sumarokova). - إصلاح Log entry من نوع String في
system.filesystem_cache_log. #41233 (jmimbrero). - قد تُرجِع الاستعلامات التي تتضمن عبارة
OFFSETفي استعلام فرعي وعبارةWHEREفي الاستعلام الخارجي نتائج غير صحيحة، وقد تم إصلاح ذلك. يُصلح #40416. #41280 (Alexander Tokmakov). - إصلاح احتمال إرجاع نتيجة استعلام غير صحيحة عند تمكين
query_plan_optimize_primary_key. يُصلح #40599. #41281 (Nikolai Kochetov). - منع التسلسلات غير الصالحة من التأثير في الصفوف الأخرى في
lowerUTF8/upperUTF8. #41286 (Azat Khuzhin). - إصلاح استعلامات
ALTER <table> ADD COLUMNمع الأعمدة من النوعObject. #41290 (Anton Popov). - إصلاح الخطأ “No node” عند التحديد من
system.distributed_ddl_queueفي حال عدم وجودdistributed_ddl.pathفي config. يُصلح #41096. #41296 (young scott). - إصلاح الخطأ المنطقي غير الصحيح
Expected relative pathفي disk object storage. ذو صلة بـ #41246. #41297 (Kseniia Sumarokova). - إضافة تحقّق من نوع العمود قبل إدراج UUID بتنسيق MsgPack. #41309 (Kruglov Pavel).
- إصلاح تعطل محتمل بعد الإدراج غير المتزامن (مع تمكين الإعداد
async_insert) لبيانات غير سليمة إلى أعمدة من النوعObject. وكان يمكن أن يحدث ذلك إذا كانت ملفات JSON في جميع دفعات async inserts غير صالحة وتعذّر parse لها. #41336 (Anton Popov). - إصلاح حالة توقف متبادل محتملة مع
async_socket_for_remote/use_hedged_requestsوKILLالمتوازي. #41343 (Azat Khuzhin). - تعطيل
optimize_rewrite_sum_if_to_count_ifافتراضيًا للتخفيف من: #38605 #38683. #41388 (Denny Crane). - منذ الإصدار 22.8، يتم تجاهل العبارة
ON CLUSTERإذا كانت قاعدة البيانات من نوعReplicatedوكان اسم العنقود واسم قاعدة البيانات متطابقين. وبسبب ذلك، كانتDROP PARTITION ON CLUSTERتعمل بطريقة غير متوقعة معReplicated. وقد أُصلح هذا الأمر، وأصبحت العبارةON CLUSTERالآن تُتجاهل فقط للاستعلامات التي يجري تكرارها على مستوى قاعدة البيانات. يُصلح #41299. #41390 (Alexander Tokmakov). - إصلاح احتمال حدوث تعليق أو توقف متبادل عند إلغاء الاستعلام (
KILL QUERYأو إيقاف الخادم). #41467 (Azat Khuzhin). - إصلاح احتمال تعطل الخادم عند استخدام ميزة JBOD. وهذا يُصلح #41365. #41483 (Amos Bird).
- إصلاح التحويل من fixed string قابل للقيم NULL إلى string. #41541 (Duc Canh Le).
- منع التعطل عند تمرير حالات aggregation غير صحيحة إلى groupBitmap*. #41563 (Raúl Marín).
- كان يمكن أن تُرجع الاستعلامات التي تحتوي على
ORDER BYو1500 <= LIMIT <= max_block_sizeنتائج غير صحيحة مع فقدان بعض الصفوف من البداية. يُصلح #41182. #41576 (Nikolai Kochetov). - إصلاح عدد البايتات/الصفوف المقروءة في X-ClickHouse-Summary مع العروض المادية. #41586 (Raúl Marín).
- إصلاح احتمال ظهور استثناء
pipeline stuckفي الاستعلامات التي تحتوي علىOFFSET. تم العثور على الخطأ عند استخدامenable_optimize_predicate_expression = 0مع شرط يكون false دائمًا فيWHERE. يُصلح #41383. #41588 (Nikolai Kochetov).
إصدار ClickHouse 22.8، بتاريخ 2022-08-18. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- وُسِّع نطاق
Date32وDateTime64لدعم التواريخ من عام 1900 إلى 2299. في الإصدارات السابقة، كان النطاق المدعوم يقتصر على الفترة من عام 1925 إلى 2283 فقط. يعتمد التنفيذ على التقويم الغريغوري الممتد (المتوافق مع ISO 8601:2004 (البند 3.2.1: التقويم الغريغوري)) بدلًا من مراعاة التحولات التاريخية من التقويم اليولياني إلى التقويم الغريغوري. يؤثر هذا التغيير في السلوك المرتبط بالتنفيذ للوسائط الخارجة عن النطاق. على سبيل المثال، إذا كانت القيمة1899-01-01في الإصدارات السابقة تُثبَّت عند1925-01-01، ففي الإصدار الجديد ستُثبَّت عند1900-01-01. كما يغيّر سلوك التقريب باستخدامtoStartOfIntervalعند تمريرINTERVAL 3 QUARTERبمقدار قد يصل إلى ربع سنة واحد، لأن الفواصل الزمنية تُحتسب انطلاقًا من نقطة زمنية خاصة بالتنفيذ. يغلق #28216، ويحسّن #38393. #39425 (Roman Vasin). - الآن، تراعي جميع مصادر القواميس ذات الصلة الإعداد
remote_url_allow_hosts. وكان ذلك مطبقًا بالفعل على HTTP وCassandra وRedis. وأُضيف الآن ClickHouse وMongoDB وMySQL وPostgreSQL. ولا يُتحقق من المضيف إلا للقواميس المُنشأة من DDL. #39184 (Nikolai Kochetov). - تتطلب الآن ثنائيات ClickHouse الجاهزة مسبقًا لمعمارية x86 دعم تعليمات AVX، أي معالج CPU ليس أقدم من Intel Sandy Bridge / AMD Bulldozer، وكلاهما صدر في عام 2011. #39000 (Robert Schulze).
- جُعلت ذاكرة التخزين المؤقت لنظام الملفات البعيد قابلة للتركيب، مع السماح بالاحتفاظ ببعض الملفات دون إخلائها (مثل idx وmrk و..)، وحذف الإصدار القديم من ذاكرة التخزين المؤقت. وأصبح من الممكن الآن تهيئة ذاكرة تخزين مؤقت فوق قرص Azure blob storage، أو فوق قرص محلي، أو فوق قرص StaticWeb، وغير ذلك. وصُنّف هذا PR بأنه غير متوافق مع الإصدارات السابقة لأن تهيئة ذاكرة التخزين المؤقت تغيّرت، ولا بد من تحديث ملف الإعدادات لكي تعمل. وستظل ذاكرة التخزين المؤقت القديمة مستخدمة مع التهيئة الجديدة. كما سيبدأ الخادم بصورة سليمة باستخدام تهيئة ذاكرة التخزين المؤقت القديمة. يغلق https://github.com/ClickHouse/ClickHouse/issues/36140. يغلق https://github.com/ClickHouse/ClickHouse/issues/37889. (Kseniia Sumarokova). #36171)
ميزة جديدة
- دعم صياغة SQL القياسية
DELETE FROMعلى جداول MergeTree، وتنفيذ الحذف خفيف الوزن لعائلة MergeTree. #37893 (Jianmei Zhang) (Alexander Gololobov). ملاحظة: هذه الميزة الجديدة لا تجعل ClickHouse نظام HTAP DBMS. - يمكن تعيين معاملات الاستعلام في الوضع التفاعلي بصيغة
SET param_abc = 'def'ونقلها عبر البروتوكول الأصلي على هيئة إعدادات. #39906 (Nikita Taranov). - يمكن تعيين مفتاح الحصة عبر البروتوكول الأصلي (Yakov Olkhovsky).
- أُضيف الإعداد
exact_rows_before_limit(0/1). عند تمكينه، سيوفّر ClickHouse قيمة دقيقة للإحصائيةrows_before_limit_at_least، لكن مقابل الحاجة إلى قراءة البيانات السابقة للحد بالكامل. هذا يُغلق #6613. #25333 (kevin wan). - أُضيف دعم لعمليات insert select الموزعة والمتوازية باستخدام table function
s3Clusterإلى الجداول التي تستخدم المحركينDistributedوReplicated#34670. #39107 (Nikita Mikhaylov). - أُضيفت إعدادات جديدة للتحكم في استنتاج المخطط من التنسيقات النصية: -
input_format_try_infer_dates- محاولة استنتاج التواريخ من السلاسل النصية. -input_format_try_infer_datetimes- محاولة استنتاج قيم DateTime من السلاسل النصية. -input_format_try_infer_integers- محاولة استنتاجInt64بدلًا منFloat64. -input_format_json_try_infer_numbers_from_strings- محاولة استنتاج الأرقام من سلاسل JSON النصية في JSON formats. #39186 (Kruglov Pavel). - خيار لتوفير مخرجات السجل بتنسيق JSON. والغرض منه تسهيل إدخال البيانات والاستعلام عنها في أدوات تحليل السجلات. #39277 (Mallik Hassan).
- أُضيفت الدالة
nowInBlockالتي تتيح الحصول على الوقت الحالي أثناء الاستعلامات الطويلة والمستمرة. يُغلق هذا #39522. ملاحظات: لا توجد دالتاnow64InBlockوtodayInBlock. #39533 (Alexey Milovidov). - أُضيفت إمكانية تحديد الإعدادات لـ table function
executable(). #39681 (Constantine Peresypkin). - نُفِّذ التحويل التلقائي لمحرك قاعدة البيانات من
OrdinaryإلىAtomic. أنشئ ملفًا فارغًا باسمconvert_ordinary_to_atomicفي الدليلflags، وستُحوَّل جميع قواعد بياناتOrdinaryتلقائيًا عند بدء تشغيل الخادم في المرة التالية. يحل هذا #39546. #39933 (Alexander Tokmakov). - دعم
SELECT ... INTO OUTFILE '...' AND STDOUT. #37490. #39054 (SmitaRKulkarni). - أُضيفت التنسيقات
PrettyMonoBlock,PrettyNoEscapesMonoBlock,PrettyCompactNoEscapes,PrettyCompactNoEscapesMonoBlock,PrettySpaceNoEscapes,PrettySpaceMonoBlock,PrettySpaceNoEscapesMonoBlock. #39646 (Kruglov Pavel).
تحسين الأداء
- تحسين استهلاك الذاكرة أثناء الدمج الموفّر للذاكرة لنتائج التجميع. #39429 (Nikita Taranov).
- أُضيف منطق للتحكم في التزامن للحد من العدد الإجمالي لخيوط التنفيذ المتزامنة التي تنشئها الاستعلامات. #37558 (Sergei Trifonov). أُضيف المعامل
concurrent_threads_soft_limit parameterلزيادة الأداء عند ارتفاع QPS من خلال تقييد العدد الإجمالي لخيوط التنفيذ لجميع الاستعلامات. #37285 (Roman Vasin). - أُضيفت سياسة cache
SLRUإلى uncompressed cache وmarks cache. (Kseniia Sumarokova). #34651 (alexX512). فُصلت وظيفة cache المحلية عن خوارزمية cache #38048 (Han Shukai). - Intel® In-Memory Analytics Accelerator (Intel® IAA) هو مسرّع عتادي متاح في الجيل القادم من معالجات Intel® Xeon® Scalable (“Sapphire Rapids”). يهدف إلى تسريع العمليات الشائعة في analytics، مثل ضغط البيانات وفك ضغطها والتصفية. حصل ClickHouse على compression codec جديد باسم “DeflateQpl” يستخدم تقنية الإسناد إلى Intel® IAA لتوفير تنفيذ DEFLATE عالي الأداء. ويستخدم هذا codec مكتبة Intel® Query Processing Library (QPL) التي تجرّد الوصول إلى المسرّع العتادي، أو إلى بديل برمجي عند عدم توفر المسرّع العتادي. ويوفر DEFLATE عموماً معدلات ضغط أعلى من codec LZ4 الافتراضي في ClickHouse، ونتيجة لذلك يقلل disk I/O واستهلاك الذاكرة الرئيسية. #36654 (jasperzhu). #39494 (Robert Schulze).
DISTINCTمعORDER BY: استنتاج طريقة الفرز استناداً إلى وصف فرز stream الإدخال. تخطَّ الفرز إذا كان stream الإدخال مفروزاً بالفعل. #38719 (Igor Nikonov). تحسين استهلاك الذاكرة (بشكل ملحوظ) ووقت تنفيذ الاستعلام + استخدامDistinctSortedChunkTransformلإجراء distinct النهائي عندما تتطابق أعمدةDISTINCTمع أعمدةORDER BY، مع إعادة تسميته إلىDistinctSortedStreamTransformفيEXPLAIN PIPELINE→ ما يحسّن استهلاك الذاكرة بشكل كبير + إزالة allocations غير الضرورية في الحلقة الساخنة فيDistinctSortedChunkTransform. #39432 (Igor Nikonov). استخدامDistinctSortedTransformفقط عندما يكون وصف الفرز قابلاً للتطبيق على أعمدةDISTINCT، وإلا فارجع إلى تنفيذDISTINCTالعادي + ما يتيح إجراء عدد أقل من checks أثناء تنفيذDistinctSortedTransform. #39528 (Igor Nikonov). إصلاح: لم يكنDistinctSortedTransformيستفيد من الفرز. ولم يكن يمسحHashSetأبداً لأنclearing_columnsكُشف عنها بشكل غير صحيح (فارغة دائماً). لذلك كان يعمل عملياً مثلDISTINCTالعادي (DistinctTransform). ويقلل هذا الإصلاح استهلاك الذاكرة بشكل كبير. #39538 (Igor Nikonov).- استخدام العقدة المحلية كأولوية أولى للحصول على structure الجدول البعيد عند تنفيذ
clusterوtable functions المماثلة. #39440 (Mingliang Pan). - تحسين التصفية حسب الأعمدة الرقمية باستخدام AVX512VBMI2 compress store. #39633 (Guo Wangyang). بالنسبة للأنظمة التي تدعم AVX512 VBMI2، يحسّن هذا PR الأداء بنحو 6% لاستعلامات اختبار الأداء SSB 3.1 و3.2 و3.3 (SF=100). اختُبر على Intel Icelake Xeon 8380 * 2 socket. #40033 (Robert Schulze).
- تحسين تحليل الفهارس باستخدام التعبيرات الدالية في سيناريو متعدد الخيوط. #39812 (Guo Wangyang).
- تحسينات للاستعلامات المعقدة: عدم زيارة AST الخاصة بـ UDFs إذا لم يكن أيٌّ منها مسجّلًا. #40069 (Raúl Marín). تحسين عمليات alloc وfree في CurrentMemoryTracker. #40078 (Raúl Marín).
- تحسين ترميز/فك ترميز Base58. #39292 (Andrey Zvonov).
- تحسين تحويل قناع bytes إلى bits لـ SSE/AVX/AVX512. #39586 (Guo Wangyang).
تحسين
- طَبِّع أنواع
AggregateFunctionوتمثيلات الحالة، لأن تحسينات مثل #35788 ستتعامل معcount(not null columns)على أنهcount()، ما قد يربك Interpreters الموزعة ويؤدي إلى الخطأ التالي:Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported. #39420 (Amos Bird). ويمكن استخدام الدوال ذات الحالات المتطابقة بالتبادل في materialized views. - أُعيدت هيكلة جدول
system.backupsوتبسيطه، مع إزالة العمودinternal، وإتاحة تعيين معرّف العملية للمستخدم، وإضافة الأعمدةnum_filesوuncompressed_sizeوcompressed_sizeوstart_timeوend_time. #39503 (Vitaly Baranov). - تحسين بنية result table الخاصة بـ DDL query لقاعدة البيانات
Replicated(فصل الأعمدة الخاصة باسم shard واسم replica، وتوضيح الحالة بشكل أفضل) - يمكن أولًا تطبيع استعلاماتCREATE TABLE ... ON CLUSTERعلى initiator إذا كانتdistributed_ddl_entry_format_versionمضبوطة على 3 (default value). وهذا يعني أن استعلاماتON CLUSTERقد لا تعمل إذا كان initiator لا ينتمي إلى cluster المحدد في الاستعلام. إصلاح #37318، #39500 - تجاهل عبارةON CLUSTERإذا كانت قاعدة البياناتReplicatedوكان اسم cluster مساويًا لاسم قاعدة البيانات. ذو صلة بـ #35570 - إصلاحات طفيفة متنوعة لمحرك قاعدة البياناتReplicated- التحقق من اتساق metadata عند بدء تشغيل قاعدة البياناتReplicated، وبدء recovery للـ replica عند عدم تطابق metadata المحلية مع metadata الموجودة في Keeper. يحل #24880. #37198 (Alexander Tokmakov). - إضافة result_rows وresult_bytes إلى تقارير التقدّم (
X-ClickHouse-Summary). #39567 (Raúl Marín). - تحسين تحليل primary key في MergeTree. #25563 (Nikolai Kochetov).
- أصبحت
timeSlotsتعمل الآن مع DateTime64؛ كما أصبح كل من المدة دون الثانية وحجم الفتحة الزمنية متاحين عند العمل مع DateTime64. #37951 (Andrey Zvonov). - إضافة دعم
LEFT SEMIوLEFT ANTIلـ direct join مع جداولEmbeddedRocksDB. #38956 (Vladimir C). - إضافة profile events لعمليات fsync. #39179 (Azat Khuzhin).
- إضافة الوسيط الثاني إلى الدالة العادية
file(path[, default])، وهو القيمة التي تُرجعها الدالة إذا لم يكن الملف موجودًا. #39218 (Nikolay Degterinsky). - بعض الإصلاحات الصغيرة للقراءة عبر http، مع السماح بإعادة محاولة المحتوى الجزئي في حالة 200 OK. #39244 (Kseniia Sumarokova).
- دعم الاستعلامات
CREATE TEMPORARY TABLE ... (<list of columns>) AS .... #39462 (Kruglov Pavel). - إضافة دعم
!/*(علامة التعجب/النجمة) في نطاقات TLD المخصصة (cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom()). #39496 (Azat Khuzhin). - إضافة دعم اتصالات TLS مع NATS. ينفّذ #39525. #39527 (Constantine Peresypkin).
- أصبح
clickhouse-obfuscator(أداة لتعمية قاعدة البيانات لأغراض الاختبار وتوليد الحمل) يدعم الآن المعلَمين الجديدين--saveو--loadللعمل مع النماذج المدرَّبة مسبقًا. يغلق هذا #39534. #39541 (Alexey Milovidov). - إصلاح السلوك غير الصحيح لتدوير السجلات أثناء إعادة التشغيل. #39558 (Nikolay Degterinsky).
- إصلاح إنشاء projections التجميعية عند تفعيل external aggregation. وجرى تصنيف ذلك كتحسين لأن هذه الحالة نادرة ويوجد حل بديل سهل لها عبر تغيير الإعدادات. يصلح هذا #39667 . #39671 (Amos Bird).
- السماح بتنفيذ دوال hash باستخدام معاملات من النوع
Map. #39685 (Anton Popov). - إضافة معلمة configuration لإخفاء العناوين في stack traces. قد يحسّن ذلك الأمان قليلًا، لكنه عمومًا مضرّ ولا ينبغي استخدامه. #39690 (Alexey Milovidov).
- تغيير حجم البادئة لـ AggregateFunctionDistinct لضمان محاذاة مقطع ذاكرة بيانات الدالة المتداخلة. #39696 (Pxl).
- إجراء escape بشكل صحيح لبيانات الاعتماد الممرّرة إلى أداة
clickhouse-diagnostic. #39707 (Dale McDiarmid). - تحسين ClickHouse Keeper: إنشاء snapshot عند الخروج. يمكن التحكم في ذلك باستخدام config
keeper_server.create_snapshot_on_exit، والقيمة الافتراضية هيtrue. #39755 (Antonio Andelic). - دعم تحليل primary key لكل من
row_policy_filterوadditional_filter. ويساعد ذلك أيضًا في إصلاح مشكلات مثل #37454 . #39826 (Amos Bird). - إصلاح مشكلتين في سهولة الاستخدام في Play UI: - لم تكن الواجهة متقنة على مستوى البكسل على iPad بسبب نصف قطر حدود وهوامش غير مرغوب فيها؛ - ولم يكن مؤشر التقدم يظهر بعد أول query. يغلق هذا #39957. ويغلق هذا #39960. #39961 (Alexey Milovidov).
- Play UI: إضافة أرقام الصفوف؛ وإضافة تحديد الخلايا عند النقر؛ وإضافة hysteresis لخلايا الجدول. #39962 (Alexey Milovidov).
- Play UI: التعرّف على مفتاح tab في textarea، ولكن دون الإخلال في الوقت نفسه بالتنقل باستخدام tab. #40053 (Alexey Milovidov).
- سيعرض العميل الوقت المنقضي من جهة الخادم. وهذا مهم لمقارنة أداء خدمات ClickHouse في مراكز البيانات البعيدة. وبذلك يُغلق #38070. راجع أيضًا هذا للاطلاع على الدافع. #39968 (Alexey Milovidov).
- إضافة الدوال
parseDateTime64BestEffortUSوparseDateTime64BestEffortUSOrNullوparseDateTime64BestEffortUSOrZero، مع إغلاق #37492. #40015 (Tanya Bragin). - توسيع
system.processors_profile_logبمزيد من المعلومات، مثل صفوف الإدخال. #40121 (Amos Bird). - عرض الوقت من جهة الخادم في
clickhouse-benchmarkافتراضيًا إذا كان متاحًا (بدءًا من إصدار ClickHouse 22.8). وهذا ضروري لمقارنة أداء البيئات السحابية بشكل صحيح. ويمكن تغيير هذا السلوك باستخدام خيار سطر الأوامر الجديد--client-side-time. كما تغيّر خيار سطر الأوامر--randomizeمن--randomize 1إلى صيغة بدون وسيطة. #40193 (Alexey Milovidov). - إضافة عدادات (ProfileEvents) للحالات التي جرى فيها تعيين حد لتعقيد الاستعلام وتم بلوغه (مع عداد منفصل لكل من
overflow_mode=breakوthrow). على سبيل المثال، إذا كنت قد ضبطتmax_rows_to_readمعread_overflow_mode = 'break'، فإن النظر إلى قيمة العدادOverflowBreakيتيح التمييز بين النتائج غير المكتملة. #40205 (Alexey Milovidov). - إصلاح احتساب الذاكرة في حالة أخطاء “Memory limit exceeded” (إذ كان استخدام الذاكرة [الأقصى] سابقًا يحتسب التخصيصات الفاشلة أيضًا). #40249 (Azat Khuzhin).
- إضافة metrics لذاكرة التخزين المؤقت لنظام الملفات:
FilesystemCacheSizeوFilesystemCacheElements. #40260 (Kseniia Sumarokova). - دعم نقل RPC الآمن في Hadoop (hadoop.rpc.protection=privacy وhadoop.rpc.protection=integrity). #39411 (michael1589).
- تجنب الزيادة المستمرة في استهلاك الذاكرة في ذاكرة التخزين المؤقت للأنماط عند استخدام الدوال multi(Fuzzy)Match(Any|AllIndices|AnyIndex)(). #40264 (Robert Schulze).
تحسينات في البناء والاختبار والتحزيم
- ClickFiddle: أداة جديدة لاختبار إصدارات ClickHouse في وضع القراءة والكتابة (Igor Baliuk).
- أصبح ملف ClickHouse التنفيذي ذاتي الاستخراج #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
- تحديث tzdata إلى 2022b لدعم تغييرات timezone الجديدة. راجع https://github.com/google/cctz/pull/226. تم تأجيل بدء التوقيت الصيفي لعام 2022 في تشيلي من 4 سبتمبر إلى 11 سبتمبر. كما تخطط إيران للتوقف عن العمل بالتوقيت الصيفي نهائيًا بعد العودة إلى التوقيت القياسي في 2022-09-21. وهناك تصحيحات تتعلق بالمنطقة الزمنية التاريخية لـ Asia/Tehran في عام 1977: اعتمدت إيران التوقيت القياسي في 1935 وليس 1946. وفي عام 1977 طُبّق التوقيت الصيفي من 03-21 23:00 إلى 10-20 24:00؛ وكانت انتقالات عام 1978 في 03-24 و08-05، وليس 03-20 و10-20؛ وكان انتقال ربيع 1979 في 05-27، وليس 03-21 (https://data.iana.org/time-zones/tzdb/NEWS). (Alexey Milovidov).
- كانت الحزم السابقة تثبّت ملف systemd.service في
/etc. وتُعلَّم الملفات هناك على أنهاconf، لذلك لا تُزال ولا تُحدَّث تلقائيًا. يقوم طلب الدمج هذا بتنظيفها. #39323 (Mikhail f. Shiryaev). - ضمان فعالية LSan. #39430 (Azat Khuzhin).
- توجد مشكلات في TSAN مع clang-14 (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540)، لذا تُبنى هنا binaries الخاصة بـ TSAN باستخدام clang-15. #39450 (Mikhail f. Shiryaev).
- إزالة خيار بناء أدوات ClickHouse كبرامج executable منفصلة. هذا يُصلح #37847. #39520 (Alexey Milovidov).
- تحضيرات بسيطة للبناء على s390x (وهي معمارية big-endian). #39627 (Harry Lee). #39656 (Harry Lee). إصلاح مشكلة Endian في BitHelpers على s390x. #39656 (Harry Lee). تنفيذ جزء من الشيفرة المتعلق بـ SipHash لمعمارية s390x (غير المدعومة في ClickHouse). #39732 (Harry Lee). إصلاح مشكلة Endian في شيفرة snapshot الخاصة بـ Coordination لمعمارية s390x (غير المدعومة في ClickHouse). #39931 (Harry Lee). إصلاح مشكلات Endian في شيفرة Codec لمعمارية s390x (غير المدعومة في ClickHouse). #40008 (Harry Lee). إصلاح مشكلات Endian في قراءة وكتابة البيانات الثنائية BigEndian في شيفرة ReadHelpers وWriteHelpers لمعمارية s390x (غير المدعومة في ClickHouse). #40179 (Harry Lee).
- إضافة دعم للبناء باستخدام
clang-16(trunk). وبذلك يُغلَق #39949. #40181 (Alexey Milovidov). - تهيئة بناء RISC-V 64 للتشغيل ضمن CI. وهذا من أجل #40141. #40197 (Alexey Milovidov).
- تبسيط واجهة ماكرو تسجيل الدوال (
FUNCTION_REGISTER*) لإلغاء خطوة إضافة دالةexternواستدعائها فيregisterFunctions.cpp، كما يجعل البناءات التزايدية للدوال الجديدة أسرع. #38615 (Li Yin). - Docker: أصبح
entrypoint.shالآن في صورة Docker ينشئ أمرchownوينفّذه على جميع المجلدات التي يعثر عليها فيconfigلإعداد الأقراص المتعددة #17717. #39121 (Nikita Mikhaylov).
إصلاح الأخطاء
- إصلاح احتمال حدوث
segfaultفي تنسيق الإدخالCapnProto. اكتُشف هذا الخطأ وأُبلغ عنه عبر program مكافآت الثغرات في ClickHouse بواسطة kiojj. #40241 (Kruglov Pavel). - إصلاح حالة نادرة جدًا من السلوك غير الصحيح لمعامل الفهرسة في المصفوفات. هذا يُغلق #28720. #40185 (Alexey Milovidov).
- إصلاح التحقق غير الكافي من الوسائط في دوال التشفير (اكتشفه query fuzzer). هذا يُغلق #39987. #40194 (Alexey Milovidov).
- إصلاح الحالة التي قد يصبح فيها ترتيب الأعمدة غير صحيح إذا استُخدم العامل
INمع جدول ذيENGINE = Setيحتوي على عدة أعمدة. هذا يصلح #13014. #40225 (Alexey Milovidov). - إصلاح عملية seek أثناء القراءة من
diskمشفّر. يُصلح طلب السحب هذا #38381. #39687 (Vitaly Baranov). - إصلاح الأعمدة المكررة في خطة join. وأخيرًا، حل #26809. #40009 (Vladimir C).
- إصلاح تعليق query عند تنفيذ SELECT مع ORDER BY WITH FILL لأنواع تاريخ/وقت مختلفة. #37849 (Yakov Olkhovskiy).
- إصلاح ORDER BY الذي يطابق ORDER BY الخاص بـ projections (إذ كان يعيد سابقًا نتيجة غير مرتبة). #38725 (Azat Khuzhin).
- عدم تحسين الدوال في عبارات GROUP BY إذا كانت تحجب أحد أعمدة الجدول أو التعبيرات. يُصلح #37032. #39103 (Anton Kozlov).
- إصلاح اسم الجدول الخاطئ في السجلات بعد RENAME TABLE. هذا يُصلح #38018. #39227 (Amos Bird).
- إصلاح الوسائط الموضعية في حالة pruning الأعمدة عند تحسين query. يُغلق #38433. #39293 (Kseniia Sumarokova).
- إصلاح خطأ في schema inference في حالة الرسائل الفارغة في تنسيقات Protobuf/CapnProto، كان يسمح بإنشاء عمود بنوع
Tupleفارغ. يُغلق #39051 تمت إضافة إعدادين جديدينinput_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inferenceيتيحان تخطي الحقول ذات الأنواع غير المدعومة أثناء schema inference لتنسيقَي Protobuf وCapnProto. #39357 (Kruglov Pavel). - (Window View ميزة تجريبية) إصلاح segmentation fault عند
CREATE WINDOW VIEW .. ON CLUSTER ... INNER. يُغلق #39363. #39384 (Kseniia Sumarokova). - إصلاح إنهاء WriteBuffer عند إلغاء insert into function (في الإصدارات السابقة، كان ذلك قد يؤدي إلى
std::terminate). #39458 (Kruglov Pavel). - إصلاح تخزين الأعمدة من النوع
Objectفي التسلسل المتناثر. #39464 (Anton Popov). - إصلاح استثناء محتمل بعنوان “Not found column in block” عند استخدام projections. هذا يُغلق #39469. #39470 (小路).
- إصلاح استثناء ناتج عن تسابق بين DROP و INSERT مع العروض المادية. #39477 (Azat Khuzhin).
- خطأ في مكتبة Apache Avro: إصلاح data race واحتمال heap-buffer-overflow في تنسيق Avro. يُغلق #39094 ويُغلق #33652. #39498 (Kruglov Pavel).
- إصلاح خطأ نادر في القراءة غير المتزامنة (مع الإعداد
local_filesystem_read_method='pread_threadpool') عند تفعيلO_DIRECT(عبر الإعدادmin_bytes_to_use_direct_io). #39506 (Anton Popov). - (على FreeBSD فقط) إصلاح الخطأ “Code: 49. DB::Exception: FunctionFactory: the function name ” is not unique. (LOGICAL_ERROR)” الذي لوحظ على FreeBSD عند بدء تشغيل ClickHouse. #39551 (Alexander Gololobov).
- إصلاح خطأ في الوسيطة “maxsplit” التي أُضيفت مؤخرًا إلى
splitByChar، إذ لم تكن تعمل بشكل صحيح. #39552 (filimonov). - إصلاح خطأ في ASOF JOIN مع
enable_optimize_predicate_expression، ويُغلق #37813. #39556 (Vladimir C). - إصلاح استعلام
CREATE/DROP INDEXمعON CLUSTERأو قاعدة بياناتReplicatedوReplicatedMergeTree. كان يُنفَّذ سابقًا على جميع replicas (مما يسبب خطأ أو يؤدي إلى تعليق DDL queue). يُصلح #39511. #39565 (Alexander Tokmakov). - إصلاح خطأ “column not found” في push down مع join، ويُغلق #39505. #39575 (Vladimir C).
- إصلاح الاسم المستعار الخاطئ لـ
REGEXP_REPLACE. هذا يُصلح https://github.com/ClickHouse/ClickBench/issues/9. #39592 (Alexey Milovidov). - تم إصلاح نقطة origin في window functions الخاصة بالتناقص الأسي لتكون القيمة الأخيرة في window. سابقًا، كان التناقص يُحسب بالصيغة
exp((t - curr_row_t) / decay_length)، وهذا غير صحيح عندما لا يكون الحد الأيمن للنافذة هوCURRENT ROW. وقد تغيّرت إلى:exp((t - last_row_t) / decay_length). لا يوجد تغيير في النتائج للنوافذ التي تحتوي علىROWS BETWEEN (smth) AND CURRENT ROW. #39593 (Vladimir Chebotaryov). - إصلاح تجاوز السعة في قسمة Decimal، والذي يمكن اكتشافه استنادًا إلى scale الخاصة بالمعاملات. #39600 (Andrey Zvonov).
- إصلاح عمل الإعدادين
output_format_arrow_string_as_stringوoutput_format_arrow_low_cardinality_as_dictionaryمعًا بشكل صحيح. يغلق #39624. #39647 (Kruglov Pavel). - إصلاح خلل في تحديد قاعدة البيانات default في قراءات distributed table. #39674 (Anton Kozlov).
- (فقط مع Ordinary databases المتقادمة) كان من الممكن أن يقرأ Select بيانات table محذوف إذا استُخدمت cache الخاصة بـ mmap IO وكان database engine هو Ordinary وأُنشئت tables جديدة بالاسم نفسه الذي كان يحمله الجدول المحذوف. تم إصلاح ذلك. #39708 (Alexander Tokmakov).
- إصلاح error محتمل:
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinalityإصلاح #38460. #39716 (Arthur Passos). - كانت أسماء الحقول في قسم
metaمن format JSON تُهرَّب مرتين عن طريق الخطأ. هذا يغلق #39693. #39747 (Alexey Milovidov). - إصلاح index analysis غير صحيح مع tuples والعامل
IN، والذي كان يمكن أن يؤدي إلى نتيجة query خاطئة. #39752 (Anton Popov). - إصلاح Filtering لجداول
EmbeddedRocksDBحسب key باستخدام params. #39757 (Antonio Andelic). - إصلاح الخطأ
Invalid number of columns in chunk pushed to OutputPortالناتج عن تحسين ARRAY JOIN. إصلاح #39164. #39799 (Nikolai Kochetov). - حل بديل لخلل في Linux kernel. إصلاح الاستثناء
CANNOT_READ_ALL_DATAمعlocal_filesystem_read_method=pread_threadpool. وقد أثّر هذا الخلل فقط على إصداري Linux kernel 5.9 و5.10 وفقًا لـ man. #39800 (Anton Popov). - (على NFS فقط) إصلاح تعطل
mkdirفي NFS لوحدات التخزين root-squashed. #39898 (Constantine Peresypkin). - إزالة Dictionaries من metrics الخاصة بـ prometheus عند DETACH/DROP. #39926 (Azat Khuzhin).
- إصلاح read data لـ StorageFile مع virtual columns. يغلق #39907. #39943 (flynn).
- إصلاح memory usage مرتفع أثناء fetches. إصلاح #39915. #39990 (Nikolai Kochetov).
- (ميزة تجريبية) إصلاح تعطل
hashIdوعدم استخدام المعلَمة salt. #40002 (Raúl Marín). - قد يؤدي العاملان
EXCEPTوINTERSECTإلى حدوث تعطل عند استخدام تركيبة معيّنة من الأعمدة الثابتة وغير الثابتة. #40020 (Duc Canh Le). - تم إصلاح الخطأين “Part directory doesn’t exist” و “
tmp_<part_name>… No such file or directory” أثناء تنفيذ INSERT ببطء شديد أو أثناء عمليات merge/mutation الطويلة جدًا. كما تم إصلاح مشكلة قد تؤدي إلى تعليق بعض إدخالات replication queue من دون أي أخطاء أو تحذيرات في السجلات إذا فشلت محاولة سابقة لجلب part، لكن لم يُنظَّف الدليلtmp-fetch_<part_name>. #40031 (Alexander Tokmakov). - إصلاح حالات نادرة في parsing لمصفوفات من Tuples بالتنسيق
Values. #40034 (Anton Popov). - إصلاح تحويل تنسيق ArrowColumn من Dictionary(X) و Dictionary(Nullable(X)) إلى ClickHouse LowCardinality(X) و LowCardinality(Nullable(X)) على الترتيب. #40037 (Arthur Passos).
- إصلاح حالة توقف متبادل محتملة أثناء الكتابة إلى S3 عند فشل scheduling للمهام. #40070 (Maksim Kita).
- إصلاح خطأ في collectFilesToSkip() عبر إضافة امتداد الملف الصحيح (.idx أو idx2) إلى indexes التي ستُعاد إعادة حسابها، لتجنّب hard links الخاطئة. أُغلقت المشكلة #39896. #40095 (Jianmei Zhang).
- إصلاح لـ DNS resolution العكسي. #40134 (Arthur Passos).
- إصلاح النتيجة غير المتوقعة للدالة
arrayDifferenceمع `Array(UInt32). #40211 (Duc Canh Le).
إصدار ClickHouse 22.7، بتاريخ 2022-07-21. العرض التقديمي, الفيديو
ملاحظات الترقية
- فُعِّل الإعداد
enable_positional_argumentsافتراضيًا. يتيح ذلك استعلامات مثلSELECT ... ORDER BY 1, 2حيث يشير 1 و2 إلى مراجع في عبارةSELECT. إذا كنت بحاجة إلى استعادة السلوك القديم، فعطّل هذا الإعداد. #38204 (Alexey Milovidov). - عُطِّل
format_csv_allow_single_quotesافتراضيًا. راجع #37096. (Kruglov Pavel). - أُهمِل database engine
Ordinaryوصياغة تعريف التخزين القديمة لجداول*MergeTree. افتراضيًا، لم يعد ممكنًا إنشاء database جديدة باستخدام engine Ordinary. وإذا كانت database systemتستخدم engine Ordinary، فستُحوَّل تلقائيًا إلىAtomicعند بدء تشغيل server. توجد إعدادات للإبقاء على السلوك القديم (allow_deprecated_database_ordinaryوallow_deprecated_syntax_for_merge_tree)، لكن قد تُزال هذه الإعدادات في إصدارات لاحقة. #38335 (Alexander Tokmakov). - فُرضت إعادة كتابة comma join إلى inner افتراضيًا (بضبط default value
cross_to_inner_join_rewrite = 2). وللحصول على السلوك القديم، اضبطcross_to_inner_join_rewrite = 1. #39326 (Vladimir C). وإذا واجهت أي حالات عدم توافق، يمكنك إعادة هذا الإعداد إلى وضعه السابق.
ميزة جديدة
- دعم expressions مع دوال window functions. يغلق #19857. #37848 (Dmitry Novik).
- إضافة خوارزمية join جديدة باسم
directلجداولEmbeddedRocksDB، انظر #33582. #35363 (Vladimir C). - إضافة خوارزمية full sorting merge join. #35796 (Vladimir C).
- تنفيذ table engine لـ NATS، بما يتيح النشر/الاشتراك عبر NATS. يغلق #32388. #37171 (tchepavel). (Kseniia Sumarokova)
- تنفيذ table function
mongodb. مع السماح بالكتابة إلى تخزينMongoDB/ table function الخاصة به. #37213 (aaapetrenko). (Kseniia Sumarokova) - إضافة output format
SQLInsert. يغلق #38441. #38477 (Kruglov Pavel). - تقديم الإعداد
additional_table_filters. باستخدام هذا الإعداد، يمكنك تحديد شرط تصفية إضافي لجدول يُطبَّق مباشرةً بعد القراءة. مثال:select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}. كما تم تقديم الإعدادadditional_result_filterالذي يحدد شرط تصفية إضافيًا لنتيجة query. يغلق #37918. #38475 (Nikolai Kochetov). - إضافة الإعداد
compatibilityوsystem tablesystem.settings_changesالذي يحتوي على معلومات حول التغييرات في الإعدادات عبر إصدارات ClickHouse. يغلق #35972. #38957 (Kruglov Pavel). - إضافة الدالتين
translate(string, from_string, to_string)وtranslateUTF8(string, from_string, to_string). تقومان باستبدال بعض المحارف بمحارف أخرى. #38935 (Nikolay Degterinsky). - دعم الدالة
parseTimeDelta. ويمكن استخدامها على النحو التالي: يمكن استخدام;-+,:كفواصل، مثل1yr-2moو2m:6s:SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds'). #39071 (jiahui-97). - إضافة query
CREATE TABLE ... EMPTY AS SELECT. وهي تستنتج تلقائيًا بنية الجدول من query SELECT، لكنها لا تملأ الجدول بعد إنشائه. يحل #38049. #38272 (Alexander Tokmakov). - إضافة خيارات لتقييد عمليات IO مع التخزين البعيد:
max_remote_read_network_bandwidth_for_serverوmax_remote_write_network_bandwidth_for_server. #39095 (Sergei Trifonov). - أُضيف الإعداد
group_by_use_nullsلجعل أعمدة مفاتيح التجميع قابلة لأن تكون NULL في حالات ROLLUP و CUBE و GROUPING SETS. يُغلق #37359. #38642 (Dmitry Novik). - أُضيفت إمكانية تحديد مستوى الضغط أثناء تصدير البيانات. #38907 (Nikolay Degterinsky).
- أُضيف خيار لطلب grants صريحة لتنفيذ SELECT من قاعدة البيانات
system. التفاصيل: #38970 (Vitaly Baranov). - أصبحت الدوال
multiMatchAnyوmultiMatchAnyIndexوmultiMatchAllIndicesومتغيراتها التقريبية تقبل الآن وسيطة مصفوفة pattern غير ثابتة. #38485 (Robert Schulze). كما أصبحت دالة SQL multiSearchAllPositionsتقبل الآن وسائط needle غير ثابتة. #39167 (Robert Schulze). - أُضيف الإعداد
zstd_window_log_maxلضبط الحد الأقصى لاستخدام الذاكرة عند فك ترميز zstd أثناء استيراد الملفات الخارجية. يُغلق #35693. #37015 (wuxiaobai24). - أُضيف الإعداد
send_logs_source_regexp. يرسل سجلات server النصية باستخدام regexp المحدد لمطابقة اسم مصدر السجل. وتعني القيمة الفارغة جميع المصادر. #39161 (Amos Bird). - تمت إضافة دعم
ALTERلجداولHive. #38214 (lgbo). - تمت إضافة دعم الدالة
isNullable. تتحقق هذه الدالة مما إذا كانت وسيطتها قابلة لأن تكون NULL وتُرجع 1 أو 0. يُغلق #38611. #38841 (lokax). - أُضيفت دوال لترميز وفك ترميز base58. #38159 (Andrey Zvonov).
- أُضيف تصور مخطط إلى واجهة Play UI. #38197 (Alexey Milovidov).
- أُضيفت دوال لمسافة L2 Squared وnorm لكل من المصفوفات وTuples. #38545 (Julian Gilyadov).
- أُضيفت إمكانية تمرير HTTP headers إلى table function
url/ التخزين عبر SQL. يُغلق #37897. #38176 (Kseniia Sumarokova). - أُضيف الملف التنفيذي
clickhouse-diagnosticsإلى الحزم. #38647 (Mikhail f. Shiryaev).
الميزة التجريبية
- يضيف الإعداد الجديد
implicit_transactionلتشغيل الاستعلامات المستقلة ضمن معاملة. ويتولى تلقائيًا فتح المعاملة وإغلاقها (باستخدام COMMIT إذا نجح الاستعلام أو ROLLBACK إذا لم ينجح). #38344 (Raúl Marín).
تحسين الأداء
- تحسين
Distinctللأعمدة المرتبة. يُستخدم تحويل distinct متخصص عندما يكون دفق الإدخال مرتبًا حسب العمود أو الأعمدة في distinct. ويمكن تطبيق هذا التحسين على pre-distinct أو final distinct أو كليهما. التنفيذ الأولي من @dimarub2000. #37803 (Igor Nikonov). - تحسين أداء
ORDER BYوعمليات الدمج فيMergeTreeوwindow functions باستخدام إصدار batch منBinaryHeap. #38022 (Maksim Kita). - تنفيذ أكثر توازيًا للاستعلامات التي تستخدم
FINAL#36396 (Nikita Taranov). - إصلاح تراجع كبير في أداء join أُدخل في #35616. والمثير للاهتمام أن استعلامات join الشائعة، مثل استعلامات ssb، كانت أبطأ بعشر مرات لما يقرب من 3 أشهر من دون أن يشتكي أحد. #38052 (Amos Bird).
- الانتقال من مكتبة Intel hyperscan إلى vectorscan، ما يسرّع العديد من عمليات مطابقة السلاسل النصية على المنصات غير x86. #38171 (Robert Schulze).
- زيادة التوازي في خطوات خطة الاستعلام التي تُنفَّذ بعد aggregation. #38295 (Nikita Taranov).
- تحسين أداء الإدراج في الأعمدة من النوع
JSON. #38320 (Anton Popov). - تحسين الإدراج وعمليات البحث في HashTable. #38413 (Nikita Taranov).
- إصلاح تدهور الأداء الناتج عن #32493. #38417 (Alexey Milovidov).
- تحسين أداء joining باستخدام الأعمدة الرقمية عبر تعليمات SIMD. #37235 (zzachimed). #38565 (Maksim Kita).
- تسريع دوال Norm وDistance للمصفوفات بمقدار يتراوح بين 1.2 و2 مرة. #38740 (Alexander Gololobov).
- إضافة
copyOverlap32Shuffleمحسّنة باستخدام AVX-512 VBMI لفك ضغط LZ4. وبعبارة أخرى، جرى تحسين أداء فك ضغط LZ4. #37891 (Guo Wangyang). - سيستفيد
ORDER BY (a, b)من جميع المزايا نفسها التي يوفرهاORDER BY a, b. #38873 (Igor Nikonov). - محاذاة التفرعات ضمن حد 32B لجعل benchmark أكثر استقرارًا. #38988 (Guo Wangyang). وهذا يحسّن الأداء بمتوسط 1..2% على Intel.
- ستتجنب Executable UDF وexecutable dictionaries وExecutable tables إهدار ثانية واحدة أثناء انتظار انتهاء العملية الفرعية. #38929 (Constantine Peresypkin).
- تحسين الوصول إلى جدول
system.stack_traceإذا لم تُحدَّد جميع الأعمدة. #39177 (Azat Khuzhin). - تحسين أداء isNullable/isConstant/isNull/isNotNull لوسيطة LowCardinality. #39192 (Kruglov Pavel).
- تحسين معالجة ORDER BY في window functions. #34632 (Vladimir Chebotarev).
- جرى تحسين الجدول
system.asynchronous_metric_logبشكل أكبر من حيث مساحة التخزين. هذا يُغلق #38134. راجع فيديو YouTube. #38428 (Alexey Milovidov).
تحسين
- دعم صيغة CREATE INDEX وDROP INDEX القياسية في SQL. #35166 (Jianmei Zhang).
- إرسال أحداث profile لاستعلامات INSERT (إذ كان الدعم سابقًا مقتصرًا على SELECT فقط). #37391 (Azat Khuzhin).
- تنفيذ التجميع بأسلوب in order (
optimize_aggregation_in_order) للإسقاطات المُجسَّدة بالكامل. #37469 (Azat Khuzhin). - إزالة استخدام عملية فرعية لتهيئة Kerberos. أُضيف اختبار تكاملي جديد. يُغلق #27651. #38105 (Roman Vasin).
-
- إضافة الإعداد
multiple_joins_try_to_keep_original_namesلتجنّب إعادة كتابة اسم المعرّف عند إعادة كتابة عدة عمليات JOIN، وإغلاق #34697. #38149 (Vladimir C).
- إضافة الإعداد
- تحسين تجربة المستخدم في trace-visualizer. #38169 (Sergei Trifonov).
- تمكين جمع تتبعات المكدس وquery profiler لمعمارية AArch64. #38181 (Maksim Kita).
- عدم تخطي الروابط الرمزية في الدليل
user_definedأثناء تحميل دوال SQL المعرفة من قبل المستخدم. يُغلق #38042. #38184 (Maksim Kita). - إضافة تنظيفٍ في الخلفية للدلائل الفرعية في
store/. في بعض الحالات، قد يترك clickhouse-server دلائل فرعية غير مرغوب فيها فيstore/(على سبيل المثال، عند فشل إنشاء جدول)، ولم تكن هذه الدلائل تُزال مطلقًا. يُصلح #33710. #38265 (Alexander Tokmakov). - إضافة استعلام
DESCRIBE CACHEلعرض إعدادات cache من config. وإضافة استعلامSHOW CACHESلعرض قائمة filesystem cache المتاحة. #38279 (Kseniia Sumarokova). - إضافة تحقّق من صلاحية الوصول إلى
system drop filesystem cache. ودعم ON CLUSTER. #38319 (Kseniia Sumarokova). - إصلاح عدم توافق محرك قاعدة بيانات PostgreSQL عند الترقية من 21.3 إلى 22.3. يُغلق #36659. #38369 (Kseniia Sumarokova).
- تعمل الآن الدالة
filesystemAvailableوالدوال المشابهة فيclickhouse-local. هذا يُغلق #38423. #38424 (Alexey Milovidov). - إضافة الدالة
revision. #38555 (Azat Khuzhin). - إصلاح استخدام GCS عبر نفق proxy. #38726 (Azat Khuzhin).
- دعم
\i fileفي clickhouse client / local (على غرار\iفي psql). #38813 (Kseniia Sumarokova). - خيار جديد
optimize = 1فيEXPLAIN AST. إذا كان مفعّلًا، فسيعرض AST بعد إعادة كتابته، وإلا فسيعرض AST الخاص بالاستعلام الأصلي. وهو معطّل افتراضيًا. #38910 (Igor Nikonov). - السماح بوجود فاصلة زائدة في قائمة الأعمدة. يُغلق #38425. #38440 (chen).
- إصلاحات وتحسينات في الأداء لطريقة JOIN
parallel_hash. #37648 (Vladimir C). - دعم نقل RPC الآمن في hadoop (
hadoop.rpc.protection=privacyوhadoop.rpc.protection=integrity). #37852 (Peng Liu). - إضافة دعم النوع struct في
StorageHive. #38118 (lgbo). - تُزال الآن الكائنات المفردة في S3 باستخدام
RemoveObjectRequest. وقد أُضيف التوافق مع GCP، الذي لم يكن يسمح باستخدامremoveFileIfExists، ما كان يعطّل فعليًا نحو نصف وظائفremove. كما أُضيف الاكتشاف التلقائي لواجهة برمجة تطبيقات S3DeleteObjectsغير المدعومة في GCS. يتيح ذلك استخدام GCS من دون الحاجة إلى تعيينsupport_batch_delete=0صراحةً في الإعدادات. #37882 (Vladimir Chebotarev). - إتاحة بيانات monitoring أساسية متعلقة بـ ClickHouse Keeper (عبر ProfileEvents وCurrentMetrics). #38072 (lingpeng0314).
- دعم الخيار
auto_closeلاتصال محرك PostgreSQL. يُغلق #31486. #38363 (Kseniia Sumarokova). - السماح باستخدام المعدِّل
NULLفي تعريف الأعمدة ضمن table functions. #38816 (Kruglov Pavel). - تعطيل
mutations_finalizing_taskقبل الإيقاف لتجنّب أخطاءTABLE_IS_READ_ONLYغير الضارة أثناء الإيقاف. #38851 (Raúl Marín). - إزالة الانتظار غير الضروري لاستعلامات SELECT بعد استعلامات ALTER عند وجود استعلامات INSERT إذا كنت تستخدم قواعد البيانات Ordinary المهجورة. #38864 (Azat Khuzhin).
- خيار جديد
rewriteفيEXPLAIN AST. عند تفعيله، يعرض AST بعد إعادة كتابته، وإلا فيعرض AST للاستعلام الأصلي. وهو معطّل افتراضيًا. #38910 (Igor Nikonov). - إيقاف الإبلاغ عن استثناءات Zookeeper “Node exists” في system.errors عندما تكون متوقعة. #38961 (Raúl Marín).
clickhouse-keeper: إضافة دعم لحساب digest والتحقق منه آنيًا. وهو معطّل افتراضيًا. #37555 (Antonio Andelic).- السماح بتحديد globs
* or {expr1, expr2, expr3}داخل مفتاح لأداةclickhouse-extract-from-config. #38966 (Nikita Mikhaylov). - clearOldLogs: عدم الإبلاغ عن KEEPER_EXCEPTION عند عمليات الحذف المتزامنة. #39016 (Raúl Marín).
- تحسين في clickhouse-keeper: حفظ البيانات الوصفية المتعلقة بخوادم Keeper على القرص. #39069 (Antonio Andelic). سيجعل ذلك التشغيل أسهل إذا أوقفت جميع عقد keeper أو أعدت تشغيلها في الوقت نفسه.
- المتابعة دون استثناء عند نفاد مساحة القرص عند استخدام filesystem cache. #39106 (Kseniia Sumarokova).
- التعامل مع إشارات SIGTERM من k8s. #39130 (Timur Solodovnikov).
- إضافة العمود
merge_algorithm(Undecided, Horizontal, Vertical) إلى system.part_log. #39181 (Azat Khuzhin). - لا تزِد أي عدّاد في
system.errorsعندما لا يكون القرص دوّارًا. #39216 (Raúl Marín). - يُظهر المقياس
result_bytesلاستعلاماتINSERTفيsystem.query_logعدد البايتات المُدرجة. في السابق، كانت هذه القيمة غير صحيحة، إذ كانت تُخزَّن بالقيمة نفسها الخاصة بـresult_rows. #39225 (Ilya Yatsishin). - سيُعرَض مقياس استخدام CPU في
clickhouse-clientبطريقة أفضل. يُصلح #38756. #39280 (Sergei Trifonov). - أعِد رمي الاستثناء عند تهيئة
filesystem cacheأثناء بدء تشغيل الخادم، مع رسالة خطأ أفضل. #39386 (Kseniia Sumarokova). - يجمع OpenTelemetry الآن
tracesمن دونspansالخاصة بـProcessorsافتراضيًا (لأن عددها كبير جدًا). ولتمكين جمعspansالخاصة بـProcessors، استخدم الإعدادopentelemetry_trace_processors. #39170 (Ilya Yatsishin). - الدوال
multiMatch[Fuzzy](AllIndices/Any/AnyIndex)— لا تُطلقlogical errorإذا كانت قيمة الوسيطneedleفارغة. #39012 (Robert Schulze). - السماح بتعريف
queueلـRabbitMQمن دون الوسيطات الافتراضيةx-max-lengthوx-overflow. #39259 (rnbondarenko).
تحسينات في البناء والاختبار والتحزيم
- تطبيق annotations لتحليل أمان الخيوط (TSA) في Clang على ClickHouse. #38068 (Robert Schulze).
- تكييف برنامج التثبيت النصي العام ليتوافق مع FreeBSD. #39302 (Alexey Milovidov).
- تحضير البناء على منصة
s390x. #39193 (Harry Lee). - إصلاح خطأ في مكتبة
jemalloc. #38757 (Azat Khuzhin). - أصبح اختبار الأداء على الأجهزة يدعم الآن رفع النتائج تلقائيًا. #38427 (Alexey Milovidov).
- أصبح جدول النظام “system.licenses” يُملأ بشكل صحيح على Mac (Darwin). #38294 (Robert Schulze).
- تغيير حزم
all|noarchإلى حزم معتمدة على المعمارية - إصلاح بعض الوثائق المتعلقة بذلك - دفع حزم aarch64|arm64 إلى Artifactory وأصول الإصدار - إصلاح #36443. #38580 (Mikhail f. Shiryaev).
إصلاح خطأ (سلوك غير صحيح ظاهر للمستخدم في إصدار رسمي مستقر أو ما قبل مستقر)
- إصلاح التقريب في
Decimal128/Decimal256عند استخدام scale يزيد طوله على 19 رقمًا. #38027 (Igor Nikonov). - إصلاح تعطل ناتج عن data race في التخزين
Hive(محرك جدول التكامل). #38887 (lgbo). - إصلاح التعطل عند تنفيذ GRANT ALL ON . مع ON CLUSTER. كان هذا معطّلًا بسبب https://github.com/ClickHouse/ClickHouse/pull/35767. وهذا يغلق #38618. #38674 (Vitaly Baranov).
- تصحيح توسيع glob في حالة الصيغ
{0..10}. يُصلح #38498. التنفيذ الحالي مشابه لما تفعله shell، كما ذكر @rschu1ze هنا. #38502 (Heena Bansal). - إصلاح التعطل في الدالتين
mapUpdateوmapFilterعند استخدام وسيطة map ثابتة. يغلق #38547. #38553 (hexiaoting). - إصلاح معلومات الرتابة للدالة
toHourفي query optimization، والتي قد تؤدي إلى نتائج query غير صحيحة (index analysis غير صحيح). وهذا يُصلح #38333. #38675 (Amos Bird). - إصلاح التحقق مما إذا كانت S3 storage تدعم الكتابات المتوازية. وكان ذلك يؤدي إلى عدم عمل الكتابات المتوازية إلى S3. #38792 (chen).
- إصلاح reads القابلة للـ seek في S3 مع read buffer المتوازي. (وقد أثّر ذلك في memory usage أثناء query). يغلق #38258. #38802 (Kseniia Sumarokova).
- تحديث
simdjson. يُصلح هذا #38621 — وهو overflow في buffer على الأجهزة التي تستخدم أحدث معالجات Intel مع AVX-512 VBMI. #38838 (Alexey Milovidov). - إصلاح logical error محتمل في عمليات Vertical merges. #38859 (Maksim Kita).
- إصلاح settings profile مع وحدة Seconds. #38896 (Raúl Marín).
- إصلاح partition pruning غير الصحيح عند وجود partition key من نوع Nullable. ملاحظة: على الأرجح أنك لا تستخدم مفاتيح partition من نوع Nullable — فهذه ميزة نادرة لا ينبغي استخدامها. مفاتيح Nullable غير منطقية، وهذه الميزة مطلوبة فقط لبعض حالات الاستخدام الغريبة جدًا. وهذا يُصلح #38941. #38946 (Amos Bird).
- تحسين
fsync_part_directoryلعمليات fetches. #38993 (Azat Khuzhin). - إصلاح حالة deadlock محتملة داخل
OvercommitTracker. يُصلح #37794. #39030 (Dmitry Novik). - إصلاح خطأ في filesystem cache كان يمكن أن يحدث في بعض الحالات النادرة عند وصول سعة ذاكرة التخزين المؤقت إلى الحد الأقصى. يغلق #39066. #39070 (Kseniia Sumarokova).
- إصلاح بعض الحالات النادرة في تفسير الوسيطات الخاصة بتعبيرات window. ويصلح هذا #38538، كما يسمح باستخدام الدوال عالية الرتبة في تعبيرات window. #39112 (Dmitry Novik).
- الإبقاء على النوع
LowCardinalityفي الدالةtuple. سابقًا، كان النوعLowCardinalityيُزال، وكانت عناصر tuple المُنشأ تأخذ النوع الأساسي لـLowCardinality. #39113 (Anton Popov). - إصلاح الخطأ
Block structure mismatchالذي كان يمكن أن يحدث عند تنفيذ INSERT في table تحتوي علىMATERIALIZED VIEWمرفقة وكان الإعدادextremes = 1ممكّنًا. يغلق #29759 و#38729. #39125 (Nikolai Kochetov). - إصلاح نتيجة query غير متوقعة عندما يكون كل من
optimize_trivial_count_queryوempty_result_for_aggregation_by_empty_setمضبوطًا على true. ويصلح هذا #39140. #39155 (Amos Bird). - إصلاح الخطأ
Not found column Type in blockفي عمليات SELECT التي تستخدمPREWHEREوتحسينات القراءة بالترتيب. #39157 (Yakov Olkhovskiy). - إصلاح race condition نادرة للغاية أثناء إنشاء hardlinks في remote filesystem. والطريقة الوحيدة لإعادة إنتاجها هي التشغيل المتزامن لعمليات النسخ الاحتياطي. #39190 (alesapin).
- (zero-copy replication ميزة تجريبية ويجب عدم استخدامها في بيئة production) إصلاح fetch لجزء موجود في الذاكرة مع
allow_remote_fs_zero_copy_replication. #39214 (Azat Khuzhin). - (MaterializedPostgreSQL - ميزة تجريبية). إصلاح خطأ segmentation fault في database engine MaterializedPostgreSQL، والذي كان يمكن أن يحدث عند وقوع استثناء أثناء تهيئة replication. يغلق #36939. #39272 (Kseniia Sumarokova).
- إصلاح fetch غير الصحيح للبيانات الوصفية للجدول من database engine PostgreSQL. يغلق #33502. #39283 (Kseniia Sumarokova).
- إصلاح استثناء projection عندما تكون مفاتيح aggregation مغلّفة داخل دوال أخرى. ويصلح هذا #37151. #37155 (Amos Bird).
- إصلاح logical error محتمل
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...في بعض الدوال. يغلق: #37610 يغلق: #37741. #37759 (Kruglov Pavel). - إصلاح الترتيب غير الصحيح للأعمدة في الاستعلامات الفرعية ضمن UNION (إذ قد تؤدي الأعمدة المكررة في الاستعلامات الفرعية إلى نتائج غير صحيحة). #37887 (Azat Khuzhin).
- إصلاح السلوك غير الصحيح لأمر MODIFY ALTER Column مع أسماء الأعمدة التي تحتوي على نقاط. يغلق #37907. #37971 (Kruglov Pavel).
- إصلاح قراءة الأعمدة sparse من جداول
MergeTreeالتي تخزّن بياناتها في S3. #37978 (Anton Popov). - إصلاح احتمال حدوث crash في async insert لمحرك
Distributedعند إزالة replica من config. #38029 (Nikolai Kochetov). - إصلاح خطأ “Missing columns” في GLOBAL JOIN مع CTE من دون alias. #38056 (Azat Khuzhin).
- إعادة كتابة دوال tuple كقيم حرفية في وضع التوافق مع الإصدارات السابقة. #38096 (Anton Kozlov).
- إصلاح الحجز الزائد للذاكرة لكتلة الإخراج أثناء
ORDER BY. #38127 (iyupeng). - إصلاح احتمال حدوث logical error
Bad cast from type DB::IColumn* to DB::ColumnNullable*في الدوال المطبَّقة على Array. يغلق #38006. #38132 (Kruglov Pavel). - إصلاح تعارض مؤقت في الأسماء في partial merge join، يغلق #37928. #38135 (Vladimir C).
- إصلاح مشكلة بسيطة في استعلامات مثل
CREATE TABLE nested_name_tuples (aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;#38136 (lgbo). - إصلاح خطأ في دوال الاختصار الشرطي المتداخلة كان يؤدي إلى تنفيذ الوسائط حتى عندما يكون الشرط false. يغلق #38040. #38173 (Kruglov Pavel).
- (Window View ميزة تجريبية) إصلاح LOGICAL_ERROR في WINDOW VIEW عند وجود structure غير صحيحة. #38205 (Azat Khuzhin).
- تحديث librdkafka submodule لإصلاح crash عند تعيين callback لتحديث OAUTHBEARER. #38225 (Rafael Acevedo).
- إصلاح تعليق INSERT إلى Distributed بسبب ProfileEvents. #38307 (Azat Khuzhin).
- إصلاح retries في engine الخاص بـ PostgreSQL. #38310 (Kseniia Sumarokova).
- إصلاح التحسين في PartialSortingTransform (SIGSEGV واحتمال ظهور نتائج غير صحيحة). #38324 (Azat Khuzhin).
- إصلاح مشكلة في RabbitMQ مع التنسيقات المعتمدة على PeekableReadBuffer. يُغلق #38061. #38356 (Kseniia Sumarokova).
- MaterializedPostgreSQL - ميزة تجريبية. إصلاح احتمال ظهور الخطأ
Invalid number of rows in Chunkفي MaterializedPostgreSQL. يُغلق #37323. #38360 (Kseniia Sumarokova). - إصلاح إعداد RabbitMQ عند استخدام إعداد سلسلة الاتصال. يُغلق #36531. #38365 (Kseniia Sumarokova).
- إصلاح محرك PostgreSQL الذي لا يستخدم مخطط PostgreSQL عند استرجاع حجم بُعد المصفوفة. يُغلق #36755. يُغلق #36772. #38366 (Kseniia Sumarokova).
- إصلاح احتمال ظهور نتائج غير صحيحة في الاستعلامات الموزعة مع
DISTINCTوLIMIT. يُصلح #38282. #38371 (Anton Popov). - إصلاح النتائج الخاطئة للدالتين countSubstrings() و position() في الأنماط التي تحتوي على بايتات صفرية. #38589 (Robert Schulze).
- أصبح من الممكن الآن تشغيل clickhouse-server وإرفاق/فصل الجداول حتى للجداول التي تحتوي على قيم غير صحيحة لتمثيل IPv4/IPv6. إصلاح مناسب للمشكلة #35156. #38590 (alesapin).
- ستعمل الدالة
rankCorrبشكل صحيح إذا كانت بعض الوسيطات NaN. هذا يُغلق #38396. #38722 (Alexey Milovidov). - إصلاح
parallel_view_processing=1معoptimize_trivial_insert_select=1. إصلاحmax_insert_threadsأثناء الدفع إلى طرق العرض. #38731 (Azat Khuzhin). - إصلاح مشكلة use-after-free في الدوال التجميعية مع المُركِّب
Map، والتي تؤدي إلى نتائج غير صحيحة. #38748 (Azat Khuzhin).
إصدار ClickHouse 22.6، 2022-06-16. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- إزالة دعم صيغ الأعداد الثمانية في SQL. في الإصدارات السابقة، كان يجري تحليلها على أنها Float64. #37765 (Yakov Olkhovskiy).
- تغيّرت طريقة تحليل الإعدادات التي تستخدم
secondsكنوع، وذلك لدعم القيم ذات الفاصلة العائمة (على سبيل المثال:max_execution_time=0.5). وستؤدي قيم Infinity أو NaN إلى طرح استثناء. #37187 (Raúl Marín). - تم تغيير تنسيق التسلسل الثنائي لأعمدة النوع التجريبي
Object. وأصبح التنسيق الجديد أسهل في التنفيذ من قِبل clients من جهات خارجية. #37482 (Anton Popov). - تم تفعيل الإعداد
output_format_json_named_tuples_as_objectsافتراضيًا. ويتيح ذلك إجراء serialize لـ named tuples على هيئة JSON objects ضمن JSON formats. #37756 (Anton Popov). - لم يعد مسموحًا الآن باستخدام patterns الخاصة بـ LIKE التي تنتهي برمز escape (’\’)، وذلك وفقًا لما يفرضه معيار SQL. #37764 (Robert Schulze).
- إذا كنت تشغّل إصدارات مختلفة من ClickHouse على cluster بمعالج AArch64 CPU، أو تمزج بين AArch64 و amd64 داخل cluster، وتستخدم distributed queries مع GROUP BY على عدة مفاتيح من نوع ثابت الحجم يتسع ضمن 256 bit ولكنه لا يتسع ضمن 64 bit، وكان حجم النتيجة ضخمًا، فلن تُجمَّع البيانات بالكامل في نتيجة هذه queries أثناء الترقية. الحل البديل: نفّذ الترقية مع downtime بدلًا من rolling upgrade.
ميزة جديدة
- إضافة الدالة
GROUPING. تتيح هذه الدالة إزالة الالتباس عن السجلات في الاستعلامات التي تستخدمROLLUPأوCUBEأوGROUPING SETS. يُغلق #19426. #37163 (Dmitry Novik). - إضافة خوارزمية codec جديدة FPC لضغط البيانات ذات الفاصلة العائمة. #37553 (Mikhail Guzov).
- إضافة تنسيقات JSON عمودية جديدة:
JSONColumnsوJSONCompactColumnsوJSONColumnsWithMetadata. يُغلق #36338 يُغلق #34509. #36975 (Kruglov Pavel). - أُضيفت أداة لتصوّر traces في OpenTelemetry بالاعتماد على d3js. #37810 (Sergei Trifonov).
- دعم عمليات INSERT إلى table
system.zookeeper. يُغلق #22130. #37596 (Han Fei). - دعم argument pattern غير الثابتة للدوال
LIKEوILIKEوmatch. #37251 (Robert Schulze). - أصبحت Executable User Defined Functions تدعم الآن parameters. مثال:
SELECT test_function(parameters)(arguments). يُغلق #37578. #37720 (Maksim Kita). - إضافة column
merge_reasonإلى table system.part_log. #36912 (Sema Checherinda). - إضافة دعم maps وrecords في تنسيق Avro. وإضافة setting جديدة
input_format_avro_null_as_defaultتتيح إدراج null كقيمة default في تنسيق Avro. يُغلق #18925 يُغلق #37378 يُغلق #32899. #37525 (Kruglov Pavel). - إضافة أداة
clickhouse-disksلفحص أنظمة الملفات الافتراضية المهيأة لـ ClickHouse وإجراء العمليات عليها. #36060 (Artyom Yurkov). - إضافة دوال H3 للحواف أحادية الاتجاه. #36843 (Bharat Nallan).
- إضافة دعم لحساب hashids من الأعداد الصحيحة غير الموقعة. #37013 (Michael Nutt).
- يُسمح بتحديد
SALTصراحةً معCREATE USER <user> IDENTIFIED WITH sha256_hash. #37377 (Yakov Olkhovskiy). - إضافة settingين جديدتين
input_format_csv_skip_first_lines/input_format_tsv_skip_first_linesللسماح بتخطي عدد محدد من الأسطر في بداية الملف في تنسيقات CSV/TSV. #37537 (Kruglov Pavel). - تعرض الدالة
showCertificateشهادة SSL الحالية الخاصة بالخادم. #37540 (Yakov Olkhovskiy). - تمت إضافة دعم مصدر HTTP لـ Data Dictionaries ضمن المجموعات المسماة. #37581 (Yakov Olkhovskiy).
- أُضيفت دالة نافذة جديدة
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND]). #37628 (Andrey Zvonov). - تم تنفيذ إمكانية تغيير التعليق لجداول
ReplicatedMergeTree. #37416 (Vasily Nemkov). - أُضيف استعلام
SYSTEM UNFREEZEالذي يحذف النسخة الاحتياطية بالكامل بغض النظر عمّا إذا كان الجدول المقابل محذوفًا أم لا. #36424 (Vadim Volodin).
ميزة تجريبية
- يتيح استخدام
POPULATEفيWINDOW VIEW. #36945 (vxider). - دعم
ALTER TABLE ... MODIFY QUERYفيWINDOW VIEW. #37188 (vxider). - يغيّر طلب السحب هذا سلوك صياغة
ENGINEفيWINDOW VIEWليصبح مماثلًا لما هو عليه فيMATERIALIZED VIEW. #37214 (vxider).
تحسين الأداء
- أُضيفت تحسينات عديدة لـ ARM NEON #38093(Daniel Kutenin), (Alexandra Pilipyuk) ملاحظة: إذا كنت تشغّل إصدارات مختلفة من ClickHouse على عنقود يحتوي على معالج ARM وتستخدم الاستعلامات الموزعة مع GROUP BY على عدة مفاتيح من نوع ثابت الحجم يتّسع لـ 256 بت لكنه لا يتّسع لـ 64 بت، فستكون نتيجة استعلام التجميع غير صحيحة أثناء الترقية. الحل البديل: أجرِ الترقية مع فترة توقّف بدلًا من الترقية المتدرجة.
- تحسين الأداء واستهلاك الذاكرة عند اختيار مجموعة فرعية من الأعمدة من التنسيقات Native وProtobuf وCapnProto وJSONEachRow وTSKV، وجميع التنسيقات ذات اللواحق WithNames/WithNamesAndTypes. سابقًا، عند اختيار مجموعة فرعية فقط من الأعمدة من الملفات بهذه التنسيقات، كانت جميع الأعمدة تُقرأ وتُخزَّن في الذاكرة. الآن لا تُقرأ إلا الأعمدة المطلوبة. يفعّل هذا الـ PR الإعداد
input_format_skip_unknown_fieldsافتراضيًا، لأنه بخلاف ذلك سيُطرَح استثناء عند اختيار مجموعة فرعية من الأعمدة. #37192 (Kruglov Pavel). - أصبح الآن بالإمكان دفع المزيد من عوامل التصفية إلى مستوى أدنى في join. #37472 (Amos Bird).
- تحميل العلامات للأعمدة الضرورية فقط عند قراءة الأجزاء العريضة. #36879 (Anton Kozlov).
- تحسين أداء التجميع عندما تُستخدَم الأعمدة المتفرقة (يمكن تفعيلها عبر الإعداد التجريبي
ratio_of_defaults_for_sparse_serializationفي جداولMergeTree) كوسيطات في الدوال التجميعية. #37617 (Anton Popov). - تحسين الدالة
COALESCEعند استخدام وسيطتين. #37666 (Anton Popov). - استبدال
multiIfبـifعندما تحتويmultiIfعلى شرط واحد فقط، لأن الدالةifأعلى أداءً. #37695 (Anton Popov). - تحسين أداء الدالتين
dictGetDescendantsوdictGetChildrenعبر إنشاء فهرس هرمي مؤقت من الأصل إلى الأبناء لكل استعلام بدلًا من إنشائه عند كل استدعاء للدالة أثناء الاستعلام. كما أصبح بالإمكان تحديدBIDIRECTIONALلسماتHIERARHICAL، وعندها سيحتفظ القاموس بفهرس من الأصل إلى الأبناء في الذاكرة، وبذلك لن تُنشئ الدالتانdictGetDescendantsوdictGetChildrenفهرسًا مؤقتًا لكل استعلام. يغلق #32481. #37148 (Maksim Kita). - قد يُحال الآن التخلص من حالات التجميع إلى مجمّع مؤشرات ترابط. وبالنسبة إلى الاستعلامات التي تحتوي على LIMIT وحالة كبيرة، يوفّر ذلك تسريعًا ملحوظًا؛ فعلى سبيل المثال، أصبح
select uniq(number) from numbers_mt(1e7) group by number limit 100أسرع بنحو 2.5 مرة. #37855 (Nikita Taranov). - تحسين أداء الفرز حسب عمود واحد. #37195 (Maksim Kita).
- تحسين أداء فرز عمود واحد باستخدام تخصيصات طابور الفرز. #37990 (Maksim Kita).
- تحسين أداء دوال معيار Array ودوال المسافة بمقدار يتراوح بين 2x و4x. #37394 (Alexander Gololobov).
- تحسين أداء دوال مقارنة الأرقام باستخدام الإرسال الديناميكي. #37399 (Maksim Kita).
- تحسين أداء ORDER BY مع LIMIT. #37481 (Maksim Kita).
- تحسين أداء الدالة
hasAllباستخدام البنية التحتية للتوزيع الديناميكي. #37484 (Maksim Kita). - تحسين أداء الدوال
greatCircleAngleوgreatCircleDistanceوgeoDistance. #37524 (Maksim Kita). - تحسين أداء الإدراج في MergeTree عند وجود أعمدة متعددة في ORDER BY. #35762 (Maksim Kita).
- إصلاح الاستهلاك المفرط لـ CPU في الخلفية عند وجود عدد كبير من الجداول. #38028 (Maksim Kita).
- تحسين أداء الدالة
notباستخدام التوزيع الديناميكي. #38058 (Maksim Kita). - تحسين التخزين المؤقت الداخلي لأنماط re2 التي تظهر مثلًا في الدالتين LIKE وMATCH. #37544 (Robert Schulze).
- تحسين دالة مولّد قناع البتات للمرشّح بالكامل باستخدام تعليمات AVX-512. #37588 (yaqi-zhao).
- تطبيق أسلوب القراءة
threadpoolعلى محرك التكامل Hive. سيؤدي ذلك إلى تسريع القراءة بشكل ملحوظ. #36328 (李扬). - عندما تكون جميع الأعمدة المطلوب قراءتها هي مفاتيح partition، تُنشأ الأعمدة استنادًا إلى رقم الصف في الملف من دون قراءة ملف Hive فعليًا. #37103 (lgbo).
- دعم استخدام عدة أقراص للتخزين المؤقت لملفات Hive. #37279 (lgbo).
- يمكن أن يمنع تقييد الحد الأقصى لاستخدام cache لكل query تلوّث مجموعة cache بفعالية. المشكلات ذات الصلة. #37859 (Han Shukai).
- يقوم ClickHouse حاليًا بتنزيل جميع الملفات البعيدة مباشرةً إلى cache المحلي (حتى إن لم تُقرأ سوى مرة واحدة)، ما يتسبب كثيرًا في عمليات IO على القرص المحلي. وفي بعض السيناريوهات، قد لا تكون عمليات IO هذه ضرورية، وقد تؤدي بسهولة إلى تراجع الأداء بدلًا من تحسينه. كما هو موضح في الشكل أدناه، عند تشغيل SSB Q1-Q4، تسبّب أداء cache في تراجع الأداء. #37516 (Han Shukai).
- السماح بتقليص قائمة الملفات عبر الأعمدة الافتراضية مثل
_fileو_pathعند القراءة من S3. وهذا مرتبط بـ #37174 , #23494. #37356 (Amos Bird). - في الدالة: CompressedWriteBuffer::nextImpl()، توجد خطوة نسخ عند الكتابة غير ضرورية تحدث كثيرًا أثناء إدراج البيانات. يوضّح ما يلي الفرق مع هذا التصحيح: - قبل: 1. ضغط “working_buffer” إلى “compressed_buffer” 2. نسخ الناتج إلى “out” عند الكتابة - بعد: ضغط “working_buffer” مباشرةً إلى “out”. #37242 (jasperzhu).
تحسين
- دعم الأنواع ذات القيم الافتراضية غير القياسية في ROLLUP وCUBE وGROUPING SETS. يُغلق #37360. #37667 (Dmitry Novik).
- إصلاح جمع stack traces على ARM. يُغلق #37044. يُغلق #15638. #37797 (Maksim Kita).
- سيحاول Client كل عنوان IP تُرجعه DNS resolution حتى ينجح الاتصال. #37273 (Yakov Olkhovskiy).
- السماح باستخدام النوع String بدلًا من Binary في formats Arrow/Parquet/ORC. يضيف طلب السحب هذا 3 settings جديدة لهذا الغرض:
output_format_arrow_string_as_stringوoutput_format_parquet_string_as_stringوoutput_format_orc_string_as_string. default value لجميع settings هيfalse. #37327 (Kruglov Pavel). - تطبيق الإعداد
input_format_max_rows_to_read_for_schema_inferenceعلى إجمالي الصفوف المقروءة من جميع الملفات في globs. في السابق، كان الإعدادinput_format_max_rows_to_read_for_schema_inferenceيُطبَّق على كل ملف في glob على حدة، وفي حال وجود عدد كبير جدًا من nulls، كان يمكن قراءة أولinput_format_max_rows_to_read_for_schema_inferenceصفًا من كل ملف من دون الوصول إلى أي نتيجة. كما زِيدت default value لهذا الإعداد إلى 25000. #37332 (Kruglov Pavel). - إضافة grant منفصل لـ
CLUSTER(إلى جانب توجيه configuration باسمaccess_control_improvements.on_cluster_queries_require_cluster_grantللحفاظ على backward compatibility، وتكون قيمته الافتراضيةfalse). #35767 (Azat Khuzhin). - إضافة دعم schema inference لـ
hdfsCluster. #35812 (Nikita Mikhaylov). - تنفيذ خوارزمية load balancing
least_usedللأقراص داخل volume (disk configuration متعدد الأقراص). #36686 (Azat Khuzhin). - تعديل HTTP Endpoint بحيث يعيد الإحصاءات الكاملة ضمن header
X-ClickHouse-Summaryعندما تكونsend_progress_in_http_headers=0(إذ كان يعيد سابقًا أصفارًا فقط). - تعديل HTTP Endpoint بحيث يعيد header X-ClickHouse-Exception-Codeعندما يكون Progress قد أُرسل مسبقًا (send_progress_in_http_headers=1) - تعديل HTTP Endpoint بحيث يعيدHTTP_REQUEST_TIMEOUT(408) بدلًا منHTTP_INTERNAL_SERVER_ERROR(500) عند أخطاءTIMEOUT_EXCEEDED. #36884 (Raúl Marín). - السماح للمستخدم بمعاينة grants الخاصة بـ granted roles. #36941 (nvartolomei).
- عدم حساب التكامل عدديًا، واستخدام دوال CDF بدلًا من ذلك. يسرّع هذا التنفيذ ويزيد precision. يُصلح هذا #36714. #36953 (Nikita Mikhaylov).
- أُضيف تنفيذ افتراضي للنوع Nothing في الدوال. الآن ستُرجِع معظم الدوال عمودًا من النوع Nothing إذا كانت إحدى وسيطاتها من النوع Nothing. ويحلّ هذا أيضًا مشكلة الدوال مثل arrayMap/arrayFilter وما شابهها عندما تكون إحدى الوسيطات مصفوفة فارغة. سابقًا كانت الاستعلامات مثل
select arrayMap(x -> 2 * x, []);تفشل لأن الدالة داخل lambda لا يمكنها العمل مع النوعNothing، أما الآن فتعيد هذه الاستعلامات مصفوفة فارغة من النوعArray(Nothing). كما أُضيف دعم لمصفوفات الأنواع Nullable في دوال مثل arrayFilter/arrayFill. سابقًا كانت الاستعلامات مثلselect arrayFilter(x -> x % 2, [1, NULL])تفشل، أما الآن فهي تعمل (إذا كانت نتيجة lambda هي NULL، فلن تُضمَّن هذه القيمة في النتيجة). يُغلق #37000. #37048 (Kruglov Pavel). - الآن، إذا كان لدى shard نسخة متماثلة محلية، فإننا ننشئ خطة محلية وخطة للقراءة من جميع النسخ المتماثلة البعيدة. ولهما initiator مشترك ينسّق عملية القراءة. #37204 (Nikita Mikhaylov).
- لم نعد نوقف بدء تشغيل الخادم إذا لم يُضبط خيار الإعداد “mark_cache_size” صراحةً. #37326 (Robert Schulze).
- يتيح تحديد
NULL/NOT NULLمباشرةً بعد النوع في تعريف العمود. #37337 (Igor Nikonov). - تحسين read buffer لمقطع الملف PARTIALLY_DOWNLOADED. #37338 (xiedeyantu).
- محاولة تحسين معالجة الدوال ذات short circuit لإصلاح المشكلات في اختبارات stress. #37384 (Kruglov Pavel).
- يُغلق #37395. #37415 (Memo).
- إصلاح حالة توقف متبادل نادرة جدًا أثناء fetch لـ part في zero-copy replication. إصلاح #37423. #37424 (metahys).
- عدم السماح بإنشاء storage بتنسيق data غير معروف. #37450 (Kruglov Pavel).
- تعيين القيمة الافتراضية للإعداد
global_memory_usage_overcommit_max_wait_microsecondsإلى 5 ثوانٍ. وإضافة معلومات عنOvercommitTrackerإلى رسالة استثناء OOM. وإضافة حدث profile باسمMemoryOvercommitWaitTimeMicroseconds. #37460 (Dmitry Novik). - عدم عرض
-0.0كزمن CPU في clickhouse-client. قد يظهر ذلك بسبب أخطاء التقريب. هذا يُغلق #38003. وهذا يُغلق #38038. #38064 (Alexey Milovidov). - واجهة Play: الإبقاء على عناصر التحكم في مكانها عند تمرير الصفحة أفقيًا. وهذا يجعل التعديلات مريحة حتى إذا كان الجدول عريضًا وتم تمريره كثيرًا إلى اليمين. وقد اقترح هذه الميزة Maksym Tereshchenko من CaspianDB. #37470 (Alexey Milovidov).
- تعديل
query divفي play.html بحيث يمكن توسيعه إلى أكثر من 20% من الارتفاع. عند وجود استعلامات طويلة جدًا، يكون من المفيد توسيع عنصرtextarea، لكن حاليًا، وبسبب الارتفاع الثابت لـdiv، فإنtextareaالموسّع يحجبdata divالموجود أسفله. مع هذا الإصلاح، سيؤدي توسيع عنصرtextareaإلى دفعdata divإلى الأسفل/الأعلى بحيث لا يعودtextareaالموسّع يحجبه. كما يحافظ أيضًا على عرض مربع الاستعلام بنسبة 100% حتى عندما يعدّل المستخدم حجمquery textarea. #37488 (guyco87). - تمت إضافة
ProfileEventsلفحص نوع الأجزاء المكتوبة (insertedأوmerged) (Inserted{Wide/Compact/InMemory}Parts,MergedInto{Wide/Compact/InMemory}Parts). وأُضيف العمودpart_typeإلىsystem.part_log. يحل #37495. #37536 (Anton Popov). - تحسين في clickhouse-keeper: نقل السجلات التالفة إلى مجلد يحمل طابعًا زمنيًا. #37565 (Antonio Andelic).
- عدم كتابة الأعمدة المنتهية الصلاحية بواسطة TTL بعد عمليات الدمج اللاحقة (في السابق، كان الدمج/التحسين الأول فقط للجزء لا يكتب الأعمدة المنتهية الصلاحية بواسطة TTL، بينما كانت جميع العمليات الأخرى تكتبها). #37570 (Azat Khuzhin).
- نتيجة أكثر دقة للدالة المتنوعة
dumpColumnStructureعند وجود أعمدة LowCardinality أو Sparse. في الإصدارات السابقة، كانت هذه الدوال تحوّل الوسيطة إلى full column قبل إعادة النتيجة. هذا مطلوب لتقديم إجابة في #6935. #37633 (Alexey Milovidov). - clickhouse-keeper: تخزين معرّفات الجلسات الفريدة فقط من أجل watches. #37641 (Azat Khuzhin).
- إصلاح الخطأ المحتمل “Cannot write to finalized buffer”. #37645 (Azat Khuzhin).
- إضافة الإعداد
support_batch_deleteلـDiskS3لتعطيل استدعاءات حذف كائنات متعددة، وهي غير مدعومة في Google Cloud Storage. #37659 (Fred Wulff). - إضافة خيار لتعطيل connection pooling في ODBC bridge. #37705 (Anton Kozlov).
- أضيف دعم الخاصية
HIERARCHICALالقابلة لأن تكون nullable في Dictionaries إلى الدوالdictGetHierarchy,dictIsIn,dictGetChildren,dictGetDescendants. يغلق #35521. #37805 (Maksim Kita). - إظهار معلومات مرتبطة بإصدار BoringSSL في الجدول
system.build_options. #37850 (Bharat Nallan). - الآن يقوم clickhouse-server بإزالة أدلة
delete_tmpعند بدء تشغيل الخادم. يصلح #26503. #37906 (alesapin). - تنظيف broken detached parts بعد انتهاء المهلة. يغلق #25195. #37975 (Kseniia Sumarokova).
- الآن، في عائلة محركات الجداول MergeTree، ستُزال فورًا الأجزاء التي تعذّر نقلها. #37994 (alesapin).
- الآن، إذا كان الإعداد
always_fetch_merged_partمُمكّنًا، فستحاول عمليات الدمج في ReplicatedMergeTree العثور على الأجزاء على النسخ المتماثلة الأخرى بوتيرة أقل، مما يخفف الحمل على [Zoo]Keeper. #37995 (alesapin). - أُضيفت أيضًا امتيازات ضمنية مع خيار المنح. على سبيل المثال، يتيح
GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTIONالآن للمستخدمAتنفيذGRANT CREATE VIEW ON test.* TO B. #38017 (Vitaly Baranov).
تحسينات البناء/الاختبار/التغليف
- استخدام
clang-14والإصدار 14 من بنية LLVM الأساسية في عمليات البناء. ويغلق هذا #34681. #34754 (Alexey Milovidov). ملاحظة: يحتويclang-14على خلل في ThreadSanitizer، مما يؤثر سلبًا في عمل CI لدينا. - السماح بالتخلي عن الامتيازات عند بدء التشغيل. يبسّط هذا صور Docker. يغلق #36293. #36341 (Alexey Milovidov).
- إضافة التدقيق الإملائي للوثائق إلى CI. #37790 (Vladimir C).
- إصلاح التجريد المفرط الذي أزال قيمة hash المضمّنة المطلوبة للتحقق من اتساق الملف التنفيذي. #37993 (Robert Schulze).
إصلاحات الأخطاء
- إصلاح عبارتي
SELECT ... INTERSECTوEXCEPT SELECTمع أنواع السلاسل النصية الثابتة. #37738 (Antonio Andelic). - إصلاح
GROUP BYمعAggregateFunction(أي عند استخدامGROUP BYعلى عمود من النوعAggregateFunction). #37093 (Azat Khuzhin). - (WINDOW VIEW تجريبية) إصلاح
addDependencyفي WindowView. يمكن إعادة إنتاج هذا الخطأ كما في #37237. #37224 (vxider). - إصلاح عدم الاتساق في ميزة ORDER BY … WITH FILL. فقد يمكن للاستعلام الذي يحتوي على ORDER BY … WITH FILL أن يُنتج صفوفًا إضافية عند وجود عدة أعمدة WITH FILL. #38074 (Yakov Olkhovskiy).
- ينقل طلب السحب هذا
addDependencyمن المُنشئ إلىstartup()لتجنّب إضافة تبعية إلى جدول محذوف، مع إصلاح #37237. #37243 (vxider). - إصلاح إدراج القيم الافتراضية للقيم المفقودة في التنسيقات العمودية. سابقًا، كانت الأعمدة المفقودة تُملأ بالقيم الافتراضية الخاصة بالأنواع لا بالأعمدة. #37253 (Kruglov Pavel).
- (نوع Object تجريبي) إصلاح بعض حالات إدراج المصفوفات المتداخلة في أعمدة من النوع
Object. #37305 (Anton Popov). - إصلاح أخطاء غير متوقعة ناتجة عن تعارض السلاسل النصية الثابتة في aggregate function وprewhere وjoin. إغلاق #36891. #37336 (Vladimir C).
- إصلاح projections مع GROUP/ORDER BY في query وoptimize_aggregation_in_order (إذ كانت النتيجة سابقًا غير صحيحة لأنه لم يكن يُنفَّذ سوى الفرز النهائي). #37342 (Azat Khuzhin).
- إصلاح الخطأ المتعلق بالرموز في اسم المفتاح في S3. إصلاح #33009. #37344 (Vladimir Chebotarev).
- إطلاق استثناء عند استخدام GROUPING SETS مع ROLLUP أو CUBE. #37367 (Dmitry Novik).
- إصلاح LOGICAL_ERROR في getMaxSourcePartsSizeForMerge أثناء merges (في حال تم تحديد قيم غير قياسية وأكبر لكل من
background_pool_size/background_merges_mutations_concurrency_ratioفيconfig.xml(الطريقة الجديدة) وليس فيusers.xml(الطريقة المهجورة)). #37413 (Azat Khuzhin). - التوقف عن إزالة UTF-8 BOM في RowBinary format. #37428 (Paul Loyd). #37428 (Paul Loyd).
- إصلاح خطأ في clickhouse-keeper: إصلاح الاسترداد القسري لعنقود أحادي العقدة. #37440 (Antonio Andelic).
- إصلاح خطأ منطقي في دوال normalizeUTF8. يُغلق #37298. #37443 (Maksim Kita).
- إصلاح تحويل cast لـ lowcard الخاص بـ Nullable في JoinSwitcher، وإغلاق #37385. #37453 (Vladimir C).
- إصلاح إخراج Tuples المسمّاة في تنسيقات ORC/Arrow/Parquet. #37458 (Kruglov Pavel).
- إصلاح تحسين الدوال الأحادية في عبارة ORDER BY عند وجود GROUPING SETS. يُصلح #37401. #37493 (Dmitry Novik).
- إصلاح خطأ عند تنفيذ join مع Dictionary في بعض الحالات. إغلاق #37386. #37530 (Vladimir C).
- حظر
optimize_aggregation_in_orderمعGROUPING SETS(يصلحLOGICAL_ERROR). #37542 (Azat Khuzhin). - إصلاح معلومات dump غير الصحيحة لـ ActionsDAG. #37587 (zhanglistar).
- إصلاح تحويل الأنواع في استعلامات UNION (قد يؤدي إلى LOGICAL_ERROR). #37593 (Azat Khuzhin).
- إصلاح المُعدِّل
WITH FILLمع intervals سالبة في عبارةSTEP. يُصلح #37514. #37600 (Anton Popov). - إصلاح الاستخدام غير الصحيح لـ Array في joinGet عندما تكون
join_use_nulls = 1. يُصلح هذا #37562. #37650 (Amos Bird). - إصلاح عدم تطابق عدد columns في CROSS JOIN، وإغلاق #37561. #37653 (Vladimir C).
- إصلاح خطأ تجزئة في
show create tableمن MySQL database عند تهيئته باستخدام named collections. يُغلق #37683. #37690 (Kseniia Sumarokova). - إصلاح تعذّر بدء RabbitMQ Storage عند إعادة تشغيل server إذا كان التخزين قد أُنشئ بدون SETTINGS clause. يُغلق #37463. #37691 (Kseniia Sumarokova).
- دوال SQL user defined functions تعطل أوامر CREATE/DROP في وضع readonly. يُغلق #37280. #37699 (Maksim Kita).
- إصلاح formatting لـ arguments من نوع Nullable في executable user defined functions. يُغلق #35897. #37711 (Maksim Kita).
- إصلاح التحسين المفعّل عبر الإعداد
optimize_monotonous_functions_in_order_byفي الاستعلامات الموزعة. يُصلح #36037. #37724 (Anton Popov). - إصلاح احتمال حدوث logical error:
Invalid Field get from type UInt64 to type Float64في table function values. يُغلق #37602. #37754 (Kruglov Pavel). - إصلاح احتمال حدوث segfault أثناء schema inference في حال وقوع استثناء في باني
SchemaReader. يُغلق #37680. #37760 (Kruglov Pavel). - إصلاح الإعداد
cast_ipv4_ipv6_default_on_conversion_errorلدالة cast الداخلية. يُغلق #35156. #37761 (Maksim Kita). - إصلاح خطأ
toStringفيDatatypeDate32. #37775 (LiuNeng). - جرى تحويل إعداد
clickhouse-keeperdead_session_check_period_msإلى ميكروثانية (بضربه في 1000)، ما أدى إلى تنظيف sessions الميتة بعد عدة دقائق فقط (بدلاً من 500 مللي ثانية). #37824 (Michael Lex). - إصلاح احتمال ظهور “No more packets are available” في الاستعلامات الموزعة (عندما يكون
async_socket_for_remote/use_hedged_requestsمعطّلاً). #37826 (Azat Khuzhin). - (WINDOW VIEW تجريبية) عدم تنفيذ drop للـ target table الداخلي عند تنفيذ
ALTER TABLE ... MODIFY QUERYفيWindowView. #37879 (vxider). - إصلاح ملكية directory لدليل coordination في Docker image الخاص بـ
clickhouse-keeper. يُصلح #37914. #37915 (James Maidment). - إصلاح في Dictionaries للاستعلام المخصّص مع حقل التحديث و
{condition}. يُغلق #33746. #37947 (Maksim Kita). - إصلاح احتمال ظهور نتيجة غير صحيحة لـ
SELECT ... WITH FILLعندما يجب تطبيقORDER BYبعد ناتجWITH FILL(على سبيل المثال، في الاستعلام الخارجي). كانت النتيجة غير الصحيحة ناتجة عن تحسين لتعبيراتORDER BY(#35623). يُغلق #37904. #37959 (Yakov Olkhovskiy). - (WINDOW VIEW تجريبية) إضافة columns الافتراضية المفقودة عند الدفع إلى target table في
WindowView، إصلاح #37815. #37965 (vxider). - إصلاح stack frame كبير جداً كان سيتسبب في فشل الترجمة البرمجية. #37996 (Han Shukai).
- عند تفعيل enable_filesystem_query_cache_limit، يظهر الخطأ Reserved cache size exceeds the remaining cache size. #38004 (xiedeyantu).
- إصلاح تحويل الأنواع في استعلامات UNION (قد يؤدي إلى LOGICAL_ERROR). #34775 (Azat Khuzhin).
- قد لا تتم إعادة جدولة merge الخاصة بـ TTL إذا كان BackgroundExecutor مشغولًا. تتم زيادة —merges_with_ttl_counter في selectPartsToMerge() —سيتم تجاهل مهمة —merge إذا كان BackgroundExecutor مشغولًا —ولن يتم تقليل —merges_with_ttl_counter. #36387 (lthaooo).
- إصلاح قيمة Settings المتجاوزة لـ
normalize_function_names. #36937 (李扬). - إصلاح window functions ذات التناقص الأُسّي مع الزمن. وأصبحت الآن تراعي حدود window. #36944 (Vladimir Chebotarev).
- إصلاح خطأ محتمل من نوع heap-use-after-free عند قراءة system.projection_parts و system.projection_parts_columns. يُصلح هذا #37184. #37185 (Amos Bird).
- تم إصلاح سلوك الثواني الكسرية في
DateTime64قبل Unix epoch. #37697 (Andrey Zvonov). #37039 (李扬).
إصدار ClickHouse 22.5، 2022-05-19. العرض التقديمي، الفيديو
ملاحظات الترقية
- الآن، لن تؤدي عمليات الدمج في الخلفية وعمليات التعديل و
OPTIMIZEإلى زيادة مقاييسSelectedRowsوSelectedBytes. لكنها (ما تزال) ستزيدMergedRowsوMergedUncompressedBytesكما كان الحال سابقًا. يؤثر هذا التغيير في قيم المقاييس فقط، ويجعلها أدق. ولا يسبب أي عدم توافق، لكن قد تلاحظ تغيّرًا في المقاييس، لذا أدرجناه ضمن هذه الفئة. #37040 (Nikolai Kochetov). - جرى تحديث وحدة BoringSSL إلى الإصدار الرسمي المتوافق مع FIPS، ما يجعل ClickHouse متوافقًا مع FIPS. #35914 (Meena-Renganathan). وقد أُزيلت الشيفرتان
aes-192-cfb128وaes-256-cfb128لأنهما غير مضمنتين في إصدار BoringSSL المعتمد من FIPS. - أُزيل الإعداد
max_memory_usageمن ملف تعريف المستخدمdefaultفيusers.xml. ويتيح ذلك حدود ذاكرة مرنة للاستعلامات بدلًا من الحد القديم الصارم البالغ 10 جيجابايت. - عُطِّل الإعداد
log_query_threadsافتراضيًا. وهو يتحكم في تسجيل الإحصاءات الخاصة بكل خيط تنفيذ يشارك في تنفيذ الاستعلام. وبعد دعم القراءات غير المتزامنة، أصبح العدد الإجمالي لمعرّفات خيوط التنفيذ المميزة كبيرًا جدًا، وأصبح التسجيل فيquery_thread_logمكلفًا جدًا. #37077 (Alexey Milovidov). - أُزيلت الدالة
groupArraySortedلاحتوائها على خطأ. #36822 (Alexey Milovidov).
ميزة جديدة
- تمكين التخصيص الزائد للذاكرة افتراضيًا. #35921 (Dmitry Novik).
- إضافة دعم لـ GROUPING SETS في عبارة GROUP BY. ويدعم هذا التنفيذ معالجة مجموعات التجميع بالتوازي. #33631 (Dmitry Novik).
- تمت إضافة الجدول
system.certificates. #37142 (Yakov Olkhovskiy). - إضافة الدوال
h3Lineوh3Distanceوh3HexRing. #37030 (Bharat Nallan). - أداة تشخيص جديدة تعتمد على ملف تنفيذي واحد (clickhouse-diagnostics). #36705 (Dale McDiarmid).
- إضافة تنسيق الإخراج
Prometheus#36051. #36206 (Vladimir C). - إضافة تنسيق الإدخال
MySQLDump. يقرأ جميع البيانات من استعلامات INSERT الخاصة بجدول واحد في ملف dump. وإذا كان هناك أكثر من جدول، فسيقرأ البيانات من الجدول الأول افتراضيًا. #36667 (Kruglov Pavel). - عرض الحقلين
total_rowsوtotal_bytesفيsystem.tablesللجداول المؤقتة. #36401. #36439 (xiedeyantu). - السماح بتجاوز
parts_to_delay_insertوparts_to_throw_insertباستخدام إعدادات على مستوى الاستعلام. وإذا كانت هذه الإعدادات معرّفة، فستتقدّم على إعدادات مستوى الجدول. #36371 (Memo).
ميزة تجريبية
- تم تنفيذ دوال المسافة L1 وL2 وLinf وCosine للمصفوفات، ودوال المعيار L1 وL2 وLinf للمصفوفات. #37033 (qieqieplus). ملاحظة: ستُعاد تسمية هذه الدوال.
- تحسين استعلام
WATCHفي WindowView: 1. تقليل زمن الوصول عند إتاحة نتائج الاستعلام عبر استدعاء الإشارةfire_condition. 2. تسريع عملية إلغاء الاستعلام (ctrl-c) عبر التحقق منisCancelled()بوتيرة أعلى. #37226 (vxider). - إضافة إمكانات introspection لإزالة filesystem cache. #36802 (Han Shukai).
- أُضيفت دالة hash جديدة باسم
wyHash64في SQL. #36467 (olevino). - تحسين لقواعد بيانات Replicated: أُضيف استعلام
SYSTEM SYNC DATABASE REPLICAالذي يتيح مزامنة البيانات الوصفية للجداول داخل قاعدة بيانات Replicated، لأن المزامنة حاليًا غير متزامنة. #35944 (Nikita Mikhaylov). - تحسين لـ remote filesystem cache: تحسين القراءة من cache. #37054 (Kseniia Sumarokova). تحسين استعلام
SYSTEM DROP FILESYSTEM CACHE: الخيار<path>والخيارFORCE. #36639 (Kseniia Sumarokova). - تحسين للبيانات شبه المهيكلة: السماح بتحويل الأعمدة من النوع
Object(...)إلىObject(Nullable(...)). #36564 (awakeljw). - تحسين للنسخ المتماثلة المتوازية: ننشئ مفسرًا محليًا إذا أردنا تنفيذ استعلام على replica
localhost. ولكن عند تنفيذ استعلام على عدة replicas، فإننا نعتمد على وجود connection حتى تتمكن replicas من التواصل مع coordinator. وقد تحسن هذا الآن، وأصبحت replica localhostقادرة على التواصل مع coordinator مباشرةً ضمن العملية نفسها. #36281 (Nikita Mikhaylov).
تحسين الأداء
- تحسين أداء الدالتين التجميعيتين
avgوsumعند استخدامهما بدون تعبير GROUP BY. #37257 (Maksim Kita). - تحسين أداء الدوال الحسابية أحادية المعامل (
bitCount,bitNot,abs,intExp2,intExp10,negate,roundAge,roundDuration,roundToExp2,sign) باستخدام الإرسال الديناميكي. #37289 (Maksim Kita). - تحسين أداء ORDER BY وMergeJoin وإدراج البيانات في MergeTree باستخدام ترجمة JIT لمقارن أعمدة الفرز. #34469 (Maksim Kita).
- تغيير بنية
system.asynchronous_metric_log. سيستهلك هذا مساحة أقل بحوالي 10 مرات. ويُغلق هذا #36357. أُزيل الحقلevent_time_microsecondsلأنه غير مفيد. #36360 (Alexey Milovidov). - تحميل العلامات للأعمدة المطلوبة فقط عند قراءة wide parts. #36879 (Anton Kozlov).
- تحسين أداء ذاكرة التخزين المؤقت لأوصاف الملفات عبر تضييق نطاقات
mutex. #36682 (Anton Kozlov). - تحسين أداء القراءة من التخزين
Fileومن table functionsfileعندما يحتوي المسار على globs ويحتوي الدليل المطابِق على عدد كبير من الملفات. #36647 (Anton Popov). - تطبيق parsing متوازي على input format
HiveText، ما قد يسرّع parsing لـ HiveText بمقدار الضعف عند قراءة ملف محلي. #36650 (李扬). - إن
HashJoinالافتراضي غير آمن على مستوى thread عند إدراج صفوف الجدول الأيمن، ولذلك يعمل في thread واحدة. وعندما يكون الجدول الأيمن كبيرًا، تصبح عملية join بطيئة جدًا مع انخفاض استخدام CPU. #36415 (lgbo). - السماح بإعادة كتابة
select countDistinct(a) from tإلىselect count(1) from (select a from t groupBy a). #35993 (zhanglistar). - تحويل سلسلة OR LIKE إلى multiMatchAny. وسيُفعَّل هذا عندما تتوفر ثقة أكبر في أنه يعمل كما ينبغي. #34932 (Daniel Kutenin).
- تحسين أداء بعض الدوال باستخدام التضمين. #34544 (Daniel Kutenin).
- إضافة تفرّع لتجنب
memcpyغير الضروري فيreadBig. ويحسّن ذلك الأداء إلى حدّ ما. #36095 (jasperzhu). - تنفيذ مفتاح GROUP BY جزئي لأجل
optimize_aggregation_in_order. #35111 (Azat Khuzhin).
تحسين
- عرض أسماء الملفات المسببة للخطأ عند حدوث أخطاء في التحليل أثناء تنفيذ دوال الجداول
fileوs3وurl. #36314 (Anton Popov). - أصبح من الممكن زيادة عدد الخيوط المستخدمة لتنفيذ العمليات الخلفية (عمليات الدمج، والـmutations، وعمليات النقل، وعمليات الجلب) في وقت التشغيل إذا كانت محددة في ملف config على المستوى الأعلى. #36425 (Nikita Mikhaylov).
- ستُثبَّت الآن وظائف تحويل التاريخ والوقت التي تُنتج وقتًا يسبق 1970-01-01 00:00:00 مع مناطق زمنية ذات ساعات/دقائق جزئية عند الصفر بدلًا من تجاوز السعة. وهذا امتداد لـ https://github.com/ClickHouse/ClickHouse/pull/29953 الذي يعالج https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 . وقد صُنِّف ذلك كتحسين لأنه سلوك تحدده آلية التنفيذ (وحالة نادرة جدًا)، ويُسمح لنا بتغييره على نحو غير متوافق. #36656 (Amos Bird).
- إضافة تحذير إذا كان أحدهم يشغّل clickhouse-server بمستوى السجل “test”. أُضيف مستوى السجل “test” مؤخرًا، ولا يمكن استخدامه في بيئة الإنتاج بسبب التدهور الحتمي وغير القابل للتجنب والقاتل والمهدِّد للحياة في الأداء. #36824 (Alexey Milovidov).
- تحليل قواعد الترتيب في CREATE TABLE، مع طرح استثناء أو تجاهلها. يغلق #35892. #36271 (yuuch).
- يتيح الخيار
compatibility_ignore_auto_increment_in_create_tableتجاهل الكلمة المفتاحيةAUTO_INCREMENTفي تعريف عمود لتبسيط الترحيل من MySQL. #37178 (Igor Nikonov). - إضافة الأسماء المستعارة
JSONLinesوNDJSONلـJSONEachRow. يغلق #36303. #36327 (flynn). - تقييد الحد الأقصى لعدد الأقسام التي يمكن الاستعلام عنها لكل جدول Hive، لتجنب الاستهلاك المفرط للموارد. #37281 (lgbo).
- أُضيف تحويل نوع ضمني للوسيطة الثانية في الدالة
h3kRingلتحسين سهولة الاستخدام. يغلق #35432. #37189 (Maksim Kita). - إصلاح مؤشر التقدم لـ
INSERT SELECTفيclickhouse-localلأي استعلام، وكذلك تقدم الملفات في العميل، ليصبح أكثر دقة. #37075 (Kseniia Sumarokova). - إصلاح خلل قد يؤدي إلى بقاء الأجزاء القديمة منسية في عائلة محركات الجداول MergeTree عند حدوث أعطال في filesystem أثناء إزالة الأجزاء. قبل هذا الإصلاح، لم تكن تُزال إلا بعد أول إعادة تشغيل للخادم. #37014 (alesapin).
- تنفيذ وضع جديد للتعامل مع سياسات الصفوف يمكن تمكينه في ملف configuration الرئيسي، ويتيح للمستخدمين الذين ليست لديهم سياسات صفوف متساهلة قراءة الصفوف. #36997 (Vitaly Baranov).
- واجهة Play: ستُحاذى الأرقام من النوع Nullable إلى اليمين في خلايا الجدول. هذا يغلق #36982. #36988 (Alexey Milovidov).
- واجهة Play UI: إذا كانت هناك صف واحد في النتيجة وأكثر من بضعة أعمدة، فاعرض النتيجة عموديًا. استكمال لـ #36811. #36842 (Alexey Milovidov).
- تنظيف CSS في Play UI. أصبحت البكسلات موزعة بشكل أكثر توازنًا. وتحسّنت سهولة الاستخدام للمحتوى الطويل في خلايا الجدول. #36569 (Alexey Milovidov).
- إنهاء مخازن الكتابة المؤقتة في حال حدوث استثناء لتجنب تنفيذ ذلك داخل الـ destructors. نأمل أن يؤدي هذا إلى إصلاح: #36907. #36979 (Kruglov Pavel).
- بعد #36425 أصبحت إعدادات مثل
background_fetches_pool_sizeمتقادمة ويمكن أن تظهر في config ذي المستوى الأعلى، لكن ClickHouse كان يطرح استثناءً مثلError updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.تم إصلاح ذلك. #36917 (Nikita Mikhaylov). - إضافة معلومات تشخيصية إضافية (عند الاقتضاء) عند إرسال الاستثناء إلى خادم آخر. #36872 (tavplubix).
- السماح بتنفيذ دوال hash باستخدام arguments من النوع
Array(Tuple(..)). #36812 (Anton Popov). - تمت إضافة إعداد
user_defined_pathفي config. #36753 (Maksim Kita). - السماح باستخدام macro الخاص بـ cluster في table function
s3Cluster. #36726 (Vadim Volodin). - إلغاء استعلامات INSERT بشكل صحيح في
clickhouse-client/clickhouse-local. #36710 (Azat Khuzhin). - السماح بإلغاء استعلام مع الاحتفاظ في الوقت نفسه بـ Query id مناسب في
MySQLHandler. #36699 (Amos Bird). - إضافة العمود
is_all_data_sentإلىsystem.processes، وتحسين فحص التقوية في الاختبارات الداخلية بالاعتماد عليه. #36649 (Azat Khuzhin). - أصبحت المقاييس المتعلقة بالوقت المستغرَق في القراءة من S3 تُحتسب الآن بشكل صحيح. إغلاق #35483. #36572 (Alexey Milovidov).
- السماح باستخدام file descriptors في table function file إذا كان يعمل في clickhouse-local. #36562 (wuxiaobai24).
- السماح بأسماء عناصر tuple التي تبدأ بأرقام. #36544 (Anton Popov).
- يمكن الآن لـ clickhouse-benchmark قراءة معلومات authentication من متغيرات البيئة. #36497 (Anton Kozlov).
- تحسين في
clickhouse-keeper: إضافة دعم للاسترداد القسري، ما يتيح لك إعادة تهيئة cluster دون quorum. #36258 (Antonio Andelic). - تحسين استدلال المخطط لكائنات JSON. #36207 (Kruglov Pavel).
- إعادة هيكلة الشيفرة المتعلقة باستدلال المخطط باستخدام globs. لا يُجرَّب الملف التالي من glob إلا إذا كان ذلك منطقيًا (في السابق، كنا نجرّب الملف التالي عند حدوث أي error). كما يُصلح ذلك أيضًا #36317. #36205 (Kruglov Pavel).
- إضافة grant منفصل باسم
CLUSTER(وتوجيه إعدادaccess_control_improvements.on_cluster_queries_require_cluster_grantالذي تكون قيمته الافتراضيةfalseحفاظًا على backward compatibility). #35767 (Azat Khuzhin). - إذا أصبحت كمية الذاكرة المطلوبة متاحة قبل إيقاف query المحدد، فستواصل جميع queries المنتظرة التنفيذ. والآن لا نوقف أي query إذا تحررت الذاكرة قبل اللحظة التي يعلم فيها query المحدد بالإلغاء. #35637 (Dmitry Novik).
- اكتشاف قيم Nullable في Protobuf. في proto3، لا تُرسَل القيم الافتراضية عبر wire. وهذا يجعل التمييز بين القيم NULL والقيم الافتراضية في أعمدة Nullable أمرًا غير مباشر. والطريقة القياسية للتعامل مع هذه المشكلة هي استخدام Google wrappers لتغليف target value داخل رسالة داخلية (انظر https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto). في هذه الحالة، يُفسَّر الحقل المفقود على أنه قيمة NULL، ويُفسَّر الحقل الذي يفتقد قيمةً على أنه قيمة افتراضية، ويُفسَّر الحقل ذو القيمة العادية على أنه قيمة عادية. ومع ذلك، يفسّر ClickHouse Google wrappers على أنها أعمدة Nested. ونقترح إدخال سلوك خاص لاكتشاف Google wrappers وتفسيرها كما هو موضح أعلاه. على سبيل المثال، من أجل serialize القيم للعمود Nullable
test، سنستخدمgoogle.protobuf.StringValue testفي schema .proto الخاصة بنا. لاحظ أن هذه الأنواع تُعرف باسم “well-known types” في Protobuf، وهي مُنفَّذة داخل المكتبة نفسها. #35149 (Jakub Kuklis). - إضافة دعم لتحديد
content_typeفي إعدادات HTTP handler المعرّفة مسبقًا والثابتة. #34916 (Roman Nikonov). - عرض تحذير بشكل صحيح عند استخدام clickhouse-client —file بدون —external يسبقه. يُغلق #34747. #34765 (李扬).
- تحسين محرك قاعدة بيانات MySQL ليتوافق مع نوع البيانات binary(0). #37232 (zzsmdfj).
- تحسين تقرير JSON الخاص بـ clickhouse-benchmark. #36473 (Tian Xinhui).
- قد يرفض server البدء إذا تعذر عليه resolve hostname الخاص بـ Dictionary خارجي في ClickHouse. تم إصلاح ذلك. يُصلح #36451. #36463 (tavplubix).
تحسينات البناء/الاختبار/التغليف
- أصبح
clickhouse-keeperلمعماريةx86_64مرتبطًا ربطًا ثابتًا مع musl ولم يعد يعتمد على أي مكتبات نظام. #31833 (Alexey Milovidov). - أصبحت إصدارات ClickHouse لمعمارية
PowerPC64LEمتاحة الآن عبر البرنامج النصي العام للتثبيتcurl https://clickhouse.com/ | shوعبر الرابط المباشرhttps://builds.clickhouse.com/master/powerpc64le/clickhouse. #37095 (Alexey Milovidov). - قصر توليد الشيفرة الخاصة بـ PowerPC على Power8 لتحسين التوافق. يُغلق هذا #36025. #36529 (Alexey Milovidov).
- تبسيط اختبار الأداء. سيمنحنا ذلك فرصة لاستخدامه. #36769 (Alexey Milovidov).
- جعل مقارنة الأداء تفشل عند وجود أخطاء في التقرير. #34797 (Mikhail f. Shiryaev).
- إضافة دعم ZSTD إلى Arrow. يعالج هذا #35283. #35486 (Sean Lafferty).
إصلاحات الأخطاء
- يستخرج
Version IDمنURIإذا كان موجودًا، ويضيف طلبًا إلىAWS HTTP URI. يغلق #31221. - [x] استخراجVersion IDمنURIإذا كان موجودًا وإعادة تركيبه من دونه. - [x] تهيئة كائنAWS HTTP URIبالطلب. - [x] اختبارات الوحدة:gtest_s3_uri- [x] إزالة commit الخاص بـ instrumentation. #34571 (Saad Ur Rahman). - إصلاح alias الخاص بـ attribute.values في system.opentelemetry_span_log ليصبح values بدلًا من keys. #37275 (Aleksandr Razumov).
- إصلاح التحويل من Nullable(String) إلى Nullable(Bool/IPv4/IPv6). يغلق #37221. #37270 (Kruglov Pavel).
- ميزة Experimental: إصلاح تنفيذ mutations في الجداول التي تحتوي على columns من النوع
Object. أصبح استخدام subcolumns من النوعObjectفي expression الخاصة بـWHEREضمن queries من نوعUPDATEأوDELETEمسموحًا الآن أيضًا، وكذلك إجراء (DROP,MODIFY) على subcolumns المنفصلة. يعالج #37205. #37266 (Anton Popov). - لا يحتاج Kafka إلى
group.idفي مرحلة المنتج. ويمكنك العثور في سجل Console على تحذير يصف هذه المشكلة:2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev). - ميزة Experimental (WindowView): تحديث
max_fired_watermarkبعد إطلاق blocks فعليًا، في حال حذف بيانات لم تُطلق بعد. #37225 (vxider). - إصلاح “Cannot create column of type Set” في distributed queries مع LIMIT BY. #37193 (Azat Khuzhin).
- ميزة Experimental: الآن لن يتم إنهاء query
WATCH EVENTSفي WindowView بسبب Chunk غير فارغ أُنشئ فيWindowViewSource.h:58. #37182 (vxider). - تفعيل
enable_global_with_statementمن أجل subqueries، يغلق #37141. #37166 (Vladimir C). - إصلاح التحويل الضمني لـ optimize_skip_unused_shards_rewrite_in. #37153 (Azat Khuzhin).
- كان يمكن أن تُرجع الدالة ILIKE على columns من النوع FixedString نتائج غير صحيحة (أي تطابقًا أقل مما ينبغي). #37117 (Robert Schulze).
- إصلاح
GROUP BYمعAggregateFunction(أي عند استخدامGROUP BYعلى column من النوعAggregateFunction). #37093 (Azat Khuzhin). - ميزة تجريبية: إصلاح optimize_aggregation_in_order مع GROUP BY ذي البادئة ودوال التجميع *Array. #37050 (Azat Khuzhin).
- تم إصلاح تراجع الأداء في بعض استعلامات INSERT SELECT مع التجميع الضمني. يُصلح #36792. #37047 (tavplubix).
- ميزة تجريبية: إصلاح
GROUP BYبالترتيب (optimize_aggregation_in_order=1) مع دوال التجميع*Array(groupArrayArray/…). #37046 (Azat Khuzhin). - إصلاح مخرجات LowCardinality->ArrowDictionary غير الصالحة عندما لا يكون نوع الفهارس UInt8. يُغلق #36832. #37043 (Kruglov Pavel).
- تم إصلاح مشكلة القيم اللانهائية في
quantileTDigest. يُصلح #32107. #37021 (Vladimir Chebotarev). - إصلاح إرسال بيانات الجداول الخارجية في HedgedConnections عندما تكون قيمة max_parallel_replicas != 1. #36981 (Kruglov Pavel).
- تم إصلاح خطأ منطقي في استعلام
TRUNCATEفي قاعدة البياناتReplicated. يُصلح #33747. #36976 (tavplubix). - ميزة تجريبية: إصلاح التعليق عند حذف الجدول المصدر في WindowView. يُغلق #35678. #36967 (vxider).
- ميزة تجريبية (rocksdb cache): إصلاح المشكلة: #36671. #36929 (李扬).
- ميزة تجريبية: إصلاح الأخطاء عند استخدام عدة أعمدة في WindowView عبر إضافة إجراءات تحويل تتيح استدعاء
writeIntoWindowViewمع مخطط مختلف قليلًا. #36928 (vxider). - إصلاح خطأ في clickhouse-keeper قد يؤدي إلى تلف ملفات السجل المضغوطة عند انخفاض الحمل ومع إعادة التشغيل. #36910 (alesapin).
- إصلاح نتيجة استعلام غير صحيحة عند إجراء تجميع ثابت. هذا يُصلح #36728 . #36888 (Amos Bird).
- ميزة تجريبية: إصلاح عدد
current_sizeفي الذاكرة المؤقتة. #36887 (Kseniia Sumarokova). - ميزة تجريبية: إصلاح إطلاق النتائج في window view مع hop window #34044. #36861 (vxider).
- ميزة تجريبية: إصلاح CAST غير الصحيح في المخزن المؤقت المخبأ من remote fs. #36809 (Kseniia Sumarokova).
- إصلاح إنشاء الجداول مع
flatten_nested = 0. سابقًا، كان يمكن تسطيح أعمدةNestedغير المسطّحة بعد إعادة تشغيل الخادم. #36803 (Anton Popov). - إصلاح بعض المشكلات في عمليات reads غير المتزامنة من remote filesystem التي كانت تحدث عند قراءة بيانات low cardinality. #36763 (Kseniia Sumarokova).
- ميزة تجريبية: إصلاح الإدراج في الأعمدة من النوع
Objectمن عدة ملفات، مثلًا عبر table function fileمع globs. #36762 (Anton Popov). - إصلاح حالات timeout في طلبات Hedged. إذ كان تعليق الاتصال مباشرة بعد إرسال query بعيدة قد يؤدي إلى انتظار بلا نهاية. #36749 (Kruglov Pavel).
- ميزة تجريبية: إصلاح خطأ في
groupBitmapAndState/groupBitmapOrState/groupBitmapXorStateعلى distributed table. #36739 (Zhang Yifan). - ميزة تجريبية: أثناء الاختبار في PR، تبيّن أن فئة cache واحدة جرى تهيئتها مرتين، ما يؤدي إلى إطلاق استثناء. ورغم أن سبب هذه المشكلة غير واضح، يبدو أن هناك منطقًا برمجيًا لتحميل القرص بشكل متكرر في ClickHouse، لذلك نحتاج إلى معالجة خاصة لهذه الحالة. #36737 (Han Shukai).
- إصلاح vertical merges في wide parts. سابقًا، كان يمكن إطلاق الاستثناء
There is no columnأثناء الدمج. #36707 (Anton Popov). - إصلاح إعادة تحميل الخادم عند تغيير المنفذ (من دون انتظار الاتصالات الحالية من Context الاستعلام). #36700 (Azat Khuzhin).
- ميزة تجريبية: في PR السابق، تبيّن أن الاختبارات (stateless tests وflaky check (address, actions)) تنتهي بحالة timeout. إضافةً إلى ذلك، قد يؤدي الاختبار محليًا أيضًا إلى trigger لحالات deadlocks غير مستقرة في النظام. وما تزال هذه المشكلة قائمة عند استخدام أحدث Source Code من master. #36697 (Han Shukai).
- ميزة تجريبية: إصلاح إعادة تشغيل الخادم إذا تغيّرت cache configuration. #36685 (Kseniia Sumarokova).
- إصلاح احتمال حدوث heap-use-after-free في schema inference. يغلق #36661. #36679 (Kruglov Pavel).
- إصلاح parsing لإعدادات query في استعلام
CREATEعندما لا يكون engine محددًا. يصلح https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419. #36642 (tavplubix). - ميزة تجريبية: إصلاح merges للـ wide parts من النوع
Object. #36637 (Anton Popov). - إصلاح تعطل format عندما يأتي تعبير default بعد EPHEMERAL وليس قيمة literal. يغلق #36618. #36633 (flynn).
- إصلاح استثناء
Missing columnالذي قد يحدث عند استخدامINTERPOLATEمع جدولENGINE = MergeTree. #36549 (Yakov Olkhovskiy). - إصلاح خطأ محتمل في القيم الحرفية داخل
WHEREفي استعلامات join. إغلاق #36279. #36542 (Vladimir C). - إصلاح تحديث الإزاحة في ReadBufferFromEncryptedFile، والذي قد يتسبب في سلوك غير معرّف. #36493 (Kseniia Sumarokova).
- إصلاح فحوصات سلامة اسم المضيف في إعدادات عنقود Keeper. وإضافة الإعداد
keeper_server.host_checks_enabledلتمكين هذه الفحوصات أو تعطيلها. #36492 (Antonio Andelic). - إصلاح استخدام الدوال المعرفة من قبل المستخدم القابلة للتنفيذ في GROUP BY. إذ لم يكن من الممكن سابقًا استخدام الدوال المعرفة من قبل المستخدم القابلة للتنفيذ كتعبيرات في GROUP BY. إغلاق #36448. #36486 (Maksim Kita).
- إصلاح استثناء محتمل يتعلق بحزمة غير معروفة من الخادم في العميل. #36481 (Kseniia Sumarokova).
- ميزة تجريبية (يرجى عدم استخدام
system.session_logمطلقًا، لأنه سيُزال): إضافة قيم enum المفقودة إلى جدول system.session_log. إغلاق #36474. #36480 (Memo). - إصلاح خلل في استدلال المخطط في s3Cluster كان يؤدي إلى عدم قراءة جميع البيانات عند تنفيذ select من s3Cluster. ظهر هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/35544. #36434 (Kruglov Pavel).
- إصلاح إلغاء مرجع nullptr في JOIN ومطابق COLUMNS. ويعالج هذا #36416. وهذا متعلق بـ https://github.com/ClickHouse/ClickHouse/pull/36417. #36430 (Amos Bird).
- إصلاح إعادة تحميل القاموس في
ClickHouseDictionarySourceإذا كان يحتوي على استعلامات فرعية scalar. #36390 (lthaooo). - إصلاح خطأ assertion في JOIN، إغلاق #36199. #36201 (Vladimir C).
- كانت الاستعلامات التي تتضمن أسماء مستعارة داخل المعاملات الخاصة تُرجع parsing error (وكان ذلك معطّلًا في 22.1). مثال:
SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita). - ميزة تجريبية: إصلاح إدراج ملفات JSON المعقدة ذات المصفوفات المتداخلة في أعمدة من النوع
Object. #36077 (Anton Popov). - إصلاح ALTER DROP COLUMN لعمود متداخل مع compact parts (أي
ALTER TABLE x DROP COLUMN nعندما يكون هناك عمودn.d). #35797 (Azat Khuzhin). - إصلاح خطأ طول النطاق في الدالة substring عندما تكون
offsetوlengthثابتين سالبين، وsليس ثابتًا. #33861 (RogerYK).
إصدار ClickHouse 22.4، بتاريخ 2022-04-19. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- لم يعد مسموحًا باستخدام SETTINGS بعد FORMAT في استعلامات INSERT (يوجد إعداد توافق
allow_settings_after_format_in_insertلقبول مثل هذه الاستعلامات، لكنه يكون مضبوطًا علىOFFافتراضيًا). #35883 (Azat Khuzhin). - أُعيدت تسمية الدالة
yandexConsistentHash(خوارزمية التجزئة المتسقة التي وضعها Konstantin “kostik” Oblakov) إلىkostikConsistentHash. وقد أُبقي الاسم القديم كاسم مستعار حفاظًا على التوافق. ومع أن هذا التغيير متوافق مع الإصدارات السابقة، فقد نزيل هذا الاسم المستعار في الإصدارات اللاحقة، لذلك يُنصح بتحديث استخدامات هذه الدالة في تطبيقاتكم. #35553 (Alexey Milovidov).
ميزة جديدة
- تمت إضافة الامتداد INTERPOLATE إلى ORDER BY … WITH FILL. يحل #34903. #35349 (Yakov Olkhovskiy).
- تمت إضافة جمع بيانات profiling على مستوى processors (ضمن الإعداد
log_processors_profiles، سيكتب ClickHouse الزمن الذي قضاه كل processor أثناء التنفيذ/انتظار البيانات في جدولsystem.processors_profile_log). #34355 (Azat Khuzhin). - تمت إضافة الدالتين makeDate(year, month, day) و makeDate32(year, month, day). #35628 (Alexander Gololobov). كما أُضيف تنفيذ makeDateTime() و makeDateTIme64(). #35934 (Alexander Gololobov).
- دعم نوع جديد من الحصص
WRITTEN BYTESلتقييد كمية البايتات المكتوبة أثناء استعلامات insert. #35736 (Anton Popov). - تمت إضافة الدالة
flattenTuple. تستقبلTupleمسمّى ومتداخلًا كـ argument وتُرجعTupleمسطّحًا تكون عناصره هي المسارات منTupleالأصلي. مثال:Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int). ويمكن استخدامflattenTupleلاختيار جميع المسارات من النوعObjectكأعمدة منفصلة. #35690 (Anton Popov). - تمت إضافة الدالتين
arrayFirstOrNullوarrayLastOrNull. يحل #35238. #35414 (Maksim Kita). - تمت إضافة الدالتين
minSampleSizeContinousوminSampleSizeConversion. المؤلف achimbab. #35360 (Maksim Kita). - دالتان جديدتان: minSampleSizeContinous و minSampleSizeConversion. #34354 (achimbab).
- تقديم التنسيق
ProtobufList(جميع السجلات تكون رسائل متكررة في مخرجات Protobuf). يحل #16436. #35152 (Nikolai Kochetov). - تمت إضافة الدوال
h3PointDistMوh3PointDistKmوh3PointDistRadsوh3GetRes0Indexesوh3GetPentagonIndexes. #34568 (Bharat Nallan). - تمت إضافة الدالة
toLastDayOfMonthالتي تقرّب تاريخًا أو تاريخًا مع وقت إلى آخر يوم من الشهر. #33501. #34394 (Habibullah Oladepo). - تمت إضافة إعداد load balancing لعميل [Zoo]Keeper. يحل #29617. #30325 (小路).
- أُضيف نوع جديد من سياسات الصفوف باسم
simple. قبل هذا الـ PR، كان لدينا نوعان من سياسات الصفوف:permissiveوrestrictive. تضيف سياسة الصفوفsimpleعامل تصفية جديدًا إلى جدول من دون أي آثار جانبية، بخلاف ما كان عليه الحال مع سياساتpermissiveوrestrictive. #35345 (Vitaly Baranov). - أُضيفت إمكانية تحديد سرّ العنقود في قاعدة بيانات Replicated. #35333 (Nikita Mikhaylov).
- أُضيفت عمليات تحقق أساسية عند بدء تشغيل الخادم (الذاكرة المتاحة، ومساحة القرص، والحد الأقصى لعدد الخيوط، إلخ). #34566 (Sergei Trifonov).
- تحسين على INTERVAL — يمكن استخدامه مع
[MILLI|MICRO|NANO]SECOND. أُضيفت الدوالtoStartOf[Milli|Micro|Nano]second(). وأُضيفت الدوال[add|subtract][Milli|Micro|Nano]seconds(). #34353 (Andrey Zvonov).
ميزة تجريبية
- أُضيف دعم المعاملات إلى جداول
MergeTreeالبسيطة. هذه الميزة تجريبية للغاية ولا يُنصح باستخدامها في بيئات الإنتاج. جزء من #22086. #24258 (tavplubix). - دعم استنتاج المخطط للنوع
Objectفي التنسيقJSONEachRow. كما يتيح تحويل الأعمدة من النوعMapإلى أعمدة من النوعObject. #35629 (Anton Popov). - إتاحة الكتابة إلى ذاكرة التخزين المؤقت لنظام الملفات البعيد في جميع عمليات الكتابة. إضافة جدول
system.remote_filesystem_cache. إضافة الاستعلامdrop remote filesystem cache. إضافة إمكانات الاستبطان لبيانات S3 الوصفية باستخدام جدولsystem.remote_data_paths. يُغلق #34021. إضافة خيار لذاكرة التخزين المؤقت لعمليات الدمج عبر إضافة الوضعread_from_filesystem_cache_if_exists_otherwise_bypass_cache(ويكون مفعّلًا افتراضيًا لعمليات الدمج، ويمكن أيضًا تفعيله عبر إعداد الاستعلام بالاسم نفسه). إعادة تسمية الإعدادات المرتبطة بذاكرة التخزين المؤقت (remote_fs_enable_cache -> enable_filesystem_cache، إلخ). #35475 (Kseniia Sumarokova). - خيار لتخزين البيانات الوصفية للأجزاء في RocksDB. يسرّع هذا عملية تحميل الأجزاء في MergeTree لتقليل زمن بدء تشغيل clickhouse-server. مع هذا التحسين، تمكّن clickhouse-server من خفض وقت بدء التشغيل من 75 دقيقة إلى 20 ثانية، مع 700 ألف جزء من MergeTree. #32928 (李扬).
تحسين الأداء
- تحسين جديد في خطة الاستعلام. تُقيَّم الدوال بعد
ORDER BYمتى أمكن ذلك. على سبيل المثال، في الاستعلامSELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5، ستُقيَّم الدالةsipHash64بعدORDER BYوLIMIT، مما يحقق تسريعًا بنحو ~20x. #35623 (Nikita Taranov). - أصبحت أحجام جداول التجزئة المستخدمة أثناء التجميع تُجمع الآن وتُستخدم في الاستعلامات اللاحقة لتجنّب إعادة تحجيم جداول التجزئة. #33439 (Nikita Taranov).
- تحسين للدالة hasAll باستخدام تعليمات SIMD (SSE وAVX2). #27653 (youennL-cs). #35723 (Maksim Kita).
- عدة تغييرات لتحسين أداء ASOF JOIN (أسرع بمقدار 1.2 إلى 1.6 مرة). كما يضيف ذلك دعمًا لاستخدام الأعداد الصحيحة الكبيرة. #34733 (Raúl Marín).
- تحسين أداء ASOF JOIN إذا كان المفتاح عددًا صحيحًا أصليًا. #35525 (Maksim Kita).
- تنفيذ multipart upload إلى S3 storage بالتوازي. #35343 (Sergei Trifonov).
- أصبح محرك URL storage ينزّل الآن عدة أجزاء بالتوازي إذا كانت نقطة النهاية تدعم HTTP Range. وأُضيف إعدادان إضافيان،
max_download_threadsوmax_download_buffer_size، للتحكم في الحد الأقصى لعدد الخيوط التي يمكن أن يستخدمها استعلام واحد لتنزيل الملف، والحد الأقصى لعدد البايتات التي يمكن لكل خيط معالجتها. #35150 (Antonio Andelic). - استخدام عدة خيوط لتنزيل الكائنات من S3. ويمكن التحكم في التنزيل باستخدام الإعدادين
max_download_threadsوmax_download_buffer_size. #35571 (Antonio Andelic). - تضييق نطاق mutex عند التفاعل مع HDFS. مرتبط بـ #35292. #35646 (shuchaome).
- لا تصبح mutations مطلوبة لـ table TTL على مستوى الجدول إلا عند تغييره. #35953 (Azat Khuzhin).
تحسين
- تحسينات متعددة على استدلال المخطط. استخدام بعض التحسينات والاستدلالات لتحديد الأرقام والسلاسل النصية والمصفوفات وTuples وMaps في تنسيقات البيانات CSV وTSV وTSVRaw. إضافة الإعداد
input_format_csv_use_best_effort_in_schema_inferenceلتنسيق CSV لتمكين/تعطيل استخدام هذه الاستدلالات؛ وإذا كان معطّلًا، فستُعامل جميع القيم على أنها String. إضافة إعداد مماثلinput_format_tsv_use_best_effort_in_schema_inferenceلتنسيق TSV/TSVRaw. هذه الإعدادات مُمكّنة افتراضيًا. - إضافة دعم Maps إلى استدلال المخطط في Values format. - إصلاح احتمال حدوث segfault في استدلال المخطط في Values format. - السماح بتخطي الأعمدة ذات الأنواع غير المدعومة في تنسيقات Arrow/ORC/Parquet. وإضافة الإعدادات المقابلة لذلك:input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference. هذه الإعدادات معطّلة افتراضيًا. - السماح بتحويل عمود من النوع Null إلى عمود Nullable يحتوي بالكامل على قيم NULL في تنسيقات Arrow/Parquet. - السماح بتحديد أسماء الأعمدة في استدلال المخطط عبر الإعدادcolumn_names_for_schema_inferenceللتنسيقات التي لا تتضمن أسماء أعمدة (مثل CSV وTSV وJSONCompactEachRow وغيرها) - إصلاح استدلال المخطط في تنسيقات ORC/Arrow/Parquet فيما يخص التعامل مع الأعمدة Nullable. في السابق، كانت جميع الأنواع المستدل عليها غير Nullable، ما كان يمنع قراءة الأعمدة Nullable من البيانات. وقد أُصلح ذلك الآن، وأصبحت جميع الأنواع المستدل عليها Nullable دائمًا (لأنه لا يمكن تحديد ما إذا كان العمود Nullable أم لا بمجرد قراءة المخطط). - إصلاح استدلال المخطط في Template format مع قواعد الهروب الخاصة بـCSV. #35582 (Kruglov Pavel). - إضافة التحليل المتوازي واستدلال المخطط للتنسيق
JSONAsObject. #35592 (Anton Popov). - تمت إضافة دعم الاستدلال التلقائي للمخطط إلى الدالة الجدولية
s3Cluster. وتمت مزامنة تواقيعs3وs3Cluster. #35544 (Nikita Mikhaylov). - تمت إضافة دعم استدلال المخطط لـ
hdfsCluster. #35602 (Nikita Mikhaylov). - إضافة إعداد جديد
input_format_json_read_bools_as_numbersيتيح استدلال القيم المنطقية وتحليلها كأرقام في JSON input formats. وهو مُمكّن افتراضيًا. باقتراح من @alexey-milovidov. #35735 (Kruglov Pavel). - تحسين ترتيب الأعمدة في استدلال المخطط للتنسيقين TSKV وJSONEachRow، وإغلاق #35640. وعدم إيقاف استدلال المخطط عند قراءة صف فارغ أثناء استدلال المخطط للتنسيقين TSKV وJSONEachRow. #35724 (Kruglov Pavel).
- إضافة الإعدادات
input_format_orc_case_insensitive_column_matchingوinput_format_arrow_case_insensitive_column_matchingوinput_format_parquet_case_insensitive_column_matching، التي تتيح لـ ClickHouse استخدام مطابقة الأعمدة دون حساسية لحالة الأحرف عند قراءة البيانات من ملفات ORC أو Arrow أو Parquet. #35459 (Antonio Andelic). - تمت إضافة العمود
is_secureإلىsystem.query_log، وهو يوضح ما إذا كان العميل يستخدم اتصالًا آمنًا عبر TCP أو HTTP. #35705 (Antonio Andelic). - يمكن الآن أن تكون قيمة
kafka_num_consumersأكبر من عدد الأنوية المادية في الأجهزة منخفضة الموارد (أقل من 16 نواة). #35926 (alesapin). - إضافة بعض المقاييس الأساسية لمراقبة الجداول ذات
engine=Kafka. #35916 (filimonov). - لم يعد مسموحًا الآن بتنفيذ
ALTER TABLE ... RESET SETTINGللإعدادات غير الموجودة ضمن عائلة محركات MergeTree. يُصلح هذا #35816. #35884 (alesapin). - أصبح بالإمكان الآن تنفيذ بعض استعلامات
ALTER MODIFY COLUMNلأنواعArraysوNullableعلى مستوى البيانات الوصفية من دون mutations. على سبيل المثال، التعديل منArray(Enum8('Option1'=1))إلىArray(Enum8('Option1'=1, 'Option2'=2)). #35882 (alesapin). - أُضيفت حركة إلى أيقونة الساعة الرملية لإظهار أن الاستعلام قيد التشغيل. #35860 (peledni).
- دعم
ALTER TABLE t DETACH PARTITION (ALL). #35794 (awakeljw). - تحسين تحليل الإسقاطات لتحسين الاستعلامات البسيطة مثل
count(). #35788 (Amos Bird). - دعم استدلال المخطط لعملية insert select عند استخدام table function
input. يُؤخذ المخطط من جدول الإدراج بدلًا من استنتاجه من البيانات في حالة insert select من table functions التي تدعم استدلال المخطط. يُغلق هذا #35639. #35760 (Kruglov Pavel). - تطبيق
remote_url_allow_hostsعلى جداول Hive. #35743 (李扬). - تنفيذ
send_logs_levelفي clickhouse-local. يُغلق هذا #35653. #35716 (Kseniia Sumarokova). - يُغلق هذا #35641: السماح بأعمدة
EPHEMERALمن دون تعبير افتراضي صريح. #35706 (Yakov Olkhovskiy). - إضافة عدّاد لأحداث profile باسم
AsyncInsertBytesلقياس حجم عمليات INSERT غير المتزامنة. #35644 (Alexey Milovidov). - تحسين وصف pipeline لـ JOIN. #35612 (何李夫).
- استنتاج المسار المطلق لـ config الخاص بـ hdfs. #35572 (李扬).
- تحسين أداء اللصق والتوافق في clickhouse-client. يساعد هذا في #35501. #35541 (Amos Bird).
- كان من الممكن حدوث stack overflow في distributed queries إذا كان أحد الإعدادين
async_socket_for_remoteوuse_hedged_requestsمُمكّنًا أثناء parsing نوع بيانات متداخل بعمق شديد (على الأقل في build التنقيح). يُغلق هذا #35509. #35524 (Kruglov Pavel). - إضافة أحجام subcolumns إلى جدول
system.parts_columns. #35488 (Anton Popov). - أضِف معلومات صريحة عن الجدول إلى عقدة المسح في خطة الاستعلام وخط الأنابيب. #35460 (何李夫).
- اسمح للخادم بإجراء bind على المنافذ ذات الأرقام المنخفضة (مثل 443). سيضبط نص تثبيت ClickHouse البرمجي
cap_net_bind_serviceعلى الملف الثنائي. #35451 (Alexey Milovidov). - أصلِح
INSERT INTO table FROM INFILE: إذ لم يكن يعرض شريط التقدّم. #35429 (xiedeyantu). - أضِف الوسيطات
--userو--passwordو--hostو--portإلى أداةclickhouse-diagnostics. #35422 (李扬). - ادعم uuid لمحركات Postgres. يُغلق #35384. #35403 (Kseniia Sumarokova).
- بالنسبة إلى table function
s3clusterأوHDFSClusterأوhive، لا يمكن الحصول علىAccessTypeالصحيح عبرStorageFactory::instance().getSourceAccessType(getStorageTypeName()). يُصلح هذا الطلب المشكلة. #35365 (李扬). - أزل الخيار
--testmodeمن clickhouse-client، وفعِّله دائمًا. #35354 (Kseniia Sumarokova). - لا تسمح بعملية
wchc(أمر من أربعة أحرف) في clickhouse-keeper. #35320 (zhangyuli1). - أضِف الدالة
getTypeSerializationStreams. بالنسبة إلى نوع محدد (يُكتشف من column)، تُرجع Array تحتوي على جميع مسارات التدفقات الفرعية الخاصة بالتسلسل. هذه الدالة مفيدة أساسًا للمطورين. #35290 (李扬). - إذا لم يُحدَّد
portفي تهيئة cluster، فسيُستخدم منفذ server الافتراضي. يُغلق هذا #34769. #34772 (Alexey Milovidov). - استخدم فهرس
minmaxلملف orc/parquet في Hive engine. طلب السحب ذي الصلة: https://github.com/ClickHouse/arrow/pull/10. #34631 (李扬). - تسمح log tables الخاصة بالنظام الآن بتحديد COMMENT في تصريح ENGINE. يُغلق #33768. #34536 (Maksim Kita).
- دعم صحيح للإعداد
max_rows_to_readعند القراءة وفق sorting key مع تحديد limit. سابقًا، كان يمكن طرح الاستثناءLimit for rows or bytes to read exceededحتى إذا كان الـ query يتطلب فعليًا قراءة عدد أقل من rows. #33230 (Anton Popov). - راعِ فقط quota وperiod من cgroups، وتجاهل shares (إذ إنها لا تحد فعليًا من عدد الأنوية التي يمكن استخدامها). #35815 (filimonov).
تحسينات البناء/الاختبار/التحزيم
- إضافة الدفعة التالية من إعدادات العشوائية في الاختبارات الوظيفية. #35047 (Kruglov Pavel).
- إضافة فحص للتوافق مع الإصدارات السابقة في اختبار الضغط. يُغلق #25088. #27928 (Kruglov Pavel).
- ترحيل بناء الحزم إلى
nfpm- إيقاف استخدام سكربتreleaseلصالحpackages/build- بناء كل شيء داخل صورة clickhouse/binary-builder (تنظيف: clickhouse/deb-builder) - إضافة تجريد الرموز إلى cmake (todo: use bin_dir/clickhouse/$binary.debug) - إصلاح مشكلة في رموز DWARF - إضافة حزم Alpine APK - إعادة تسميةalienإلىadditional_pkgs. #33664 (Mikhail f. Shiryaev). - إضافة فحص ليلي ورفع نتائجه إلى Coverity. #34895 (Boris Kuschel).
- حزمة صغيرة مخصصة لـ
clickhouse-keeper. #35308 (Mikhail f. Shiryaev). - كان التشغيل باستخدام podman يفشل، إذ كان يشتكي من تحديد نفس وحدة التخزين مرتين. #35978 (Roman Nikonov).
- تحسين طفيف في إعدادات بناء contrib/krb5. #35832 (Anton Kozlov).
- إضافة تسمية للتعرّف على مهمة بناء لكل image. #35583 (Mikhail f. Shiryaev).
- تطبيق المنسّق
blackعلى شيفرة بايثون وإضافة فحص لكل commit. #35466 (Mikhail f. Shiryaev). - إعادة إعداد صورة alpine لاستخدام Dockerfile نظيف. إنشاء سكربت في tests/ci لبناء صورتي ubuntu وalpine. إضافة صورة clickhouse-keeper (cc @nikitamikhaylov). إضافة فحص بناء إلى PullRequestCI. إضافة job إلى ReleaseCI. إضافة job إلى MasterCI لبناء ودفع الصورتين
clickhouse/clickhouse-server:headوclickhouse/clickhouse-keeper:headلكل PR مدمج. #35211 (Mikhail f. Shiryaev). - إصلاح تقرير stress-test في CI، إذ نرفع الآن runlog الذي يتضمن معلومات عن اختبارات الضغط التي بدأت مرة واحدة فقط. #35093 (Mikhail f. Shiryaev).
- التحول إلى libcxx / libcxxabi من LLVM 14. #34906 (Raúl Marín).
- تحديث unixodbc للتخفيف من CVE-2018-7485. ملاحظة: هذا CVE غير ذي صلة بـ ClickHouse لأنه يطبق طبقة عزل خاصة به لـ ODBC. #35943 (Mikhail f. Shiryaev).
إصلاحات الأخطاء
- تمت إضافة الإعدادات
input_format_ipv4_default_on_conversion_errorوinput_format_ipv6_default_on_conversion_errorللسماح بإدراج قيم عناوين IP غير الصالحة كقيم افتراضية في الجداول. يغلق #35726. #35733 (Maksim Kita). - تجنب حذف الأعمدة من
blockإذا كانت غير موجودة أثناء قراءة البيانات من Hive. #35393 (lgbo). - إضافة التحقق من الأنواع عند إنشاء عرض مادي. إغلاق: #23684. #24896 (hexiaoting).
- إصلاح تنسيق استعلامات INSERT INFILE (علامات اقتباس مفقودة). #35886 (Azat Khuzhin).
- تعطيل
session_logبعد اكتشاف مشكلة تتعلق بسلامة الذاكرة عبر fuzzing. راجع #35714. #35873 (Alexey Milovidov). - تجنب معالجة TTL على مستوى كل عمود عدة مرات. #35820 (Azat Khuzhin).
- إصلاح عمليات الإدراج في الأعمدة من النوع
Objectعندما يحتوي استعلام الإدراج على بيانات مرتبطة بعدة أقسام. #35806 (Anton Popov). - إصلاح خطأ في فهارس الأعمدة غير الموجودة في تنسيقات -WithNames، كان يؤدي إلى الخطأ
INCORRECT_NUMBER_OF_COLUMNSعندما يتجاوز عدد الأعمدة 256. يغلق #35793. #35803 (Kruglov Pavel). - إصلاح #35751. #35799 (Nikolay Degterinsky).
- إصلاح قراءة البيانات من HDFS بتنسيق Snappy. #35771 (shuchaome).
- إصلاح خطأ في التحويل من الأنواع المخصصة إلى سلسلة نصية، كان يمكن أن يؤدي إلى segfault أو إلى رسائل خطأ غير متوقعة. يغلق #35752. #35755 (Kruglov Pavel).
- إصلاح تنفيذ any/all (استعلام فرعي). يغلق #35489. #35727 (Kseniia Sumarokova).
- إصلاح حذف قاعدة بيانات غير فارغة في clickhouse-local. يغلق #35692. #35711 (Kseniia Sumarokova).
- إصلاح خطأ عند إنشاء عرض مادي يتضمن استعلامًا فرعيًا بعد إعادة تشغيل الخادم. إذ لم يكن العرض المادي يتحدّث بعد عمليات الإدراج في الجدول الأساسي عقب إعادة تشغيل الخادم. يغلق #35511. #35691 (Kruglov Pavel).
- إصلاح احتمال حدوث الاستثناء
Can't adjust last granuleأثناء قراءة الأعمدة الفرعية من النوع التجريبيObject. #35687 (Anton Popov). - تفعيل build مع ترجمة JIT البرمجية افتراضيًا. #35683 (Maksim Kita).
- إصلاح الفقدان المحتمل للأعمدة الفرعية في النوع التجريبي
Object. #35682 (Anton Popov). - إصلاح التحقق من قابلية مفتاح ASOF JOIN لأن يكون NULL، وإغلاق #35565. #35674 (Vladimir C).
- إصلاح منطق التحقق من parts التي تحتوي على projections. كان الخطأ يحدث عندما تكون أنواع projection وpart الرئيسي مختلفة. وهذا مشابه لـ https://github.com/ClickHouse/ClickHouse/pull/33774 . وقد عالج @caoyang10 هذا الخلل. #35667 (Amos Bird).
- إصلاح تعطل server عند تمرير عدد كبير من الوسيطات إلى الدالة
format. يُرجى الرجوع إلى ملف الاختبار لمعرفة كيفية إعادة إنتاج التعطل. #35651 (Amos Bird). - إصلاح استخدام quotas مع asynchronous inserts. #35645 (Anton Popov).
- إصلاح الوسيطات الموضعية مع الأسماء المستعارة. يغلق #35600. #35620 (Kseniia Sumarokova).
- التحقق من
remote_url_allow_hostsقبل schema inference في URL engine. يغلق #35064. #35619 (Kruglov Pavel). - إصلاح
HashJoinعند استخدام أعمدة من النوعLowCardinality. هذا يغلق #35548. #35616 (Antonio Andelic). - إصلاح segfault محتمل في MaterializedPostgreSQL كان يحدث عند وقوع استثناء أثناء مزامنة البيانات المجمعة في الذاكرة إلى underlying tables. يغلق #35611. #35614 (Kseniia Sumarokova).
- كان الإعداد
database_atomic_wait_for_drop_and_detach_synchronouslyيعمل بشكل غير صحيح مع query ATTACH TABLEعندما يكون الجدول الذي فُصل سابقًا لا يزال قيد الاستخدام، وقد أُصلح ذلك. #35594 (tavplubix). - إصلاح HTTP headers مع named collections، وإضافة compression_method. يغلق #35273. يغلق #35269. #35593 (Kseniia Sumarokova).
- إصلاح حصول محرك S3 على virtual columns. يغلق #35411. #35586 (Kseniia Sumarokova).
- إصلاح استنتاج return type للدالة
caseWithExpression. وأصبح نوع فرع ELSE يؤخذ الآن في الحسبان بشكل صحيح. #35576 (Antonio Andelic). - إصلاح تحليل عناوين IPv6 التي يزيد طولها على 39 حرفًا. يُغلق #34022. #35539 (Maksim Kita).
- إصلاح التحويل إلى عنوانَي IPv4 وIPv6 في قسم IN. يُصلح #35528. #35534 (Maksim Kita).
- إصلاح تعطل أثناء التقييم المختصر للدوال عندما تكون إحدى الوسيطات ثابتًا من النوع Nullable. يُغلق #35497. يُغلق #35496. #35502 (Maksim Kita).
- إصلاح تعطل الدالة
throwIfعند استخدام وسائط ثابتة. #35500 (Maksim Kita). - إصلاح خلل في Keeper قد يؤدي إلى عدم استقرار اتصالات العميل. أُدخل في #35031. #35498 (alesapin).
- إصلاح خلل في الدالة
ifعندما يختلف نوع العمود الناتج عن نوع البيانات الناتج، ما كان يؤدي إلى أخطاء منطقية مثلLogical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.. يُغلق #35367. #35476 (Kruglov Pavel). - إصلاح التسجيل المفرط عند استخدام S3 كواجهة خلفية لـ MergeTree أو كمحرك جدول/دالة مستقلّين. يُصلح #30559. #35434 (alesapin).
- الآن لن تُغرق عمليات الدمج المنفذة باستخدام zero copy replication (تجريبي) السجلات بالرسالة
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.. #35430 (alesapin). - تجنب استثناء محتمل إذا ظهرت chunks فارغة في GroupingAggregatedTransform. #35417 (Nikita Taranov).
- إصلاح التعامل مع الأعمدة غير المطلوبة في الاستعلام ضمن تنسيقات Arrow/Parquet/ORC، ما يمنع أخطاء محتملة مثل
Unsupported <format> type <type> of an input column <column_name>عندما يحتوي الملف على عمود ذي نوع غير مدعوم ولا يُستخدم في الاستعلام. #35406 (Kruglov Pavel). - إصلاح الذاكرة المؤقتة المحلية لنظام الملفات البعيد (ميزة تجريبية) في بعض الحالات الطرفية عند التزامن العالي. #35381 (Kseniia Sumarokova). إصلاح احتمال حدوث توقف متبادل في الذاكرة المؤقتة. #35378 (Kseniia Sumarokova).
- إصلاح تقليص الأقسام في حالة المقارنة مع ثابت في
WHERE. إذا كان للعمود والثابت نوعان مختلفان، فقد يحدث فيض. وقد يعيد الاستعلام نتيجة فارغة غير صحيحة. هذا يُصلح #35304. #35334 (Amos Bird). - إصلاح استنتاج المخطط لتنسيق TSKV عند استخدام قيمة صغيرة لـ max_read_buffer_size. #35332 (Kruglov Pavel).
- إصلاح mutations في الجداول ذات الأعمدة المتناثرة المفعّلة. #35284 (Anton Popov).
- عدم تأخير كتابة الجزء النهائي افتراضيًا (يُصلح حالات محتملة لظهور
Memory limit exceededأثناءINSERTعبر إضافةmax_insert_delayed_streams_for_parallel_writeبقيمة افتراضية مقدارها 1000 لعمليات الكتابة إلى S3، مع إبقائه معطّلًا كما كان سابقًا في غير ذلك). #34780 (Azat Khuzhin).
إصدار ClickHouse v22.3-lts، 2022-03-17. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- اجعل الدالة
arrayCompactتتصرف مثل الدوال الأعلى رتبة الأخرى: بحيث تُجرى عملية التقليص على المصفوفة الأصلية لا على نتائج دالة lambda. إذا كنت تستخدم دوال lambda غير بسيطة فيarrayCompact، فيمكنك استعادة السلوك القديم عبر تغليف معاملاتarrayCompactداخلarrayMap. يُغلق #34010 #18535 #14778. #34795 (Alexandre Snarskii). - تغيير سلوك التنفيذ الخاص عند تجاوز السعة في الدالة
toDatetime. ستُشبَع القيمة إلى أقرب لحظة دنيا/قصوى يدعمهاdatetimeبدلًا من الالتفاف. وجرى تمييز هذا التغيير بأنه “غير متوافق مع الإصدارات السابقة” لأن البعض قد يعتمد على السلوك القديم دون قصد. #32898 (HaiBo Li). - اجعل الدالتين
cast(value, 'IPv4')وcast(value, 'IPv6')تتصرفان بالطريقة نفسها التي تتصرف بها الدالتانtoIPv4وtoIPv6. تم تغيير سلوك تمرير عنوان IP غير صالح إلى الدالتينtoIPv4,toIPv6؛ إذ سيُرفَع الآن استثناء إذا تم تمرير عنوان IP غير صالح إلى هاتين الدالتين، بينما كانت هذه الدوال تُرجِع القيمة الافتراضية سابقًا. أُضيفت الدوالIPv4StringToNumOrDefault,IPv4StringToNumOrNull,IPv6StringToNumOrDefault,IPv6StringOrNulltoIPv4OrDefault,toIPv4OrNull,toIPv6OrDefault,toIPv6OrNull. ينبغي استخدام الدوالIPv4StringToNumOrDefaultوtoIPv4OrDefaultوtoIPv6OrDefaultإذا كان المنطق السابق يعتمد على أنIPv4StringToNum,toIPv4,toIPv6تُرجِع القيمة الافتراضية للعناوين غير الصالحة. أُضيف أيضًا الإعدادcast_ipv4_ipv6_default_on_conversion_error، وإذا كان هذا الإعداد مُمكّنًا، فستتصرف دوال تحويل عناوين IP كما كانت من قبل. يُغلق #22825. يُغلق #5799. يُغلق #35156. #35240 (Maksim Kita).
ميزة جديدة
- دعم التخزين المؤقت للبيانات محليًا لأنظمة الملفات البعيدة. يمكن تمكينه لأقراص
s3. يُغلق #28961. #33717 (Kseniia Sumarokova). وفي الوقت نفسه، فعّلنا مجموعة الاختبارات على نظام ملفات S3، ولم تعد هناك أي مشكلات معروفة، لذا فقد بدأ يقترب من الجاهزية لبيئات الإنتاج. - إضافة table function جديدة باسم
hive. يمكن استخدامها كما يليhive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>')، على سبيل المثالSELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day'). #34946 (lgbo). - دعم مصادقة المستخدمين المتصلين عبر SSL باستخدام شهادة X.509 الخاصة بهم. #31484 (eungenue).
- دعم schema inference عند insert إلى table functions
file/hdfs/s3/url. #34732 (Kruglov Pavel). - يمكنك الآن قراءة جدول
system.zookeeperبدون قيود على path أو باستخدام expressionlike. قد تؤدي هذه القراءات إلى حمل كبير نسبيًا على ZooKeeper، لذا لتمكين هذه الإمكانية عليك تفعيل setting allow_unrestricted_reads_from_keeper. #34609 (Sergei Trifonov). - عرض metrics الخاصة بـ CPU وmemory في clickhouse-local. يُغلق #34545. #34605 (李扬).
- تنفيذ الدالتين
startsWithوendsWithللمصفوفات، يُغلق #33982. #34368 (usurai). - إضافة ثلاث دوال لنوع البيانات Map: 1.
mapReplace(map1, map2)- تستبدل قيم المفاتيح في map1 بقيم المفاتيح المناظرة في map2، وتضيف المفاتيح من map2 غير الموجودة في map1. 2.mapFilter3.mapMap. الدالتان mapFilter وmapMap هما دالتان من الرتبة العليا، وتقبلان argumentين: الأول lambda function تأخذ الزوج k, v كـ argumentين، والثاني column من النوع Map. #33698 (hexiaoting). - السماح بالحصول على default user وpassword لـ clickhouse-client من متغيرَي البيئة
CLICKHOUSE_USERوCLICKHOUSE_PASSWORD. يُغلق #34538. #34947 (DR).
ميزة تجريبية
- نوع بيانات جديد
Object(<schema_format>)يدعم تخزين البيانات شبه المهيكلة (حاليًا JSON فقط). تُكتب البيانات في هذه الأنواع كسلسلة نصية. ثم تُستخرج جميع المسارات وفقًا لتنسيق البيانات شبه المهيكلة وتُكتب كأعمدة منفصلة باستخدام أكثر الأنواع ملاءمةً لتخزين جميع قيمها. ويمكن الاستعلام عن هذه الأعمدة بأسماء تطابق المسارات في البيانات المصدر. مثلًاdata.key1.key2أو باستخدام عامل cast data.key1.key2::Int64. - تمت إضافة الإعداد
database_replicated_allow_only_replicated_engine. عند تمكينه، لا يُسمح إلا بإنشاء جداولReplicatedأو جداول بمحركات عديمة الحالة في قواعد البياناتReplicated. #35214 (Nikolai Kochetov). لاحظ أن قاعدة البياناتReplicatedلا تزال ميزة تجريبية.
تحسين الأداء
- تحسين أداء الإدراج في جداول
MergeTreeعبر تحسين الفرز. وقد لوحظ تحسن يصل إلى الضعف في اختبارات قياس أداء واقعية. #34750 (Maksim Kita). - استبعاد الأعمدة غير اللازمة عند قراءة ملفات Parquet وORC وArrow من URL وS3. إغلاق #34163. #34849 (Kseniia Sumarokova).
- استبعاد الأعمدة غير اللازمة عند قراءة ملفات Parquet وORC وArrow من Hive. #34954 (lgbo).
- مجموعة من تحسينات الأداء من خبير أداء متميّز. تحسين أداء معالجة الاستعلامات التي تحتوي على قسم
INكبير. تحسين أداء قاموسdirectإذا كان مصدرهClickHouse. تحسين أداء الدالتينdetectCharsetوdetectLanguageUnknown. #34888 (Maksim Kita). - تحسين أداء دالة التجميع
anyعبر زيادة المعالجة على دفعات. #34760 (Raúl Marín). - تحسينات متعددة على أداء
clickhouse-keeper: تقليل الإقفال #35010 (zhanglistar)، وخفض استخدام الذاكرة عبر القراءة والكتابة المتدفقتين لـ snapshot بدلاً من النسخ الكامل. #34584 (zhanglistar)، وتحسين compaction لمخزن السجل في تنفيذ RAFT. #34534 (zhanglistar)، وإضافة إصدار لبنية البيانات الداخلية #34486 (zhanglistar).
تحسينات
- السماح بعمليات الإدراج غير المتزامنة في دوال الجداول. يُصلح #34864. #34866 (Anton Popov).
- تحويل نوع ضمني لوسيطة المفتاح في الدوال
dictGetHierarchyوdictIsInوdictGetChildrenوdictGetDescendants. يُغلق #34970. #35027 (Maksim Kita). - يمكن للاستعلام
EXPLAIN ASTإخراج AST على شكل رسم بياني بتنسيق Graphviz:EXPLAIN AST graph = 1 SELECT * FROM system.parts. #35173 (李扬). - عند كتابة ملفات كبيرة باستخدام دالة الجدول أو محرك الجدول
s3، كان نوع المحتوى للملفات يُضبط بالخطأ علىapplication/xmlبسبب خلل في AWS SDK. يُغلق هذا #33964. #34433 (Alexey Milovidov). - تعديل سياسات الصفوف التقييدية قليلًا لجعلها بديلًا أسهل من السياسات التساهلية في الحالات البسيطة. إذا كانت هناك لجدول معيّن سياسات تقييدية فقط (من دون سياسات تساهلية)، فسيتمكن المستخدمون من رؤية بعض الصفوف. كذلك، سيعرض
SHOW CREATE ROW POLICYدائمًاAS permissiveأوAS restrictiveفي تعريف سياسة الصفوف. #34596 (Vitaly Baranov). - تحسين استنتاج المخطط باستخدام globs في محركات File/S3/HDFS/URL. ومحاولة استخدام المسار التالي لاستنتاج المخطط عند حدوث خطأ. #34465 (Kruglov Pavel).
- أصبحت واجهة Play تكتشف الآن بشكل صحيح النمط الفاتح/الداكن المفضل من نظام التشغيل. #35068 (peledni).
- تمت إضافة
date_time_input_format = 'best_effort_us'. يُغلق #34799. #34982 (WenYao). - أُضيف إعدادان جديدان هما
allow_plaintext_passwordوallow_no_passwordإلى تهيئة الخادم، لتفعيل/تعطيل أنواع المصادقة التي قد تكون غير آمنة في بعض البيئات. وهما مفعّلان افتراضيًا. #34738 (Heena Bansal). - دعم نوع البيانات
DateTime64في التنسيقArrow، يُغلق #8280 ويُغلق #28574. #34561 (李扬). - إعادة تحميل
remote_url_allow_hosts(تصفية الاتصالات الصادرة) عند تحديث config. #35294 (Nikolai Kochetov). - دعم المعامل
--testmodeفيclickhouse-local. يتيح هذا المعامل تفسير تلميحات الاختبار التي نستخدمها في الاختبارات الوظيفية. #35264 (Kseniia Sumarokova). - إضافة
distributed_depthإلى سجل الاستعلامات. وهو أشبه بنسخة أكثر تفصيلًا منis_initial_query#35207 (李扬). - مراعاة
remote_url_allow_hostsلدوال الجداولMySQLوPostgreSQL. #35191 (Heena Bansal). - أُضيف الحقل
disk_nameإلىsystem.part_log. #35178 (Artyom Yurkov). - عدم إعادة المحاولة عند حدوث أخطاء غير قابلة لإعادة المحاولة أثناء الاستعلام عن عناوين URL البعيدة. يُغلق هذا #35161. #35172 (Kseniia Sumarokova).
- دعم استعلامات INSERT SELECT الموزعة (الإعداد
parallel_distributed_insert_select) في دالة الجدولview(). #35132 (Azat Khuzhin). - تتبّع أدق للذاكرة أثناء
INSERTإلىBufferمعAggregateFunction. #35072 (Azat Khuzhin). - تجنّب القسمة على الصفر في Query Profiler إذا كانت نواة Linux تحتوي على خلل. يُغلق هذا #34787. #35032 (Alexey Milovidov).
- إضافة المزيد من فحوصات السلامة إلى إعداد Keeper: لم يعد مسموحًا الآن بالجمع بين localhost وخوادم غير محلية، كما أُضيفت فحوصات للتحقق من تطابق قيمة منفذ raft الداخلي ومنفذ عميل Keeper. #35004 (alesapin).
- حاليًا، إذا غيّر المستخدم إعدادات جداول النظام، فسيؤدي ذلك إلى ظهور كمّ كبير من السجلات وسيُعيد ClickHouse تسمية الجداول كل دقيقة. يُصلح هذا #34929. #34949 (Nikita Mikhaylov).
- استخدام connection pool لعميل Hive metastore. #34940 (lgbo).
- تجاهل
TTLعلى مستوى كل عمود فيCREATE TABLE ASإذا كان محرك الجدول الجديد لا يدعمه (أي إذا لم يكن المحرك من عائلةMergeTree). #34938 (Azat Khuzhin). - السماح بسلاسل
LowCardinalityللفهارسngrambf_v1/tokenbf_v1. يُغلق هذا #21865. #34911 (Lars Hiller Eidnes). - السماح بفتح قاعدة بيانات sqlite فارغة إذا لم يكن الملف موجودًا. يُغلق هذا #33367. #34907 (Kseniia Sumarokova).
- تنفيذ إحصاءات للذاكرة في FreeBSD — وهذا مطلوب لكي يعمل
max_server_memory_usageبشكل صحيح. #34902 (Alexandre Snarskii). - في الإصدارات السابقة، كان شريط التقدّم في clickhouse-client قد يقفز إلى الأمام قرب 50% دون سبب واضح. يُغلق هذا #34324. #34801 (Alexey Milovidov).
- أصبحت استعلامات
ALTER TABLE DROP COLUMN columnXلمحركات الجداولMergeTreeتعمل فورًا عندما يكونcolumnXعمودًا من نوعALIAS. يُصلح #34660. #34786 (alesapin). - عرض تلميحات عندما يخطئ المستخدم في كتابة اسم data skipping index. يُغلق #29698. #34764 (flynn).
- دعم table functions
remote()/cluster() لـparallel_distributed_insert_select. #34728 (Azat Khuzhin). - عدم إعادة ضبط التسجيل الذي جرى إعداده عبر خياري سطر الأوامر
--log-file/--errorlog-fileفي حال كانت التهيئة في ملف الإعدادات فارغة. #34718 (Amos Bird). - استخراج المخطط مرة واحدة فقط عند إنشاء الجدول، ومنع القراءة من الملفات المحلية/المصادر الخارجية لاستخراج المخطط عند كل بدء تشغيل للخادم. #34684 (Kruglov Pavel).
- السماح بتحديد أسماء الوسائط لـ UDFs التنفيذية. وهذا ضروري للتنسيقات التي يكون فيها اسم الوسيط جزءًا من serialization، مثل
NativeوJSONEachRow. يُغلق #34604. #34653 (Maksim Kita). - أصبح
MaterializedMySQL(ميزة تجريبية) يدعم الآنmaterialized_mysql_tables_list(قائمة مفصولة بفواصل لجداول قاعدة بيانات MySQL، ستُنسخ باستخدام محرك قاعدة البيانات MaterializedMySQL. القيمة الافتراضية: قائمة فارغة — ما يعني أنه ستُنسخ جميع الجداول)، كما ورد في #32977. #34487 (zzsmdfj). - تحسين سجلات span في OpenTelemetry لعملية INSERT على distributed table. #34480 (Frank Chen).
- جعل
ctimeوmtimeالخاصين بـ znode متسقين بين الخوادم في ClickHouse Keeper. #33441 (小路).
تحسينات البناء/الاختبار/الحزم
- تم ترحيل مستودع الحزم إلى JFrog Artifactory (Mikhail f. Shiryaev).
- جرى جعل بعض الإعدادات عشوائية في الاختبارات الوظيفية، بحيث يجري اختبار عدد أكبر من التركيبات الممكنة للإعدادات. وهذه طريقة إضافية من أساليب الاختبار بالتشويش لضمان تغطية اختبارية أفضل. ويغلق هذا #32268. #34092 (Kruglov Pavel).
- إزالة PVS-Studio من CI لدينا. #34680 (Mikhail f. Shiryaev).
- إضافة إمكانية بناء ملفات تنفيذية منزوعٍ منها الرموز باستخدام CMake. في الإصدارات السابقة، كانت هذه العملية تُنفَّذ بواسطة dh-tools. #35196 (alesapin).
- إصدار build أصغر “fat-free” لـ
clickhouse-keeper. #35031 (alesapin). - استخدام @robot-clickhouse بصفته author وcommitter لطلبات السحب مثل https://github.com/ClickHouse/ClickHouse/pull/34685. #34793 (Mikhail f. Shiryaev).
- تقييد إصدار DWARF المستخدم لمعلومات Debug بحد أقصى 4، لأن محلل رموز المكدس الداخلي لدينا لا يستطيع parse لإصدار DWARF 5. ويكون هذا منطقيًا إذا كنت تقوم compile لـ ClickHouse باستخدام clang-15. #34777 (Alexey Milovidov).
- إزالة حزمة Debian
clickhouse-testلأنها تضيف تعقيدًا غير ضروري. يستخدم CI الاختبارات من repository، ولم يعد الاختبار المستقل عبر حزمة deb مدعومًا. #34606 (Ilya Yatsishin).
إصلاح خطأ (خلل يلاحظه المستخدم في إصدار مستقر رسمي أو إصدار رسمي ما قبل الاستقرار)
- إصلاح لتكامل HDFS: عندما يكون حجم المخزن المؤقت الداخلي صغيرًا جدًا، فإن NEED_MORE_INPUT في
HadoopSnappyDecoderقد يعمل عدة مرات (>=3) لكتلة مضغوطة واحدة. يؤدي ذلك إلى نسخ بيانات الإدخال إلى موضع غير صحيح فيHadoopSnappyDecoder::buffer. #35116 (lgbo). - تجاهل امتيازات GRANT المتقادمة في عبارات ATTACH GRANT. يعالج طلب السحب هذا #34815. #34855 (Vitaly Baranov).
- إصلاح segfault في قاعدة بيانات Postgres عند الحصول على استعلام إنشاء الجدول إذا كانت قاعدة البيانات قد أُنشئت باستخدام named collections. يغلق #35312. #35313 (Kseniia Sumarokova).
- إصلاح خطأ تكرار الصفوف في partial merge join، يغلق #31009. #35311 (Vladimir C).
- إصلاح احتمال حدوث
Assertion 'position() != working_buffer.end()' failedأثناء استخدام ضغط bzip2 مع قيمة صغيرة للإعدادmax_read_buffer_size. اكتُشف هذا الخطأ في https://github.com/ClickHouse/ClickHouse/pull/35047. #35300 (Kruglov Pavel). وأثناء استخدام ضغط lz4 مع قيمة صغيرة للإعداد max_read_buffer_size. #35296 (Kruglov Pavel). وأثناء استخدام ضغط lzma مع قيمة صغيرة للإعدادmax_read_buffer_size. #35295 (Kruglov Pavel). وأثناء استخدام ضغطbrotliمع قيمة صغيرة للإعدادmax_read_buffer_size. اكتُشف هذا الخطأ في https://github.com/ClickHouse/ClickHouse/pull/35047. #35281 (Kruglov Pavel). - إصلاح احتمال حدوث segfault في استدلال المخطط لـ
JSONEachRow. #35291 (Kruglov Pavel). - إصلاح استعلام
CHECK TABLEفي حال كانت الأعمدة المتفرقة مُمكّنة في الجدول. #35274 (Anton Popov). - تجنب std::terminate في حال حدوث استثناء أثناء القراءة من VFS البعيد. #35257 (Azat Khuzhin).
- إصلاح قراءة المنفذ من ملف الإعدادات، يغلق #34776. #35193 (Vladimir C).
- إصلاح خطأ في استعلام يحتوي على
WITH TOTALSفي حال أعادHAVINGنتيجة فارغة. يعالج هذا #33711. #35186 (Amos Bird). - إصلاح حالة حدية في
replaceRegexpAll، يغلق #35117. #35182 (Vladimir C). - لم يعمل استدلال المخطط بشكل صحيح في حالة
INSERT INTO FUNCTION s3(...) FROM ...، إذ حاول قراءة المخطط من ملف s3 بدلاً من استعلام select. #35176 (Kruglov Pavel). - إصلاح
table overridesفي MaterializedPostgreSQL (ميزة تجريبية) لـ partition by وما شابه. يغلق #35048. #35162 (Kseniia Sumarokova). - إصلاح إضافة table جديدة إلى replication في MaterializedPostgreSQL (ميزة تجريبية) باستخدام (ATTACH TABLE) بعد إزالتها يدويًا باستخدام (DETACH TABLE). يغلق #33800. يغلق #34922. يغلق #34315. #35158 (Kseniia Sumarokova).
- إصلاح خطأ تقليم الأقسام عند استخدام دالة غير رتيبة مع العامل IN. هذا يصلح #35136. #35146 (Amos Bird).
- إصلاح عدم الدقة البسيطة في تحويل إعدادات YAML إلى XML. #35135 (Miel Donkers).
- إصلاح
optimize_skip_unused_shards_rewrite_inللأعمدة الموقعة والقيم السالبة. #35134 (Azat Khuzhin). - كان خيار إعداد
update_lagفي تهيئة القاموس الخارجي غير قابل للاستخدام، إذ كان يعرض رسالة الخطأUnexpected key `update_lag` in dictionary source configuration. #35089 (Jason Chu). - تجنب احتمال حدوث توقف متبادل عند إيقاف server. #35081 (Azat Khuzhin).
- إصلاح alias المفقود بعد تحسين الدالة إلى subcolumn عند تمكين الإعداد
optimize_functions_to_subcolumns. يغلق #33798. #35079 (qieqieplus). - إصلاح القراءة من table
system.asynchronous_insertsإذا وُجد insert غير متزامن إلى table function. #35050 (Anton Popov). - إصلاح الاستثناء المحتمل
Reading for MergeTree family tables must be done with last position boundary(وهو مرتبط بالعمليات على VFS البعيد). يغلق #34979. #35001 (Kseniia Sumarokova). - إصلاح النتيجة غير المتوقعة عند استخدام دالة aggregate من النوع -State ضمن إطار window. #34999 (metahys).
- إصلاح احتمال حدوث segfault في FileLog (ميزة تجريبية). يغلق #30749. #34996 (Kseniia Sumarokova).
- إصلاح الخطأ النادر المحتمل
Cannot push block to port which already has data. #34993 (Nikolai Kochetov). - إصلاح استنتاج المخطط الخاطئ للتواريخ غير المحاطة بعلامتَي اقتباس في CSV. يُغلق #34768. #34961 (Kruglov Pavel).
- التكامل مع Hive: إصلاح النتيجة غير المتوقعة عند استخدام
inفيwhereداخل استعلام Hive. #34945 (lgbo). - تجنّب الـpolling المشغول في ClickHouse Keeper أثناء البحث عن ملفات changelog المطلوب حذفها. #34931 (Azat Khuzhin).
- إصلاح تحويل DateTime64 من PostgreSQL. يُغلق #33364. #34910 (Kseniia Sumarokova).
- إصلاح احتمال ظهور الخطأ “Part directory doesn’t exist” أثناء
INSERTإلى جدول MergeTree يعتمد على VFS فوق S3. #34876 (Azat Khuzhin). - دعم تنفيذ عبارات DDLs مثل CREATE USER على cluster متماثل النسخ المتقاطع. #34860 (Jianmei Zhang).
- إصلاح أخطاء
GROUP BYعلى عدة أعمدة فيWindowView(ميزة تجريبية). #34859 (vxider). - إصلاح حالات الفشل المحتملة في دوال S2 عندما تحتوي الاستعلامات على أعمدة ثابتة. #34745 (Bharat Nallan).
- إصلاح خطأ في دوال H3 التي تحتوي على أعمدة ثابتة ويتسبب في فشل الاستعلامات. #34743 (Bharat Nallan).
- إصلاح الخطأ
No such file or directoryعند تفعيلfsync_part_directoryوvertical merge. #34739 (Azat Khuzhin). - إصلاح التسلسل/الطباعة لاستعلامات النظام
RELOAD MODEL,RELOAD FUNCTION,RESTART DISKعند استخدامON CLUSTER. يُغلق #34514. #34696 (Maksim Kita). - إصلاح
allow_experimental_projection_optimizationمعenable_global_with_statement(إذ كان قد يؤدي سابقًا إلى الخطأStack size too largeعند وجود عدة expressions في عبارةWITH، كما كان يعيد تنفيذ الاستعلامات الفرعية scalar مرارًا، لذا سيصبح الآن أكثر كفاءة). #34650 (Azat Khuzhin). - التوقف عن اختيار part لإجراء mutate عليه عندما تكون replica الأخرى قد حدّثت بالفعل سجل المعاملات لمحرك
ReplatedMergeTree. #34633 (Jianmei Zhang). - إصلاح النتيجة غير الصحيحة لاستعلام count بسيط عند استخدام ميزة نقل part #34089. #34385 (nvartolomei).
- إصلاح عدم اتساق قيد
max_query_sizeفي الاستعلامات الفرعية الموزعة. #34078 (Chao Ma).
إصدار ClickHouse v22.2، 2022-02-17. العرض التقديمي، الفيديو
ملاحظات الترقية
- قد يؤدي تطبيق فهارس تخطي البيانات على الاستعلامات التي تتضمن FINAL إلى نتائج غير صحيحة. في هذا الإصدار، عطّلنا فهارس تخطي البيانات افتراضيًا للاستعلامات التي تتضمن FINAL (أُضيف إعداد جديد
use_skip_indexes_if_finalوهو معطّل افتراضيًا). #34243 (Azat Khuzhin).
ميزة جديدة
- أصبحت projections جاهزة لبيئات production. تم تفعيل
allow_experimental_projection_optimizationافتراضيًا مع إهمال هذا الإعداد. #34456 (Nikolai Kochetov). - إضافة خيار لإنشاء ملفات جديدة عند insert لمحركات
File/S3/HDFS. كما أصبح مسموحًا بالكتابة فوق ملف فيHDFS. وبشكل افتراضي، سيجري طرح استثناء عند محاولة الكتابة فوق ملف فيS3. كذلك سيجري طرح استثناء عند محاولة إلحاق بيانات بملف في formats التي لها suffix (ولذلك لا تدعم الإلحاق)، مثلParquetوORC. يغلق #31640 يغلق #31622 يغلق #23862 يغلق #15022 يغلق #16674. #33302 (Kruglov Pavel). - إضافة إعداد يتيح للمستخدم تحديد دلالات deduplication الخاصة به في
MergeTree/ReplicatedMergeTree. وعند توفيره، يُستخدم بدلًا من بصمة البيانات لتوليد معرّف block. لذلك، على سبيل المثال، يمكن للمستخدم، عبر تمرير قيمة فريدة لهذا الإعداد في كل statement من نوع INSERT، تجنب اعتبار البيانات inserted نفسها مكررة ومن ثم deduplicated. هذا يغلق: #7461. #32304 (Igor Nikonov). - إضافة دعم الكلمة المفتاحية
DEFAULTلعبارات INSERT. يغلق #6331. #33141 (Andrii Buriachevskyi). - تمت إضافة محدد column
EPHEMERALإلى query CREATE TABLE. يغلق #9436. #34424 (yakov-olkhovskiy). - إضافة دعم clause
IF EXISTSللميزةTTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'. لن تُنقل parts إلى disk أو volume إلا إذا كان موجودًا على replica، ما يتيح لقواعدMOVE TTLأن تتصرف بشكل مختلف بين replicas وفقًا لـ policies التخزين الموجودة. يعالج #34455. #34504 (Anton Popov). - السماح بتعيين table engine افتراضي وإنشاء جداول من دون تحديد ENGINE. #34187 (Ilya Yatsishin).
- إضافة table function
format(format_name, data). #34125 (Kruglov Pavel). - اكتشاف format في
clickhouse-localمن اسم الملف حتى عند تمريره عبر stdin. #33829 (Kruglov Pavel). - إضافة schema inference إلى table function
values. يغلق #33811. #34017 (Kruglov Pavel). - إعادة التحميل الديناميكي لشهادات TLS الخاصة بالخادم عند إعادة تحميل الإعدادات. يُغلق #15764. #15765 (johnskopis). #31257 (Filatenkov Artur).
- يمكن لـ ReplicatedMergeTree الآن استعادة البيانات عند تعطل بعض الأقراص لديه. #13544 (Amos Bird).
- اتصالات متحمّلة للأعطال في clickhouse-client:
clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis). - إضافة الدالتين
DEGREESوRADIANSللتوافق مع MySQL. #33769 (Bharat Nallan). - إضافة الدالة
h3ToCenterChild. #33313 (Bharat Nallan). وإضافة دوال h3 متنوعة جديدة:edgeLengthKm,exactEdgeLengthKm,exactEdgeLengthM,exactEdgeLengthRads,numHexagons. #33621 (Bharat Nallan). - إضافة الدالة
bitSliceلاستخراج تتابعات bit الفرعية من String/FixedString. #33360 (RogerYK). - تنفيذ الدالة التجميعية
meanZTest. #33354 (achimbab). - إضافة فترات الثقة إلى الدوال التجميعية لاختبارات T. #33260 (achimbab).
- إضافة الدالة
addressToLineWithInlines. يُغلق #26211. #33467 (SuperDJY). - تمت إضافة
#!و#كبداية معترف بها للتعليق أحادي السطر. يُغلق #34138. #34230 (Aaron Katz).
ميزة تجريبية
- دوال لتصنيف النصوص: اكتشاف اللغة وترميز المحارف. انظر #23271. #33314 (Nikolay Degterinsky).
- إضافة ميزة memory overcommit إلى
MemoryTracker. أُضيفت إعداداتguaranteedلحدود الذاكرة، وتمثل حدودًا مرنة للذاكرة. وعند الوصول إلى الحد الصارم للذاكرة، يحاولMemoryTrackerإلغاء الاستعلام الأكثر تجاوزًا للتخصيص. ويحدد الإعداد الجديدmemory_usage_overcommit_max_wait_microsecondsالمدة التي يمكن أن تنتظر خلالها الاستعلامات حتى يتوقف استعلام آخر. يغلق #28375. #31182 (Dmitry Novik). - تمكين join بين التدفق والجدول في WindowView. #33729 (vxider).
- دعم أنواع البيانات
SETوYEARوTIMEوGEOMETRYفيMaterializedMySQL(ميزة تجريبية). يعالج #18091، #21536، #26361. #33429 (zzsmdfj). - إصلاح مشكلات متعددة عندما يكون projection مفعّلًا افتراضيًا. وُصفت كل مشكلة في commit منفصل. هذا مرتبط بـ #33678. ويعالج هذا #34273. #34305 (Amos Bird).
تحسين الأداء
- دعم
optimize_read_in_orderإذا كانت بادئة مفتاح الترتيب مرتبة بالفعل. على سبيل المثال، إذا كان لدينا مفتاح ترتيبORDER BY (a, b)في جدول، واستعلام يتضمنWHERE a = const ORDER BY b، فستُنفَّذ القراءة الآن وفق ترتيب مفتاح الترتيب بدلًا من الفرز الكامل. #32748 (Anton Popov). - تحسين أداء
insertالمقسّم إلى partitionات ضمن table functions URLوS3وFileوHDFS. يُغلق #34348. #34510 (Maksim Kita). - عدة تحسينات في أداء clickhouse-keeper. #34484 #34587 (zhanglistar).
- تحسين أداء
FlatDictionaryعند تحميل بيانات القاموس. #33871 (Maksim Kita). - تحسين أداء الدالة
mapPopulateSeries. يُغلق #33944. #34318 (Maksim Kita). - جُعل العمودان الافتراضيان
_fileو_path(في table engines الشبيهة بالملفات) من النوعLowCardinality، ما سيجعل queries على ملفات متعددة أسرع. يُغلق #34300. #34317 (flynn). - تسريع تحميل data parts. لم يكن ذلك يُنفَّذ بالتوازي سابقًا، إذ لم يكن للإعداد
part_loading_threadsأي تأثير. انظر #4699. #34310 (alexey-milovidov). - تحسين أداء format
LineAsString. هذا يُغلق #34303. #34306 (alexey-milovidov). - تحسين
quantilesExact{Low,High}لاستخدامnth_elementبدلًا منsort. #34287 (Danila Kutenin). - تحسين طفيف في أداء format
Regexp. #34202 (alexey-milovidov). - تحسين بسيط لتحليل الاستعلامات الفرعية القيَمية. #34128 (Federico Rodriguez).
- جعل
ORDER BYعلى tuple يكاد يكون بنفس سرعةORDER BYعلى الأعمدة. لدينا تحسينات خاصة لـORDER BYمتعدد الأعمدة: https://github.com/ClickHouse/ClickHouse/pull/10831 . ومن المفيد أيضًا تطبيقها على أعمدة tuple. #34060 (Amos Bird). - إعادة العمل على cache الخاصة بالاستعلامات الفرعية القيَمية وإعادتها إلى تنفيذ materialized views. #33958 (Raúl Marín).
- تحسين طفيف في أداء
ORDER BYعبر إضافة دعم x86-64 AVX-512 إلى دوالmemcmpSmallلتسريع مقارنة الذاكرة. لا يعمل ذلك إلا إذا قمتَ بتجميع ClickHouse بنفسك. #33706 (hanqf-git). - تحسين أداء القاموس
range_hashedعندما يكون هناك عدد كبير من الفترات للمفتاح. يُصلح #23821. #33516 (Maksim Kita). - في عمليات insert وmerge إلى S3، تُكتب الملفات بالتوازي كلما أمكن ذلك (TODO: تحقّق مما إذا كان قد تم دمجه). #33291 (Nikolai Kochetov).
- تحسين أداء
clickhouse-keeperوإصلاح عدة تسرّبات للذاكرة في مكتبة NuRaft. #33329 (alesapin).
تحسين
- دعم الإدراجات غير المتزامنة في
clickhouse-clientللاستعلامات التي تتضمن بيانات مضمنة. #34267 (Anton Popov). - تقوم الدالتان
dictGetوdictHasبتحويل وسيطة المفتاح ضمنيًا إلى بنية مفتاح القاموس إذا اختلفا. #33672 (Maksim Kita). - تحسينات على قواميس
range_hashed. تحسين أداء وقت التحميل عند وجود سمات متعددة. والسماح بإنشاء قاموس بلا سمات. وأُضيف خيار لتحديد الاستراتيجية عندما يكون الفاصلانstartوendمن النوعNullable، وتكون القيمة الافتراضية لـconvert_null_range_bound_to_openهيtrue. يُغلق #29791. كما أصبح بالإمكان تحديدFloatوDecimalوDateTime64وInt128وInt256وUInt128وUInt256كأنواع للنطاق. وأُضيف فيRangeHashedDictionaryدعم لقيم النطاق التي تتجاوز النوعInt64. يُغلق #28322. وأُضيف الخيارrange_lookup_strategyلتحديد نوع البحث في النطاقminأوmax، وتكون القيمة الافتراضيةmin. يُغلق #21647. وتم إصلاح حسابات البايتات المخصصة. كما تم إصلاح اسم النوع فيsystem.dictionariesفي حالةComplexKeyHashedDictionary. #33927 (Maksim Kita). - تدعم قواميس
flatوhashedوhashed_arrayالآن الإنشاء بسمات فارغة، مع دعم قراءة المفاتيح واستخدامdictHas. يُصلح #33820. #33918 (Maksim Kita). - أُضيف دعم نوع البيانات
DateTime64في القواميس. #33914 (Maksim Kita). - أصبح بالإمكان كتابة
s3(url, access_key_id, secret_access_key)(مع الاكتشاف التلقائي لتنسيق البيانات وبنية الجدول، ولكن باستخدام بيانات اعتماد صريحة). #34503 (Kruglov Pavel). - أُضيف إرسال تنسيق الإخراج مرة أخرى إلى العميل، كما هو الحال في HTTP protocol، وفقًا لما اقتُرح في #34362. يُغلق #34362. #34499 (Vitaly Baranov).
- إرسال إحصاءات ProfileEvents في حالة استعلام INSERT SELECT (لعرض مقاييس الاستعلام في
clickhouse-clientلهذا النوع من الاستعلامات). #34498 (Dmitry Novik). - التعرّف على الامتداد
.jsonlلتنسيق JSONEachRow. #34496 (Kruglov Pavel). - تحسين استنتاج المخطط في clickhouse-local. أصبح بالإمكان الاكتفاء بكتابة
clickhouse-local -q "select * from table" < data.format. #34495 (Kruglov Pavel). - يمكن الآن منح امتيازات CREATE/ALTER/DROP ROW POLICY على جدول، أو على
database.*، وكذلك على مستوى عام*.*. #34489 (Vitaly Baranov). - السماح بتصدير ملفات كبيرة بأي حجم إلى
s3. تمت إضافة إعدادين جديدين:s3_upload_part_size_multiply_factorوs3_upload_part_size_multiply_parts_count_threshold. والآن، في كل مرة يصل فيها عدد الأجزاء المرفوعة إلى S3 من استعلام واحد إلىs3_upload_part_size_multiply_parts_count_threshold، يُضرَبs3_min_upload_part_sizeفيs3_upload_part_size_multiply_factor. يعالج #34244. #34422 (alesapin). - السماح بتخطي عناوين URL غير الموجودة (404) للأنماط العامة عند استخدام تخزين URL / دالة الجدول. ويغلق أيضًا #34359. #34392 (Kseniia Sumarokova).
- تنسيقات الإدخال والإخراج الافتراضية لـ
clickhouse-local، ويمكن تجاوزها باستخدام —input-format و —output-format. يغلق #30631. #34352 (李扬). - إضافة خيارات إلى
clickhouse-format، وهي:max_query_sizeوmax_parser_depth. ما يغلق #30528. #34349 (李扬). - تحسين التعامل مع المدخلات المسبقة قبل بدء العميل. هذا لأجل #34308. #34336 (Amos Bird).
- إضافة أسماء بديلة للدالتين
REGEXP_MATCHESوREGEXP_REPLACEللتوافق مع PostgreSQL. يغلق #30885. #34334 (李扬). - تتوقع بعض الخوادم وجود ترويسة User-Agent في طلبات HTTP الخاصة بها. تمت إضافة ترويسة
User-Agentإلى طلبات HTTP بالشكل التالي: User-Agent: ClickHouse/VERSION_STRING. #34330 (Saad Ur Rahman). - إلغاء عمليات الدمج قبل الحصول على قفل الجدول لاستعلام
TRUNCATEلتجنب الخطأDEADLOCK_AVOIDEDفي بعض الحالات. يعالج #34302. #34304 (tavplubix). - تغيير مستوى الشدة للرسالة “Cancelled merging parts” في السجلات، لأنها ليست خطأ. هذا يغلق #34148. #34232 (alexey-milovidov).
- إضافة إمكانية تركيب عامل التحويل بأسلوب PostgreSQL
::مع التعبيرات التي تستخدم العاملين[]و.(فهرسة المصفوفات وTuple). #34229 (Nikolay Degterinsky). - التعرّف على التنسيق
YYYYMMDD-hhmmssفي الدالةparseDateTimeBestEffort. هذا يغلق #34206. #34208 (alexey-milovidov). - السماح باستخدام محرف إرجاع العربة في وسط السطر أثناء التحليل بواسطة التنسيق
Regexp. هذا يغلق #34200. #34205 (alexey-milovidov). - السماح بتحليل
PRIMARY KEYالخاص بالقاموس بالصيغةPRIMARY KEY (id, value)؛ إذ كان المدعوم سابقًا فقطPRIMARY KEY id, value. يُغلق #34135. #34141 (Maksim Kita). - إضافة وسيطة اختيارية إلى
splitByCharلتقييد عدد العناصر الناتجة. يُغلق #34081. #34140 (李扬). - تحسين تجربة تحرير الأسطر المتعددة في
clickhouse-client. وهذا استكمال لـ #31123. #34114 (Amos Bird). - إضافة دعم
UUIDفي format الإدخال/الإخراجMsgPack. #34065 (Kruglov Pavel). - أصبح سياق التتبّع (لـ OpenTelemetry) يُمرَّر الآن من metadata عميل GRPC (وهذا التغيير مرتبط ببروتوكول GRPC بين العميل والخادم). #34064 (andremarianiello).
- دعم جميع أنواع استعلامات
SYSTEMمع clause ON CLUSTER. #34005 (小路). - تحسين احتساب الذاكرة للاستعلامات التي تستخدم أقل من
max_untracker_memory. #34001 (Azat Khuzhin). - إصلاح البحث غير الحساس لحالة الأحرف في UTF-8 string عندما تُمثَّل الأحرف الصغيرة والكبيرة بعدد مختلف من البايتات. ومن الأمثلة على ذلك
ẞوß. يُغلق هذا #7334. #33992 (Harry Lee). - اكتشاف format وschema من stdin في
clickhouse-local. #33960 (Kruglov Pavel). - التعامل بشكل صحيح مع حالة سوء configuration عندما تستخدم عدة disks المسار نفسه على filesystem. #29072. #33905 (zhongyuankai).
- تجربة كل عنوان IP تم تحليله عند الحصول على S3 proxy. نادرًا ما تُستخدم وسطاء S3، وغالبًا ما يكون ذلك في Yandex Cloud. #33862 (Nikolai Kochetov).
- دعم استعلام
EXPLAIN AST CREATE FUNCTION؛ إذ إنEXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String)سيُرجعEXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String'). #33819 (李扬). - إضافة دعم للتحويل من
Map(Key, Value)إلىArray(Tuple(Key, Value)). #33794 (Maksim Kita). - إضافة بعض التحسينات والإصلاحات إلى نوع البيانات
Bool. يُصلح #33244. #33737 (Kruglov Pavel). - تحليل
trace-idالخاص بـ OpenTelemetry وتخزينه بترتيب big-endian. #33723 (Frank Chen). - تحسين وظائف عائلة
fromUnixTimestamp64.. إذ أصبحت الآن تقبل أي قيمة صحيحة يمكن تحويلها إلىInt64. وهذا يُغلق: #14648. #33505 (Andrey Zvonov). - إعادة تنفيذ
_shard_numمن الثوابت (انظر #7624) باستخدام الدالةshardNum()(انظر #27020)، لتجنّب المشكلات المحتملة (مثل تلك التي اكتُشفت في #16947). #33392 (Azat Khuzhin). - تمكين العمليات الحسابية الثنائية (الجمع والطرح والضرب والقسمة و
leastوgreatest) بين Decimal و Float. #33355 (flynn). - مراعاة حدود cgroups عند الاكتشاف التلقائي لـ max_threads. #33342 (JaySon).
- إضافة إعداد جديد
min_session_timeout_msإلى clickhouse-keeper. سيحدّد clickhouse-keeper الآن مهلة session الخاصة بالعميل وفقًا للإعدادينmin_session_timeout_msوsession_timeout_ms. #33288 (JackyWoo). - أُضيف دعم Data type
UUIDللدالتينhexوbin. #32170 (Frank Chen). - إصلاح قراءة subcolumns التي تحتوي أسماؤها على نقاط. وعلى وجه الخصوص، أُصلحت قراءة أعمدة
Nestedإذا كانت أسماء عناصرها تحتوي على نقاط (مثلًاNested(`keys.name` String, `keys.id` UInt64, values UInt64)). #34228 (Anton Popov). - إصلاح عدم عمل
parallel_view_processing = 0عند insert إلى table باستخدامVALUES. - إصلاح عدم ضبطview_duration_msفيquery_views_logبشكل صحيح بالنسبة إلى materialized views. #34067 (Raúl Marín). - إصلاح parsing لبنية table من ZooKeeper: تُقارَن metadata من ZooKeeper الآن مع metadata المحلية بصيغتها canonical. وهذا يفيد عندما يمكن أن تتغير أسماء الدوال canonical بين إصدارات ClickHouse. #33933 (sunny).
- إجراء تهريب صحيح لبعض المحارف عند التعامل مع LDAP. #33401 (IlyaTsoi).
تحسينات البناء/الاختبار/الحزم
- إزالة دعم البناء غير المجمّع. #33690 (Azat Khuzhin).
- التأكد من أن الاختبارات لا تعتمد على نتيجة الفرز غير المستقر للعناصر المتساوية. أُضيفت عشوائية نطاقات العناصر المتساوية في وضع Debug بعد الفرز لمنع المشكلات عند الاعتماد على ترتيب فرز العناصر المتساوية. #34393 (Maksim Kita).
- إضافة مزيد من التفصيل إلى فحص Style check. #34289 (Mikhail f. Shiryaev).
- إزالة حزمة Debian
clickhouse-testلأنها متقادمة. #33948 (Ilya Yatsishin). - تحسينات متعددة على نظام البناء لإزالة احتمال استخدام حزم من نظام التشغيل أحيانًا، ولفرض عمليات بناء محكمة العزل. #33695 (Amos Bird).
إصلاح خطأ (سلوك غير صحيح ملحوظ للمستخدم في إصدار مستقر رسمي أو إصدار ما قبل الاستقرار)
- تم إصلاح التحقق assertion عند استخدام
allow_experimental_parallel_reading_from_replicasمعmax_parallel_replicasعندما تكون قيمته 1. هذا يُصلح #34525. #34613 (Nikita Mikhaylov). - إصلاح خطأ نادر عند قراءة المصفوفات الفارغة، كان قد يؤدي إلى الخطأ
Data compressed with different methods. يمكن إعادة إنتاجه إذا كانت لديك مصفوفات فارغة في معظمها، ولكن ليس دائمًا. ويحدث ذلك عند القراءة بالاتجاه العكسي مع ORDER BY … DESC. واحتمال حدوث هذا الخطأ ضئيل جدًا. #34327 (Anton Popov). - إصلاح النتيجة الخاطئة للدالتين
round/roundBankersعند تقريب قيم صحيحة من أنواع صغيرة. يُغلق #33267. #34562 (李扬). - أحيانًا لم يكن إلغاء الاستعلام يعمل فورًا عند قراءة عدة ملفات من S3 أو HDFS. يُصلح #34301 ويرتبط بـ #34397. #34539 (Dmitry Novik).
- إصلاح الاستثناء
Chunk should have AggregatedChunkInfo in MergingAggregatedTransform(في حالةoptimize_aggregation_in_order = 1وdistributed_aggregation_memory_efficient = 0). يُصلح #34526. #34532 (Anton Popov). - إصلاح المقارنة بين الأعداد الصحيحة والأعداد العائمة في تحليل الفهرس. سابقًا، كان هذا قد يؤدي إلى تخطي بعض الـ granules أثناء القراءة عن طريق الخطأ. يُصلح #34493. #34528 (Anton Popov).
- إصلاح دعم الضغط في URL engine. #34524 (Frank Chen).
- إصلاح الخطأ المحتمل ‘file_size: Operation not supported’ في الاكتشاف التلقائي لمخطط الملفات. #34479 (Kruglov Pavel).
- يُصلح حالة تسابق محتملة مع حذف جدول. #34416 (Kseniia Sumarokova).
- إصلاح الخطأ المحتمل
Cannot convert column Function to maskفي التقييم المختصر للدوال. يُغلق #34171. #34415 (Kruglov Pavel). - إصلاح تعطل محتمل عند استدلال المخطط من مصدر URL. يُغلق #34147. #34405 (Kruglov Pavel).
- بالنسبة إلى UDFs، كان يجري التحقق من أذونات الوصول على مستوى قاعدة البيانات بدلًا من المستوى العام كما ينبغي. يُغلق #34281. #34404 (Maksim Kita).
- إصلاح صياغة المحرك غير الصحيحة في ناتج استعلام
SHOW CREATE DATABASEلقواعد البيانات التي تستخدم المحركMemory. يُغلق هذا #34335. #34345 (alexey-milovidov). - تم إصلاح حالتي تسابق نادرتين للغاية كانتا قد تؤديان إلى تلف حالة replication queue وظهور الخطأ “intersecting parts”. #34297 (tavplubix).
- إصلاح عرض شريط التقدم؛ إذ كان يُقرَّب خطأً إلى عدد صحيح من الأحرف. #34275 (alexey-milovidov).
- إصلاح حقول معلومات العميل current_user/current_address للاتصال بين الخوادم (قبل هذا التصحيح، كانت قيمتا current_user/current_address تُحفَظان من الاستعلام السابق). #34263 (Azat Khuzhin).
- إصلاح تسرّب في الذاكرة عند حدوث بعض حالات Exception أثناء query processing مع
optimize_aggregation_in_order=1. #34234 (Azat Khuzhin). - إصلاح المقياس
Queryالذي يعرض عدد الاستعلامات الجاري تنفيذها. ففي الإصدارات الأخيرة المتعددة كان يساوي 0 دائمًا. #34224 (Anton Popov). - إصلاح schema inference لدالة الجدول
s3. #34186 (Kruglov Pavel). - إصلاح حالة تسابق نادرة وغير ضارة في محركات التخزين
HDFSوS3وURLقد تؤدي إلى اتصالات إضافية. #34172 (alesapin). - إصلاح خلل قد يؤدي، في حالات نادرة، إلى الخطأ “Cannot read all data” أثناء قراءة أعمدة LowCardinality في عائلة محركات جداول MergeTree التي تخزن البيانات على نظام ملفات بعيد مثل S3 (نظام الملفات الافتراضي فوق S3 ميزة تجريبية غير جاهزة لبيئات production). #34139 (alesapin).
- إصلاح عمليات insert إلى distributed tables عند حدوث تغيير في native protocol. كان آخر تغيير في الإصدار 22.1، لذا قد تحدث بعض حالات فشل insert إلى distributed tables بعد الترقية إلى ذلك الإصدار. #34132 (Anton Popov).
- إصلاح data race محتمل في محرك الجدول
Fileأُدخل في #33960. يُغلق #34111. #34113 (Kruglov Pavel). - تم إصلاح حالة تسابق طفيفة قد تتسبب، في حالات نادرة للغاية، في الخطأ “intersecting parts” بعد فقدان الاتصال بـ ZooKeeper. #34096 (tavplubix).
- إصلاح asynchronous inserts مع التنسيق
Native. #34068 (Anton Popov). - إصلاح خلل كان يؤدي إلى تعذر بدء الخادم عند استخدام كلٍّ من replicated access storage وKeeper (المضمَّن في clickhouse-server). كما أُضيف إعدادان لمهلة Keeper socket بدلًا من إعدادات default user:
keeper_server.socket_receive_timeout_secوkeeper_server.socket_send_timeout_sec. يُصلح #33973. #33988 (alesapin). - إصلاح segfault أثناء parsing لملف ORC ذي footer تالف. يُغلق #33797. #33984 (Kruglov Pavel).
- إصلاح تحليل IPv6 من query parameter (prepared statements) وإصلاح تحويل IPv6 إلى سلسلة نصية. يُغلق #33928. #33971 (Kruglov Pavel).
- إصلاح تعطل أثناء قراءة Tuples المتداخلة. يُصلح #33838. #33956 (Anton Popov).
- إصلاح استخدام الدالتين
arrayوtupleمع وسيطات حرفية في distributed queries. وكان هذا قد يؤدي سابقًا إلى الاستثناءNot found columns. #33938 (Anton Popov). - لم يكن aggregate function combinator
-Ifيعالج وسيطة التصفيةNullableعلى نحو صحيح. هذا يُغلق #27073. #33920 (alexey-milovidov). - إصلاح race condition محتمل عند القراءة من قرص بعيد (تُعد virtual filesystem فوق s3 feature تجريبية غير جاهزة لـproduction). #33912 (Amos Bird).
- إصلاح تعطل يحدث إذا أُنشئت SQL UDF مع lambda ذات وسيطات ليست معرّفات. يُغلق #33866. #33868 (Maksim Kita).
- إصلاح استخدام columns sparse (التي يمكن تمكينها عبر setting التجريبي
ratio_of_defaults_for_sparse_serialization). #33849 (Anton Popov). - إصلاح الخطأ المنطقي
replica is not readonlyفي query SYSTEM RESTORE REPLICAعندما تكون replica في الواقع readonly. يُصلح #33806. #33847 (tavplubix). - إصلاح تسرّب للذاكرة في
clickhouse-keeperعند استخدام الضغط (Compression) (الافتراضي). #33840 (Azat Khuzhin). - إصلاح index analysis عند عدم توفر أي types مشتركة. #33833 (Amos Bird).
- إصلاح schema inference لكل من
JSONEachRowوJSONCompactEachRow. #33830 (Kruglov Pavel). - إصلاح استخدام external dictionaries مع source
redisوعند وجود عدد كبير من المفاتيح. #33804 (Anton Popov). - إصلاح خطأ في client كان يؤدي إلى ‘Connection reset by peer’ في server. يُغلق #33309. #33790 (Kruglov Pavel).
- إصلاح parsing للاستعلام INSERT INTO … VALUES SETTINGS … (…), … #33776 (Kruglov Pavel).
- إصلاح خطأ في فحص table عند إنشاء data part بتنسيق wide format وprojection. #33774 (李扬).
- إصلاح حالة تسابق طفيفة بين count() وINSERT/merges/… في MergeTree (إذ قد يُعاد عدد غير صحيح من الصفوف في SELECT مع optimize_trivial_count_query). #33753 (Azat Khuzhin).
- طرح استثناء عند فشل طلب سرد الدليل في تخزين HDFS. #33724 (LiuNeng).
- إصلاح mutation عندما يحتوي الجدول على projections. يُصلح هذا #33010. ويُصلح هذا #33275. #33679 (Amos Bird).
- تحديد قاعدة البيانات الحالية بشكل صحيح إذا نُفِّذ
CREATE TEMPORARY TABLE AS SELECTداخل session HTTP مسماة. هذه حالة استخدام نادرة جدًا. يُغلق هذا #8340. #33676 (alexey-milovidov). - السماح ببعض queries التي تتضمن الفرز وLIMIT BY وARRAY JOIN ودوال lambda. يُغلق هذا #7462. #33675 (alexey-milovidov).
- إصلاح خلل في “zero copy replication” (وهي ميزة لا تزال قيد التطوير ويجب عدم استخدامها في بيئة production) كان يؤدي إلى تكرار البيانات في حالة TTL move. يُصلح هذا #33643. #33642 (alesapin).
- إصلاح
Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform(في حالةoptimize_aggregation_in_order = 1). #33637 (Azat Khuzhin). - إصلاح الخطأ
Bad cast from type ... to DB::DataTypeArrayالذي قد يحدث عندما يحتوي الجدول على عمودNestedيتضمن اسمه نقاطًا، وتُولَّد له قيمة افتراضية (على سبيل المثال أثناء insert، عندما لا يكون العمود مُدرجًا). استكمالًا لـ #28762. #33588 (Alexey Pavlenko). - تم إصلاح التصدير إلى ملفات
lz4. يُغلق هذا #31421. #31862 (Kruglov Pavel). - إصلاح احتمال حدوث crash إذا كان
group_by_overflow_modeمضبوطًا علىany(GROUP BY تقريبي) وكانت aggregation تُجرى على عمود واحد من النوعLowCardinality. #34506 (DR). - إصلاح insert في temporary tables عبر بروتوكول gRPC بين العميل والخادم. يُصلح هذا #34347، issue
#2. #34364 (Vitaly Baranov). - إصلاح issue #19429. #34225 (Vitaly Baranov).
- إصلاح issue #18206. #33977 (Vitaly Baranov).
- يتيح طلب السحب هذا استخدام عدة مخازن LDAP في قائمة أدلة المستخدمين نفسها. كان ذلك يعمل سابقًا، لكنه تعطّل لأن اختبارات LDAP معطّلة (وهي جزء من اختبارات testflows). #33574 (Vitaly Baranov).
إصدار ClickHouse v22.1، بتاريخ 2022-01-18. العرض التقديمي، الفيديو
ملاحظات الترقية
- كانت الدالتان
leftوrightتُنفَّذان سابقًا في المحلل، أما الآن فأصبحتا كاملتي الوظائف. قد ترفع الاستعلامات الموزعة التي تستخدم الدالتينleftأوrightبدون أسماء مستعارة استثناءً إذا كان العنقود يحتوي على إصدارات مختلفة منclickhouse-server. إذا كنت تُجري ترقية لعنقودك وواجهت هذا الخطأ، فعليك إكمال الترقية لضمان أن جميع العُقد تعمل بالإصدار نفسه. ويمكنك أيضًا إضافة أسماء مستعارة (AS something) إلى الأعمدة في استعلاماتك لتجنّب هذه المشكلة. #33407 (alexey-milovidov). - أصبح استخدام الموارد في الاستعلامات الفرعية القيَمية مُحتسبًا بالكامل اعتبارًا من هذا الإصدار. ومع هذا التغيير، باتت الصفوف المقروءة في الاستعلامات الفرعية القيَمية تُسجَّل الآن في
query_log. وإذا كان الاستعلام الفرعي القيَمي مخزّنًا مؤقتًا (مكررًا أو يُستدعى لعدة صفوف)، فلا تُحتسب الصفوف المقروءة إلا مرة واحدة فقط. يتيح هذا التغيير تنفيذ KILL للاستعلامات والإبلاغ عن التقدم أثناء تنفيذ الاستعلامات الفرعية القيَمية. #32271 (Raúl Marín).
ميزة جديدة
- تنفيذ استدلال مخطط البيانات لتنسيقات الإدخال. والسماح بتخطي البنية (أو الاكتفاء بكتابة
auto) في دوال الجداولfile,url,s3,hdfsوفي معاملاتclickhouse-local. وكذلك السماح بتخطي البنية في استعلامات CREATE لمحركات الجداولFile,HDFS,S3,URL,Merge,Buffer,DistributedوReplicatedMergeTree(عند إضافة نسخ متماثلة جديدة). #32455 (Kruglov Pavel). - اكتشاف التنسيق من امتداد الملف في دوال الجداول
file/hdfs/s3/urlومحركات الجداولHDFS/S3/URL، وكذلك فيSELECT INTO OUTFILEوINSERT FROM INFILE#33565 (Kruglov Pavel). يغلق #30918. #33443 (OnePiece). - أداة لجمع البيانات التشخيصية عند الحاجة إلى الدعم. #33175 (Alexander Burmak).
- الاكتشاف التلقائي للعناقيد عبر Zoo/Keeper. يتيح ذلك إضافة نسخ متماثلة إلى العنقود دون تغيير التكوين على كل خادم. #31442 (vdimir).
- تنفيذ محرك جدول Hive للوصول إلى Apache Hive من ClickHouse. يحقق هذا: #29245. #31104 (taiyang-li).
- إضافة الدوال التجميعية
cramersV,cramersVBiasCorrected,theilsUوcontingency. تحسب هذه الدوال الاعتمادية (كمقياس للارتباط) بين القيم الفئوية. وتستخدم جميعها الجداول التقاطعية (مدرجًا تكراريًا للأزواج) في التنفيذ. ويمكن اعتبارها شبيهة بمعامل الارتباط، ولكن لأي قيم منفصلة، وليس بالضرورة أرقامًا. #33366 (alexey-milovidov). التنفيذ الأولي بواسطة Vanyok-All-is-OK وantikvist. - تمت إضافة دالة الجدول
hdfsCluster، التي تتيح معالجة الملفات من HDFS بالتوازي من عدة عقد في عنقود محدد، على نحو مماثل لـs3Cluster. #32400 (Zhichang Yu). - إضافة دعم للأقراص المستندة إلى Azure Blob Storage، بطريقة مماثلة لما هو متاح للأقراص المستندة إلى AWS S3. #31505 (Jakub Kuklis).
- السماح باستخدام
COMMENTفيCREATE VIEW(لجميع أنواع VIEW). #31062 (Vasily Nemkov). - إعادة تهيئة منافذ الاستماع والبروتوكولات ديناميكيًا عند تغيّر التكوين. #30549 (Kevin Michel).
- تمت إضافة الدوال
left,right,leftUTF8,rightUTF8. وإصلاح خطأ في تنفيذ الدالةsubstringUTF8مع OFFSET سالب (إزاحة من نهاية السلسلة). #33407 (alexey-milovidov). - إضافة دوال جديدة لنظام الإحداثيات
H3:h3HexAreaKm2,h3CellAreaM2,h3CellAreaRads2. #33479 (Bharat Nallan). - إضافة الدالة
MONTHNAME. #33436 (usurai). - أُضيفت الدالة
arrayLast. يغلق #33390. #33415 أُضيفت الدالةarrayLastIndex. #33465 (Maksim Kita). - إضافة الدالة
decodeURLFormComponent، وهي تختلف قليلًا عنdecodeURLComponent. إغلاق #10298. #33451 (SuperDJY). - السماح بتقسيم قواعد التجميع المرحلي في
GraphiteMergeTreeللمقاييس العادية/الموسومة (حقل rule_type اختياري). #33494 (Michail Safronov).
تحسين الأداء
- دعم نقل الشروط إلى
PREWHERE(الإعدادoptimize_move_to_prewhere) للجداول التي تستخدم المحركMergeإذا كانت جميع الجداول الأساسية التابعة لها تدعمPREWHERE. #33300 (Anton Popov). - معالجة أكثر كفاءة لأنماط globs في تخزين URL. يمكنك الآن بسهولة تنفيذ استعلام على مليون URL بالتوازي مع إعادة المحاولة. يغلق هذا #32866. #32907 (Kseniia Sumarokova).
- تجنّب التتبّع التراجعي الأسي في المحلل. يغلق هذا #20158. #33481 (alexey-milovidov).
- كان سوء استخدام الدالة
untupleيؤدي إلى تعقيد أسي في تحليل الاستعلام (اكتشفه fuzzer). يغلق هذا #33297. #33445 (alexey-milovidov). - تقليل الذاكرة المخصصة للقواميس ذات السمات النصية. #33466 (Maksim Kita).
- تحسين طفيف في أداء الدالة
reinterpret. #32587 (alexey-milovidov). - تغيير غير مهم. في حالات نادرة للغاية، عندما يُفقَد جزء بيانات على كل نسخة متماثلة، قد تتخطى الاستعلامات اللاحقة، بعد دمج بعض أجزاء البيانات، عددًا أقل من الأقسام عند استبعاد الأقسام. وهذا بالكاد يؤثر في أي شيء. #32220 (Azat Khuzhin).
- تحسين أداء الكتابة في
clickhouse-keeperعبر تحسين منطق حساب الحجم. #32366 (zhanglistar). - تحسين إنشاء projection المادي لـ projection أحادية الجزء. يغلق هذا #31669. #31885 (Amos Bird).
- تحسين أداء الاستعلامات على جداول النظام. #33312 (OnePiece).
- تحسين اختيار أجزاء MergeTree التي يمكن نقلها بين وحدات التخزين. #33225 (OnePiece).
- إصلاح أداء القاموس
sparse_hashedمع المفاتيح sequential (دالة hash غير صحيحة). #32536 (Azat Khuzhin).
ميزة تجريبية
- القراءة المتوازية من عدة نسخ متماثلة ضمن shard أثناء تنفيذ distributed query من دون استخدام sample key. لتمكين ذلك، اضبط
allow_experimental_parallel_reading_from_replicas = 1وmax_parallel_replicasعلى أي قيمة رقمية. يُغلق هذا #26748. #29279 (Nikita Mikhaylov). - تنفيذ sparse serialization. يمكن أن يقلل ذلك من استهلاك مساحة disk ويحسّن أداء بعض queries للأعمدة التي تحتوي على عدد كبير من القيم الافتراضية (الصفرية). ويمكن تمكينه عبر تعيين
ratio_for_sparse_serialization. وسيُختار sparse serialization ديناميكيًا للـ column إذا تجاوزت نسبة عدد القيم الافتراضية إلى إجمالي عدد القيم تلك العتبة. وسيُثبَّت نوع الـ serialization (الافتراضي أو sparse) لكل column في part، لكنه قد يختلف بين parts. #22535 (Anton Popov). - إضافة الميزة “TABLE OVERRIDE” لتخصيص schemas لجداول MaterializedMySQL. #32325 (Stig Bakken).
- إضافة query
EXPLAIN TABLE OVERRIDE. #32836 (Stig Bakken). - دعم clause TABLE OVERRIDE في MaterializedPostgreSQL. RFC: #31480. #32749 (Kseniia Sumarokova).
- تغيير ZooKeeper path لعلامات zero-copy الخاصة بـ shared data. لاحظ أن “zero-copy replication” ميزة غير production (ولا تزال في المراحل المبكرة من development)، لذا لا يُنصح باستخدامها أصلًا. ولكن إذا كنت قد استخدمتها، فضع هذا التغيير في الحسبان. #32061 (ianton-ru).
- دعم clause Events في استعلام watch الخاص بـ WINDOW VIEW. #32607 (vxider).
- إصلاح ACL مع hash رقمي صريح في
clickhouse-keeper: أصبح السلوك الآن متسقًا مع ZooKeeper، وبات الـ digest المُولَّد مقبولًا دائمًا. #33249 (小路). #33246. - إصلاح إزالة projection غير المتوقعة عند detach للـ parts. #32067 (Amos Bird).
تحسين
- أصبحت دوال تحويل التاريخ والوقت التي تُنتج وقتًا يسبق
1970-01-01 00:00:00تُشبَع الآن إلى الصفر بدلًا من حدوث overflow. #29953 (Amos Bird). ويُصلح هذا أيضًا خطأً في تحليل الفهرس إذا كانت دالة اقتطاع التاريخ تُنتج نتيجة تسبق Unix epoch. - اعرض دائمًا استخدام الموارد (إجمالي استخدام CPU، وإجمالي استخدام RAM، وأقصى استخدام RAM لكل مضيف) في العميل. #33271 (alexey-milovidov).
- تحسين serialization وdeserialization للنوع
Bool، مع التحقق من نطاق القيم. #32984 (Kruglov Pavel). - إذا جرى تعريف setting غير صالح باستخدام الاستعلام
SETأو باستخدام query parameters في HTTP request، فستتضمن رسالة الخطأ اقتراحات مشابهة لسلسلة setting غير الصالحة (إن وُجدت). #32946 (Antonio Andelic). - دعم التلميحات لأسماء settings المكتوبة بشكل خاطئ في clickhouse-client وclickhouse-local. يُغلق #32237. #32841 (凌涛).
- السماح باستخدام virtual columns في materialized views. يُغلق #11210. #33482 (OnePiece).
- إضافة config لتعطيل IPv6 في clickhouse-keeper عند الحاجة. هذا يُغلق #33381. #33450 (Wu Xueyang).
- إضافة مزيد من المعلومات إلى
system.build_optionsحول revision الحالية لـ git. #33431 (taiyang-li). clickhouse-local: تتبّع الذاكرة ضمن الخيار--max_memory_usage_in_client. #33341 (Azat Khuzhin).- السماح باستخدام intervals سالبة في الدالة
intervalLengthSum. وسيُضاف طولها أيضًا. هذا يُغلق #33323. #33335 (alexey-milovidov). - يمكن استخدام
LineAsStringكـ output format. هذا يُغلق #30919. #33331 (Sergei Trifonov). - دعم
<secure/>في configuration الخاصة بالعنقود، كصيغة بديلة عن<secure>1</secure>. يُغلق #33270. #33330 (SuperDJY). - سيؤدي الضغط على Ctrl+C مرتين إلى إنهاء
clickhouse-benchmarkفورًا من دون انتظار queries قيد التنفيذ. هذا يُغلق #32586. #33303 (alexey-milovidov). - دعم Unix timestamp مع Milliseconds في الدالة
parseDateTimeBestEffort. #33276 (Ben). - السماح بإلغاء الاستعلام أثناء قراءة البيانات من الجدول الخارجي بالتنسيقات:
Arrow/Parquet/ORC— إذ كان يتعذر إلغاؤه في حالة الملفات الكبيرة عند ضبطinput_format_allow_seeksعلىfalse. يغلق #29678. #33238 (Kseniia Sumarokova). - إذا كان محرك الجدول يدعم العبارة
SETTINGS، فاسمح بتمرير الإعدادات كأزواج مفتاح-قيمة أو عبر config. أُضيف هذا الدعم إلى MySQL. #33231 (Kseniia Sumarokova). - منع المفاتيح الأساسية من النوع Nullable بشكل صحيح عند الحاجة. هذا مرتبط بـ #32780. #33218 (Amos Bird).
- إضافة retry لاتصالات
PostgreSQLإذا لم يتم fetch لأي شيء بعد. يغلق #33199. #33209 (Kseniia Sumarokova). - التحقق من مفاتيح config الخاصة بالقواميس الخارجية. #33095. #33130 (Kseniia Sumarokova).
- إرسال معلومات profile ضمن
clickhouse-local. يغلق #33093. #33097 (Kseniia Sumarokova). - التقييم المختصر: دعم الدالة
throwIf. يغلق #32969. #32973 (Maksim Kita). - (يحدث هذا فقط في الإصدارات غير الرسمية). أُصلح خطأ segfault عند إدراج البيانات في أعمدة Decimal وString وFixedString وArray المضغوطة. هذا يغلق #32939. #32940 (N. Kolotov).
- أُضيف دعم لتحديد استعلام فرعي كدالة SQL معرّفة من قبل المستخدم. مثال:
CREATE FUNCTION test AS () -> (SELECT 1). يغلق #30755. #32758 (Maksim Kita). - تحسين دعم ضغط gRPC بخصوص #28671. #32747 (Vitaly Baranov).
- تفريغ جميع data parts الموجودة في الذاكرة عند عدم تمكين WAL أثناء إيقاف الخادم أو فصل الجدول. #32742 (nauta).
- السماح بالتحكم في مهلات الاتصال لـ MySQL (كان ذلك مدعومًا سابقًا فقط لمصدر القاموس). يغلق #16669. كانت قيمة
connect_timeoutالافتراضية صغيرة نسبيًا، وأصبحت الآن قابلة للتهيئة. #32734 (Kseniia Sumarokova). - دعم الخيار
authSourceلتخزينMongoDB. يغلق #32594. #32702 (Kseniia Sumarokova). - دعم النوع
Date32في دالة الجدولgenarateRandom. #32643 (nauta). - إضافة الإعدادين
max_concurrent_select_queriesوmax_concurrent_insert_queriesللتحكم في الاستعلامات المتزامنة بحسب نوع الاستعلام. إغلاق #3575. #32609 (SuperDJY). - تحسين التعامل مع البُنى
Nestedالتي تحتوي على أعمدة مفقودة عند قراءة البيانات بتنسيقProtobuf. متابعة لـ https://github.com/ClickHouse/ClickHouse/pull/31988. #32531 (Vitaly Baranov). - السماح ببيانات اعتماد فارغة لمحرك
MongoDB. إغلاق #26267. #32460 (Kseniia Sumarokova). - تعطيل بعض التحسينات الخاصة بدوال النوافذ التي قد تؤدي إلى استثناءات. إغلاق #31535. إغلاق #31620. #32453 (Kseniia Sumarokova).
- يتيح الاتصال بـ MongoDB 5.0. إغلاق #31483,. #32416 (Kseniia Sumarokova).
- تمكين المقارنة بين
DecimalوFloat. إغلاق #22626. #31966 (flynn). - تمت إضافة الإعدادات
command_read_timeoutوcommand_write_timeoutلكل منStorageExecutableوStorageExecutablePoolوExecutableDictionaryوExecutablePoolDictionaryوExecutableUserDefinedFunctions. يتحكم الإعدادcommand_read_timeoutفي مهلة قراءة البيانات منstdoutالخاص بالأمر بالمللي ثانية. ويتحكم الإعدادcommand_write_timeoutفي مهلة كتابة البيانات إلىstdinالخاص بالأمر بالمللي ثانية. كما تمت إضافة الإعدادcommand_termination_timeoutلكل منExecutableUserDefinedFunctionوExecutableDictionaryوStorageExecutable. وتمت إضافة الإعدادexecute_directإلىExecutableUserDefinedFunction، وتكون قيمتهtrueافتراضيًا. وتمت إضافة الإعدادexecute_directإلىExecutableDictionaryوExecutablePoolDictionary، وتكون قيمتهfalseافتراضيًا. #30957 (Maksim Kita). - ستُرجع الدوال التجميعية
Bitmapالنتيجة الصحيحة عند تمرير وسيط خارج النطاق بدلًا من الالتفاف. #33127 (DR). - إصلاح تحليل الاستعلامات غير الصحيحة مع عبارة
FROM INFILE. #33521 (Kruglov Pavel). - عدم السماح بالكتابة إلى
S3إذا كان المسار يحتوي على globs. #33142 (Kruglov Pavel). - لم يكن الخيار
--echoمستخدمًا بواسطةclickhouse-clientفي وضع الدُفعات مع استعلام واحد. #32843 (N. Kolotov). - استخدام الخيار
--databaseمع clickhouse-local. #32797 (Kseniia Sumarokova). - إصلاح شيفرة سيئة على نحو مفاجئ في دالة SQL العادية
file. وهي الآن تدعم الروابط الرمزية. #32640 (alexey-milovidov). - تحديث
modification_timeلجزء البيانات فيsystem.partsبعد نقل الجزء #32964. #32965 (save-my-heart). - مشكلة محتملة، لكن لا يمكن استغلالها: قد يحدث تجاوز عددي عند تغيير حجم المصفوفة. #33024 (varadarajkumar).
تحسينات البناء/الاختبار/الحزم
- إضافة حزم واختبارات وظيفية ونسخ Docker مبنية لإصدار ClickHouse بمعمارية AArch64 (ARM). #32911 (Mikhail f. Shiryaev). #32415
- تهيئة ClickHouse لكي يُبنى باستخدام musl-libc. وهو غير مفعّل افتراضيًا. #33134 (alexey-milovidov).
- جعل برنامج التثبيت النصي يعمل على FreeBSD. هذا يُغلق #33384. #33418 (alexey-milovidov).
- إضافة
actionlintلسير عمل GitHub Actions، والتحقق من ملفات سير العمل عبرact --listلفحص صحة صياغة سير العمل. #33612 (Mikhail f. Shiryaev). - إضافة المزيد من الاختبارات لميزة المفتاح الأساسي القابل لأن يكون NULL. وإضافة المزيد من الاختبارات مع أنواع مختلفة وأنواع مختلفة من merge tree، إلى جانب بيانات مُولَّدة عشوائيًا. #33228 (Amos Bird).
- إضافة أداة بسيطة لعرض الاختبارات غير المستقرة بصريًا في متصفح الويب. #33185 (alexey-milovidov).
- تمكين البناء المحكم للإصدارات المشتركة. وهذا مخصص أساسًا للمطورين. #32968 (Amos Bird).
- تحديث
libc++وlibc++abiإلى أحدث إصدار. #32484 (Raúl Marín). - إضافة اختبار تكامل لعميل .NET خارجي (ClickHouse.Client). #23230 (Oleg V. Kozlyuk).
- تضمين معلومات git في الملف التنفيذي clickhouse. وبذلك يمكن الحصول بسهولة على مراجعة الشفرة المصدرية من الملف التنفيذي clickhouse. #33124 (taiyang-li).
- إزالة الشفرة المتقادمة من ConfigProcessor. لم تعد الشفرة الخاصة بـ Yandex مستخدمة. وقد احتوت هذه الشفرة على عيب طفيف. أبلغ عن هذا العيب Mallik Hassan في #33032. هذا يُغلق #33032. #33026 (alexey-milovidov).
إصلاح خطأ (سلوك غير صحيح يمكن للمستخدم ملاحظته في إصدار رسمي مستقر أو ما قبل المستقر)
- عدة إصلاحات لتحليل التنسيقات. وهذا مهم إذا كان
clickhouse-serverمفتوحًا لوصول كتابة من جهة معادية. فقد تؤدي بيانات إدخال مُعدّة خصيصًا لتنسيقNativeإلى قراءة ذاكرة غير مهيأة أو إلى تعطل. وهذا مهم إذا كانclickhouse-serverمفتوحًا لوصول كتابة من جهة معادية. #33050 (Heena Bansal). كما أُصلحت مشكلة تجاوز حدود فهرس نوع Union في Apache Avro ضمن التنسيق الثنائي لـ Apache Avro. #33022 (Harry Lee). وأُصلح إلغاء مرجعية مؤشر NULL في بياناتLowCardinalityعند إلغاء تسلسل بياناتLowCardinalityفي التنسيق Native. #33021 (Harry Lee). - سيزيل handler الخاص بـ ClickHouse Keeper العملية بشكل صحيح عند إرسال الاستجابة. #32988 (JackyWoo).
- احتمال حدوث خطأ حسابي بمقدار واحد في quotas: لم يكن قد تم بلوغ حد quota، لكن جرى تجاوز الحد. يُصلح هذا #31174. #31656 (sunny).
- تم إصلاح CAST من String إلى IPv4 أو IPv6 ثم العودة. كما تم إصلاح رسالة الخطأ في حالة فشل التحويل. #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
- تم إصلاح استثناء مثل
Unknown aggregate function nothingأثناء التنفيذ على server بعيد. يُصلح هذا #16689. #26074 (hexiaoting). - إصلاح database غير الصحيحة في JOIN من دون database صريحة في distributed queries (إصلاح: #10471). #33611 (Azat Khuzhin).
- إصلاح segfault في تنسيق Apache
Avroالذي يظهر بعد عملية insert الثانية إلى file. #33566 (Kruglov Pavel). - إصلاح segfault في تنسيق Apache
Arrowإذا كان schema يحتوي على النوعDictionary. يُغلق #33507. #33529 (Kruglov Pavel). - قد تُطبَّق إعدادات
offsetوlimitخارج النطاق بشكل غير صحيح على views. إغلاق #33289 #33518 (hexiaoting). - إصلاح الاستثناء
Block structure mismatchالذي قد يحدث أثناء Insertion إلى table مع columnLowCardinalitynested افتراضي. إصلاح #33028. #33504 (Nikolai Kochetov). - إصلاح dictionary expressions لسمات الحد الأدنى والحد الأقصى للنطاق في
range_hashedعند إنشائها باستخدام DDL. يُغلق #30809. #33478 (Maksim Kita). - إصلاح احتمال use-after-free في INSERT إلى materialized view مع DROP متزامن (Azat Khuzhin).
- لا تحاول القراءة بعد EOF (كحلّ بديل لخلل في نواة Linux)؛ إذ يمكن إعادة إنتاج هذا الخلل على النوى (3.14..5.9)، ويتطلب
index_granularity_bytes=0(أي تعطيل index granularity التكيفية). #33372 (Azat Khuzhin). - كانت الأوامر
SYSTEM SUSPENDوSYSTEM ... THREAD FUZZERتفتقر إلى التحكم في الوصول. تم إصلاح ذلك. المؤلف: Kevin Michel. #33333 (alexey-milovidov). - إصلاح مشكلة عدم ظهور
COMMENTالخاصة بالقواميس فيsystem.tablesوsystem.dictionaries. كما أصبح تعديل التعليق لمحركDictionaryمسموحًا. يغلق #33251. #33261 (Maksim Kita). - إضافة عمليات الإدراج غير المتزامنة، مع تمكين الإعداد
async_insert، إلى سجل الاستعلامات. في السابق، لم تكن مثل هذه الاستعلامات تظهر في سجل الاستعلامات. #33239 (Anton Popov). - إصلاح مشكلة إرسال تعبيرات
WHERE 1 = 0في استعلامات قواعد البيانات الخارجية. يغلق #33152. #33214 (Kseniia Sumarokova). - إصلاح التحقق من صحة DDL لـ MaterializedPostgreSQL. وإصلاح الإعداد
materialized_postgresql_allow_automatic_update. يغلق #29535. #33200 (Kseniia Sumarokova). التأكد من إزالة فتحات النسخ المتماثل غير المستخدمة دائمًا. وُجد في #26952. #33187 (Kseniia Sumarokova). إصلاح عمليات detach/attach في MaterializedPostreSQL (إزالة الجداول من النسخ المتماثل / إضافتها إليه) للجداول ذات المخطط غير الافتراضي. وُجد في #29535. #33179 (Kseniia Sumarokova). إصلاح DROP لقاعدة بيانات MaterializedPostgreSQL. #33468 (Kseniia Sumarokova). - كان المقياس
StorageBufferBytesيُحتسب بشكل غير صحيح أحيانًا. #33159 (xuyatian). - إصلاح الخطأ
Invalid version for SerializationLowCardinality key columnعند القراءة من عمودLowCardinalityمع تمكينlocal_filesystem_read_prefetchأوremote_filesystem_read_prefetch. #33046 (Nikolai Kochetov). - إصلاح مشكلة قراءة ملف فارغ عبر table function
s3. يغلق #33008. #33037 (Kseniia Sumarokova). - إصلاح تسرّب Context في حالة cancel_http_readonly_queries_on_client_close (أي تسرّب الجداول الخارجية التي رُفعت إلى الخادم وموارد أخرى). #32982 (Azat Khuzhin).
- إصلاح إخراج
Tupleالخاطئ في تنسيقCSVعند استخدام فاصل CSV مخصص. #32981 (Kruglov Pavel). - إصلاح التحقق من عنوان URL لـ HDFS الذي لم يكن يسمح باستخدام عنوان
namenodeعالي التوافر (HA). أُدخل هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/31042. #32976 (Kruglov Pavel). - إصلاح إطلاق استثناء من نوع
positional argument out of boundsمع الوسيطات غير الموضعية. يُغلق #31173#event-5789668239. #32961 (Kseniia Sumarokova). - إصلاح سلوك غير معرّف (UB) عند حدوث
EOFغير متوقع أثناء ملء مجموعة من استعلام HTTP (أي إذا قاطع العميل العملية في المنتصف، مثلtimeout 0.15s curl -Ss -F 's=@t.csv;' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s'ومعt.csvكبيرًا بما يكفي). #32955 (Azat Khuzhin). - إصلاح تراجع في الدالة
replaceRegexpAll. كانت الدالة تعمل بشكل غير صحيح عندما تكون السلسلة الفرعية المطابِقة فارغة. يُغلق هذا #32777. ويُغلق أيضًا #30245. #32945 (alexey-milovidov). - إصلاح قراءة
stripeفي تنسيقORC. #32929 (kreuzerkrieg). - فشلت
topKWeightedStateمع بعض أنواع الإدخال. #32487. #32914 (vdimir). - إصلاح الاستثناء
Single chunk is expected from view inner query (LOGICAL_ERROR)في materialized view. يُصلح #31419. #32862 (Nikolai Kochetov). - إصلاح التحسين المرتبط بـ
lazy seekفي القراءات غير المتزامنة من أنظمة الملفات البعيدة. يُغلق #32803. #32835 (Kseniia Sumarokova). - قد يتخطى محرك الجدول
MergeTreeبعض عملياتmutationبصمت إذا كان هناك عدد كبير جدًا من عملياتmutationالجارية أو عند ارتفاع استهلاك الذاكرة، وقد أُصلح ذلك. يُصلح #17882. #32814 (tavplubix). - تجنب إعادة استخدام
query cacheالخاصة بالاستعلامات الفرعية scalar عند معالجة كتل MV. يُصلح هذا خللًا يحدث عندما يشير الاستعلام scalar إلى الجدول المصدر، لكن هذا يعني أيضًا أن جميع الاستعلامات الفرعية scalar في تعريف MV ستُحسب لكل كتلة. #32811 (Raúl Marín). - قد يفشل server في البدء إذا تعذر على database تستخدم المحرك
MySQLالاتصال بـ MySQL server، وقد أُصلح ذلك. يُصلح #14441. #32802 (tavplubix). - إصلاح تعطل عند استخدام الدالة
fuzzBits، وإغلاق #32737. #32755 (SuperDJY). - إصلاح الخطأ
Column is not under aggregate functionفي حالة وجود MV معGROUP BY (list of columns)(التي تُحلَّل على أنهاGROUP BY tuple(...)) فوقKafka/RabbitMQ. يُصلح #32668 و#32744. #32751 (Nikolai Kochetov). - إصلاح الاستعلام
ALTER TABLE ... MATERIALIZE TTLمع نمطيTTL ... DELETE WHERE ...وTTL ... GROUP BY .... #32695 (Anton Popov). - إصلاح تحسين
optimize_read_in_orderفي الحالة التي يكون فيها محرك الجدولDistributedأوMerge، وكانت جداولMergeTreeالأساسية التابعة له تحتوي على دالة رتيبة في بادئة مفتاح الفرز. #32670 (Anton Popov). - إصلاح استثناء LOGICAL_ERROR عندما يكون هدف materialized view عبارة عن جدول JOIN أو SET. #32669 (Raúl Marín).
- قد يؤدي الإدراج في S3 باستخدام multipart upload إلى Google Cloud Storage إلى تشغيل عملية الإلغاء. #32504. #32649 (vdimir).
- إصلاح استثناء محتمل عند بدء تشغيل تخزين
RabbitMQعبر تأخير إنشاء القناة. #32584 (Kseniia Sumarokova). - إصلاح دورة حياة الجدول (أي احتمال use-after-free) في حالة تنفيذ DROP TABLE وINSERT بالتوازي. #32572 (Azat Khuzhin).
- إصلاح async inserts مع التنسيقات
CustomSeparatedوTemplateوRegexpوMsgPackوJSONAsString. سابقًا، لم تكن async inserts مع هذه التنسيقات تقرأ أي بيانات. #32530 (Kruglov Pavel). - إصلاح الدالة
groupBitmapAndعلى distributed table. #32529 (minhthucdao). - إصلاح تعطل في JOIN اكتشفه fuzzer، وإغلاق #32458. #32508 (vdimir).
- معالجة صحيحة لحالة تكرار column في Apache Arrow. #32507 (Dmitriy Mokhnatkin).
- إصلاح مشكلة تتعلق بـ formatting ملتبس للاستعلامات في distributed queries، وكانت تؤدي إلى أخطاء عندما تكون بعض columns الجدول مُسمّاة
ALLأوDISTINCT. هذا يُغلق #32391. #32490 (alexey-milovidov). - إصلاح حالات فشل في queries تحاول استخدام skipping indices التي لم تتم materialize لها بعد. يُصلح #32292 و#30343. #32359 (Anton Popov).
- إصلاح خلل في استعلام
SELECTعند وجود أكثر من سياستَي صفوف على العمود نفسه، ابتداءً من الاستعلام الثاني ضمن الجلسة نفسها. #31606. #32291 (SuperDJY). - إصلاح تحويل طابع Unix الزمني الكسري إلى
DateTime64، إذ كان الجزء الكسري معكوسًا في طوابع Unix الزمنية السالبة (قبل 1970-01-01). #32240 (Ben). - قد تبقى بعض عناصر قائمة انتظار النسخ المتماثل عالقة لمدة
temporary_directories_lifetime(يوم واحد افتراضيًا) مع الخطأDirectory tmp_merge_<part_name>أوPart ... (state Deleting) already exists, but it will be deleted soonأو خطأ مشابه. تم إصلاح ذلك. يُصلح #29616. #32201 (tavplubix). - إصلاح تحليل مُحوِّل العمود
APPLY lambdaالذي كان قد يؤدي إلى تعطل العميل أو الخادم. #32138 (Kruglov Pavel). - إصلاح
base64Encodeالذي كان يضيف بايتات زائدة في نهاية السلاسل الصغيرة. #31797 (Kevin Michel). - إصلاح تعطل محتمل (أو نتيجة غير صحيحة) عند استخدام وسائط من
LowCardinalityمع دالة نافذة. يُصلح #31114. #31888 (Nikolai Kochetov). - إصلاح تعليق عند تنفيذ الأمر
DROP TABLE system.query_log sync. #33293 (zhanghuajie).