جدول المحتويات
إصدار ClickHouse v24.11، 2024-11-26
إصدار ClickHouse v24.10، 2024-10-31
إصدار ClickHouse v24.9، 2024-09-26
إصدار ClickHouse v24.8 LTS، 2024-08-20
إصدار ClickHouse v24.7، 2024-07-30
إصدار ClickHouse v24.6، 2024-07-01
إصدار ClickHouse v24.5، 2024-05-30
إصدار ClickHouse v24.4، 2024-04-30
إصدار ClickHouse v24.3 LTS، 2024-03-26
إصدار ClickHouse v24.2، 2024-02-29
إصدار ClickHouse v24.1، 2024-01-30
سجل التغييرات لعام 2023
الإصدار 24.12 من ClickHouse، 2024-12-19. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصبحت الدالتان
greatestوleastتتجاهلان الآن قيم الإدخال NULL، بعدما كانتا تُرجعان سابقًا NULL إذا كانت إحدى الوسيطات NULL. على سبيل المثال، أصبحSELECT greatest(1, 2, NULL)يُرجع الآن 2. وهذا يجعل السلوك متوافقًا مع PostgreSQL، لكنه في الوقت نفسه يخرق التوافق مع MySQL الذي يُرجع NULL. للاحتفاظ بالسلوك السابق، اضبط الإعدادleast_greatest_legacy_null_behavior(القيمة الافتراضية:false) علىtrue. #65519 #73344 (kevinyhzou). - أصبح تكامل MongoDB الجديد هو الافتراضي الآن. ويمكن للمستخدمين الذين يفضّلون استخدام برنامج تشغيل MongoDB القديم (المستند إلى برنامج تشغيل Poco) تفعيل إعداد الخادم
use_legacy_mongodb_integration. #73359 (Kirill Nikiforov.
ميزة جديدة
- نُقلت أنواع
JSON/Dynamic/Variantمن الميزات التجريبية إلى المرحلة التجريبية المتقدمة (beta). #72294 (Pavel Kruglov). كما جرى أيضًا ترحيل هذا التغيير وجميع الإصلاحات إلى الإصدار 24.11. - يوفّر تطور المخطط لتنسيق تخزين بيانات Iceberg للمستخدم خيارات واسعة لتعديل مخطط الجدول. ويمكن تغيير ترتيب الأعمدة وأسماء الأعمدة وامتدادات الأنواع البسيطة في الخلفية. #69445 (Daniil Ivanik).
- التكامل مع Iceberg REST Catalog: أُضيف محرك database جديد باسم Iceberg، يربط الكتالوج بالكامل بـ ClickHouse. #71542 (Kseniia Sumarokova).
- أُضيفت cache للفهرس الأساسي لجداول
MergeTree(يمكن تفعيلها عبر إعداد tableuse_primary_key_cache). وإذا كان التحميل الكسول وcache مفعّلين للفهرس الأساسي، فسيُحمَّل إلى cache عند الطلب (على غرار mark cache) بدلًا من إبقائه في الذاكرة دائمًا. كما أُضيف prewarm للفهرس الأساسي عند عمليات الإدراج/الدمج/الجلب الخاصة بـ data parts، وعند إعادة تشغيل table (يمكن تفعيله عبر الإعدادprewarm_primary_key_cache). يتيح ذلك خفض memory usage للجداول الضخمة على التخزين المشترك، وقد اختبرناه على جداول تضم أكثر من كوادريليون سجل. #72102 (Anton Popov). #72750 (Alexander Gololobov). - تنفيذ الأمر
SYSTEM LOAD PRIMARY KEYلتحميل primary indexes لجميع parts في table محدد، أو لجميع tables إذا لم يُحدَّد table. سيكون ذلك مفيدًا لاختبارات benchmark ولتجنّب زمن استجابة إضافي أثناء تنفيذ query. #66252 #67733 (ZAWA_ll). - أُضيف query يتيح Attach جداول
MergeTreeكـReplicatedMergeTreeوالعكس صحيح:ATTACH TABLE ... AS REPLICATEDوATTACH TABLE ... AS NOT REPLICATED. #65401 (Kirill). - إعداد جديد،
http_response_headers، يتيح لك تخصيص headers الخاصة باستجابات HTTP. فعلى سبيل المثال، يمكنك توجيه المتصفح لعرض صورة مخزّنة في database. وهذا يحل #59620. #72656 (Alexey Milovidov). - إضافة الدالة
toUnixTimestamp64Secondالتي تحوّلDateTime64إلى قيمةInt64بدقة ثوانٍ ثابتة، بما يتيح دعم إرجاع قيم سالبة إذا كان التاريخ يسبق حقبة يونكس. #70597 (zhanglistar). #73146 (Robert Schulze). - إضافة إعداد جديد
enforce_index_structure_match_on_partition_manipulationللسماح بعملية attach عندما تكون projections وsecondary indices الخاصة بـ source table مجموعة جزئية من تلك الموجودة في target table. وهذا يحل #70602. #70603 (zwy991114). - إضافة الصياغة ALTER USER
{ADD|MODIFY|DROP SETTING}، وALTER USER{ADD|DROP PROFILE}، والأمر نفسه لـ ALTER ROLE وALTER PROFILE. وبذلك، بدلًا من استبدال مجموعة Settings بالكامل، يمكنك تعديلها. #72050 (pufit). - تمت إضافة الدالة
arrayPRAUC، التي تحسب AUC (المساحة تحت المنحنى) لمنحنى Precision Recall. #72073 (Emmanuel). - تمت إضافة الدالة
indexOfAssumeSortedلأنواع المصفوفات. وهي تُحسّن البحث عندما تكون المصفوفة مرتبة ترتيبًا غير تنازلي. ويظهر أثر ذلك مع المصفوفات الكبيرة جدًا (أكثر من 100,000 عنصر). #72517 (Eric Kurbanov). - يتيح استخدام فاصل كمُعاملٍ ثانٍ اختياري للدالة التجميعية
groupConcat. #72540 (Yarik Briukhovetskyi). - أصبحت الدالة
translateتدعم الآن حذف الأحرف إذا كان المُعاملfromيحتوي على أحرف أكثر من المُعاملto. مثال:SELECT translate('clickhouse', 'clickhouse', 'CLICK')تُرجع الآنCLICK. #71441 (shuai.xu).
الميزات التجريبية
- إعداد جديد لـ MergeTree باسم
allow_experimental_reverse_keyيتيح دعم ترتيب الفرز التنازلي في مفاتيح الفرز الخاصة بـ MergeTree. ويُعد هذا مفيدًا لتحليل السلاسل الزمنية، وخاصةً في استعلامات TopN. مثال على الاستخدام:ENGINE = MergeTree ORDER BY (time DESC, key)- ترتيب تنازلي للحقلtime. #71095 (Amos Bird).
تحسين الأداء
- إعادة ترتيب JOIN. أُضيف خيار لتحديد جانب الـ join الذي سيعمل بوصفه الجدول الداخلي (build) في خطة query. يتحكم في ذلك الإعداد
query_plan_join_swap_table، ويمكن ضبطه علىauto. في هذا الوضع، سيحاول ClickHouse اختيار الجدول ذي أقل عدد من الصفوف. #71577 (Vladimir Cherkasov). - ستُستخدم الآن خوارزمية
parallel_hash(عند انطباق ذلك) عندما يكون الإعدادjoin_algorithmمضبوطًا علىdefault. وسيظل البديلان السابقان (directوhash) قيد الاستخدام إذا تعذر استخدامparallel_hash. #70788 (Nikita Taranov). - أُضيف خيار لاستخراج التعبيرات المشتركة من تعبيري
WHEREوONلتقليل عدد جداول hash المستخدمة أثناء عمليات join. ويكون ذلك مفيدًا عندما يحتوي شرط JOIN ON على أجزاء مشتركة داخل AND ضمن أجزاء OR مختلفة. يمكن تفعيل ذلك عبرoptimize_extract_common_expressions = 1. #71537 (János Benjamin Antal). - يتيح استخدام الفهارس في
SELECTعندما يُحوَّل عمود مفهرس باستخدام CAST إلىLowCardinality(String)، وهو ما قد يحدث عند تشغيل query على Merge table تحتوي بعض جداوله علىStringوبعضها الآخر علىLowCardinality(String). #71598 (Yarik Briukhovetskyi). - أثناء تنفيذ query باستخدام parallel replicas ومع تفعيل الخطة المحلية، لا يُجرى index analysis على workers. وسيختار coordinator النطاقات المطلوب قراءتها لـ workers استنادًا إلى index analysis من جهته (على initiator الخاص بالـ query). وهذا يجعل الاستعلامات القصيرة مع parallel replicas تتمتع بزمن استجابة منخفض يماثل استعلامات العقدة الواحدة. #72109 (Igor Nikonov).
- خُفِّض استهلاك الذاكرة في
clickhouse disks remove --recursiveلأقراص object storage. #67323 (Kirill). - استُعيد التحسين الخاص بقراءة subcolumns لعمود واحد في compact parts من #57631. إذ حُذف سابقًا بالخطأ. #72285 (Pavel Kruglov).
- تسريع فرز الأعمدة
LowCardinality(String)عبر إزالة الافتراضية من الاستدعاءات داخل المقارن. #72337 (Alexander Gololobov). - تحسين الدالة
argMin/argMaxلبعض data types البسيطة. #72350 (alesapin). - تحسين آلية القفل باستخدام الأقفال المشتركة في memory tracker لتقليل التنافس على الأقفال، مما يحسن الأداء على الأنظمة التي تحتوي على عدد كبير جدًا من وحدات CPU. #72375 (Jiebin Sun).
- أُضيف إعداد جديد،
use_async_executor_for_materialized_views. يستخدم تنفيذًا غير متزامن، وربما متعدد الخيوط، لـ query الخاص بالـ materialized view، ما قد يسرّع معالجة views أثناء INSERT، لكنه يستهلك أيضًا مزيدًا من الذاكرة. #72497 (alesapin). - تحسين أداء deserialization لحالات aggregate functions (في data type
AggregateFunctionوفي distributed queries). كما تحسن قليلًا أداء parsing للتنسيقRowBinary. #72818 (Anton Popov). - تقسيم ranges أثناء القراءة باستخدام parallel replicas وفق ترتيب مفتاح الجدول لاستهلاك ذاكرة أقل أثناء القراءة. #72173 (JIaQi).
- تسريع عمليات الإدراج في MergeTree في حال وجود قيمة واحدة فقط لمفتاح التقسيم داخل الدفعة المُدرَجة. #72348 (alesapin).
- تنفيذ إنشاء الجداول بالتوازي أثناء الاستعادة من نسخة احتياطية. قبل طلب السحب هذا، كان الأمر
RESTOREينشئ الجداول دائمًا ضمن thread واحدة، ما قد يكون بطيئًا في حال النسخ الاحتياطية التي تحتوي على عدد كبير من الجداول. #72427 (Vitaly Baranov). - قد يستغرق إسقاط mark cache وقتًا ملحوظًا إذا كان كبيرًا. وإذا احتفظنا بـ mutex الخاص بـ Context أثناء ذلك، فسيؤدي هذا إلى تعطيل كثير من الأنشطة الأخرى، بل وحتى اتصال client جديد لن يمكن إنشاؤه إلى أن يتم تحريره. وفي الواقع، لا يلزم الاحتفاظ بهذا الـ mutex للمزامنة، إذ يكفي وجود مرجع محلي إلى cache عبر shared ptr. #72749 (Alexander Gololobov).
تحسينات
- أُزيل الإعداد
allow_experimental_join_condition، ما يتيح شروط non-equi افتراضيًا. #69910 (Vladimir Cherkasov). - أصبحت الإعدادات الواردة من تهيئة server (
users.xml) تُطبَّق الآن على client أيضًا. وهذا مفيد لإعداداتformat، مثلdate_time_output_format. #71178 (Michael Kolupaev). - تنفيذ
GROUP BY/ORDER BYتلقائيًا على القرص استنادًا إلى استخدام ذاكرة server/المستخدم. ويُتحكَّم في ذلك عبر إعدادات query max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort. #71406 (Azat Khuzhin). - أُضيف منطق جديد للإلغاء: يتحقق
CancellationCheckerمن حالات timeout لكل query بدأ تنفيذها ويوقفها بمجرد بلوغ المهلة الزمنية. #69880 (Yarik Briukhovetskyi). - دعم ALTER من
ObjectإلىJSON، ما يعني أنه يمكنك الترحيل بسهولة من نوع Object المصنَّف كمُهمل. #71784 (Pavel Kruglov). - السماح بقيم غير معروفة في set وغير موجودة في Enum. إصلاح #72662. #72686 (zhanglistar).
- دعم عامل البحث في السلاسل النصية (مثل LIKE) لنوع البيانات
Enum، تنفيذًا لـ #72661. #72732 (zhanglistar). - كان يتم قبول بعض استعلامات ALTER USER غير المنطقية. إصلاح #71227. #71286 (Arthur Passos).
- مراعاة
prefer_locahost_replicaعند بناء plan لعمليةINSERT ... SELECTالموزعة. #72190 (filimonov). - خالفت Azure مواصفة Iceberg، إذ صنّفت Iceberg v1 على نحو خاطئ على أنه Iceberg v2. المشكلة موصوفة هنا. ينشئ Azure Iceberg Writer ملفات Iceberg metadata (وكذلك manifest files) بما يخالف المواصفات. نحاول الآن قراءة metadata الخاصة بتنسيق Iceberg v1 باستخدام قارئ v2 (لأنها تُكتَب بهذه الطريقة)، وأُضيف أيضًا error عندما لا تُنشأ الحقول المقابلة في manifest file. #72277 (Daniil Ivanik).
- أصبح مسموحًا الآن استخدام
CREATE MATERIALIZED VIEWمعUNION [ALL]في query. والسلوك مماثل لما يحدث مع materialized view التي تستخدمJOIN: إذ لن يعمل كمُشغِّل لعملية insert سوى أول table في تعبيرSELECT، بينما ستُتجاهل جميع الجداول الأخرى. ومع ذلك، إذا كانت هناك عدة مراجع إلى الجدول الأول (على سبيل المثال، UNION مع نفسه)، فستُعالَج جميعها على أنها block البيانات المُدرجة. #72347 (alesapin). - أُضيف التحقق من صحة source query عند استخدام ClickHouse كمصدر لقاموس. #72548 (Alexey Katsman).
- ضمان أن ClickHouse سيرى تغييرات ZooKeeper عند إعادة تحميل config. #72593 (Azat Khuzhin).
- تحسين تقدير استخدام الذاكرة للـ marks المخزنة مؤقتًا لتقليل إجمالي استخدام الذاكرة في cache. #72630 (Antonio Andelic).
- أُضيف مقياس جديد باسم
StartupScriptsExecutionState. ويمكن أن يأخذ هذا المقياس ثلاث قيم: 0 = لم تنتهِ برامج بدء التشغيل النصية بعد، 1 = نُفِّذت برامج بدء التشغيل النصية بنجاح، 2 = فشلت برامج بدء التشغيل النصية. نحتاج إلى هذا المقياس لمعرفة ما إذا كانت برامج بدء التشغيل النصية تُنفَّذ بنجاح في السحابة، خصوصًا بعد إصدارات التكوينات الأساسية. #72637 (Miсhael Stetsyuk). - أُضيف المقياس الجديد
MergeTreeIndexGranularityInternalArraysTotalSizeإلىsystem.metrics. وتبرز الحاجة إلى هذا المقياس للعثور على المثيلات ذات مجموعات البيانات الضخمة المعرّضة للارتفاع - أُضيفت عمليات إعادة المحاولة عند إنشاء جدول replicated. #72682 (Vitaly Baranov).
- أُضيف
total_bytes_with_inactiveإلىsystem.tablesلاحتساب إجمالي البايتات الخاصة بالأجزاء غير النشطة. #72690 (Kai Zhu). - أُضيفت إعدادات MergeTree إلى
system.settings_changes. #72694 (Raúl Marín). - أُضيف دعم JSON type في الدالة
notEmpty. #72741 (Pavel Kruglov). - أُضيف دعم تحليل خطأ GCS S3
AuthenticationRequired. #72753 (Vitaly Baranov). - أُضيف دعم النوع
Dynamicفي الدالتينifNullوcoalesce. #72772 (Pavel Kruglov). - أُضيف دعم
Dynamicفي الدوالtoFloat64/touInt32/إلخ. #72989 (Pavel Kruglov). - أُضيفت إعدادات طلبات S3:
http_max_fieldsوhttp_max_field_name_sizeوhttp_max_field_value_size، وتُستخدم أثناء تحليل استجابات واجهة برمجة تطبيقات S3 عند إنشاء نسخة احتياطية أو الاستعادة. #72778 (Vitaly Baranov). - لا تُحذف البيانات الوصفية للجدول في Keeper ضمن Storage S3(Azure)Queue إلا بعد حذف آخر جدول يستخدم هذه البيانات الوصفية. #72810 (Kseniia Sumarokova).
- أُضيفت profile events
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount. #72842 (Vladimir Cherkasov). - أُضيف دعم الأعمدة الفرعية في sorting key الخاص بـ MergeTree وفي skip indexes. #72644 (Pavel Kruglov).
إصلاح خطأ
- إصلاح احتمال وجود أجزاء متداخلة في MergeTree (بعد فشل عملية نقل جزء إلى الدليل
detached، وربما كان ذلك بسبب عملية على object storage). #70476 (Azat Khuzhin). - إصلاح اكتشاف الخطأ عندما يكون اسم الجدول طويلًا جدًا، مع توفير رسالة تشخيصية توضح الحد الأقصى للطول. وإضافة دالة جديدة
getMaxTableNameLengthForDatabase. #70810 (Yarik Briukhovetskyi). - إصلاح العمليات اليتيمة بعد تعطل
clickhouse-library-bridge(يتيح هذا البرنامج تشغيل مكتبات غير آمنة). #71301 (MikhailBurdukov). - إصلاح خطأ NoSuchKey أثناء التراجع عن transaction عند فشل إنشاء directory للقرص
plain_rewritable. #71439 (Julia Kartseva). - إصلاح serialization لقيم
Dynamicفي JSON formats من نوعPretty. #71923 (Pavel Kruglov). - إضافة اسم format المُستنتَج إلى create query في محركات
File/S3/URL/HDFS/Azure. سابقًا، كان اسم التنسيق يُستنتج في كل مرة يُعاد فيها تشغيل server، وإذا أزيلت data files المحددة، كان ذلك يؤدي إلى أخطاء أثناء بدء تشغيل الخادم. #72108 (Pavel Kruglov). - إصلاح أخطاء عند استخدام UDF في join على expression مع analyzer القديم. #72179 (Raúl Marín).
- إصلاح بعض الأخطاء الصغيرة في
StorageObjectStorage. ويتطلب ذلك تمكينuse_hive_partitioningافتراضيًا. #72185 (Yarik Briukhovetskyi). - إصلاح خلل كان يؤدي إلى تعثر
min_age_to_force_merge_on_partition_onlyفي محاولة دمج partition نفسها مرارًا رغم أنها كانت قد دُمجت بالفعل في part واحدة، مع عدم دمج الـ partitions التي تحتوي على parts متعددة. #72209 (Christoph Wurm). - إصلاح تعطل في
SimpleSquashingChunksTransformكان يحدث في حالات نادرة عند processing الأعمدة sparse. #72226 (Vladimir Cherkasov). - إصلاح data race في
GraceHashJoinكانت قد تؤدي إلى غياب بعض rows من مخرجات join. #72233 (Nikita Taranov). - إصلاح استعلامات
ALTER DELETEمع العمود materialized_block_number(إذا كان الإعدادenable_block_number_columnمفعّلًا). #72261 (Anton Popov). - إصلاح data race عند استدعاء
ColumnDynamic::dumpStructure()بشكل concurrent، مثلًا في مُنشئConcurrentHashJoin. #72278 (Nikita Taranov). - إصلاح احتمال حدوث
LOGICAL_ERRORمع الأعمدة المكررة فيORDER BY ... WITH FILL. #72387 (Vladimir Cherkasov). - إصلاح عدم تطابق الأنواع في عدة حالات بعد تطبيق
optimize_functions_to_subcolumns. #72394 (Anton Popov). - استخدم
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEبدلًا منAWS_CONTAINER_AUTHORIZATION_TOKEN_PATH. يُصلح #71074. #72397 (Konstantin Bogdanov). - إصلاح فشل تحليل استعلامات
BACKUP DATABASE db EXCEPT TABLES db.table. #72429 (Konstantin Bogdanov). - منع إنشاء
Variantفارغ. #72454 (Pavel Kruglov). - إصلاح التنسيق غير الصحيح لـ
result_part_pathفيsystem.merges. #72567 (Konstantin Bogdanov). - إصلاح تحليل نمط glob يتكوّن من عنصر واحد (مثل
{file}). #72572 (Konstantin Bogdanov). - إصلاح توليد الاستعلام للخادم التابع في حالة وجود distributed query مع
ARRAY JOIN. يُصلح #69276. #72608 (Dmitry Novik). - إصلاح خطأ يحدث عندما لا تُرجع
DateTime64 IN DateTime64أي نتائج. #72640 (Yarik Briukhovetskyi). - إصلاح عدم اتساق البيانات الوصفية عند إضافة replica جديدة إلى قاعدة بيانات Replicated تحتوي على جدول أُنشئ باستخدام
flatten_nested=0. #72685 (Alexander Tokmakov). - إصلاح إعدادات SSL المتقدمة للاتصال الداخلي في Keeper. #72730 (Antonio Andelic).
- إصلاح خطأ “No such key” في الوضع غير المرتب لـ S3Queue عندما يكون الإعداد
tracked_files_limitأصغر من معدل ظهور ملفات S3. #72738 (Kseniia Sumarokova). - إصلاح الاستثناء الذي يطرحه RemoteQueryExecutor عندما لا يكون المستخدم موجودًا محليًا. #72759 (Andrey Zvonov).
- إصلاح mutations مع العمود materialized
_block_number(إذا كان الإعدادenable_block_number_columnمُمكّنًا). #72854 (Anton Popov). - إصلاح النسخ الاحتياطي/الاستعادة مع disk عادي قابل لإعادة الكتابة في حال وجود ملفات فارغة في النسخة الاحتياطية. #72858 (Kseniia Sumarokova).
- إلغاء inserts بشكل صحيح في DistributedAsyncInsertDirectoryQueue. #72885 (Antonio Andelic).
- إصلاح تعطل أثناء تحليل بيانات غير صحيحة إلى أعمدة متناثرة (قد يحدث ذلك عند تمكين الإعداد
enable_parsing_to_custom_serialization). #72891 (Anton Popov). - إصلاح احتمال حدوث تعطل أثناء استعادة النسخة الاحتياطية. #72947 (Kseniia Sumarokova).
- إصلاح خطأ في أسلوب JOIN
parallel_hashقد يظهر عندما يحتوي الاستعلام على شرط معقد في العبارةONمع عوامل تصفية لعدم المساواة. #72993 (Nikita Taranov). - استخدام إعدادات التنسيق الافتراضية أثناء تحليل JSON لتجنّب تعطّل فك التسلسل. #73043 (Pavel Kruglov).
- إصلاح تعطل في المعاملات عند استخدام وحدة تخزين غير مدعومة. #73045 (Raúl Marín).
- إصلاح احتمال المبالغة في تقدير تتبّع الذاكرة (عندما كان الفرق بين
MemoryTrackingوMemoryResidentيواصل الازدياد). #73081 (Azat Khuzhin). - التحقق من وجود مفاتيح JSON مكررة أثناء تحليل Tuple. وكان هذا قد يؤدي سابقًا إلى خطأ منطقي
Invalid number of rows in Chunkأثناء التحليل. #73082 (Pavel Kruglov).
تحسينات البناء/الاختبار/التغليف
- أصبحت جميع الأدوات الصغيرة التي كانت موجودة سابقًا في المجلد
/utilsوتتطلب ترجمتها برمجيًا يدويًا من الشيفرة المصدرية جزءًا من حزمة ClickHouse الرئيسية. وهذا يغلق: #72404. #72426 (Nikita Mikhaylov). - التراجع عن إزالة
/etc/systemd/system/clickhouse-server.serviceالتي أُدخلت في الإصدار 22.3 #39323. #72259 (Mikhail f. Shiryaev). - تقسيم وحدات الترجمة الكبيرة لتجنب فشل الترجمة البرمجية بسبب قيود الذاكرة وCPU. #72352 (Yakov Olkhovskiy).
- OSX: البناء مع دعم ICU، مما يتيح collations، وتحويلات مجموعات المحارف، وميزات التوطين الأخرى. #73083 (Raúl Marín).
إصدار ClickHouse 24.11، بتاريخ 2024-11-26. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أزل جداول النظام
generate_seriesوgenerateSeries. أُضيفت هنا عن طريق الخطأ: #59390. #71091 (Alexey Milovidov). - أزل
StorageExternalDistributed. يُغلق #70600.#71176 (flynn). - أصبحت محركات الجداول Kafka وNATS وRabbitMQ مشمولة الآن بأذوناتها الخاصة ضمن التسلسل الهرمي
SOURCES. أضف الأذونات إلى أي مستخدمي قاعدة بيانات غيرdefaultينشئون جداول بهذه الأنواع من المحركات. #71250 (Christoph Wurm). - تحقّق من استعلام mutation الكامل قبل تنفيذه (بما في ذلك الاستعلامات الفرعية). يمنع هذا تشغيل استعلام غير صالح عن طريق الخطأ وتراكم mutations ميتة تعيق mutations الصالحة. #71300 (Christoph Wurm).
- أعد تسمية إعداد ذاكرة التخزين المؤقت لنظام الملفات
skip_download_if_exceeds_query_cacheإلىfilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit. #71578 (Kseniia Sumarokova). - أزل دعم
Enumوكذلك الوسيطات من النوعUInt128وUInt256فيdeltaSumTimestamp. وأزل أيضًا دعمInt8وUInt8وInt16وUInt16للوسيطة الثانية (“timestamp”) فيdeltaSumTimestamp. #71790 (Alexey Milovidov). - عند استرجاع البيانات مباشرةً من Dictionary باستخدام تخزين Dictionary، أو دالة الجدول الخاصة بالقاموس، أو تنفيذ SELECT مباشر من القاموس نفسه، أصبح يكفي الآن امتلاك إذن
SELECTأو إذنdictGetللقاموس. يتماشى هذا مع المحاولات السابقة لمنع تجاوزات ACL: https://github.com/ClickHouse/ClickHouse/pull/57362 و https://github.com/ClickHouse/ClickHouse/pull/65359. كما يجعل الأخيرة متوافقة أيضًا مع الإصدارات السابقة. #72051 (Nikita Mikhaylov).
ميزة تجريبية
- إضافة
allow_feature_tierكمفتاح تبديل عام لتعطيل جميع الميزات التجريبية / ميزات بيتا. #71841 #71145 (Raúl Marín). - إصلاح خطأ محتمل
No such file or directoryبسبب وجود رموز خاصة غير مُهربة في الملفات الخاصة بالأعمدة الفرعية لـ JSON. #71182 (Pavel Kruglov). - دعم ALTER من String إلى JSON. ويغيّر طلب السحب هذا أيضًا تسلسل نوعَي JSON وDynamic إلى الإصدار الجديد V2. ولا يزال بالإمكان استخدام الإصدار القديم V1 عبر تفعيل الإعداد
merge_tree_use_v1_object_and_dynamic_serialization(يمكن استخدامه أثناء الترقية حتى تظل إمكانية التراجع عن الإصدار متاحةً دون مشكلات). #70442 (Pavel Kruglov). - إضافة CAST بسيط من Map/Tuple/Object إلى JSON الجديد عبر التسلسل/إلغاء التسلسل من سلسلة JSON. #71320 (Pavel Kruglov).
- عدم السماح افتراضيًا باستخدام أنواع Variant/Dynamic في ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY لأنها قد تؤدي إلى نتائج غير متوقعة. #69731 (Pavel Kruglov).
- حظر استخدام أنواع Dynamic/Variant في دوال min/max لتجنّب الالتباس. #71761 (Pavel Kruglov).
ميزة جديدة
- أُضيفت صيغة SQL لوصف إدارة عبء العمل والموارد. https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
- نوع بيانات جديد،
BFloat16، يمثّل أعداد الفاصلة العائمة ذات 16 بت مع أسّ من 8 بتات، وإشارة، ومانتيسا من 7 بتات. وهذا يُغلق #44206. وهذا يُغلق #49937. #64712 (Alexey Milovidov). - أُضيف استعلام
CHECK GRANTللتحقق مما إذا كان المستخدم/الدور الحالي قد مُنح الامتياز المحدد، وما إذا كان الجدول/العمود المقابل موجودًا في الذاكرة. #68885 (Unalian). - أُضيفت دوال الجداول
iceberg[S3;HDFS;Azure]ClusterوdeltaLakeClusterوhudiCluster. #72045 (Mikhail Artemenko). - أُضيفت إمكانية تعيين اسم المستخدم/كلمة المرور في
http_handlers(لـdynamic_query_handler/predefined_query_handler). #70725 (Azat Khuzhin). - أُضيف دعم لبند staleness في ORDER BY WITH FILL. #71151 (Mikhail Artemenko).
- أصبح بإمكان كل طريقة authentication أن يكون لها تاريخ انتهاء صلاحية خاص بها، وأُزيل ذلك من كيان المستخدم. #70090 (Arthur Passos).
- أُضيفت الدوال الجديدة
parseDateTime64وparseDateTime64OrNullوparseDateTime64OrZero. وبالمقارنة مع الدالة الحاليةparseDateTime(ومتغيراتها)، فإنها تُرجع قيمة من النوعDateTime64بدلًا منDateTime. #71581 (kevinyhzou).
تحسين الأداء
- جرى تحسين استخدام الذاكرة لقيم
index granularityإذا كانتgranularityثابتة للـ part. وأُضيفت إمكانية اختيارgranularityثابتة دائمًا للـ part (الإعدادuse_const_adaptive_granularity)، مما يساعد على ضمان تحسين استخدامها في الذاكرة دائمًا. ويساعد ذلك في أعباء العمل الكبيرة (تريليونات من الصفوف في التخزين المشترك) على تجنب الزيادة المستمرة في استخدام الذاكرة بسبب metadata الخاصة بـ data parts (قيمindex granularity). #71786 (Anton Popov). - لم نعد ننسخ columns الخاصة بـ input blocks عند
join_algorithm = 'parallel_hash'أثناء توزيعها بين threads للمعالجة المتوازية. #67782 (Nikita Taranov). - جرى تحسين خوارزمية merge الخاصة بـ
Replacingللأجزاء غير المتقاطعة. #70977 (Anton Popov). - لا تُدرج detached parts من الأقراص readonly وأحادية الكتابة ضمن metrics و system.detached_parts. #71086 (Alexey Milovidov).
- لا تُحتسب heavy asynchronous metrics افتراضيًا. أُضيفت هذه الميزة في #40332، لكن ليس من المناسب وجود مهمة background ثقيلة مطلوبة لعميل واحد فقط. #71087 (Alexey Milovidov).
- بالنسبة إلى الأقراص
plain_rewritable: لا تستدعِ واجهة برمجة تطبيقات object storage عند سرد الأدلة، لأن ذلك قد لا يكون فعّالًا من حيث التكلفة. وبدلًا من ذلك، خزّن قائمة أسماء الملفات في الذاكرة. والمقايضات هنا هي زيادة زمن initial load والذاكرة المطلوبة لتخزين أسماء الملفات. #70823 (Julia Kartseva). - جرى تحسين أداء ودقة interval collection الخاص بـ
system.query_metric_logعبر تقليل المنطقة الحرجة. #71473 (Pablo Marcos). - تحسين read-in-order عبر توليد rows افتراضية، بحيث تُقرأ بيانات أقل أثناء merge sort، وهو ما يفيد خصوصًا عند وجود parts متعددة. #62125 (Shichao Jin).
- أُضيف server setting
async_load_system_databaseالذي يسمح لـ server بالبدء مع system database غير مُحمّلة بالكامل. ويساعد ذلك على تشغيل ClickHouse بسرعة أكبر إذا كان هناك الكثير من system tables. #69847 (Sergei Trifonov). - أُضيف parameter
--threadsإلىclickhouse-compressor، مما يتيح ضغط البيانات in parallel. #70860 (Alexey Milovidov). - أُضيف إعداد
prewarm_mark_cacheيفعّل loading للـ marks إلى mark cache عند inserts وعمليات merge وfetches الخاصة بـ parts، وكذلك عند بدء تشغيل table. #71053 (Anton Popov). - تقليص مصفوفة
index_granularityفي الذاكرة لتقليل البصمة الذاكرية لعائلة MergeTree table engines. #71595 (alesapin). - عطّل إعداد filesystem cache
boundary_alignmentللقراءات غير المعتمدة على disk، مما يحسّن أداء القراءة من الملفات البعيدة standalone مع Caching. #71827 (Kseniia Sumarokova). - كانت queries مثل
SELECT * FROM table LIMIT ...تُحمّل part indexes رغم أنها لم تكن مستخدمة. #71866 (Alexander Gololobov). - تم تفعيل
parallel_replicas_local_planافتراضيًا. يساهم إنشاء خطة محلية متكاملة على العقدة المُبادِرة للاستعلام في تحسين أداء النسخ المتماثلة المتوازية مع تقليل استهلاك الموارد، كما يتيح فرصًا لتطبيق المزيد من تحسينات الاستعلام. #70171 (Igor Nikonov).
تحسين
- أصبح بالإمكان استخدام clickhouse مع وسيطة ملف بالشكل
ch queries.sql. #71589 (Raúl Marín). - باتت صيغة
Vertical(التي تُفعَّل أيضًا عند إنهاء الاستعلام بـ\G) تدعم ميزات صيغ Pretty، مثل: - تمييز مجموعات الآلاف في الأرقام؛ - عرض تلميح رقمي مقروء. #71630 (Alexey Milovidov). - تمرير أدوار المستخدم الخارجية من منشئ الاستعلام إلى العقد الأخرى في الـcluster. ويكون ذلك مفيدًا عندما يكون منشئ الاستعلام وحده لديه إمكانية الوصول إلى external authenticator (مثل LDAP). #70332 (Andrey Zvonov).
- أُضيفت الأسماء المستعارة
anyRespectNullsوfirstValueRespectNullsوanyValueRespectNullsلدالة aggregation any. كما أُضيفت الأسماء المستعارةanyLastRespectNullsوlastValueRespectNullsلدالة aggregation anyLast. يتيح ذلك استخدام صياغة camel-case فقط بصورة أكثر طبيعية بدلًا من الصياغة المختلطة بين camel-case والشرطة السفلية، على سبيل المثال:SELECT anyLastRespectNullsStateIfبدلًا منanyLast_respect_nullsStateIf. #71403 (Peter Nguyen). - أُضيف parameter جديد إلى configuration باسم
date_time_utc، ما يتيح لتنسيق سجلات JSON دعم التاريخ والوقت بتوقيت UTC بصيغة RFC 3339/ISO8601. #71560 (Ali). - أُضيف نوع header جديد إلى S3 endpoints لمصادقة المستخدم (
access_header). يتيح ذلك الحصول على access header بأدنى أولوية، على أن يُستبدل بـaccess_key_idمن أي source آخر (مثل schema جدول أو named collection). #71011 (MikhailBurdukov). - ستُرجع الدوال عالية الرتبة التي تحتوي على Arrays ثابتة وarguments ملتقطة ثابتة قيمًا ثابتة. #58400 (Alexey Milovidov).
- أصبحت أسماء خطوات query plan (
EXPLAIN PLAN json=1) وأسماء processors في pipeline (EXPLAIN PIPELINE compact=0,graph=1) تتضمن الآن معرّفًا فريدًا كلاحقة. يتيح ذلك مطابقة مخرجات Profiler الخاصة بالـprocessors وtraces الخاصة بـ OpenTelemetry مع مخرجات explain. #63518 (qhsong). - أُضيف خيار للتحقق مما إذا كان object موجودًا بعد كتابته إلى Azure Blob Storage، ويُتحكم في ذلك عبر الإعداد
check_objects_after_upload. #64847 (Smita Kulkarni). - استخدام قاعدة البيانات
Atomicافتراضيًا فيclickhouse-local. يعالج البندين 1 و5 من #50647. ويغلق #44817. #68024 (Alexey Milovidov). - تؤدي Exceptions إلى قطع HTTP protocol لتنبيه client بوجود خطأ. #68800 (Sema Checherinda).
- الإبلاغ عن المضيفين الذين يشغّلون distributed DDL queries من خلال إنشاء replica_dir ووضع علامة على replicas النشطة في DDLWorker. #69658 (tuanpach).
- الانتظار فقط على replicas النشطة لاستعلامات قاعدة البيانات ON CLUSTER إذا كان distributed_ddl_output_mode مضبوطًا على *_only_active. #69660 (tuanpach).
- تحسين معالجة الأخطاء وإلغاء عمليات النسخ الاحتياطي والاستعادة الخاصة بـ
ON CLUSTER: - إذا فشلت عملية نسخ احتياطي أو استعادة على مضيف واحد، فسيتم إلغاؤها تلقائيًا على المضيفين الآخرين - يجب ألا تظهر أخطاء غريبة بسبب فشل بعض المضيفين بينما تواصل مضيفات أخرى عملها - إذا أُلغيت عملية نسخ احتياطي أو استعادة على مضيف واحد، فسيتم إلغاؤها تلقائيًا على المضيفين الآخرين - إصلاح المشكلات المتعلقة بـtest_disallow_concurrency- والآن ينبغي أن يعمل تعطيل التزامن بشكل أفضل - أصبحت عمليات النسخ الاحتياطي والاستعادة الآن أكثر تحمّلًا بكثير لانقطاعات ZooKeeper. #70027 (Vitaly Baranov). - دعم
ALTER TABLE ... MODIFY/RESET SETTING ...لبعض الإعدادات في محرك التخزين S3Queue. #70811 (Kseniia Sumarokova). - تمت إضافة إمكانية إعادة تحميل شهادات العميل بالطريقة نفسها المستخدمة لإعادة تحميل شهادات الخادم. #70997 (Roman Antonov).
- جعل حجم سجل العميل قابلاً للتهيئة وزيادة حجمه الافتراضي. #71014 (Jiří Kozlovský).
- دعم الأنواع Boolean في القارئ الأصلي لـ Parquet. #71055 (Arthur Passos).
- إعادة المحاولة مع مزيد من الأخطاء عند التفاعل مع S3، مثل “Malformed message”. #71088 (Alexey Milovidov).
- خفض مستوى السجل لبعض الرسائل المتعلقة بـ S3. #71090 (Alexey Milovidov).
- دعم كتابة ملفات HDFS التي تحتوي على مسافات. #71105 (exmy).
- تمت إضافة إعدادات تحدّ من عدد الجداول المكررة وDictionaries وviews. #71179 (Kirill).
- استخدام
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEبدلًا منAWS_CONTAINER_AUTHORIZATION_TOKENإذا كان الأول متاحًا. يعالج #71074. #71269 (Konstantin Bogdanov). - إزالة إنشاء عقدة metadata_version في ZooKeeper من خيط إعادة تشغيل ReplicatedMergeTree. الحالة الوحيدة التي نحتاج فيها إلى إنشاء هذه العقدة هي عندما يحدّث المستخدم من إصدار أقدم من 20.4 مباشرةً إلى إصدار أحدث من 24.10. لا يدعم ClickHouse عمليات Upgrades التي تمتد لأكثر من عام، لذا ينبغي إثارة استثناء ومطالبة المستخدم بالتحديث تدريجيًا بدلًا من إنشاء هذه العقدة. #71385 (Miсhael Stetsyuk).
- إضافة لوحات معلومات لكل مضيف
Overview (host)وCloud overview (host)إلى لوحة المعلومات المتقدمة. #71422 (alesapin). - يستخدم
clickhouse-localSELECT ضمنيًا افتراضيًا، مما يتيح استخدامه كآلة حاسبة. تحسين تمييز الصياغة النحوية لوضع SELECT الضمني. #71620 (Alexey Milovidov). - ستقوم تطبيقات سطر الأوامر بتمييز الصياغة النحوية حتى في حالة العبارات المتعددة. #71622 (Alexey Milovidov).
- ستُرجِع تطبيقات سطر الأوامر رموز خروج غير صفرية عند حدوث أخطاء. في الإصدارات السابقة، كان التطبيق
disksيُرجِع صفرًا عند الخطأ، وكانت التطبيقات الأخرى تُرجِع صفرًا للأخطاء 256 (PARTITION_ALREADY_EXISTS) و512 (SET_NON_GRANTED_ROLE). #71623 (Alexey Milovidov). - عندما يُمرَّر المستخدم/المجموعة على هيئة معرّف ID، يفشل
clickhouse su. يُصلح هذا التصحيح ذلك ليقبل أيضًاUID:GID. #71626 (Mikhail f. Shiryaev). - إتاحة تعطيل زيادة حجم المخزن المؤقت في الذاكرة لذاكرة التخزين المؤقت لنظام الملفات عبر الإعداد
filesystem_cache_prefer_bigger_buffer_size. #71640 (Kseniia Sumarokova). - إضافة إعداد منفصل
background_download_max_file_segment_sizeلتحديد الحد الأقصى لحجم مقطع الملف للتنزيل في الخلفية في ذاكرة التخزين المؤقت لنظام الملفات. #71648 (Kseniia Sumarokova). - تحسين طفيف في تحليل JSON type: إذا كانت الكتلة الحالية لمسار JSON path تحتوي على قيم من عدة أنواع، فسيُحاوَل اختيار أفضل نوع عبر تجربة الأنواع وفق ترتيب best-effort خاص. #71785 (Pavel Kruglov).
- سابقًا، كانت القراءة من
system.asynchronous_metricsتنتظر اكتمال التحديث المتزامن. وقد يستغرق ذلك وقتًا طويلًا إذا كان النظام تحت حمل كثيف. مع هذا التغيير، أصبح بالإمكان دائمًا قراءة القيم التي جُمعت سابقًا. #71798 (Alexander Gololobov). - S3Queue وAzureQueue: اضبط
polling_max_timeout_msعلى 10 دقائق، وpolling_backoff_msعلى 30 ثانية. #71817 (Kseniia Sumarokova). - تحديث
HostResolverثلاث مرات خلال فترةhistory. #71863 (Sema Checherinda). - أُضيف إلى صفحة HTML الخاصة بـ Advanced dashboard محدِّد منسدل لاختيار dashboard من الجدول
system.dashboards. #72081 (Sergei Trifonov). - التحقق من وجود قاعدة البيانات الافتراضية بعد التفويض. يُصلح #71097. #71140 (Konstantin Bogdanov).
إصلاح خطأ (سلوك غير صحيح يلاحظه المستخدم في إصدار مستقر رسمي)
- لم تعد الأجزاء التي أُلغي تكرارها أثناء استعلام
ATTACH PARTتبقى عالقة بالبادئةattaching_. #65636 (Kirill). - إصلاح خلل كانت فيه DateTime64 تفقد الدقة في الدالة
IN. #67230 (Yarik Briukhovetskyi). - إصلاح خطأ منطقي محتمل عند استخدام الدوال مع
IGNORE/RESPECT NULLSفيORDER BY ... WITH FILL، ويغلق #57609. #68234 (Vladimir Cherkasov). - إصلاح أخطاء منطقية نادرة في عمليات insert غير المتزامنة ذات التنسيق
Nativeعند بلوغ حد الذاكرة. #68965 (Anton Popov). - إصلاح COMMENT في CREATE TABLE للعمود EPHEMERAL. #70458 (Yakov Olkhovskiy).
- إصلاح خطأ منطقي في JSONExtract مع LowCardinality(Nullable). #70549 (Pavel Kruglov).
- السماح بتنفيذ system drop replica zkpath عندما توجد replica أخرى لها zk path نفسه. #70642 (MikhailBurdukov).
- إصلاح تعطل وتسرب في AggregateFunctionGroupArraySorted. #70820 (Michael Kolupaev).
- إضافة إمكانية تجاوز Content-Type عبر headers المستخدم في URL engine. #70859 (Artem Iurin).
- إصلاح خطأ منطقي في
StorageS3Queue“Cannot create a persistent node in /processed since it already exists”. #70984 (Kseniia Sumarokova). - إصلاح مشكلة عدم إغلاق الجلسات المُسمّاة وبقائها معلّقة إلى الأبد في ظروف معينة. #70998 (Márcio Martins).
- إصلاح الخلل الذي لم يكن يراعي العمود _row_exists في خيار إعادة البناء الخاص بـ projection lightweight delete. #71089 (Shichao Jin).
- إصلاح مشكلة
AT_* is out of rangeعند التشغيل على Oracle Linux UEK 6.10. #71109 (Örjan Fors). - إصلاح قيمة غير صحيحة في system.query_metric_log بسبب حالة تسابق غير متوقعة. #71124 (Pablo Marcos).
- إصلاح عدم تطابق اسم الدالة التجميعية quantileExactWeightedInterpolated. أُدخل هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/69619. للإحاطة @Algunenano. #71168 (李扬).
- إصلاح استثناء bad_weak_ptr مع Dynamic عند مقارنة الدوال. #71183 (Pavel Kruglov).
- التحقق من أن قراءة ملف 7z تتم من جهاز محلي. #71184 (Daniil Ivanik).
- إصلاح مشكلة تجاهل إعدادات التنسيق في تنسيق Native عبر HTTP ومع الإدراجات غير المتزامنة. #71193 (Pavel Kruglov).
- لم تعد استعلامات SELECT التي تعمل بالإعداد
use_query_cache = 1تُرفض إذا ظهر اسم جدول نظام كسلسلة حرفية؛ على سبيل المثال، أصبح الاستعلامSELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;يعمل الآن. #71254 (Robert Schulze). - إصلاح خلل يؤدي إلى زيادة استخدام الذاكرة إذا كان enable_filesystem_cache=1، لكن القرص في إعدادات التخزين لا يحتوي على أي إعدادات لذاكرة التخزين المؤقت. #71261 (Kseniia Sumarokova).
- إصلاح الخطأ المحتمل “Cannot read all data” أثناء إلغاء تسلسل قاموس LowCardinality من عمود Dynamic. #71299 (Pavel Kruglov).
- إصلاح عدم اكتمال تنظيف تنسيق الإخراج المتوازي في العميل. #71304 (Raúl Marín).
- أُضيف فكّ المحارف الخاصة المفقود في المجموعات المسماة. وبدون هذا الإصلاح، لا يمكن لـ clickhouse-server بدء التشغيل. #71308 (MikhailBurdukov).
- إصلاح الإدراجات غير المتزامنة مع الكتل الفارغة عبر البروتوكول الأصلي. #71312 (Anton Popov).
- إصلاح عدم اتساق تنسيق AST عند منح امتيازات wildcard غير صحيحة #71309. #71332 (pufit).
- إضافة try/catch إلى المُدمِّرات الخاصة بأجزاء البيانات لتجنّب std::terminate. #71364 (alesapin).
- التحقق من الأنواع المشبوهة والتجريبية في تلميحات نوع JSON. #71369 (Pavel Kruglov).
- بدء تشغيل خيط عامل الذاكرة على أنظمة التشغيل غير Linux أيضًا (إصلاح #71051). #71384 (Alexandre Snarskii).
- إصلاح الخطأ Invalid number of rows in Chunk مع عمود Variant. #71388 (Pavel Kruglov).
- إصلاح الخطأ column “attgenerated” does not exist في إصدارات PostgreSQL الأقدم، وإصلاح #60651. #71396 (0xMihalich).
- لتجنّب إغراق سجلات الخادم، تُسجَّل الآن محاولات المصادقة الفاشلة عند المستوى
DEBUGبدلًا منERROR. #71405 (Robert Schulze). - إصلاح تعطل في table function
mongodbعند تمرير وسيطات غير صحيحة (مثلNULL). #71426 (Vladimir Cherkasov). - إصلاح تعطل مرتبط بـ optimize_rewrite_array_exists_to_has. #71432 (Raúl Marín).
- تم إصلاح استخدام الإعداد
max_insert_delayed_streams_for_parallel_writeفي عمليات الإدراج. كان يعمل سابقًا بشكل غير صحيح، ما قد يؤدي إلى ارتفاع استخدام الذاكرة في عمليات الإدراج التي تكتب البيانات إلى عدة أقسام. #71474 (Anton Popov). - إصلاح الخطأ المحتمل
Argument for function must be constant(المحلل القديم) في الحالات التي قد يظهر فيهاarrayJoinظاهريًا في شرطWHERE. حدث هذا كتراجع بعد https://github.com/ClickHouse/ClickHouse/pull/65414. #71476 (Nikolai Kochetov). - منع حدوث تعطل في SortCursor عند وجود 0 أعمدة (المحلل القديم). #71494 (Raúl Marín).
- إصلاح تجاوز Date32 للنطاق بسبب بيانات ORC غير المهيأة. لمزيد من التفاصيل، راجع https://github.com/apache/incubator-gluten/issues/7823. #71500 (李扬).
- إصلاح احتساب حجم العمود في Wide part للنوعين Dynamic وJSON. #71526 (Pavel Kruglov).
- إصلاح في المحلل عند استخدام الاستعلام داخل العرض المادي العامل IN مع CTE. يغلق #65598. #71538 (Maksim Kita).
- تجنب حدوث تعطل عند استخدام UDF في قيد. #71541 (Raúl Marín).
- إرجاع 0 أو المحرف الافتراضي بدلًا من إطلاق خطأ في دوال
bitShiftعند الخروج عن الحدود. #71580 (Pablo Marcos). - إصلاح تعطل الخادم أثناء استخدام عرض مادي مع بعض المحركات. #71593 (Pervakov Grigorii).
- كان ARRAY JOIN مع بنية بيانات متداخلة تحتوي على اسم مستعار لمصفوفة ثابتة يؤدي إلى إلغاء مرجع مؤشر فارغ. يغلق هذا #71677. #71678 (Alexey Milovidov).
- إصلاح LOGICAL_ERROR عند تنفيذ ALTER مع tuple فارغ. يصلح هذا #71647. #71679 (Amos Bird).
- لا تُحوِّل المجموعة الثابتة في predicates على أعمدة التقسيم عند استخدام العامل NOT IN. #71695 (Eduard Karacharov).
- إصلاح رسالة السجل الخاصة بفشل سكربت التهيئة في Docker لتكون أوضح. #71734 (Андрей).
- إصلاح CAST من LowCardinality(Nullable) إلى Dynamic. كان ذلك قد يؤدي سابقًا إلى الخطأ
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable. #71742 (Pavel Kruglov). - إصلاح الاستثناء في toDayOfWeek ضمن شرط
WHEREمع مفتاح أساسي من النوع DateTime64. #71849 (Yakov Olkhovskiy). - تم إصلاح تعبئة القيم الافتراضية بعد parsing إلى الأعمدة sparse. #71854 (Anton Popov).
- إصلاح خطأ الدالة GROUPING عندما يكون الإدخال ALIAS في جدول موزّع، وإغلاق #68602. #71855 (Vladimir Cherkasov).
- إصلاح تعطل محتمل عند استخدام
allow_experimental_join_condition، وإغلاق #71693. #71857 (Vladimir Cherkasov). - إصلاح عبارات SELECT التي تستخدم clause
WITH TIESوقد لا تُرجع عددًا كافيًا من الصفوف. #71886 (wxybear). - إصلاح استثناء TOO_LARGE_ARRAY_SIZE الناتج عن اعتبار column من ناتج تقييم arrayWithConstant، بالخطأ، متجاوزًا حد حجم المصفوفة. #71894 (Udi).
- كان
clickhouse-benchmarkيبلّغ عن metrics غير صحيحة للاستعلامات التي تستغرق أكثر من ثانية واحدة. #71898 (Alexey Milovidov). - إصلاح data race بين مؤشّر التقدّم وجدول التقدّم في clickhouse-client. تظهر هذه المشكلة عند استخدام FROM INFILE. كما تم اعتراض ضغطات المفاتيح أثناء استعلامات INSERT لتبديل عرض جدول التقدّم. #71901 (Julia Kartseva).
- استخدام Keeperات مساعدة لاكتشاف cluster تلقائيًا. #71911 (Anton Ivashkin).
- إصلاح column rows_processed في system.s3/azure_queue_log الذي تعطّل في الإصدار 24.6. إغلاق #69975. #71946 (Kseniia Sumarokova).
- إصلاح حالة كانت فيها دالتا
s3/s3Clusterقد تُرجعان نتيجة غير مكتملة أو تطرحان استثناءً. كانت هذه الحالة تتضمن استخدام glob pattern في عنوان URI الخاص بـ s3 (مثلpattern/*) مع وجود object فارغ بالمفتاحpattern/(وتنشئ S3 Console مثل هذه objects تلقائيًا). كما تغيّرت القيمة الافتراضية للإعدادs3_skip_empty_filesمنfalseإلىtrue. #71947 (Nikita Taranov). - إصلاح تعطل في تمييز الصياغة في clickhouse-client. إغلاق #71864. #71949 (Nikolay Degterinsky).
- إصلاح خطأ
Illegal typeفي جداولMergeTreeعند استخدام دالة binary monotonic فيORDER BYإذا كانت argument الأولى ثابتة. إصلاح #71941. #71966 (Nikolai Kochetov). - السماح فقط باستعلامات SELECT داخل EXPLAIN AST المستخدم ضمن subquery. أما الأنواع الأخرى من queries فتؤدي إلى logical error: ‘Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery’ أو
Inconsistent AST formatting. #71982 (Pavel Kruglov). - عند insert سجل باستخدام
clickhouse-client، يقرأ client أوصاف الأعمدة من server. لكن كان هناك خطأ يجعلنا نكتب الأوصاف بترتيب غير صحيح، بينما الترتيب الصحيح هو [statistics, ttl, settings]. #71991 (Han Fei). - إصلاح تنسيق أوامر ALTER من
MOVE PARTITION ... TO TABLE ...عند تمكينformat_alter_commands_with_parentheses. #72080 (János Benjamin Antal). - إصلاح عمليات RIGHT / FULL JOIN في الاستعلامات التي تستخدم parallel replicas. يمكن الآن تنفيذ عمليات RIGHT JOIN باستخدام parallel replicas (مع توزيع قراءة الجدول الأيمن). أما عمليات FULL JOIN فلا يمكن تنفيذها بالتوازي بين العقد، وتُنفَّذ محليًا. #71162 (Igor Nikonov).
- إصلاح المشكلة التي كانت تؤدي إلى طباعة ClickHouse داخل حاويات Docker للرسالة “get_mempolicy: Operation not permitted” على stderr بسبب تقييد استدعاءات النظام. #70900 (filimonov).
- إصلاح سجل metadata_version في ZooKeeper ضمن خيط إعادة التشغيل بدلًا من خيط attach. #70297 (Miсhael Stetsyuk).
- هذا إصلاح لميزة “zero-copy” replication، وهي غير مدعومة وستُزال بالكامل. لا تحذف blob عندما تكون هناك عقد تستخدمه في ReplicatedMergeTree مع zero-copy replication. #71186 (Antonio Andelic).
- هذا إصلاح لميزة “zero-copy” replication، وهي غير مدعومة وستُزال بالكامل. جرى الحصول على قفل zero-copy مشترك قبل نقل part إلى zero-copy disk لمنع احتمال فقدان البيانات إذا لم يكن Keeper متاحًا. #71845 (Aleksei Filatov).
إصدار ClickHouse 24.10، بتاريخ 2024-10-31. العرض التقديمي, الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصبح من الممكن كتابة
SETTINGSقبلFORMATفي سلسلة من الاستعلامات باستخدامUNIONعندما تكون الاستعلامات الفرعية داخل أقواس. يُغلق هذا #39712. كما يغيّر هذا السلوكَ عند تحديد عبارة SETTINGS مرتين في تسلسل واحد داخل الاستعلام. وستكون الأولوية لعبارة SETTINGS الأقرب إلى الاستعلام الفرعي المعني. في الإصدارات السابقة، كان يمكن لعبارة SETTINGS الخارجية أن تتقدّم في الأولوية على العبارة الداخلية. #68614 (Alexey Milovidov). - أصبح الآن مسموحًا افتراضيًا بإعادة ترتيب شروط التصفية في عبارة
[PRE]WHERE. ويمكن تعطيل ذلك بضبطallow_reorder_prewhere_conditionsعلىfalse. #70657 (Nikita Taranov). - أُزيلت مكتبة
idxd-configبسبب ترخيصها غير المتوافق. ويؤدي ذلك أيضًا إلى إزالة برنامج الترميز Intel DeflateQPL التجريبي. #70987 (Alexey Milovidov).
ميزة جديدة
- إتاحة منح الوصول إلى البادئات التي تتضمن أحرف بدل.
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - إذا ضغطت على مفتاح المسافة أثناء تنفيذ query، فسيعرض client جدولًا آنيًا يتضمن metrics مفصلة. يمكنك تمكين ذلك على مستوى عام باستخدام الخيار الجديد
--progress-tableفي clickhouse-client؛ ويرتبط به الخيار الجديد--enable-progress-table-toggle، الذي يبدّل عرض جدول التقدم عند الضغط على مفتاح التحكم (Space). #63689 (Maria Khristenko), #70423 (Julia Kartseva). - إتاحة التخزين المؤقت لملفات القراءة لمحركات table الخاصة بـ object storage وdata lake باستخدام hash من ETag + file path كمفتاح cache. #70135 (Kseniia Sumarokova).
- دعم إنشاء table باستخدام query:
CREATE TABLE ... CLONE AS .... تستنسخ هذه الصيغة schema الخاصة بـ source table ثم تُجري Attach لجميع partitions إلى table المُنشأة حديثًا. هذه feature مدعومة فقط مع الجداول من familyMergeTree. يغلق #65015. #69091 (tuanpach). - إضافة system table جديدة،
system.query_metric_log، تحتوي على history لقيم Memory وMetric من table system.events لكل query على حدة، وتُكتب دوريًا إلى القرص. #66532 (Pablo Marcos). - يمكن كتابة query بسيطة من نوع SELECT باستخدام SELECT ضمنية لتمكين expressions بأسلوب الآلة الحاسبة، مثل:
ch "1 + 2". ويتحكم في ذلك setting جديدة هيimplicit_select. #68502 (Alexey Milovidov). - دعم وضع
--copyفي clickhouse local كاختصار لتحويل format #68503. #68583 (Denis Hananein). - إضافة صفحة HTML مدمجة لتصور merges، وهي متاحة على path
/merges. #70821 (Alexey Milovidov). - إضافة دعم للدالة
arrayUnion. #68989 (Peter Nguyen). - إتاحة aliases ذات معاملات في SQL. #50665 (Anton Kozlov).
- إضافة aggregate function جديدة باسم
quantileExactWeightedInterpolated، وهي نسخة interpolated مبنية على quantileExactWeighted. قد يتساءل البعض لماذا نحتاج إلىquantileExactWeightedInterpolatedجديدة مع أننا نملك بالفعلquantileExactInterpolatedWeighted. السبب هو أن الجديدة أدق من القديمة. وهذا من أجل التوافق مع spark. #69619 (李扬). - دالة جديدة باسم
arrayElementOrNull. تُرجعNULLإذا كان فهرس Array خارج النطاق أو إذا لم يتم العثور على مفتاح Map. #69646 (李扬). - يتيح للمستخدمين تحديد regular expressions عبر الحقلين الجديدين
message_regexpوmessage_regexp_negativeفي ملفconfig.xmlلتصفية logging. ويُطبَّق logging على النص المنسق غير الملوَّن لتوفير تجربة أكثر سلاسة للمطورين. #69657 (Peter Nguyen). - تمت إضافة الدالة
RIPEMD160، التي تحسب قيمة hash التشفيرية RIPEMD-160 لسلسلة نصية. مثال:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))تُرجع37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - دعم قراءة جداول
IcebergعلىHDFS. #70268 (flynn). - دعم CTE بصيغة
WITH ... INSERT، بعدما كان المدعوم سابقًا يقتصر علىINSERT ... WITH .... #70593 (Shichao Jin). - تكامل MongoDB: دعم جميع أنواع MongoDB، ودعم عبارتي WHERE وORDER BY على جانب MongoDB، وفرض قيود على expression غير المدعومة من MongoDB. لاحظ أن التكامل الجديد معطّل افتراضيًا، ولاستخدامه يُرجى تعيين
<use_legacy_mongodb_integration>إلىfalseفي config الخادم. #63279 (Kirill Nikiforov). - تمت إضافة دالة جديدة
getSettingOrDefaultلإرجاع default value وتجنّب حدوث Exception إذا لم يتم العثور على custom setting في profile الحالي. #69917 (Shankar).
ميزة تجريبية
- أصبحت العروض المادية القابلة للتحديث جاهزة للاستخدام في بيئات production. #70550 (Michael Kolupaev). كما أصبحت العروض المادية القابلة للتحديث مدعومة الآن في قواعد بيانات Replicated. #60669 (Michael Kolupaev).
- نُقلت النسخ المتماثلة المتوازية من الحالة التجريبية إلى Beta. وأُعيدت صياغة الإعدادات التي تتحكم في سلوك خوارزميات النسخ المتماثلة المتوازية. وتذكيرًا سريعًا: يحتوي ClickHouse على أربع خوارزميات مختلفة للقراءة المتوازية باستخدام عدة replicas، وينعكس ذلك في الإعداد
parallel_replicas_mode، وتكون قيمته الافتراضيةread_tasks. بالإضافة إلى ذلك، أُضيف إعداد تبديلenable_parallel_replicas. #63151 (Alexey Milovidov), (Nikita Mikhaylov). - دعم النوع
Dynamicفي معظم الدوال من خلال تنفيذها على الأنواع الداخلية داخلDynamic. #69691 (Pavel Kruglov). - إتاحة قراءة/كتابة النوع
JSONكسلسلة ثنائية في تنسيقRowBinaryضمن الإعداداتinput_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - إتاحة إجراء التسلسل/إلغاء التسلسل لعمود
JSONكعمودStringواحد في Native format. للإخراج، استخدم الإعدادoutput_format_native_write_json_as_string. وللإدخال، استخدم إصدار التسلسل1قبل بيانات العمود. #70312 (Pavel Kruglov). - استُحدث وضع خاص (تجريبي) لمحدد الدمج في جداول MergeTree، يجعله أكثر هجوميةً تجاه الأقسام القريبة من الحد الأقصى لعدد الأجزاء. ويُتحكم فيه عبر إعداد MergeTree على مستوى الجدول
merge_selector_use_blurry_base. #70645 (Nikita Mikhaylov). - تنفيذ ser/de عام بين
Unionفي Avro وأنواعVariantفي ClickHouse. يحل المشكلة #69713. #69712 (Jiří Kozlovský).
تحسين الأداء
- أُعيدت هيكلة
IDiskوIObjectStorageلتحسين الأداء. وستُهيَّأ الجداول من مخازن الكائناتplainوplain_rewritableبسرعة أكبر. #68146 (Alexey Milovidov, Julia Kartseva). ولم يعد يُستدعى طلب LIST في واجهة برمجة تطبيقات تخزين الكائنات عند التحقق مما إذا كان الملف أو الدليل موجودًا على القرصplain_rewritable، لأن ذلك قد يكون مرتفع التكلفة. #70852 (Julia Kartseva). كما جرى تقليل عدد طلبات HEAD في واجهة برمجة تطبيقات تخزين الكائنات على القرصplain_rewritable. #70915 (Julia Kartseva). - أُضيفت إمكانية تحليل البيانات مباشرةً إلى الأعمدة sparse. #69828 (Anton Popov).
- تحسين أداء تحليل التنسيقات التي تحتوي على عدد كبير من القيم المفقودة (مثل
JSONEachRow). #69875 (Anton Popov). - يدعم القراءة المتوازية لمجموعات الصفوف في Parquet، والتحميل المسبق لمجموعات الصفوف في وضع
single-threaded. #69862 (LiuNeng). - دعم فهرس MinMax للدالة
pointInPolygon. #62085 (JackyWoo). - استخدام bloom filters عند قراءة ملفات Parquet. #62966 (Arthur Passos).
- إعادة تسمية الأجزاء من دون أقفال لتجنّب تأثير INSERT في SELECT (بسبب قفل الأجزاء) (في الظروف العادية مع
fsync_part_directory، تضاعف QPS لعمليات SELECT مع INSERT بالتوازي بمقدار 2x، ويكون التأثير أكبر تحت الأحمال العالية). ملاحظة: يقتصر هذا حاليًا علىReplicatedMergeTreeفقط. #64955 (Azat Khuzhin). - مراعاة
ttl_only_drop_partsعندmaterialize ttl؛ مع قراءة الأعمدة الضرورية فقط لإعادة حساب TTL وحذف الأجزاء عبر استبدالها بجزء فارغ. #65488 (Andrey Zvonov). - تحسين إنشاء الخيوط في ThreadPool لتقليل التنافس على الأقفال إلى أدنى حد. ويُنفَّذ إنشاء الخيوط الآن خارج القسم الحرج لتجنّب التأخير في جدولة المهام وإدارة الخيوط تحت الأحمال المرتفعة. ويجعل ذلك ClickHouse أكثر استجابةً بكثير تحت الأحمال المتزامنة الكثيفة. #68694 (filimonov).
- تمكين قراءة أعمدة السلاسل النصية
LowCardinalityمنORC. #69481 (李扬). - استخدام
LowCardinalityمعProfileEventsفي سجلات النظام مثلpart_logوquery_views_logوfilesystem_cache_log. #70152 (Alexey Milovidov). - تحسين أداء الدالتين
fromUnixTimestampوtoUnixTimestamp. #71042 (kevinyhzou). - عدم تعطيل القراءة غير المحظورة من page cache على مستوى الخادم بالكامل عند القراءة من I/O حاجب. وكان هذا يؤدي إلى تراجع الأداء عندما لا يدعم نظام ملفات واحد (مثل tmpfs) استدعاء النظام
preadv2، بينما تدعمه أنظمة أخرى. #70299 (Antonio Andelic). - لم يعُد
ALTER TABLE .. REPLACE PARTITIONينتظر عمليات mutation/الدمج التي تحدث في أقسام أخرى. #59138 (Vasily Nemkov). - لا تُجرى عملية تحقق عند مزامنة ACL من Keeper، إذ يُجرى التحقق أثناء الإنشاء. قد لا يكون لهذا أثر كبير، لكن هناك عمليات تثبيت تضم عشرات الآلاف أو أكثر من المستخدمين المُنشَئين، وقد يستغرق التحقق غير الضروري من hash وقتًا طويلًا حتى يكتمل أثناء بدء تشغيل الخادم (إذ يزامن كل شيء من Keeper). #70644 (Raúl Marín).
تحسين
- سيقوم
CREATE TABLE ASبنسخPRIMARY KEYوORDER BYوالبنود المشابهة (في جداولMergeTree). #69739 (sakulali). - دعم XID 64-بت في Keeper. يمكن تمكينه باستخدام قيمة الإعداد
use_xid_64. #69908 (Antonio Andelic). - تُضبط وسائط سطر الأوامر لإعدادات Bool على
trueعندما لا يتم توفير أي قيمة للوسيطة (على سبيل المثالclickhouse-client --optimize_aggregation_in_order --query "SELECT 1"). #70459 (davidtsuk). - تمت إضافة إعدادات على مستوى المستخدم
min_free_disk_bytes_to_perform_insertوmin_free_disk_perform_to_throw_insertلمنع عمليات الإدراج على الأقراص التي شارفت على الامتلاء. #69755 (Marco Vilas Boas). - ستكون الوثائق المضمّنة للإعدادات أكثر تفصيلًا واكتمالًا من الوثائق الموجودة على الموقع الإلكتروني. وهذه هي الخطوة الأولى قبل جعل وثائق الموقع الإلكتروني تُولَّد دائمًا تلقائيًا من الشيفرة المصدرية. ولهذا آثار بعيدة المدى: - سيُضمن تضمين كل إعداد؛ - لن يكون هناك احتمال لوجود قيم افتراضية متقادمة؛ - يمكننا توليد هذه الوثائق لكل إصدار من ClickHouse؛ - ويمكن للخادوم نفسه عرض الوثائق حتى بدون الوصول إلى الإنترنت. توليد وثائق الموقع الإلكتروني من الشيفرة المصدرية. #70289 (Alexey Milovidov).
- السماح بأن تكون السلسلة الهدف
needleفارغة في الدالةreplace، بنفس السلوك الموجود في PostgreSQL. #69918 (zhanglistar). - السماح بأن تكون السلسلة الهدف
needleفارغة في الدوالreplaceRegexp*. #70053 (zhanglistar). - تُنشأ الروابط الرمزية للجداول في الدليل
data/database_name/لتشير إلى المسارات الفعلية لبيانات الجدول، بحسب سياسة التخزين، بدلًا من الدليلstore/...على القرص الافتراضي. #61777 (Kirill). - عند تحليل حقل
EnumمنJSON، سيُفسَّر أيُّ نصٍّ يحتوي على عدد صحيح على أنه عنصرEnumالمقابل. ويغلق هذا #65119. #66801 (scanhex12). - السماح بإجراء
TRIMلـLEADINGأوTRAILINGعلى سلسلة نصية فارغة باعتباره عملية دون أي تأثير. يُغلق #67792. #68455 (Peter Nguyen). - تحسين توافق
cast(timestamp as String)مع Spark. #69179 (Wenzheng Liu). - استخدم دائمًا المحلّل الجديد لحساب التعبيرات الثابتة عندما تكون
enable_analyzerمضبوطة علىtrue. دعم حساب وسائط دالة الجدولexecutableدون استخدام استعلامSELECTللتعبيرات الثابتة. #69292 (Dmitry Novik). - إضافة إعداد
enable_secure_identifiersلمنع المعرّفات التي تحتوي على محارف خاصة. #69411 (tuanpach). - أضِف
show_create_query_identifier_quoting_ruleلتحديد آلية وضع علامات الاقتباس حول المعرّفات في ناتج استعلامSHOW CREATE TABLE. Possible values: -user_display: عندما تكون المعرّفات كلمةً مفتاحية. -when_necessary: عندما تكون المعرّفات إحدى القيم{"distinct", "all", "table"}أو عندما قد يؤدي ذلك إلى التباس، مثل أسماء الأعمدة وأسماء سمات Dictionary. -always: ضع علامات اقتباس حول المعرّفات دائمًا. #69448 (tuanpach). - حسِّن استعادة تبعيات كيانات الوصول #69563 (Vitaly Baranov).
- إذا شغّلت
clickhouse-clientأو أي تطبيق CLI آخر، وبدأ تشغيله ببطء بسبب زيادة الحمل على الخادم، ثم بدأت في كتابة الاستعلام، مثلSELECT، فكانت الإصدارات السابقة تعرض بقية الأحرف المرتدة من الطرفية قبل طباعة رسالة الترحيب، مثلSELECTClickHouse local version 24.10.1.1.بدلًا منClickHouse local version 24.10.1.1.. وقد أُصلح ذلك الآن. يُغلق هذا #31696. #69856 (Alexey Milovidov). - أضِف عمودًا جديدًا
readonly_durationإلى جدولsystem.replicas. وهذا مطلوب للتمييز في alerts بين النسخ المتماثلة الفعلية للقراءة فقط ونسخ sentinel. #69871 (Miсhael Stetsyuk). - غيّر نوع الإعداد
join_output_by_rowlist_perkey_rows_thresholdإلى عدد صحيح غير موقّع. #69886 (kevinyhzou). - حسِّن logging الخاص بـ span في OpenTelemetry ليشمل إعدادات query. #70011 (sharathks118).
- أضِف معلومات تشخيصية حول array functions عالية الرتبة إذا كان نوع ناتج lambda غير متوقع. #70093 (ttanay).
- تحسين في Keeper: تقليل القفل أثناء تغييرات cluster. #70275 (Antonio Andelic).
- أضِف الكلمتين المفتاحيتين
WITH IMPLICITوFINALإلى الأمرSHOW GRANTS. وأصلِح خطأً بسيطًا في grants الضمنية: #70094. #70293 (pufit). - راعِ
compatibilityفي MergeTree settings. تُؤخذ قيمةcompatibilityمن profile defaultعند بدء تشغيل server، وتُعدَّل إعدادات MergeTree الافتراضية وفقًا لذلك. ولا تؤثر التغييرات اللاحقة على الإعدادcompatibilityفي إعدادات MergeTree. #70322 (Nikolai Kochetov). - تجنّب إغراق logs بأجسام استجابات HTTP كبيرة عند حدوث أخطاء أثناء الاتصال بين الخوادم. #70487 (Vladimir Cherkasov).
- أُضيف إعداد جديد
max_parts_to_moveللتحكم في الحد الأقصى لعدد parts التي يمكن نقلها دفعة واحدة. #70520 (Vladimir Cherkasov). - قيِّد تكرار بعض log messages. #70601 (Alexey Milovidov).
- كان
CHECK TABLEمع المحدِّدPARTيُعرَض بتنسيق غير صحيح في client. #70660 (Alexey Milovidov). - دعم كتابة فهرس العمود وفهرس الإزاحة باستخدام الكاتب الأصلي لـ Parquet. #70669 (LiuNeng).
- دعم تحليل
DateTime64للميكروثواني والمنطقة الزمنية وفق صيغة Joda (“Joda” هي مكتبة Java شائعة للتاريخ والوقت، و”صيغة Joda” هي أسلوب تلك المكتبة). #70737 (kevinyhzou). - تم تغيير النهج المتبع لتحديد ما إذا كان التخزين السحابي يدعم الحذف الدفعي أم لا. #70786 (Vitaly Baranov).
- دعم Parquet page v2 في القارئ الأصلي. #70807 (Arthur Passos).
- إضافة تحقّق مما إذا كان الجدول يحتوي على كلٍّ من
storage_policyوdiskمضبوطَين. كما أُضيف تحقّق مما إذا كانت سياسة التخزين الجديدة متوافقة مع القديمة عند استخدام الإعدادdisk. #70839 (Kirill). - إضافة
system.s3_queue_settingsوsystem.azure_queue_settings. #70841 (Kseniia Sumarokova). - أصبحت الدالتان
base58Encodeوbase58Decodeتقبلان الآن وسائط من النوعFixedString. مثال:SELECT base58Encode(toFixedString('plaintext', 9));. #70846 (Faizan Patel). - إضافة العمود
partitionإلى كل نوع من أنواع الإدخالات في سجل الأجزاء. سابقًا، كان يُضبط لبعض الإدخالات فقط. هذا يُغلق #70819. #70848 (Alexey Milovidov). - إضافة الحدثين
MergeStartوMutateStartإلىsystem.part_log، مما يساعد في تحليل عمليات الدمج وتصوّرها. #70850 (Alexey Milovidov). - إضافة حدث profile جديد يتعلق بعدد أجزاء المصدر المدمجة. يتيح ذلك مراقبة تشعّب شجرة الدمج في بيئة الإنتاج. #70908 (Alexey Milovidov).
- أُعيد تفعيل التنزيلات الخلفية إلى ذاكرة التخزين المؤقت لنظام الملفات. #70929 (Nikita Taranov).
- إضافة خوارزمية جديدة لمحدد الدمج باسم
Trivialللاستخدام المتخصص فقط. وهي أسوأ من محدد الدمجSimple. #70969 (Alexey Milovidov). - دعم تنفيذ
CREATE OR REPLACE VIEWبصورة ذرّية. #70536 (tuanpach) - تمت إضافة وضع
strict_onceإلى الدالة التجميعيةwindowFunnelلتجنب احتساب الحدث نفسه عدة مرات إذا طابق شروطًا متعددة، ويُغلق #21835. #69738 (Vladimir Cherkasov).
إصلاح خطأ (خلل يلاحظه المستخدم في إصدار مستقر رسمي)
- تطبيق تحديثات الإعدادات على كائن السياق العام. يعالج هذا مشكلات مثل #62308. #62944 (Amos Bird).
- إصلاح مشكلة عدم استخدام
ReadSettingsللقيم التي يعيّنها المستخدم، إذ كانت تُستخدم القيم الافتراضية فقط. #65625 (Kseniia Sumarokova). - إصلاح مشكلة عدم تطابق النوع في
sumMapFilteredعند استخدام وسائط موقَّعة. #58408 (Chen768959). - إصلاح الرتابة في دوال التحويل المشابهة لـ
toHourعند تمرير وسيط اختياري للمنطقة الزمنية. #60264 (Amos Bird). - تخفيف فحص
supportsPrewhereلجداولMerge. يعالج هذا #61064. وقد جرى تشديده دون داعٍ في #60082. #61091 (Amos Bird). - إصلاح التعامل مع الإعداد
use_concurrency_controlلضمان فرض الحدconcurrent_threads_soft_limit_numعلى نحو صحيح. ويؤدي هذا إلى تفعيل التحكم في التزامن افتراضيًا لأنه كان معطّلًا سابقًا بسبب خلل. #61473 (Sergei Trifonov). - إصلاح تحسين غير صحيح لقسم
JOIN ONفي حالة التحقق منIS NULLداخل أي دالة أخرى (مثلNOT)، بما قد يؤدي إلى نتائج خاطئة. يُغلق #67915. #68049 (Vladimir Cherkasov). - منع استعلامات
ALTERالتي قد تجعل استعلامCREATEالخاص بالجداول غير صالح. #68574 (János Benjamin Antal). - إصلاح عدم اتساق تنسيق AST للدالتين
negate(-) وNOTمع Tuples والمصفوفات. #68600 (Vladimir Cherkasov). - إصلاح إدراج نوع غير مكتمل في
Dynamicأثناء إلغاء التسلسل. وكان هذا قد يؤدي إلى أخطاءParameter out of bound. #69291 (Pavel Kruglov). - في zero-copy replication، وهي ميزة تجريبية ويجب عدم استخدامها في بيئات production: إصلاح حلقة لا نهائية بعد
restore replicaفي شجرة الدمج المتماثلة مع zero copy. #69293 (MikhailBurdukov). - إعادة القيمة الافتراضية لـ
processing_threads_numلتكون عدد أنوية CPU في وحدة التخزينS3Queue. #69384 (Kseniia Sumarokova). - تجاوز مسار
try/catchعند إجراء إلغاء/تسلسلProtobufالمتداخل المتكرر إلى الأعمدة المتداخلة (يعالج #41971). #69556 (Eliot Hautefeuille). - إصلاح تعطل أثناء الإدراج في عمود
FixedStringفي محركPostgreSQL. #69584 (Pavel Kruglov). - إصلاح تعطل عند تنفيذ
create view t as (with recursive 42 as ttt select ttt);. #69676 (Han Fei). - تم إصلاح
maxMapStateالذي كان يطلق ‘Bad get’ إذا كان نوع القيمة هو DateTime64. #69787 (Michael Kolupaev). - إصلاح
getSubcolumnمع الأعمدةLowCardinalityمن خلال تجاوزuseDefaultImplementationForLowCardinalityColumnsلإرجاعtrue. #69831 (Miсhael Stetsyuk). - إصلاح توقف عمليات الإرسال الموزعة بشكل دائم إذا فشلت عملية DROP لجدول موزع. #69843 (Azat Khuzhin).
- إصلاح الاستعلامات غير القابلة للإلغاء التي تحتوي على WITH FILL مع مفاتيح NaN. يُغلق هذا #69261. #69845 (Alexey Milovidov).
- إصلاح القيمة الافتراضية الخاصة بـ analyzer عند استخدام قيمة توافق قديمة. #69895 (Raúl Marín).
- عدم التحقق من التبعيات أثناء CREATE OR REPLACE VIEW عند تنفيذ DROP للجدول القديم. سابقًا، كان استعلام CREATE OR REPLACE يفشل عند وجود جداول تعتمد على العرض المُعاد إنشاؤه. #69907 (Pavel Kruglov).
- إصلاح متعلق بـ Decimal. يُصلح #69730. #69978 (Arthur Passos).
- أصبح DEFINER/INVOKER يعمل الآن مع العروض المعلّمة بمعلمات. #69984 (pufit).
- إصلاح تحليل مُعرِّفات العرض. #69985 (pufit).
- تم إصلاح خلل كانت فيه المنطقة الزمنية تغيّر نتيجة الاستعلام الذي يتضمن وسائط من النوع
DateأوDate32. #70036 (Yarik Briukhovetskyi). - يُصلح
Block structure mismatchفي الاستعلامات التي تحتوي على عروض متداخلة وشرطWHERE. يُصلح #66209. #70054 (Nikolai Kochetov). - تجنب إعادة استخدام الأعمدة بين named tuples مختلفة عند تقييم دوال
tuple. يُصلح هذا #70022. #70103 (Amos Bird). - إصلاح LOGICAL_ERROR غير الصحيح عند استبدال القيم الحرفية في النطاقات. #70122 (Pablo Marcos).
- التحقق من النوع Nullable(Nothing) أثناء ALTER TABLE MODIFY COLUMN/QUERY لمنع الجداول ذات نوع البيانات هذا. #70123 (Pavel Kruglov).
- رسالة خطأ مناسبة للاستعلام غير القانوني
JOIN ... ON *، ويُغلق هذا #68650. #70124 (Vladimir Cherkasov). - إصلاح نتيجة غير صحيحة مع فهرس تخطّي البيانات. #70127 (Raúl Marín).
- إصلاح
data raceفي دالة فك الضغطdecompressالخاصة بـ ColumnObject/ColumnTuple، والذي كان قد يؤدي إلى استخدام الذاكرة بعد تحريرها. #70137 (Pavel Kruglov). - إصلاح احتمال حدوث تعليق في ALTER COLUMN مع النوع Dynamic. #70144 (Pavel Kruglov).
- سيعتبر ClickHouse الآن مزيدًا من الأخطاء قابلة لإعادة المحاولة، ولن يوسم أجزاء البيانات بأنها تالفة في حال وقوع مثل هذه الأخطاء. #70145 (alesapin).
- استخدام المعامل
max_typesالصحيح أثناء إنشاء النوع Dynamic لـ JSON subcolumn. #70147 (Pavel Kruglov). - إصلاح ظهور كلمة المرور في
system.query_logللمستخدمين الذين يستخدمون أسلوب المصادقة بكلمة مرور bcrypt. #70148 (Nikolay Degterinsky). - إصلاح عدّاد الأحداث للواجهة الأصلية (InterfaceNativeSendBytes). #70153 (Yakov Olkhovskiy).
- إصلاح احتمال حدوث تعطل مرتبط بـ JSON columns. #70172 (Pavel Kruglov).
- إصلاح عدة مشكلات في arrayMin وarrayMax. #70207 (Raúl Marín).
- مراعاة الإعداد allow_simdjson في محلل JSON type. #70218 (Pavel Kruglov).
- إصلاح إلغاء مرجعية مؤشر فارغ عند إنشاء materialized view تحتوي على عمليتي selects و
INTERSECT، مثلCREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);. #70264 (Konstantin Bogdanov). - لا تعدّل الإعدادات العامة باستخدام نصوص بدء التشغيل. سابقًا، كان تغيير أحد الإعدادات في نص بدء التشغيل يؤدي إلى تغييره على مستوى عام. #70310 (Antonio Andelic).
- إصلاح ALTER للنوع
Dynamicعند تقليل المعامل max_types، وهو ما كان قد يؤدي إلى تعطل الخادم. #70328 (Pavel Kruglov). - إصلاح التعطل عند استخدام WITH FILL بشكل غير صحيح. #70338 (Raúl Marín).
- إصلاح احتمال حدوث استخدام للذاكرة بعد تحريرها في
SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf. #70358 (Azat Khuzhin). - إصلاح التعطل أثناء GROUP BY على JSON sub-object subcolumn. #70374 (Pavel Kruglov).
- لا تُجرِ
prefetchللأجزاء في vertical merges إذا كان الجزء لا يحتوي على أي صفوف. #70452 (Antonio Andelic). - إصلاح التعطل في WHERE مع lambda functions. #70464 (Raúl Marín).
- إصلاح إنشاء الجداول باستخدام
CREATE ... AS table_function(...)مع قاعدة البياناتReplicatedومصدر table function غير المتاح على replica ثانوية. #70511 (Kseniia Sumarokova). - تجاهل جميع المخرجات في
async insertعند استخدامwait_for_async_insert=1. يُغلق #62644. #70530 (Konstantin Bogdanov). - تجاهل الملف frozen_metadata.txt أثناء اجتياز دليل الظل من system.remote_data_paths. #70590 (Aleksei Filatov).
- إصلاح إنشاء دوال النوافذ ذات الحالة على ذاكرة غير مصطفّة. #70631 (Raúl Marín).
- إصلاح حالات التعطل النادرة في استعلامات
SELECTوعمليات الدمج بعد إضافة عمود من النوعArrayمع تعبير افتراضي غير فارغ. #70695 (Anton Popov). - سيحترم الإدراج في دالة الجدول S3 إعدادات الاستعلام. #70696 (Vladimir Cherkasov).
- إصلاح الاستدعاء الذاتي غير المنتهي عند استنتاج مخطط Protobuf عندما يكون تخطي الحقول غير المدعومة مُمكّنًا. #70697 (Raúl Marín).
- تعطيل enable_named_columns_in_function_tuple افتراضيًا. #70833 (Raúl Marín).
- إصلاح مشكلة عدم سريان الإعداد processing_threads_num في محرك الجدول S3Queue عندما يكون مستنتجًا من عدد أنوية CPU على الخادم. #70837 (Kseniia Sumarokova).
- تطبيع وسائط named tuple في حالات التجميع. هذا يُصلح #69732. #70853 (Amos Bird).
- إصلاح خطأ منطقي ناتج عن الأصفار السالبة في جدول hash ثنائي المستوى. هذا يُغلق #70973. #70979 (Alexey Milovidov).
- إصلاح
limit byوlimit with tiesفي البيئات الموزعة ومع parallel replicas. #70880 (Nikita Taranov).
إصدار ClickHouse 24.9 بتاريخ 2024-09-26. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصبحت التعبيرات مثل
a[b].cمدعومة فيTupleالمسماة، وكذلك الاشتراكات المسماة انطلاقًا من تعبيرات عشوائية، مثلexpr().name. وهذا مفيد لمعالجة JSON. يُغلق هذا #54965. في الإصدارات السابقة، كان التعبير بالشكلexpr().nameيُحلَّل على أنهtupleElement(expr(), name)، وكان محلل الاستعلامات يبحث عن العمودnameبدلًا من عنصرTupleالمقابل؛ أما في الإصدار الجديد، فقد أصبحtupleElement(expr(), 'name'). في معظم الحالات، لم يكن السلوك السابق يعمل، لكن يمكن تصور سيناريو نادر جدًا قد يؤدي فيه هذا التغيير إلى عدم توافق: إذا كنت قد خزّنت أسماء عناصرTupleفي عمود أو اسم مستعار، وكان اسمه مختلفًا عن اسم عنصرTuple:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. ومن غير المرجح جدًا أنك استخدمت مثل هذه الاستعلامات، لكن لا يزال يتعين علينا وسم هذا التغيير بأنه قد يكون غير متوافق مع الإصدارات السابقة. #68435 (Alexey Milovidov). - عند تمكين الإعداد
print_pretty_type_names، سيطبع نوع البياناتTupleبصيغة منسقة في عباراتSHOW CREATE TABLE، والدالةformatQuery، وفي الوضع التفاعلي فيclickhouse-clientوclickhouse-local. في الإصدارات السابقة، كان هذا الإعداد يُطبَّق فقط على استعلاماتDESCRIBEوtoTypeName. يُغلق هذا #65753. #68492 (Alexey Milovidov). - لا يُسمح بتحديد UUID صراحةً عند إنشاء جدول في قواعد بيانات
Replicated. كذلك، لا يُسمح بتحديدKeeper pathواسم الـ replica صراحةً لجداول *MergeTree في قواعد بياناتReplicated. ويُدخل هذا إعدادًا جديدًا هوdatabase_replicated_allow_explicit_uuid، كما يغيّر نوعdatabase_replicated_allow_replicated_engine_argumentsمن Bool إلى UInt64 #66104 (Alexander Tokmakov).
ميزة جديدة
- السماح للمستخدم بامتلاك عدة طرق مصادقة بدلًا من طريقة واحدة فقط، مع إمكانية إعادة تعيين طرق المصادقة إلى أحدث طريقة تمت إضافتها. إذا كنت تريد تشغيل مثيلات على 24.8 ومثيلًا واحدًا على 24.9 لبعض الوقت، فمن الأفضل ضبط
max_authentication_methods_per_user= 1 خلال تلك الفترة لتجنّب حالات عدم التوافق المحتملة. #65277 (Arthur Passos). - إضافة دعم لـ
ATTACH PARTITION ALL FROM. #61987 (Kirill Nikiforov). - إضافة الإعداد
input_format_json_empty_as_defaultالذي، عند تفعيله، يعامل الحقول الفارغة في مُدخلات JSON على أنها قيم افتراضية. يُغلق #59339. #66782 (Alexis Arnaud). - أُضيفت الدالتان
overlayوoverlayUTF8اللتان تستبدلان أجزاءً من سلسلة نصية بسلسلة نصية أخرى. مثال:SELECT overlay('Hello New York', 'Jersey', 11)تُرجعHello New Jersey. #66933 (李扬). - إضافة دعم لعمليات الحذف الخفيف في partition ضمن
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;#67805 (sunny). - تنفيذ المقارنة بين قيم نوع البيانات
Intervalمن domains مختلفة (مثل الثواني والدقائق)، بحيث تُحوَّل الآن إلى أقل supertype مشترك. #68057 (Yarik Briukhovetskyi). - إضافة الإعداد
create_if_not_existsلجعل السلوك الافتراضي مماثلًا لـIF NOT EXISTSأثناء عبارات CREATE. #68164 (Peter Nguyen). - يتيح الآن قراءة جداول
Icebergفي Azure ومحليًا. #68210 (Daniil Ivanik). - يمكن الآن حذف إدخالات query cache حسب tag. على سبيل المثال، يمكن الآن حذف إدخال query cache الذي أُنشئ بواسطة
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'باستخدامSYSTEM DROP QUERY CACHE TAG 'abc'. #68477 (Michał Tabaszewski). - إضافة تشفير التخزين لـ named collections. #68615 (Pablo Marcos).
- إضافة العمود الظاهري
_headersإلى محرك الجداولURL. يُغلق #65026. #68867 (flynn). - إضافة جدول
system.projectionsلتتبّع projections المتاحة. #68901 (Jordi Villar). - إضافة الدالة الجديدة
arrayZipUnalignedللتوافق مع Spark (والتي تحمل الاسمarrays_zipفي Spark)، وتتيح التعامل مع arrays غير المتحاذية استنادًا إلىarrayZipالأصلية. #69030 (李扬). - أُضيفت أوامر
cp/mvإلى تطبيق سطر أوامر عميل Keeper، وتوفّر نسخ/نقل العقدة بصورة ذرية. #69034 (Mikhail Artemenko). - يضيف الوسيط
scale(الافتراضي:true) إلى الدالةarrayAUC، بما يتيح تخطي خطوة التطبيع (التذكرة #69609). #69717 (gabrielmcg44).
ميزة تجريبية
- يضيف الإعداد
input_format_try_infer_variants، الذي يتيح استنتاج النوعVariantأثناء استنتاج المخطط في تنسيقات النص عندما يكون هناك أكثر من نوع محتمل لعناصر العمود/المصفوفة. #63798 (Shaun Struwig). - يضيف الدوال التجميعية
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypesلتحسين فحص محتوى نوع عمود JSON. #68463 (Kruglov Pavel). - خوارزمية جديدة لتحديد وحدة توزيع العلامات بين النسخ المتماثلة المتوازية باستخدام تجزئة متسقة. ويجري اختيار أعداد مختلفة من العلامات لأنماط القراءة المختلفة لتحسين الأداء. #68424 (Nikita Taranov).
- سابقًا، كان التعقيد الخوارزمي لمنطق إزالة التكرار للأجزاء في معالجة إعلانات النسخ المتماثلة المتوازية هو O(n^2)، وكان ذلك قد يستغرق وقتًا ملحوظًا للجداول التي تحتوي على عدد كبير من الأجزاء (أو التقسيمات). يجعل هذا التغيير التعقيد O(n*log(n)). #69596 (Alexander Gololobov).
- تحسينات على العرض المادي القابل للتحديث: وضع الإلحاق (
... REFRESH EVERY 1 MINUTE APPEND ...) لإضافة صفوف إلى جدول موجود بدلًا من الكتابة فوق الجدول بالكامل، وإعادات المحاولة (معطّلة افتراضيًا، وتُضبط في قسم SETTINGS من الاستعلام)، والاستعلامSYSTEM WAIT VIEW <name>الذي ينتظر التحديث الجاري حاليًا، بالإضافة إلى بعض الإصلاحات. #58934 (Michael Kolupaev). - تمت إضافة
min_maxكنوع جديد من الإحصاءات (التجريبية). وهو يدعم تقدير شروط النطاق على الأعمدة الرقمية، مثلx < 100. #67013 (JackyWoo). - تحسين castOrDefault للأعمدة من نوع Variant/Dynamic بحيث يعمل حتى عندما تكون الأنواع الداخلية غير قابلة للتحويل إطلاقًا. #67150 (Kruglov Pavel).
- أصبح النسخ المتماثل لمجموعة فرعية من الأعمدة متاحًا الآن عبر MaterializedPostgreSQL. ويغلق #33748. #69092 (Kruglov Kirill).
تحسين الأداء
- جرى تنفيذ قراءة الملفات المطلوبة فقط لتقسيم Hive. #68963 (Yarik Briukhovetskyi).
- تحسين أداء JOIN عبر إعادة ترتيب الجدول الأيمن حسب المفاتيح عندما تكون مفاتيح الجدول متقاربة في عمليات hash join من نوع LEFT أو INNER. #60341 (kevinyhzou).
- تحسين أداء ALL JOIN عبر إلحاق قائمة الصفوف عند الحاجة. #63677 (kevinyhzou).
- تحميل البيانات الوصفية لذاكرة التخزين المؤقت لنظام الملفات بشكل غير متزامن أثناء عملية الإقلاع، لتسريع إعادة التشغيل (ويُتحكَّم بذلك عبر الإعداد
load_metadata_asynchronously). #65736 (Daniel Pozo Escalona). - جرى تحسين الدالتين
arrayوmapلمعالجة بعض الحالات الشائعة بسرعة أكبر بكثير. #67707 (李扬). - تحسين بسيط في قراءة السلاسل النصية في ORC، خصوصًا عندما لا يحتوي العمود على أي قيم NULL. #67794 (李扬).
- تحسين الأداء العام لعمليات الدمج عبر تقليل العبء الإضافي الناتج عن جدولة خطوات الدمج. #68016 (Anton Popov).
- تسريع الطلبات إلى S3 عندما لا يكون profile مضبوطًا، ولا تكون بيانات الاعتماد مضبوطة، ولا يكون IMDS متاحًا (على سبيل المثال، عند الاستعلام عن bucket عامة من جهاز خارج Cloud). وهذا يُغلق #52771. #68082 (Alexey Milovidov).
- إزالة الافتراضية من قارئ format في
RowInputFormatWithNamesAndTypesلتحقيق بعض تحسينات الأداء. #68437 (李扬). - إضافة الدمج المتوازي للدالة التجميعية
uniqعند التجميع باستخدام مفتاح Group By لتحقيق أقصى استفادة من وحدة المعالجة المركزية. #68441 (Jiebin Sun). - إضافة الإعداد
output_format_orc_dictionary_key_size_thresholdللسماح للمستخدم بتمكين ترميز القاموس لعمود String في output format ORC. ويساعد ذلك على تقليل حجم ملفORCالناتج وتحسين أداء القراءة بشكل ملحوظ. #68591 (李扬). - تقديم طلب جديد في Keeper باسم RemoveRecursive يزيل العقدة مع كامل شجرتها الفرعية. #69332 (Mikhail Artemenko).
- تسريع أداء الإدراج في جدول يحتوي على vector similarity index عبر إضافة البيانات إلى فهرس المتجهات بالتوازي. #69493 (flynn).
- تقليل استخدام الذاكرة في عمليات الإدراج إلى JSON باستخدام حجم buffer كتابة متكيف. فكثير من الملفات التي ينشئها عمود JSON في Wide part تحتوي على كمية صغيرة من البيانات، ولا جدوى من تخصيص buffer بحجم 1MB لها. #69272 (Kruglov Pavel).
- تجنب إعادة thread إلى threadpool الخاص بـ concurrent hash join لتفادي أن ينشئ الاستعلام عددًا مفرطًا من threads. #69406 (Duc Canh Le).
تحسين
- أصبح CREATE TABLE AS ينسخ الآن أيضًا PRIMARY KEY وORDER BY والعبارات المشابهة. ويدعم هذا حاليًا فقط MergeTree family من table engines. #69076 (sakulali).
- جرى تعزيز أجزاء من codebase المرتبطة بتحليل entities الصغيرة. وقد اكتُشفت الأخطاء (الطفيفة) التالية وأُصلحت: - إذا كان جدول
DeltaLakeمُقسَّمًا حسب Bool، فكانت قيمة partition تُفسَّر دائمًا على أنها false؛ - كان جدولExternalDistributedيستخدم shard واحدة فقط من العناوين المقدَّمة؛ وكانت قيمة الإعدادmax_threadsوما شابهها تُطبع بالشكل'auto(N)'بدلًا منauto(N). #52503 (Alexey Milovidov). - استُخدمت metrics الخاصة بـ cgroup لاحتساب CPU usage بدلًا من system-wide metrics. #62003 (Nikita Taranov).
- أصبح IO scheduling لأقراص S3 البعيدة يُنفَّذ الآن على مستوى streams الخاصة بمقبس HTTP (بدلًا من طلبات S3 كاملةً) لحل مشكلات throttling المتعلقة بـ
bandwidth_limit. #65182 (Sergei Trifonov). - كانت الدالتان
upperUTF8وlowerUTF8قادرتين سابقًا فقط على تحويل الأحرف السيريلية إلى أحرف كبيرة/صغيرة. وقد أُزيل هذا القيد الآن، وأصبح تحويل الأحرف إلى كبيرة/صغيرة يدعم أحرف أي لغة. Example: يعيدSELECT upperUTF8('Süden')الآن القيمةSÜDEN. #65761 (李扬). - عند تنفيذ lightweight delete على table تحتوي على projection(s)، كان أمام المستخدمين سابقًا خياران: إما throw an exception (افتراضيًا) أو إسقاط الـ projection عند تنفيذ lightweight delete. أما الآن، فقد أصبح هناك خيار ثالث يتيح الإبقاء على lightweight delete ثم إعادة بناء projection(s). #66169 (jsc0218).
- أُضيف خياران (
dns_allow_resolve_names_to_ipv4وdns_allow_resolve_names_to_ipv6) للسماح بحظر connections حسب عائلة IP. #66895 (MikhailBurdukov). - أصبح تجاهل Ctrl-Z قابلًا للتهيئة (ignore_shell_suspend) في clickhouse-client. #67134 (Azat Khuzhin).
- تحسين التحقق من UTF-8 في JSON output formats. يضمن ذلك توليد JSON صالح عند وجود تسلسلات بايت معيّنة في بيانات النتائج. #67938 (mwoenker).
- أُضيفت profile events لعمليات merges وmutations لتحسين introspection. #68015 (Anton Popov).
- ODBC: جلب http_max_tries من server configuration. #68128 (Rodolphe Dugé de Bernonville).
- إضافة دعم wildcard لتحديد هوية المستخدم في extension SubjectAltName من X.509. #68236 (Marco Vilas Boas).
- تحسين schema inference لقيم date time. يُستخدم
DateTime64الآن فقط عندما تحتوي قيمة date time على جزء كسري، وإلا فيُستخدم DateTime العادي. كما أصبح inference لكل من Date/DateTime أكثر صرامة الآن، خصوصًا عندما يكونdate_time_input_format='best_effort'، لتجنب استنتاج date times من السلاسل النصية في الحالات الطرفية. #68382 (Kruglov Pavel). - إزالة الشيفرة القديمة للمجموعات المُسمّاة من القواميس واستبدالها بالشيفرة الجديدة، بما يتيح استخدام المجموعات المُسمّاة المُنشأة عبر DDL داخل القواميس. يغلق #60936، ويغلق #36890. #68412 (Kseniia Sumarokova).
- استخدام HTTP/1.1 بدلًا من HTTP/1.0 (المُعيَّن افتراضيًا) لمُوثِّقات HTTP الخارجية. #68456 (Aleksei Filatov).
- إضافة مجموعة جديدة من المقاييس لاستبطان مجمّع الخيوط، بما يوفّر رؤى أعمق حول أداء مجمّع الخيوط وسلوكه. #68674 (filimonov).
- دعم معلمات الاستعلام في عمليات الإدراج غير المتزامنة بتنسيق
Values. #68741 (Anton Popov). - دعم
Date32فيdateTruncوtoStartOfInterval. #68874 (LiuNeng). - إضافة العمودين
plan_step_nameوplan_step_descriptionإلىsystem.processors_profile_log. #68954 (Alexander Gololobov). - دعم اللغة الإسبانية في القواميس المضمّنة. #69035 (Vasily Okunev).
- إضافة معمارية CPU إلى رسالة معلومات الأعطال المختصرة. #69037 (Konstantin Bogdanov).
- ستفشل الاستعلامات بسرعة أكبر إذا تعذّر إنشاء اتصال جديد بـ Keeper أثناء إعادة المحاولة. #69148 (Raúl Marín).
- تحديث Database Factory بحيث يصبح بإمكان محركات قواعد البيانات المعرّفة من المستخدم أن تتضمن معاملات وإعدادات وتجاوزات للجداول (على غرار StorageFactory). #69201 (NikBarykin).
- كان وضع الاستعادة الذي يستبدل جميع محركات الجداول والدوال الخارجية بمحرك
Null(الإعدادانrestore_replace_external_engines_to_nullوrestore_replace_external_table_functions_to_null) يفشل إذا كان الجدول يحتوي على SETTINGS. والآن، تُزال الإعدادات من تعريف الجدول في هذه الحالة، ما يتيح استعادة هذه الجداول. #69253 (Ilya Yatsishin). - أصبح CLICKHOUSE_PASSWORD الآن يُهرَّب بشكل صحيح داخل XML في نقطة الدخول لصورة ClickHouse. #69301 (aohoyd).
- السماح بمعاملات فارغة لـ
arrayZip/arrayZipUnaligned، كما حدث مع concat في https://github.com/ClickHouse/ClickHouse/pull/65887. وذلك من أجل التوافق مع Spark في Gluten CH Backend. #69576 (李扬). - دعم خيارات SSL أكثر تقدمًا للاتصال الداخلي لـ Keeper (مثل المفاتيح الخاصة المحمية بعبارة مرور). #69582 (Antonio Andelic).
- قد يستغرق تحليل الفهرس وقتًا ملحوظًا في الجداول الكبيرة التي تحتوي على عدد كبير من الأجزاء أو الأقسام. ومن المفترض أن يتيح هذا التغيير إيقاف الاستعلامات الثقيلة في هذه المرحلة. #69606 (Alexander Gololobov).
- إخفاء المعلومات الحساسة في دالة الجدول
gcs. #69611 (Vitaly Baranov). - إعادة إنشاء الإسقاط لعمليات الدمج التي تقلّل عدد الصفوف. #62364 (cangyin).
إصلاح خلل (سلوك خاطئ يلاحظه المستخدم في إصدار مستقر رسمي)
- إصلاح إرفاق الجدول عندما يحتوي
pg dbnameعلى الرمز ”-” في المحرك التجريبي وغير المدعوم MaterializedPostgreSQL. #62730 (takakawa). - تم إصلاح خطأ في generated columns في المحرك التجريبي وغير المدعوم إطلاقًا MaterializedPostgreSQL عندما يكون ترتيب
adnumمعطّلًا #63161. كما تم إصلاح خطأ في العمودidالذي يستخدم التعبيرnextvalكقيمة default في MaterializedPostgreSQL التجريبي وغير المدعوم إطلاقًا عند وجود generated columns في الجدول. وتم أيضًا إصلاح خطأ عند حذف publication تحتوي على رموز خارج [a-z1-9-]. #67664 (Kruglov Kirill). - دعم Storage Join للأعمدة Nullable في left table، وإغلاق #61247. #66926 (vdimir).
- نتيجة query غير صحيحة مع parallel replicas (بما في ذلك توزيع queries) عندما يحتوي المعامل
INعلى تحويل إلى Decimal(). أُدخل هذا الخلل مع analyzer الجديد. #67234 (Igor Nikonov). - إصلاح المشكلة التي تؤدي إلى عدم اتساق metadata عند تنفيذ alter modify order by. #67436 (iceFireser).
- إصلاح الحد الأعلى للدالة
fromModifiedJulianDay. كان من المفترض أن يكون9999-12-31، لكنه ضُبط بالخطأ على9999-01-01. #67583 (PHO). - إصلاح الحالة التي لا يكون فيها الـ index في بداية الـ tuple أثناء query من نوع
IN. #67626 (Yarik Briukhovetskyi). - إصلاح انتهاء الصلاحية في
RoleCache. #67748 (Vitaly Baranov). - إصلاح فقدان window view لبعض blocks بسبب بطء flush إلى العرض. #67983 (Raúl Marín).
- إصلاح مشكلة MSan الناتجة عن format تاريخ غير صحيح. #68105 (JackyWoo).
- تم إصلاح crash في Filtering الخاص بـ Parquet عندما تختلف data types في الملف بشكل كبير عن types المطلوبة (مثلًا
... FROM file('a.parquet', Parquet, 'x String')، بينما يحتوي الملف علىx Int64). ومن دون هذا الإصلاح، استخدمinput_format_parquet_filter_push_down = 0كحل بديل. #68131 (Michael Kolupaev). - إصلاح crash في
lag/leadأُدخل في #67091. #68262 (lgbo). - محاولة إصلاح crash في Postgres عند إلغاء query. #68288 (Kseniia Sumarokova).
- بعد https://github.com/ClickHouse/ClickHouse/pull/61984، لا يزال
schema_inference_make_columns_nullable=0قادرًا على جعل الأعمدةNullableفي صيغ Parquet/Arrow. كان هذا التغيير غير متوافق مع الإصدارات السابقة، وقد لاحظ المستخدمون هذا التغير في السلوك. يعيد هذا الـ PR القيمةschema_inference_make_columns_nullable=0إلى سلوكها السابق (لن يتم infer أي أعمدة Nullable)، ويقدّم قيمة جديدة هيautoلهذا الإعداد، بحيث تجعل الأعمدةNullableفقط إذا كانت البيانات تتضمن معلومات عن قابلية القيم الفارغة. #68298 (Kruglov Pavel). - يُصلح #50868. كانت القيم الثابتة الصغيرة من نوع DateTime64 التي يعيدها استعلام فرعي متداخل داخل distributed query تتحول خطأً إلى Nulls، مما يتسبب في أخطاء واحتمال ظهور نتائج استعلام غير صحيحة. #68323 (Shankar).
- إصلاح غياب وضع مزامنة replica في الاستعلام
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le). - إصلاح خلل في شرط المفتاح. #68354 (Han Fei).
- إصلاح تعطل عند drop أو rename دور مستخدم مُستخدَم في دليل المستخدمين الخارجي LDAP. #68355 (Andrey Zvonov).
- إصلاح قيمة عمود Progress في system.view_refreshes عندما تتجاوز 1 #68377. #68378 (megao).
- معالجة علامات regexp بشكل صحيح. #68389 (Han Fei).
- يعمل عامل CAST بأسلوب PostgreSQL (
::) بشكل صحيح حتى مع القيم الحرفية السداسية العشرية بأسلوب SQL والقيم الحرفية من نوع binary string (مثل:SELECT x'414243'::String). هذا يُغلق #68324. #68482 (Alexey Milovidov). - تصحيح طفيف لـ https://github.com/ClickHouse/ClickHouse/pull/68131. #68494 (Chang chen).
- إصلاح #68239 في SAMPLE n عندما تكون n عددًا صحيحًا. #68499 (Denis Hananein).
- إصلاح خلل في mann-whitney-utest عندما لا يكون حجما التوزيعين متساويين. #68556 (Han Fei).
- بعد إعادة تشغيل غير متوقعة، يتعذر بدء replication لـ ReplicatedMergeTree بسبب معالجة غير سليمة للجزء covered-by-broken. #68584 (baolin).
- إصلاح أخطاء
LOGICAL_ERRORعند تطبيق الدوالsipHash64KeyedأوsipHash128KeyedأوsipHash128ReferenceKeyedعلى arrays أو tuples فارغة. #68630 (Robert Schulze). - قد يقوم فهرس النص الكامل بتصفية أعمدة غير صحيحة عند فهرسة عدة أعمدة، إذ لم يكن يعيد ضبط row_id بين الأعمدة المختلفة. خطوات إعادة المشكلة موجودة في tests/queries/0_stateless/03228_full_text_with_multi_col.sql. بدون هذا الإصلاح. #68644 (siyuan).
- إصلاح المحرفين غير الصالحين ‘\t’ و’\n’ في replica_name عند إنشاء جدول Replicated، مما يؤدي إلى parsing غير صحيح لـ ‘source replica’ في LogEntry. ذُكر ذلك في issue #68640. #68645 (Zhigao Hong).
- أُعيدت الأعمدة الافتراضية
_tableو_databaseإلى الجداول الموزعة. وكانت متاحة حتى الإصدار 24.3. #68672 (Anton Popov). - إصلاح خطأ محتمل
Size of permutation (0) is less than required (...)أثناء تبديل عمود Variant. #68681 (Kruglov Pavel). - إصلاح خطأ محتمل
DB::Exception: Block structure mismatch in joined block stream: different columns:مع عمود JSON الجديد. #68686 (Kruglov Pavel). - إصلاح مشكلة المفاتيح الثابتة المُجسَّدة عند تجزئة الخرائط التي تستخدم المصفوفات كمفاتيح في الدوال
sipHash(64/128)Keyed. #68731 (Salvatore Mesoraca). - جرى جعل
ColumnsDescription::toStringينسّق كل عمود باستخدام كائنIAST::FormatStateنفسه. ويؤدي ذلك إلى كتابة بيانات وصفية موحّدة للأعمدة على القرص وفي ZooKeeper. #68733 (Miсhael Stetsyuk). - إصلاح دمج البيانات المجمّعة لمجموعات التجميع. #68744 (Nikolai Kochetov).
- إصلاح خطأ منطقي عند إنشاء merge tree مكرّرة، ثم تعديل عمود، ثم تنفيذ modify statistics. #68820 (Han Fei).
- إصلاح حلّ الأعمدة الفرعية الديناميكية من الاستعلامات الفرعية في المحلّل. #68824 (Kruglov Pavel).
- إصلاح تحليل البيانات الوصفية للأنواع المعقدة في DeltaLake. ويغلق هذا #68739. #68836 (Kseniia Sumarokova).
- أُصلحت عمليات الإدراج غير المتزامنة عندما تتغير البيانات الوصفية للجدول (بواسطة استعلامات
ALTER ADD/MODIFY COLUMN) بعد الإدراج ولكن قبل التفريغ إلى الجدول. #68837 (Anton Popov). - إصلاح استثناء غير متوقع عند تمرير tuple فارغ ضمن مصفوفة. ويعالج هذا #68618. #68848 (Amos Bird).
- إصلاح تحليل أوامر mutations الخاصة بالبيانات الوصفية فقط. #68935 (János Benjamin Antal).
- إصلاح احتمال ظهور نتيجة غير صحيحة أثناء دمج حالة anyHeavy. #68950 (Raúl Marín).
- أُصلحت الكتابة إلى العروض المادية عند تمكين الإعداد
optimize_functions_to_subcolumns. #68951 (Anton Popov). - عدم استخدام ذاكرة التخزين المؤقت لعمليات التسلسل في أساليب عمود Dynamic الثابت. فقد يؤدي ذلك إلى استخدام قيمة غير مهيأة، أو حتى إلى حدوث race condition أثناء عمليات التجميع. #68953 (Kruglov Pavel).
- إصلاح parsing error عندما ينبغي إدراج null كقيمة افتراضية في بعض الحالات أثناء تحليل JSON type. #68955 (Kruglov Pavel).
- إصلاح عدم إرسال
Content-Encodingفي بعض الاستجابات المضغوطة. #64802. #68975 (Konstantin Bogdanov). - كانت هناك حالات جرى فيها ضمّ المسار بصورة غير صحيحة، بحيث احتوى على الجزء
//، وقد حُلّت هذه المشكلة باستخدام تطبيع المسار. #69066 (Yarik Briukhovetskyi). - إصلاح خطأ منطقي عند وجود async insert فارغ. #69080 (Han Fei).
- إصلاح data race في عرض التقدّم داخل clickhouse-client أثناء إلغاء query. #69081 (Sergei Trifonov).
- إصلاح خلل كان يمنع استخدام vector similarity index (وهو حاليًا Experimental) عند استخدام cosine distance بوصفها دالة المسافة. #69090 (flynn).
- يعالج هذا التغيير مشكلةً كان فيها تكرار محاولة إنشاء قاعدة بيانات Replicated بعد تعطل server أثناء عملية الإنشاء الأولى قد يؤدي إلى حدوث خطأ. #69102 (Miсhael Stetsyuk).
- لا تستنتج النوع Bool من String في CSV عندما تكون
input_format_csv_try_infer_numbers_from_strings = 1، لأننا لا نسمح بقراءة قيم bool من السلاسل النصية. #69109 (Kruglov Pavel). - إصلاح parsing error في explain ast insert queries على client عندما يكون
--multiqueryمفعّلًا. #69123 (wxybear). - لم تكن clause
UNIONداخل subqueries تُعالَج بشكل صحيح في queries التي تستخدم parallel replicas، وكان ذلك يؤدي إلى LOGICAL_ERROR Duplicate announcement received for replica. #69146 (Igor Nikonov). - إصلاح تمرير structure argument في s3Cluster. سابقًا، كان من الممكن فقدان التعبير
DEFAULTالخاص بالـ column عند إرسال query إلى replicas في s3Cluster. #69147 (Kruglov Pavel). - مراعاة إعدادات format في Values format أثناء التحويل من expression إلى نوع الوجهة. #69149 (Kruglov Pavel).
- إصلاح
clickhouse-client --queries-fileللمستخدمين ذوي وضع readonly (إذ كان يفشل سابقًا معCannot modify 'log_comment' setting in readonly mode). #69175 (Azat Khuzhin). - إصلاح data race في clickhouse-client عندما يكون موصولًا عبر pipe إلى عملية انتهت مبكرًا. #69186 (vdimir).
- إصلاح النتائج غير الصحيحة لـ uniq و GROUP BY لأنواع JSON/Dynamic. #69203 (Kruglov Pavel).
- إصلاح اكتشاف format الخاص بـ INFILE في asynchronous inserts. إذا لم يكن format محددًا صراحةً في FORMAT clause، فيمكن اكتشافه من امتداد ملف INFILE. #69237 (Julia Kartseva).
- بعد هذه issue، توجد في بيئة production عدة table replicas تكون فيها قيمة العقدة
metadata_versionمساويةً لـ0وفي الوقت نفسه مختلفةً عن إصدار عقدةmetadataالخاصة بالجدول المقابل. ويؤدي ذلك إلى فشل queries alterعلى مثل هذه replicas. #69274 (Miсhael Stetsyuk). - وسم النوع Dynamic على أنه ليس نوع مفتاح أساسي آمنًا لتجنّب المشكلات المتعلقة بـ Fields. #69311 (Kruglov Pavel).
- تحسين استعادة تبعيات كيانات الوصول. #69346 (Vitaly Baranov).
- إصلاح سلوك غير معرّف عند فشل جميع محاولات الاتصال أثناء الحصول على connection لعمليات الإدراج. #69390 (Pablo Marcos).
- إغلاق #69135. إذا حاولنا إعادة استخدام البيانات المضمومة لعملية ربط
cross، فإن ذلك لا يمكن أن يحدث حاليًا في ClickHouse. لذلك من الأفضل الإبقاء علىhave_compressedفيreuseJoinedData. #69404 (lgbo). - جعل الدالة
materialize()تُرجع full column عندما تكون المعلمة sparse column. #69429 (Alexander Gololobov). - إصلاح
LOGICAL_ERRORفي الدالةsqidDecode(#69450). #69451 (Robert Schulze). - إصلاح سريع لمشكلة s3queue في الإصدار 24.6 أو عند create query مع database replicated. #69454 (Kseniia Sumarokova).
- إصلاح حالة كان فيها استهلاك الذاكرة مرتفعًا جدًا بسبب squashing في استعلامات
INSERT INTO ... SELECTأوCREATE TABLE AS SELECT. #69469 (Yarik Briukhovetskyi). - أصبحت العبارتان
SHOW COLUMNSوSHOW INDEXتعملان الآن بشكل صحيح إذا كان اسم الجدول يحتوي على نقاط. #69514 (Salvatore Mesoraca). - لم يعد مسموحًا الآن باستخدام query cache للاستعلامات التي يكون فيها نمط overflow != ‘throw’. وهذا يمنع الحالات التي قد تُخزَّن فيها نتائج استعلامات مبتورة وغير صحيحة في query cache. (issue #67476). #69549 (Robert Schulze).
- الحفاظ على الترتيب الأصلي للشروط أثناء النقل إلى prewhere. في السابق، كان يمكن أن يتغير الترتيب، ما قد يؤدي إلى فشل الاستعلامات عندما يكون الترتيب مهمًا. #69560 (Kruglov Pavel).
- إصلاح المعالجة التمهيدية للطلبات المتعددة في Keeper بعد حدوث الخطأ ZNOAUTH. #69627 (Antonio Andelic).
- إصلاح
METADATA_MISMATCHالذي كان قد يحدث بسبب TTL مع WHERE clause في DatabaseReplicated عند إنشاء replica جديدة. #69736 (Nikolay Degterinsky). - إصلاح الإعداد
tracked_file_ttl_secفيStorageS3(Azure)Queue. فقد كنا نكتبه إلى keeper بالمفتاحtracked_file_ttl_sec، لكننا نقرأه على أنهtracked_files_ttl_sec، وكان ذلك خطأً مطبعيًا. #69742 (Kseniia Sumarokova). - استخدام tryconvertfieldtotype في gethyperrectangleforrowgroup. #69745 (Miсhael Stetsyuk).
- التراجع عن “إصلاح
prewhereمن دون أعمدة ومن دون دقة الفهرسة التكيفية (تقريبًا من دون أي شيء)”’. وبسبب التغييرات التي تم التراجع عنها، قد تحدث بعض الأخطاء عند قراءة أجزاء البيانات الناتجة عن إصدارات CH القديمة (على الأرجح 2021 أو أقدم). #68897 (Alexander Gololobov).
إصدار ClickHouse 24.8 LTS، 2024-08-20. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصبح
clickhouse-clientوclickhouse-localيعملان افتراضيًا في وضع الاستعلامات المتعددة بدلًا من وضع الاستعلام الواحد. على سبيل المثال، أصبح الأمرclickhouse-client -q "SELECT 1; SELECT 2"يعمل الآن، بينما كان على المستخدمين سابقًا إضافة--multiquery(أو-n). كما أصبح الخيار--multiquery/-nقديمًا. وتُعامَل استعلامات INSERT ضمن العبارات متعددة الاستعلامات معاملة خاصة بحسب عبارة FORMAT: فإذا كانت FORMAT هيVALUES(وهي الحالة الأكثر شيوعًا)، فإن نهاية عبارة INSERT تُمثَّل بفاصلة منقوطة;في نهاية الاستعلام. أما في جميع FORMATs الأخرى (مثلCSVأوJSONEachRow)، فإن نهاية عبارة INSERT تُمثَّل بسطرين جديدين\n\nفي نهاية الاستعلام. #63898 (FFish). - في الإصدارات السابقة، كان من الممكن استخدام صياغة بديلة لأنواع البيانات
LowCardinalityعبر إلحاقWithDictionaryباسم نوع البيانات. كانت هذه مجرد تنفيذ أولي عملي، ولم تُوثَّق أو تُطرَح للعامة مطلقًا. أما الآن فقد أصبحت مهملة. إذا كنت قد استخدمت هذه الصياغة، فعليك تنفيذ ALTER على جداولك وإعادة تسمية أنواع البيانات إلىLowCardinality. #66842 (Alexey Milovidov). - إصلاح أخطاء منطقية في وحدة التخزين
Bufferالمستخدمة مع جدول وجهة موزّع. وهذا تغيير غير متوافق مع الإصدارات السابقة: فقد تتوقف الاستعلامات التي تستخدمBufferمع جدول وجهة موزّع عن العمل إذا ظهر الجدول أكثر من مرة في الاستعلام (مثلًا في ربط ذاتي). #67015 (vdimir). - في الإصدارات السابقة، كان استدعاء دوال التوزيعات العشوائية المعتمدة على دالة غاما (مثل Chi-Squared وStudent وFisher) باستخدام معاملات سالبة قريبة من الصفر يؤدي إلى حساب طويل أو إلى حلقة لا نهائية. في الإصدار الجديد، سيؤدي استدعاء هذه الدوال بمعاملات صفرية أو سالبة إلى ظهور استثناء. هذا يُغلق #67297. #67326 (Alexey Milovidov).
- أصبح جدول النظام
text_logمفعّلًا افتراضيًا. وهذا متوافق بالكامل مع الإصدارات السابقة، لكن قد تلاحظ زيادة طفيفة جدًا في استخدام القرص المحلي (إذ يستهلك جدول النظام هذا مقدارًا ضئيلًا جدًا من مساحة القرص). #67428 (Alexey Milovidov). - في الإصدارات السابقة، قد تكون
arrayWithConstantبطيئة إذا طُلب منها توليد مصفوفات كبيرة جدًا. في الإصدار الجديد، أصبح الحد الأقصى 1 جيجابايت لكل مصفوفة. هذا يُغلق #32754. #67741 (Alexey Milovidov). - إصلاح تنسيق المعدِّل REPLACE (ومنع حذف الأقواس). #67774 (Azat Khuzhin).
- تم النقل الخلفي في #68349: إعادة تنفيذ النوع
Dynamic. الآن، عند بلوغ الحد الأقصى لأنواع البيانات الديناميكية، لا تُحوَّل الأنواع الجديدة إلى String، بل تُخزَّن في بنية بيانات خاصة بتنسيق ثنائي مع نوع بيانات مُرمَّز ثنائيًا. وأصبح بالإمكان الآن قراءة أي نوع أُدرِج يومًا في العمودDynamicمنه كعمود فرعي. #68132 (Kruglov Pavel).
ميزة جديدة
- أُضيف إعداد جديد لـ
MergeTreeباسمdeduplicate_merge_projection_modeللتحكم في projections أثناء عمليات الدمج (في محركات محددة) وفي استعلامOPTIMIZE DEDUPLICATE. الخيارات المدعومة هي:throw(إطلاق استثناء إذا لم تكن الـ projection مدعومة بالكامل في محرك *MergeTree)، وdrop(إزالة الـ projection أثناء الدمج إذا تعذر دمجها بشكل متسق)، وrebuild(إعادة بناء الـ projection من الصفر، وهي عملية مكلفة). #66672 (jsc0218). - أُضيف العمود الافتراضي
_etagإلى S3 table engine. ويعالج ذلك المشكلة #65312. #65386 (skyoct). - أُضيفت آلية وسم (namespace) إلى query cache. وتُعامل query cache الاستعلامات نفسها ذات الوسوم المختلفة على أنها استعلامات مختلفة. مثال:
SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'وSELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'ينشئان الآن cache entries مختلفة في query cache. #68235 (sakulali). - دعم المزيد من حالات strictness الخاصة بـ JOIN (
LEFT/RIGHT SEMI/ANTI/ANY JOIN) مع شروط عدم مساواة تتضمن columns من كلٍّ من الجدول الأيسر والجدول الأيمن. مثل:t1.y < t2.y(راجع الإعدادallow_experimental_join_condition). #64281 (lgbo). - دعم Hive-style partitioning في محركات مختلفة (
File,URL,S3,AzureBlobStorage,HDFS). ينظّم Hive-style partitioning البيانات ضمن أدلة فرعية مقسّمة، مما يجعل الاستعلام عن datasets الكبيرة وإدارتها أكثر كفاءة. حاليًا، يقتصر ذلك على إنشاء virtual columns بالاسم والبيانات المناسبين. وسيُضيف طلب السحب اللاحق آلية filtering المناسبة للبيانات (لتسريع الأداء). #65997 (Yarik Briukhovetskyi). - أُضيفت الدالة
printfللتوافق مع Spark (مع أنه يمكنك استخدام الدالة الحاليةformat). #66257 (李扬). - أُضيف الخياران
restore_replace_external_engines_to_nullوrestore_replace_external_table_functions_to_nullلاستبدال external engines وtable_engines بمحركNull، وهو ما قد يكون مفيدًا للاختبار. ومن المفترض أن يعمل ذلك مع RESTORE ومع الإنشاء الصريح للجداول. #66536 (Ilya Yatsishin). - أُضيف دعم لقراءة هندسة
MULTILINESTRINGبتنسيقWKTباستخدام الدالةreadWKTLineString. #67647 (Jacob Reckhard). - أُضيفت table function جديدة باسم
fuzzQuery. تتيح هذه الدالة تعديل query string معيّن بإدخال تغييرات عشوائية عليه. مثال:SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;. #67655 (pufit). - أُضيف الاستعلام
ALTER TABLE ... DROP DETACHED PARTITION ALLلحذف جميع الأقسام المنفصلة. #67885 (Duc Canh Le). - أُضيفت الإحصائية
rows_before_aggregation_at_leastإلى استجابة الاستعلام عند تفعيل الإعداد الجديدrows_before_aggregation. وتمثل هذه الإحصائية عدد rows المقروءة قبل aggregation. وفي سياق distributed query، عند استخدام دالة aggregationgroup byأوmaxمن دونlimit، يمكن أن يعكسrows_before_aggregation_at_leastعدد الصفوف التي طابقها الاستعلام. #66084 (morning-color). - إتاحة استعلام
OPTIMIZEعلى جداولJoinلتقليل استهلاك الذاكرة. #67883 (Duc Canh Le). - إتاحة تشغيل الاستعلام فورًا في play عند إضافة
&run=1إلى عنوان URL #66457 (Aleksandr Musorin).
ميزة تجريبية
- إضافة نوع بيانات
JSONجديد. #66444 (Kruglov Pavel). - إضافة محرك الجدول الجديد
TimeSeries. #64183 (Vitaly Baranov). - إضافة محرك التخزين التجريبي الجديد
Kafkaلتخزين الإزاحات في Keeper بدلًا من الاعتماد على ترحيلها إلى Kafka. وهذا يجعل عملية commit إلى جداول ClickHouse ذرّية من حيث الاستهلاك من قائمة الانتظار. #57625 (János Benjamin Antal). - استخدام طريقة تكيفية لحساب حجم مهام القراءة (أي إنها تعتمد على أحجام أعمدة القراءة) للنسخ المتماثلة المتوازية. #60377 (Nikita Taranov).
- إضافة نوع إحصاءات
count_min(مخططات count-min) يوفّر تقديرات للانتقائية لمسندات المساواة مثلcol = 'val'. أنواع البيانات المدعومة هي string وdate وdatetime والأنواع الرقمية. #65521 (JackyWoo).
تحسين الأداء
- الإعداد
optimize_functions_to_subcolumnsمفعّل افتراضيًا. #68053 (Anton Popov). - تُخزَّن البيانات الوصفية لدليل القرص
plain_rewritableضمن تخطيط__meta، بشكل منفصل عن بيانات MergeTree في التخزين الكائني. كما نُقل القرصplain_rewritableإلى بنية أدلة مسطّحة. #65751 (Julia Kartseva). - تحسين تجميع الأعمدة (وهي عملية تحدث في استعلامات INSERT) للأنواع
String/Array/Map/Variant/Dynamicمن خلال حجز الذاكرة المطلوبة مسبقًا لجميع الأعمدة الفرعية. #67043 (Kruglov Pavel). - تسريع
SYSTEM FLUSH LOGSوتفريغ السجلات عند الإيقاف. #67472 (Sema Checherinda). - تحسين الأداء العام لعمليات الدمج عبر تقليل الكلفة الإضافية في خطوات جدولة عمليات الدمج. #68016 (Anton Popov).
- تسريع إزالة الجداول في استعلام
DROP DATABASE، مع زيادة القيمة الافتراضية لـdatabase_catalog_drop_table_concurrencyإلى 16. #67228 (Nikita Mikhaylov). - تجنّب تخصيص سعة أكبر من اللازم لعمود مصفوفة أثناء الكتابة إلى ORC. يؤدي ذلك إلى تحسين الأداء بنسبة 15% لعمود Array. #67879 (李扬).
- تسريع mutations في MergeTree غير المكرّر بشكل ملحوظ #66911 #66909 (Alexey Milovidov).
تحسين
- أُعيدت تسمية الإعداد
allow_experimental_analyzerإلىenable_analyzer. وتم الاحتفاظ بالاسم القديم على هيئة اسم مستعار. ويعني ذلك أن Analyzer لم يعد في مرحلة Beta، بل أصبح معتمدًا بالكامل لبيئات production. #66438 (Nikita Mikhaylov). - تحسين استدلال المخطط لقيم التاريخ والوقت. والآن لا يُستخدم DateTime64 إلا عندما تحتوي قيمة التاريخ والوقت على جزء كسري، وإلا فيُستخدم DateTime العادي. كما أصبح استدلال Date/DateTime أكثر صرامة الآن، خاصةً عند استخدام
date_time_input_format='best_effort'، لتجنّب استدلال قيم التاريخ والوقت من السلاسل النصية في الحالات الطرفية. #68382 (Kruglov Pavel). - أصبح ClickHouse server يدعم الآن الإعداد الجديد
max_keep_alive_requests. وبالنسبة إلى اتصالات HTTP الدائمة مع الخادم، فإنه يعمل بالتوازي معkeep_alive_timeout— فإذا لم تنتهِ مهلة الخمول، ولكن كان قد تم بالفعل تنفيذ أكثر منmax_keep_alive_requestsطلبًا عبر الاتصال المعني، فسيُغلِقه الخادم. #61793 (Nikita Taranov). - تحسينات متنوعة في لوحة المعلومات المتقدمة. ويؤدي هذا إلى إغلاق #67697. ويؤدي هذا إلى إغلاق #63407. ويؤدي هذا إلى إغلاق #51129. ويؤدي هذا إلى إغلاق #61204. #67701 (Alexey Milovidov).
- لم يعد امتياز REMOTE مطلوبًا عند إنشاء distributed table: إذ يكفي امتياز Distributed engine. #65419 (jsc0218).
- عدم تمرير سجلات Keeper صراحةً في صورة Docker لإتاحة تجاوزها. #65564 (Azat Khuzhin).
- أُضيفت إعدادات
use_same_password_for_base_backupلاستعلاماتBACKUPوRESTORE، مما يتيح إنشاء نسخ احتياطية تزايدية واستعادتها من/إلى أرشيفات محمية بكلمة مرور. #66214 (Samuele). - تجاهل
async_load_databasesلاستعلامATTACH(إذ كان من الممكن سابقًا أن يعيدATTACHالنتيجة قبل إرفاق الجداول). #66240 (Azat Khuzhin). - أُضيفت سجلات ومقاييس للاتصالات المرفوضة (عند عدم توفر موارد كافية). #66410 (Alexander Tokmakov).
- دعم نوع
UUIDبصورة صحيحة لمحرك MongoDB. #66671 (Azat Khuzhin). - إضافة مقاييس لتأخر النسخ المتماثل ووقت التعافي. #66703 (Miсhael Stetsyuk).
- إضافة المقياس
DiskS3NoSuchKeyErrors. #66704 (Miсhael Stetsyuk). - ضمان عمل العبارة
COMMENTمع جميع table engines. #66832 (Joe Lynch). - تقبل الدالة
mapFromArraysالآنMap(K, V)كوسيط أول. على سبيل المثال، يعمل الآن SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb']) ويُرجع{('a',4):'aa',('b',4):'bb'}. كذلك، إذا كان الوسيط الأول من النوع Array، فيمكنه الآن أيضًا أن يكون من النوعArray(Nullable(T))أوArray(LowCardinality(Nullable(T)))، ما دامت القيم الفعلية في المصفوفة ليستNULL. #67103 (李扬). - أصبحت إعدادات
clickhouse-localتُقرأ من~/.clickhouse-local. #67135 (Azat Khuzhin). - أُعيدت تسمية الإعداد
input_format_orc_read_use_writer_time_zoneإلىinput_format_orc_reader_timezone، مع السماح للمستخدم بتعيين المنطقة الزمنية للقارئ. #67175 (kevinyhzou). - خُفِّض مستوى الخطأ
Socket is not connectedعندما يُعاد ضبط اتصال HTTP فورًا من النظير بعد الاتصال، مما يُغلق #34218. #67177 (vdimir). - إضافة إمكانية تحميل لوحات المعلومات لـ
system.dashboardsمن config (وبمجرد تعيينها، فإنها تتجاوز الإعداد المسبق الافتراضي للوحات المعلومات). #67232 (Azat Khuzhin). - تُكتب دوال النافذة في SQL تقليديًا بصيغة snake case. ولأن ClickHouse يستخدم صيغة
camelCase، فقد أُنشئت الأسماء البديلة الجديدةdenseRank()وpercentRank(). ويمكن استدعاء هاتين الدالتين الجديدتين بالطريقة نفسها تمامًا مثل الدالتين الأصليتينdense_rank()وpercent_rank(). وتظل كل من صياغتي snake case وcamelCaseقابلة للاستخدام. كما أُضيف اختبار جديد لكل دالة. وهذا يُغلق #67042. #67334 (Peter Nguyen). - الاكتشاف التلقائي لتنسيق ملف الإعدادات إذا لم يكن الامتداد
.xmlأو.ymlأو.yaml. إذا بدأ الملف بـ < فقد يكون XML، وإلا فقد يكون YAML. وهذا مفيد عند تمرير ملف إعدادات من pipe:clickhouse-server --config-file <(echo "hello: world"). #67391 (sakulali). - أصبحت الدالتان
formatDateTimeوformatDateTimeInJodaSyntaxتتعاملان الآن مع وسيط format باعتباره اختياريًا. وإذا لم يُحدَّد، فتُفترض سلسلتا التنسيق%Y-%m-%d %H:%i:%sوyyyy-MM-dd HH:mm:ss. مثال: تُرجع SELECT parseDateTime('2021-01-04 23:12:34') الآن قيمة DateTime2021-01-04 23:12:34(في السابق، كان هذا يؤدي إلى استثناء). #67399 (Robert Schulze). - إعادة محاولة طلبات Keeper تلقائيًا في KeeperMap إذا حدثت بسبب timeout أو فقدان الاتصال. #67448 (Antonio Andelic).
- إضافة
-no-pieإلى إصدارات Aarch64 Linux المبنية للسماح بالاستبطان الصحيح وإظهار الرموز في stacktraces بعد إعادة تشغيل ClickHouse. #67916 (filimonov). - أُضيفت profile events لعمليات الدمج وmutations لتحسين الاستبطان. #68015 (Anton Popov).
- إزالة logs غير الضرورية لـ
MergeTreeغير المكرر. #68238 (Daniil Ivanik).
تحسينات البناء/الاختبار/التغليف
- لم يعد فحص
اختبارات التكاملغير المستقرة يشغّل كل حالة اختبار عدة مرات للعثور على المزيد من المشكلات في الاختبارات وجعلها أكثر موثوقية. ويستخدم مكتبةpytest-repeatلتشغيل حالة الاختبار عدة مرات ضمن البيئة نفسها. ومن المهم تنظيف الجداول وسائر الكيانات في نهاية حالة الاختبار لكي ينجح. كما أن التكرار أسرع بكثير من تشغيلpytestعدة مرات، لأنه يبدأ الحاويات اللازمة مرة واحدة فقط. #66986 (Ilya Yatsishin). - إزالة العائق أمام استخدام CLion مع ClickHouse. ففي الإصدارات السابقة، كان CLion يتجمّد لمدة دقيقة مع كل ضغطة مفتاح. هذا يُغلق #66994. #66995 (Alexey Milovidov).
- getauxval: تجنّب حدوث تعطّل عند إعادة التنفيذ تحت sanitizer بسبب الارتفاع الكبير في إنتروبيا ASLR في نوى Linux الأحدث. #67081 (Raúl Marín).
- جرى استخراج بعض أجزاء شيفرة client إلى ملف واحد، وتطبيق أعلى مستوى ممكن من التحسين عليها حتى في إصدارات debug builds. هذا يُغلق: #65745. #67215 (Nikita Mikhaylov).
إصلاحات الأخطاء
- ينطبق فقط على نوع البيانات التجريبي Variant. إصلاح تعطل مع النوع Variant + AggregateFunction. #67122 (Kruglov Pavel).
- إصلاح تعطل في DistributedAsyncInsert عندما يكون الاتصال فارغًا. #67219 (Pablo Marcos).
- إصلاح تعطل
uniqوuniqThetaمع وسيطةtuple(). يغلق #67303. #67306 (flynn). - إصلاح #66026. تجنّب اجتياز وسيطات table function غير المحلولة في
ReplaceTableNodeToDummyVisitor. #67522 (Dmitry Novik). - إصلاح احتمال حدوث تجاوز سعة المكدس في الدالة
JSONMergePatch. أُعيدت تسمية هذه الدالة منjsonMergePatchإلىJSONMergePatchلأن الاسم السابق كان غير صحيح. ولا يزال الاسم السابق محفوظًا للتوافق. كما تم تحسين تشخيص الأخطاء في الدالة. يغلق هذا #67304. #67756 (Alexey Milovidov). - إصلاح إلغاء مرجعية مؤشر NULL، الناتج عن استعلام مُعدّ خصيصًا، والذي كان يتسبب في تعطل الخادم عبر hopEnd وhopStart وtumbleEnd وtumbleStart. #68098 (Salvatore Mesoraca).
- إصلاح
Not-ready Setفي بعض جداول النظام عند التصفية باستخدام الاستعلامات الفرعية. #66018 (Michael Kolupaev). - إصلاح قراءة الأعمدة الفرعية بعد استعلام
ALTER ADD COLUMN. #66243 (Anton Popov). - إصلاح القيم المنطقية الحرفية في الاستعلام المُرسل إلى قاعدة بيانات خارجية (لمحركات مثل
PostgreSQL). #66282 (vdimir). - إصلاح تنسيق استعلام يحتوي على تعبير JOIN ON باسم مستعار، فمثلًا يجب تنسيق
... JOIN t2 ON (x = y) AS e ORDER BY xعلى النحو... JOIN t2 ON ((x = y) AS e) ORDER BY x. #66312 (vdimir). - إصلاح cluster() للسرّ بين الخوادم (مع الحفاظ على المستخدم الأولي كما كان سابقًا). #66364 (Azat Khuzhin).
- إصلاح خطأ محتمل وقت التشغيل أثناء تحويل حقل Array يحتوي على nulls إلى Array(Variant). #66727 (Kruglov Pavel).
- إصلاح حالة توقف متبادل عرضية في Context::getDDLWorker. #66843 (Alexander Gololobov).
- إصلاح إنشاء جدول KeeperMap بعد عملية drop غير مكتملة. #66865 (Antonio Andelic).
- إصلاح خطأ part تالفة أثناء الاستعادة إلى disk من نوع
s3_plain_rewritable. #66881 (Vitaly Baranov). - في حالات نادرة، كان بإمكان ClickHouse اعتبار parts تالفة بسبب بعض projections غير المتوقعة على disk. وقد تم إصلاح ذلك الآن. #66898 (alesapin).
- إصلاح اكتشاف التنسيق غير الصالح في استدلال المخطط، والذي قد يؤدي إلى الخطأ المنطقي: التنسيق Format لا يدعم استدلال المخطط. #66899 (Kruglov Pavel).
- إصلاح احتمال حدوث حالة توقف تام عند إلغاء الاستعلام مع النسخ المتماثلة المتوازية. #66905 (Nikita Taranov).
- منع create as select حتى عند تعيين database_replicated_allow_heavy_create. كان هذا محظورًا دائمًا في 23.12، وسُمِح به بالخطأ تحت هذا الإعداد في 24.7 غير المُصدَر. #66980 (vdimir).
- قد تؤدي القراءة من
numbersبالخطأ إلى طرح استثناء عند تعيين الحدmax_rows_to_read. يُغلق هذا #66992. #66996 (Alexey Milovidov). - إضافة تحويل نوع مناسب إلى دوال النوافذ lagInFrame و leadInFrame — ما يُصلح اختبار msan. #67091 (Yakov Olkhovskiy).
- كان TRUNCATE DATABASE يوقف replication كما لو كان استعلام DROP DATABASE، وقد أُصلح ذلك. #67129 (Alexander Tokmakov).
- استخدام Context عميل منفصل في
clickhouse-local. #67133 (Vitaly Baranov). - إصلاح الخطأ
Cannot convert column because it is non constant in source stream but must be constant in result.في استعلام يقرأ من جدولMergeفوق جدولDistriburtedمع shard واحد. #67146 (Nikolai Kochetov). - تصحيح سلوك
ORDER BY allعند تعطيلenable_order_by_allومع النسخ المتماثلة المتوازية (بما في ذلك distributed queries). #67153 (Igor Nikonov). - إصلاح الاستخدام غير الصحيح لـ input_format_max_bytes_to_read_for_schema_inference في schema cache. #67157 (Kruglov Pavel).
- إصلاح تسرّب الذاكرة في count distinct عند طرح استثناء أثناء GROUP BY على مفتاح Nullable واحد. #67171 (Jet He).
- إصلاح خطأ في التحسين يحوّل OUTER JOIN إلى INNER JOIN. يُغلق هذا #67156. ويُغلق أيضًا #66447. أُدخل هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/62907. #67178 (Maksim Kita).
- إصلاح الخطأ
Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported. كان الخلل ناتجًا عن التحسينoptimize_rewrite_aggregate_function_with_if. يُصلح هذا #67112. #67229 (Nikolai Kochetov). - إصلاح تعليق الاستعلام عند استخدام tuple فارغ كطرف أيسر للدالة IN. #67295 (Duc Canh Le).
- كان من الممكن إنشاء بيانات JSON متداخلة بعمق كبير على نحو يؤدي إلى تجاوز سعة المكدس أثناء تخطي الحقول غير المعروفة. يُغلق هذا #67292. #67324 (Alexey Milovidov).
- إصلاح إرفاق جدول ReplicatedMergeTree بعد حدوث استثناء أثناء بدء التشغيل. #67360 (Antonio Andelic).
- إصلاح
segfaultناتج عن فصل غير صحيح عن مجموعة الخيوط فيAggregator. #67385 (Antonio Andelic). - إصلاح حالة إضافية يجري فيها تحديد دالة غير حتمية في PK. #67395 (Nikolai Kochetov).
- إصلاح مشكلة في فهرس
bloom_filterكانت تتسبب في تعطيل الاستعلامات ذات الشروط الغريبة قليلًا، مثل(k=2)=(k=2)أوhas([1,2,3], k). #67423 (Michael Kolupaev). - تحليل اسم الملف/URI الذي يحتوي على
::بصورة صحيحة إذا لم يكن أرشيفًا. #67433 (Antonio Andelic). - إصلاح انتظار المهام في ~WriteBufferFromS3 في حال أُلغي WriteBuffer. #67459 (Kseniia Sumarokova).
- حماية أدلة الأجزاء المؤقتة من الإزالة أثناء RESTORE. #67491 (Vitaly Baranov).
- إصلاح تنفيذ دوال التقييم المختصر المتداخلة. #67520 (Kruglov Pavel).
- إصلاح
Logical error: Expected the argument №N of type T to have X rows, but it has 0. كان يمكن أن يحدث هذا الخطأ في query بعيدة تتضمن تعبيرًا ثابتًا فيGROUP BY(مع المحلّل الجديد). #67536 (Nikolai Kochetov). - إصلاح
joinعلى Tuple تحتوي على NULLs: كانت بعض الاستعلامات، مع المحلّل الجديد ووجودNULLداخل الـ Tuple في قسمJOIN ON، تُرجع نتائج غير صحيحة. #67538 (vdimir). - إصلاح إعادة الجدولة غير الضرورية لـ FileCache::freeSpaceRatioKeepingThreadFunc() في حالة امتلاء cache غير قابلة للإخلاء. #67540 (Kseniia Sumarokova).
- إصلاح الإدراج في المحركات الشبيهة بالتدفق (Kafka و RabbitMQ و NATS) عبر واجهة HTTP. #67554 (János Benjamin Antal).
- إصلاح الدالة
toStartOfWeekالتي كانت تُرجع نتيجة غير صحيحة مع قيمةDateTime64صغيرة. #67558 (Yarik Briukhovetskyi). - إصلاح إنشاء عرض باستخدام CTE تعاودي. #67587 (Yakov Olkhovskiy).
- إصلاح
Logical error: 'file_offset_of_buffer_end <= read_until_position'في filesystem cache. يُغلق هذا #57508. #67623 (Kseniia Sumarokova). - يُصلح #62282. أُزيل استدعاء
convertFieldToString()، وأُضيفت شيفرة serialization خاصة بكل datatype. كان substitution في parameterized view معطّلًا لعدة datatypes عندما تكون قيمة parameter دالة أو expression تُرجع instance من datatype. #67654 (Shankar). - إصلاح crash في
percent_rank. تم تغيير نوع frame الافتراضي لـpercent_rankإلىrange unbounded preceding and unbounded following. كما أصبح window frame الافتراضي لـIWindowFunctionيؤخذ في الاعتبار، وباتت window functions التي لا تتضمن تعريف window frame في sql تُوضَع بشكل صحيح ضمنWindowTransfomers مختلفة. #67661 (lgbo). - إصلاح إعادة تحميل SQL UDFs مع UNION. سابقًا، كان من الممكن أن تؤدي إعادة تشغيل server إلى جعل UDF غير صالح. #67665 (Antonio Andelic).
- إصلاح logical error محتمل بالنص “Unexpected return type from if” مع Variant type التجريبي، ومع الإعداد المفعّل
use_variant_as_common_typeفي الدالة if عند استخدام Tuples وMaps. #67687 (Kruglov Pavel). - بسبب خلل في Linux Kernel، قد يتعطل query في
TimerDescriptor::drain. يُغلق هذا #37686. #67702 (Alexey Milovidov). - إصلاح اكتمال الأمر
RESTORE ON CLUSTER. #67720 (Vitaly Baranov). - إصلاح تعليق Dictionary في حالة CANNOT_SCHEDULE_TASK أثناء loading. #67751 (Azat Khuzhin).
- تعمل الآن queries مثل
SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1بشكل صحيح مع Bloom filter indexes علىc. #67781 (jsc0218). - إصلاح نتائج aggregation غير صحيحة في بعض queries التي تتضمن aggregation بدون keys وfilter، وإغلاق #67419. #67804 (vdimir).
- التحقق من data types التجريبية/المريبة في ALTER ADD/MODIFY COLUMN. #67911 (Kruglov Pavel).
- إصلاح parsing لـ DateTime64 بعد constant folding في distributed queries، وإغلاق #66773. #67920 (vdimir).
- إصلاح نتيجة
count()غير صحيحة عند وجود دالة غير deterministic في predicate. #67922 (János Benjamin Antal). - تم إصلاح حساب الحد الأقصى للـ soft limit الخاص بـ thread في البيئات المعتمدة على containers حيث يكون عدد وحدات CPU المتاحة للاستخدام محدودًا. #67963 (Robert Schulze).
- لم يعد ClickHouse يعتبر part تالفًا إذا لم يكن projection موجودًا على disk لكنه موجود في
checksums.txt. #68003 (alesapin). - تم إصلاح تخطّي الأجزاء غير المتأثرة في عمليات mutation مع المحلّل الجديد. في السابق، عند تمكين المحلّل، كان يمكن أن تُعاد كتابة البيانات في الجزء بواسطة عملية mutation حتى إذا لم تكن هذه العملية تؤثر في هذا الجزء وفقًا لشرط التصفية. #68052 (Anton Popov).
- أُزيل تحسين غير صحيح كان يحذف الفرز في الاستعلامات الفرعية التي تستخدم
OFFSET. يُصلح #67906. #68099 (Graham Campbell). - محاولة إصلاح الخطأ
Block structure mismatch in AggregatingStep stream: different typesفي تحسين الإسقاط التجميعي. #68107 (Nikolai Kochetov). - محاولة إصلاح تعطّل Postgres عند إلغاء query. #68288 (Kseniia Sumarokova).
- إصلاح غياب وضع مزامنة replica في الاستعلام
SYSTEM SYNC REPLICA. #68326 (Duc Canh Le).
إصدار ClickHouse 24.7، 2024-07-30. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- حظر
CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...مع قواعد بيانات Replicated. #63963 (vdimir). - لن يقبل
clickhouse-keeper-clientإلا المسارات داخل سلاسل نصية حرفية، مثلls '/hello/world'، وليس السلاسل المجردة مثلls /hello/world. #65494 (Alexey Milovidov). - أُعيدت تسمية المقياس
KeeperOutstandingRequetsإلىKeeperOutstandingRequests. #66206 (Robert Schulze). - أُزيل الحقل
is_deterministicمن جدولsystem.functions. #66630 (Alexey Milovidov). - ستحاول الدالة
tupleالآن إنشاء named tuples في الاستعلام (ويتحكم في ذلكenable_named_columns_in_function_tuple). وقد أُضيفت الدالةtupleNamesلاستخراج الأسماء من tuples. #54881 (Amos Bird). - تغيير آلية عمل إزالة التكرار في Materialized Views. وقد أُصلحت حالات كثيرة مثل: - في destination table: تُقسَّم البيانات إلى كتلتين أو أكثر، وتُعدّ هذه الكتل مكررة عند insert تلك الكتلة in parallel. - في MV destination table: تُزال الكتل المتطابقة باعتبارها مكررة، ويحدث ذلك عندما تنتج MV كثيرًا بيانات متطابقة نتيجةً لبيانات إدخال مختلفة بسبب إجراء aggregation. - في MV destination table: تُزال الكتل المتطابقة القادمة من MV مختلفة باعتبارها مكررة. #61601 (Sema Checherinda).
- تُرجع الدالتان
bitShiftLeftوbitShitfRightخطأً عند مواضع shift الخارجة عن النطاق. #65838 (Pablo Marcos).
ميزة جديدة
- إضافة دعم
ASOF JOINلخوارزميةfull_sorting_join. #55051 (vdimir). - دعم مصادقة JWT في
clickhouse-client(ستكون متاحة فقط في ClickHouse Cloud). #62829 (Konstantin Bogdanov). - إضافة دوال SQL
changeYearوchangeMonthوchangeDayوchangeHourوchangeMinuteوchangeSecond. على سبيل المثال، يُرجعSELECT changeMonth(toDate('2024-06-14'), 7)التاريخ2024-07-14. #63186 (cucumber95). - تقديم نصوص بدء تشغيل تتيح تنفيذ الاستعلامات المعدّة مسبقًا في مرحلة بدء التشغيل. #64889 (pufit).
- دعم
accept_invalid_certificateفي إعدادات العميل للسماح له بالاتصال عبر TCP آمن بخادم يعمل بشهادة موقعة ذاتيًا، ويمكن استخدامه كصيغة مختصرة لإعدادات عميلopenSSLالمناظرةverificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandler. #65238 (peacewalker122). - إضافة
system.error_logالذي يحتوي على سجل تاريخي لقيم الأخطاء من الجدولsystem.errors، ويُفرَّغ دوريًا إلى القرص. #65381 (Pablo Marcos). - إضافة دالة التجميع
groupConcat. وهي مماثلة تقريبًا لـarrayStringConcat( groupArray(column), ',')، ويمكنها استقبال معاملين: محدِّد نصي وعدد العناصر المطلوب معالجتها. #65451 (Yarik Briukhovetskyi). - إضافة تخزين AzureQueue. #65458 (Kseniia Sumarokova).
- إضافة إعداد جديد لتعطيل/تمكين كتابة فهرس الصفحات في ملفات Parquet. #65475 (lgbo).
- تقديم إعداد الخادم
logger.console_log_levelللتحكم في مستوى السجل المرسل إلى وحدة التحكم (إذا كان مفعّلًا). #65559 (Azat Khuzhin). - إلحاق حرف البدل
*تلقائيًا بنهاية مسار الدليل في دالة الجدول file. #66019 (Zhidong (David) Guo). - إضافة الخيار
--memory-usageإلى العميل في الوضع غير التفاعلي. #66393 (vdimir). - إنشاء عميل تفاعلي لـ
clickhouse-disks، وإضافة قرص محلي من دليل محلي. #64446 (Daniil Ivanik). - عند حدوث حذف خفيف على جدول يحتوي على projection واحدة أو أكثر، يكون لدى المستخدمين خياران: إما طرح استثناء (افتراضيًا) أو حذف الـ projection. #65594 (jsc0218).
- إضافة جداول نظام تتضمن المعلومات الأساسية عن جميع الجداول المفصولة. #65400 (Konstantin Morozov).
ميزة تجريبية
- تغيير التسلسل الثنائي لنوع البيانات
Variant: إضافة وضعcompactلتجنّب كتابة discriminator نفسه عدة مرات في granules التي تحتوي على variant واحد أو على قيم NULL فقط. وإضافة إعداد MergeTree use_compact_variant_discriminators_serializationالمُمكَّن افتراضيًا. لاحظ أن نوع Variant لا يزال تجريبيًا، لذا فإن هذا التغيير غير المتوافق مع الإصدارات السابقة في التسلسل مقبول. #62774 (Kruglov Pavel). - دعم التخزين الخلفي على disk لـ clickhouse-keeper. #56626 (Han Fei).
- إعادة هيكلة دوال JSONExtract، مع دعم المزيد من الأنواع، بما في ذلك النوع التجريبي Dynamic. #66046 (Kruglov Pavel).
- دعم null map subcolumn لكلٍّ من الأعمدة الفرعية
VariantوDynamic. #66178 (Kruglov Pavel). - إصلاح قراءة الأعمدة الفرعية
Dynamicمن جدولMemoryبعد تعديله. سابقًا، إذا جرى تغيير parameter max_typesلنوع Dynamic في جدول Memory عبر alter، فقد تُرجع قراءات الأعمدة الفرعية اللاحقة نتيجة غير صحيحة. #66066 (Kruglov Pavel). - إضافة دعم
cluster_for_parallel_replicasعند استخدام النسخ المتماثلة المتوازية ذات custom key. يتيح ذلك استخدام النسخ المتماثلة المتوازية ذات custom key مع جداول MergeTree. #65453 (Antonio Andelic).
تحسين الأداء
- استُبدلت خوارزمية التحويل من int إلى string بأخرى أسرع (من amdn/itoa معدّلة إلى jeaiii/itoa معدّلة). #61661 (Raúl Marín).
- تُجمَع الآن أحجام hash tables التي ينشئها join (خوارزمية
parallel_hash) وتُخزَّن مؤقتًا. وستُستخدم هذه المعلومات لتخصيص مساحة مسبقًا في hash tables عند تنفيذ query لاحقًا، مما يوفّر الوقت اللازم لإعادة تحجيم hash tables. #64553 (Nikita Taranov). - جرى تحسين queries التي تستخدم
ORDER BYمع المفتاح الأساسي وWHEREوتتضمن condition عالية الانتقائية، وذلك باستخدام buffering. ويتحكم في ذلك الإعدادread_in_order_use_buffering(مفعّل افتراضيًا)، وقد يزيد من استخدام الذاكرة في query. #64607 (Anton Popov). - تحسين أداء loading لبيانات
plain_rewritableالوصفية. #65634 (Alexey Milovidov). - سيستخدم إرفاق الجداول على disks للقراءة فقط موارد أقل عبر عدم تحميل الأجزاء القديمة. #65635 (Alexey Milovidov).
- دعم minmax hyperrectangle لفهارس Set. #65676 (AntiTopQuark).
- إلغاء تحميل الفهرس الأساسي للأجزاء القديمة لتقليل إجمالي استخدام الذاكرة. #65852 (Anton Popov).
- أصبحت الدالتان
replaceRegexpAllوreplaceRegexpOneالآن أسرع بكثير إذا كان pattern بسيطًا، أي لا يحتوي على metacharacters أو pattern classes أو flags أو أحرف grouping وما إلى ذلك. (شكرًا لـ Taiyang Li). #66185 (Robert Schulze). - طلبات s3: تقليل زمن retry لـ queries، وزيادة عدد retries للنسخ الاحتياطية. 8.5 دقائق و100 محاولة retry لـ queries، و1.2 ساعة و1000 retry لاستعادة النسخ الاحتياطية. #65232 (Sema Checherinda).
- دعم تحسين LIMIT في query plan. ودعم LIMIT pushdown لتخزين PostgreSQL وtable function. #65454 (Maksim Kita).
- تحسين load balancing في ZooKeeper. لا تنتهي session الحالية حتى تصبح العقد المثلى متاحة، رغم
fallback_session_lifetime. وأُضيف أيضًا دعم للموازنة المراعية لمناطق التوفّر (AZ). #65570 (Alexander Tokmakov). - يحذف DatabaseCatalog الجداول بسرعة أكبر باستخدام ما يصل إلى database_catalog_drop_table_concurrency من threads. #66065 (Sema Checherinda).
تحسين
- تحسّنت موازنة التحميل في ZooKeeper. لم تعد الجلسة الحالية تنتهي إلى أن تصبح العُقد المثلى متاحة، رغم
fallback_session_lifetime. وأُضيف أيضًا دعم للموازنة المراعية لمناطق التوفّر (AZ). #65570 (Alexander Tokmakov). - أصبح الإعداد
optimize_trivial_insert_selectمعطّلًا افتراضيًا. وفي معظم الحالات، يُفترض أن يكون ذلك مفيدًا. ومع ذلك، إذا لاحظت بطئًا فيINSERT SELECTأو زيادة في استخدام الذاكرة، فيمكنك إعادة تفعيله أو تنفيذSET compatibility = '24.6'. #58970 (Alexey Milovidov). - طباعة stacktrace ومعلومات تشخيصية إذا تعطّل
clickhouse-clientأوclickhouse-local. #61109 (Alexander Tokmakov). - كانت نتيجة
SHOW INDEX | INDEXES | INDICES | KEYSتُرتَّب سابقًا بحسب أسماء أعمدة المفتاح الأساسي. ونظرًا لأن ذلك لم يكن بديهيًا، أصبحت النتيجة الآن تُرتَّب بحسب مواضع أعمدة المفتاح الأساسي داخله. #61131 (Robert Schulze). - تغيير آلية إزالة التكرار في Materialized Views. وقد أُصلح عدد كبير من الحالات، مثل: - في جدول الوجهة: تُقسَّم البيانات إلى كتلتين أو أكثر، ثم تُعتبَر هذه الكتل مكررة عند إدراجها بالتوازي. - في جدول وجهة MV: تُزال الكتل المتطابقة على أنها مكررة، ويحدث ذلك عندما يُنتج MV كثيرًا بيانات متطابقة كنتيجة لبيانات إدخال مختلفة بسبب تنفيذ aggregation. - في جدول وجهة MV: تُزال الكتل المتطابقة القادمة من MV مختلفة على أنها مكررة. #61601 (Sema Checherinda).
- دعم قراءة بيانات DeltaLake المُقسَّمة إلى partition. واستنتاج مخطط DeltaLake من خلال قراءة metadata بدلًا من البيانات. #63201 (Kseniia Sumarokova).
- في composable protocols، كانت طبقة TLS تقبل فقط المعاملين
certificateFileوprivateKeyFile. https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin). - أُضيف حدث profile event باسم
SelectQueriesWithPrimaryKeyUsage، ويشير إلى عدد استعلامات SELECT التي تستخدم المفتاح الأساسي لتقييم عبارة WHERE. #64492 (0x01f). - إصلاحات وتحسينات متعلقة بـ
StorageS3Queue. استنتاج قيمة افتراضية لـs3queue_processing_threads_numوفقًا لعدد أنوية CPU الفعلية على الخادم (بدلًا من القيمة الافتراضية السابقة البالغة 1). وتعيين القيمة الافتراضية لـs3queue_loading_retriesإلى 10. وإصلاح احتمال ظهور “Uncaught exception” مبهمة في عمود الاستثناء ضمنsystem.s3queue. وعدم زيادة عدد المحاولات عند حدوث الاستثناءMEMORY_LIMIT_EXCEEDED. ونقل commit للملفات إلى مرحلة تلي اكتمال الإدراج في الجدول بالكامل لتجنّب تنفيذ commit للملفات قبل إدراجها. وإضافة الإعداداتs3queue_max_processed_files_before_commitوs3queue_max_processed_rows_before_commitوs3queue_max_processed_bytes_before_commitوs3queue_max_processing_time_sec_before_commitللتحكم بشكل أفضل في توقيت commit وflush. #65046 (Kseniia Sumarokova). - دعم الأسماء المستعارة في دالة العرض المعلَّم بالمعلمات (في analyzer الجديد فقط). #65190 (Kseniia Sumarokova).
- تحديث لإخفاء مفتاح الحساب في السجلات ضمن azureBlobStorage. #65273 (SmitaRKulkarni).
- partition pruning لعبارات
INالشرطية عندما يكون filter expression جزءًا من تعبيرPARTITION BY. #65335 (Eduard Karacharov). - يمكن تطبيق
arrayMin/arrayMaxعلى جميع أنواع البيانات القابلة للمقارنة. #65455 (pn). - تحسين احتساب الذاكرة في cgroups v2 لاستبعاد الحجم الذي تشغله ذاكرة صفحة التخزين المؤقت. #65470 (Nikita Taranov).
- عدم إنشاء إعدادات التنسيق لكل صف عند تسلسل الأجزاء لإدراجها في جدول EmbeddedRocksDB. #65474 (Duc Canh Le).
- تقليص موجّه
clickhouse-localإلى:)فقط. إذ يستغرقgetFQDNOrHostName()وقتًا طويلًا جدًا على MacOS، ولا نريد أصلًا وجود اسم مضيف في موجّهclickhouse-local. #65510 (Konstantin Bogdanov). - تجنّب طباعة رسالة من jemalloc حول arenas لكل CPU على الأجهزة الافتراضية منخفضة الإمكانات. #65532 (Alexey Milovidov).
- تعطيل التنزيل الخلفي لذاكرة التخزين المؤقت لنظام الملفات افتراضيًا. سيُعاد تفعيله عندما نُصلح مشكلة احتمال ظهور “Memory limit exceeded”، لأن تحرير الذاكرة يتم خارج سياق الاستعلام (بينما يُخصَّص buffer داخل سياق الاستعلام) عند استخدام سلاسل التنزيل الخلفية. بالإضافة إلى ذلك، نحتاج إلى إضافة إعداد منفصل لتحديد الحد الأقصى لحجم التنزيل لعمّال الخلفية (وهو حاليًا مقيّد بواسطة max_file_segment_size، وقد يكون كبيرًا جدًا). #65534 (Kseniia Sumarokova).
- إضافة خيار جديد إلى config وهو
<config_reload_interval_ms>يتيح تحديد مدى تكرار إعادة تحميل clickhouse للإعدادات. #65545 (alesapin). - تنفيذ الترميز الثنائي لأنواع بيانات ClickHouse وإضافة مواصفاته إلى الوثائق. واستخدامه في التسلسل الثنائي لـ Dynamic، وإتاحة استخدامه في تنسيقي RowBinaryWithNamesAndTypes وNative ضمن الإعدادات. #65546 (Kruglov Pavel).
- أصبحت إعدادات الخادم
compiled_expression_cache_sizeوcompiled_expression_cache_elements_sizeتظهر الآن فيsystem.server_settings. #65584 (Robert Schulze). - إضافة دعم للتعرّف على المستخدم استنادًا إلى امتداد SubjectAltName في x509. #65626 (Anton Kozlov).
- سيلتزم
clickhouse-localبالقيمتينmax_server_memory_usageوmax_server_memory_usage_to_ram_ratioمن ملف الإعدادات. كما سيضبط الحد الأقصى لاستخدام الذاكرة على 90% من ذاكرة النظام افتراضيًا، كما يفعلclickhouse-server. #65697 (Alexey Milovidov). - إضافة برنامج نصي لنسخ ملفاتك احتياطيًا إلى ClickHouse. #65699 (Alexey Milovidov).
- أصبح مصدر PostgreSQL يدعم إلغاء الاستعلامات. #65722 (Maksim Kita).
- جعل
allow_experimental_analyzerخاضعًا لتحكم initiator في الاستعلامات الموزعة. وهذا يضمن التوافق والصحة أثناء العمليات في clusters ذات الإصدارات المختلطة. #65777 (Nikita Mikhaylov). - مراعاة حد CPU الخاص بـ cgroup في Keeper. #65819 (Antonio Andelic).
- السماح باستخدام الدالة
concatمع معاملات فارغة:) select concat();. #65887 (李扬). - السماح بالتحكم في المجموعات المسماة في
clickhouse-local. #65973 (Alexey Milovidov). - تحسين أحداث profile المرتبطة بـ Azure. #65999 (alesapin).
- دعم قراءة ملفات ORC وفق المنطقة الزمنية الخاصة بالكاتب. #66025 (kevinyhzou).
- إضافة إعدادات للتحكم في الاتصالات بـ PostgreSQL. يحدد الإعداد
postgresql_connection_attempt_timeoutالقيمة التي تُمرَّر إلى المعاملconnect_timeoutفي عنوان URL للاتصال. ويحدد الإعدادpostgresql_connection_pool_retriesعدد مرات إعادة المحاولة لإنشاء اتصال بنقطة نهاية PostgreSQL. #66232 (Dmitry Novik). - تقليل عدم دقة
input_wait_elapsed_us/elapsed_usفيsystem.processors_profile_log. #66239 (Azat Khuzhin). - تحسين ProfileEvents لذاكرة التخزين المؤقت لنظام الملفات. #66249 (zhukai).
- إضافة إعدادات لتجاهل العبارة
ON CLUSTERفي الاستعلامات الخاصة بإدارة المجموعات المسماة مع التخزين المُكرَّر. #66288 (MikhailBurdukov). - تتيح الدالة
generateSnowflakeIDالآن تحديد معرّف جهاز كمعامل لمنع التصادمات في المجموعات الكبيرة. #66374 (ZAWA_ll). - تعطيل التعليق باستخدام
Ctrl+Zفي الوضع التفاعلي. هذا فخ شائع وليس سلوكًا متوقعًا لدى معظم المستخدمين تقريبًا. أتخيل أن قلة قليلة فقط من المستخدمين المحترفين جدًا قد يقدّرون تعليق تطبيقات الطرفية في الخلفية، لكنني لا أعرف أحدًا منهم. #66511 (Alexey Milovidov). - إضافة خيار للتحقق من نوع المفتاح الأساسي في Dictionaries. من دون هذا الخيار، وفي التخطيطات البسيطة، سيُحوَّل أي نوع عمود ضمنيًا إلى UInt64. #66595 (MikhailBurdukov).
إصلاح خلل (سلوك خاطئ يلاحظه المستخدم في إصدار مستقر رسمي)
- التحقّق من التبعيات الدورية في استعلامات CREATE/REPLACE/RENAME/EXCHANGE، وإلقاء استثناء إذا وُجدت تبعية دورية. سابقًا، كان هذا النوع من التبعيات الدورية قد يؤدي إلى حالة توقف متبادل أثناء بدء تشغيل الخادم. كما أُصلحت بعض الأخطاء في إنشاء التبعيات. #65405 (Kruglov Pavel).
- إصلاح الأحجام غير المتوقعة لأعمدة
LowCardinalityفي استدعاءات الدوال. #65298 (Raúl Marín). - إصلاح تعطل في maxIntersections. #65689 (Raúl Marín).
- إصلاح إعادة ضبط البند
VALID UNTILفي تعريف المستخدم بعد إعادة التشغيل. #66409 (Nikolay Degterinsky). - إصلاح عمود الوقت المتبقي في
SHOW MERGES. #66735 (Alexey Milovidov). - كان من الممكن أن تظهر العبارة
Query was cancelledمرتين في clickhouse-client. تم إصلاح هذا السلوك. #66005 (Nikita Mikhaylov). - إصلاح تعطل أثناء استخدام
MaterializedMySQL(وهي ميزة تجريبية غير مدعومة) مع TABLE OVERRIDE الذي يربط حقلاً من نوع NULL في MySQL بحقل من نوع not NULL في ClickHouse. #54649 (Filipp Ozinov). - إصلاح خطأ منطقي عندما لا يقرأ تعبير
PREWHEREأي أعمدة، ولا يحتوي الجدول على adaptive index granularity (جدول قديم جدًا). #59173 (Alexander Gololobov). - إصلاح خطأ في المخزن المؤقت للإلغاء عند إلغاء query. #64478 (Sema Checherinda).
- إصلاح تعبئة أعمدة الأجزاء من metadata (عندما لا يكون columns.txt موجودًا). #64757 (Azat Khuzhin).
- إصلاح تعطل في
ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY. #64957 (pufit). - إصلاح تعطل عند تدمير AccessControl: إضافة إيقاف صريح. #64993 (Vitaly Baranov).
- إزالة الدالة الأحادية الحقن من وسيط دوال
uniq*بشكل تكراري. كان هذا يعمل بشكل صحيح سابقًا، لكنه تعطل في analyzer الجديد. #65140 (Duc Canh Le). - إصلاح اسم الإسقاط غير المتوقع في query مع CTE. #65267 (wudidapaopao).
- اشتراط امتياز
dictGetعند الوصول إلى القواميس عبر Direct Query أو محرك الجدولDictionary. #65359 (Joe Lynch). - إصلاح مصادقة S3 الخاصة بالمستخدم مع incremental backups. #65481 (Antonio Andelic).
- تعطيل تحسين
non-intersecting-partsللاستعلامات التي تحتوي علىFINALإذا كان تحسينread-in-orderمُمكّنًا. كان هذا قد يؤدي إلى نتيجة query غير صحيحة. وكحل بديل، عطّلdo_not_merge_across_partitions_select_finalوsplit_parts_ranges_into_intersecting_and_non_intersecting_finalقبل دمج هذا الإصلاح. #65505 (Nikolai Kochetov). - إصلاح الاستثناء
Index out of bound for blob metadataالذي كان يحدث إذا جرت تصفية جميع الملفات من دفعة القائمة. #65523 (Kseniia Sumarokova). - إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند دمج إزالة التكرار للإسقاط. #65573 (Yakov Olkhovskiy).
- إصلاح خلل في MergeJoin. إذ قد يُعامَل العمود في التسلسل sparse على أنه عمود من نوعه Nested رغم عدم تنفيذ التحويل المطلوب. #65632 (Nikita Taranov).
- إصلاح خلل تمثل في عدم تطبيق مستوى التوافق ‘23.4’ بشكل صحيح. #65737 (cw5121).
- إصلاح خلل في جدول odbc ذي الحقول Nullable. #65738 (Rodolphe Dugé de Bernonville).
- إصلاح خطأ data race في
TCPHandler، والذي كان يمكن أن يحدث عند وقوع خطأ جسيم. #65744 (Kseniia Sumarokova). - إصلاح الاستثناءات غير الصحيحة في الدالة
parseDateTimeمع العناصر النائبة%Fو%D. #65768 (Antonio Andelic). - بالنسبة إلى الاستعلامات التي تقرأ من
PostgreSQL، ألغِ استعلامPostgreSQLالداخلي إذا كان استعلام ClickHouse قد انتهى. وإلا، فلن يمكن إلغاء استعلامClickHouseحتى ينتهي استعلامPostgreSQLالداخلي. #65771 (Maksim Kita). - إصلاح خلل في منطق short circuit عند استخدام analyzer القديم و
dictGetOrDefault. #65802 (jsc0218). - إصلاح خلل كان يؤدي إلى أن تتسبب عمليات الكتابة باستخدام TTL في EmbeddedRocksDB في إتلاف ملفات SST. #65816 (Duc Canh Le).
- تُرجِع الدوال
bitTestوbitTestAllوbitTestAnyالآن خطأً إذا كان فهرس bit المحدد خارج النطاق. #65818 (Pablo Marcos). - أصبح الإعداد
join_any_take_last_rowمدعومًا في أي استعلام يستخدم hash join. #65820 (vdimir). - تحسين التعامل مع شروط join التي تتضمن تحققات
IS NULL(على سبيل المثال، يُعاد كتابةON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )إلىON a <=> b)؛ مع إصلاح التحسين غير الصحيح عند وجود شروط أخرى غيرIS NULL. #65835 (vdimir). - إصلاح الزيادة المستمرة في memory usage في S3Queue. #65839 (Kseniia Sumarokova).
- إصلاح التعامل مع حالات التعادل في
arrayAUCبما يطابق sklearn. #65840 (gabrielmcg44). - إصلاح مشكلات محتملة في اتصالات TLS الخاصة ببروتوكول MySQL server. #65917 (Azat Khuzhin).
- إصلاح المشكلات المحتملة في اتصالات TLS الخاصة ببروتوكول عميل MySQL. #65938 (Azat Khuzhin).
- إصلاح التعامل مع
SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITEعند ضبط المهلة على صفر. #65941 (Azat Khuzhin). - إضافة الإعدادات المفقودة
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuplesإلى ذاكرة التخزين المؤقت لاستنتاج المخطط، لأنها قد تغيّر المخطط الناتج. يمنع ذلك الحصول على نتائج غير صحيحة لاستنتاج المخطط عند تغيير هذه الإعدادات. #65980 (Kruglov Pavel). - يشير العمود _size في محرك S3 ودالة الجدول S3 إلى حجم ملف داخل الأرشيف، وليس إلى حجم الأرشيف نفسه. #65993 (Daniil Ivanik).
- إصلاح تحليل الأعمدة الفرعية الديناميكية في analyzer، مع تجنّب قراءة العمود بالكامل عند قراءة عمود فرعي ديناميكي. #66004 (Kruglov Pavel).
- إصلاح دمج config لـ from_env مع تجاوزات replace. #66034 (Azat Khuzhin).
- إصلاح احتمال حدوث تعليق في
GRPCServerأثناء الإيقاف. #66061 (Vitaly Baranov). - إصلاح عدة حالات في الدالة
hasمع الوسيطاتLowCardinalityغير الثابتة. #66088 (Anton Popov). - إصلاح
groupArrayIntersect. إذ كان يتصرف بشكل غير صحيح في الدالةmerge(). كما أُصلح السلوك فيdeserialise()للبيانات الرقمية والبيانات العامة. #66103 (Yarik Briukhovetskyi). - إصلاح خلل تجاوز سعة المخزن المؤقت في تنفيذ
unbin/unhex. #66106 (Nikita Taranov). - تعطيل تحسين
merge-filtersالذي أُدخل في #64760. فقد يتسبب في حدوث استثناء إذا دمج التحسين تعبيري تصفية من دون تطبيق التقييم المختصر. #66126 (Nikolai Kochetov). - إصلاح المشكلة التي كان فيها الخادم يفشل في تحليل ملفات Avro ذات المصفوفات المرمّزة بحجم block سالب، وهو ما أصبح مسموحًا به الآن وفقًا لمواصفة Avro. #66130 (Serge Klochkov).
- إصلاح خلل في عميل ZooKeeper: إذ كان يمكن أن تعلق الجلسة في حالة غير قابلة للاستخدام بعد تلقي خطأ عتادي من ZooKeeper. على سبيل المثال، قد يحدث هذا بسبب “soft memory limit” في ClickHouse Keeper. #66140 (Alexander Tokmakov).
- إصلاح مشكلة في SumIfToCountIfVisitor مع الأعداد الصحيحة الموقّعة. #66146 (Raúl Marín).
- إصلاح حالة نادرة تتضمن بيانات مفقودة في نتيجة الاستعلام الموزّع. #66174 (vdimir).
- إصلاح ترتيب تحليل حقول البيانات الوصفية في StorageDeltaLake. #66211 (Kseniia Sumarokova).
- لا تُطلِق
TIMEOUT_EXCEEDEDفي وضعnone_only_activeالخاص بـdistributed_ddl_output_mode. #66218 (Alexander Tokmakov). - إصلاح التعامل مع الحدّ في
system.numbers_mtعندما يتعذر استخدام أي فهرس. #66231 (János Benjamin Antal). - إصلاح طريقة اكتشاف ClickHouse server للعدد الأقصى من CPU cores القابلة للاستخدام كما تحددها cgroups v2 إذا كان الخادم يعمل داخل حاوية مثل Docker. وبمزيد من التفصيل، غالبًا ما تشغّل الحاويات عملياتها ضمن cgroup الجذر ذي الاسم الفارغ. في هذه الحالة، كان ClickHouse يتجاهل حدود CPU التي تفرضها cgroups v2. #66237 (filimonov).
- إصلاح الخطأ
Not-ready setعند استخدام استعلام فرعي معINفي القيد. #66261 (Nikolai Kochetov). - إصلاح الإبلاغ عن الأخطاء أثناء النسخ إلى S3 أو AzureBlobStorage. #66295 (Vitaly Baranov).
- منع watchdog من الاحتفاظ بواصفات ملفات السجل غير المرتبطة (التي جرى تدويرها). #66334 (Aleksei Filatov).
- إصلاح الخلل الذي كان يتسبب في فقدان logicalexpressionoptimizerpass للنوع المنطقي للثابت. #66344 (pn).
- إصلاح الخطأ
Column identifier is already registeredمعgroup_by_use_nulls=trueوالمحلل الجديد. #66400 (Nikolai Kochetov). - إصلاح احتمال ظهور نتائج غير صحيحة في الاستعلامات التي تنفذ join وتطبق filter على table ذات external engine (مثل PostgreSQL)، بسبب filter pushdown مفرط. ومن الآن فصاعدًا، لن تُرسل الشروط من قسم
whereإلى database الخارجية في حالة استخدام outer join مع external table. #66402 (vdimir). - إضافة materialization المفقود للأعمدة في cross join. #66413 (lgbo).
- إصلاح الخطأ
Cannot find columnفي الاستعلامات التي تحتوي على expression ثابتة في مفتاحGROUP BYمع تفعيل المحلل الجديد. #66433 (Nikolai Kochetov). - تجنب حدوث logical error محتمل أثناء الاستيراد من تنسيق Npy في حال كان مستوى nesting للمصفوفة غير صالح، مع إصلاح اختبار الأنواع الأخرى من الأخطاء. #66461 (Yarik Briukhovetskyi).
- إصلاح النتيجة الخاطئة لـ
count()عندما توجد دالة غير deterministic في predicate. #66510 (Duc Canh Le). - تتبّع الذاكرة بشكل صحيح في
Allocator::realloc. #66548 (Antonio Andelic). - إصلاح قراءة ذاكرة غير مهيأة عند إجراء hashing لـ tuples الفارغة. #66562 (Alexey Milovidov).
- إصلاح نتيجة غير صحيحة للاستعلامات التي تحتوي على
WINDOW. وقد يحدث ذلك عندما تكون أعمدةPARTITIONذات serialization sparse وتُنفَّذ window functions بالتوازي. #66579 (Nikolai Kochetov). - إصلاح إزالة المجموعات المسماة من التخزين المحلي. #66599 (János Benjamin Antal).
- إصلاح عدم تحديث
column_lengthفيColumnTuple::insertManyFrom. #66626 (lgbo). - إصلاح الخطأين
Unknown identifierوColumn is not under aggregate functionفي الاستعلامات التي تحتوي على التعبير(column IS NULL).وقد تسبّب #65088 في هذا الخلل، وذلك فقط عند تعطيل analyzer. #66654 (Nikolai Kochetov). - إصلاح الخطأ
Method getResultType is not supported for QUERY query nodeعند استخدام استعلام فرعي scalar كوسيطة أولى لـ IN (مع analyzer الجديد). #66655 (Nikolai Kochetov). - إصلاح احتمال حدوث الخطأ PARAMETER_OUT_OF_BOUND أثناء قراءة subcolumn من النوع variant. #66659 (Kruglov Pavel).
- إصلاح حالة نادرة لتعطل merge بعد drop column. #66707 (Raúl Marín).
- إصلاح فشل التأكيد
isUniqTypesعند تنفيذ insert select من مصادر بعيدة. #66722 (Sema Checherinda). - إصلاح logical error في PrometheusRequestHandler. #66621 (Vitaly Baranov).
- إصلاح حالة في الدالة
indexHintاكتشفها fuzzer. #66286 (Anton Popov). - إصلاح تنسيق AST لعبارة ‘create table b empty as a’. #64951 (Michael Kolupaev).
إصدار ClickHouse 24.6، 2024-07-01. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- تفعيل التحميل غير المتزامن لقواعد البيانات والجداول افتراضيًا. راجع
async_load_databasesفي config.xml. رغم أن هذا التغيير متوافق بالكامل، فقد يؤدي إلى اختلاف في السلوك. عندما تكون قيمةasync_load_databasesهي false، كما في الإصدارات السابقة، لن يقبل الخادم الاتصالات حتى يكتمل تحميل جميع الجداول. وعندما تكون قيمةasync_load_databasesهي true، كما في الإصدار الجديد، يمكن للخادم قبول الاتصالات قبل اكتمال تحميل جميع الجداول. وإذا نُفِّذ استعلام على جدول لم يُحمَّل بعد، فسينتظر إلى أن يكتمل تحميل الجدول، وقد يستغرق ذلك وقتًا طويلًا. وقد يغيّر هذا سلوك الخادم إذا كان جزءًا من نظام موزع كبير خلف موازن تحميل. في الحالة الأولى، قد يتلقى موازن التحميل رفضًا للاتصال وينتقل سريعًا إلى خادم آخر عند الفشل. وفي الحالة الثانية، قد يتصل موازن التحميل بخادم لا يزال يحمّل الجداول، ما يؤدي إلى ارتفاع كمون الاستعلام. علاوة على ذلك، إذا تراكم عدد كبير من الاستعلامات في حالة انتظار، فقد يؤدي ذلك إلى مشكلة “thundering herd” عند بدء معالجتها كلها في الوقت نفسه. ولا يظهر هذا الاختلاف إلا في الأنظمة الخلفية الموزعة ذات الأحمال المرتفعة. يمكنك تعيين قيمةasync_load_databasesإلى false لتجنب هذه المشكلة. #57695 (Alexey Milovidov). - الإعداد
replace_long_file_name_to_hashمفعّل افتراضيًا لجداولMergeTree. #64457 (Anton Popov). هذا الإعداد متوافق بالكامل، ولا يلزم اتخاذ أي إجراء أثناء الترقية. تنسيق البيانات الجديد مدعوم في جميع الإصدارات بدءًا من 23.9. بعد تفعيل هذا الإعداد، لن يعود بإمكانك الرجوع إلى إصدار 23.8 أو أقدم. - ستفشل بعض الاستعلامات غير الصالحة في مرحلة أبكر أثناء التحليل. ملاحظة: تم تعطيل دعم تعبيرات KQL المضمنة (لغة Kusto التجريبية) عند وضعها داخل
kqltable function من دون قيمة نصية حرفية، مثلkql(garbage | trash)بدلًا منkql('garbage | trash')أوkql($$garbage | trash$$). أُضيفت هذه الميزة من غير قصد، ولا ينبغي أن تكون موجودة. #61500 (Alexey Milovidov). - أُعيدت صياغة المعالجة المتوازية في وضع
OrderedللتخزينS3Queue. هذا الطلب للسحب غير متوافق مع الإصدارات السابقة في وضع Ordered إذا كنت تستخدم الإعدادينs3queue_processing_threads_numأوs3queue_total_shards_num. تم حذف الإعدادs3queue_total_shards_num، وكان يُسمح سابقًا باستخدامه فقط معs3queue_allow_experimental_sharded_mode، وهو الآن مهمل. تمت إضافة إعداد جديد هوs3queue_buckets. #64349 (Kseniia Sumarokova). - أُضيفت الدوال الجديدة
snowflakeIDToDateTimeوsnowflakeIDToDateTime64وdateTimeToSnowflakeIDوdateTime64ToSnowflakeID. وعلى خلاف الدوال الحاليةsnowflakeToDateTimeوsnowflakeToDateTime64وdateTimeToSnowflakeوdateTime64ToSnowflake، فإن الدوال الجديدة متوافقة مع الدالةgenerateSnowflakeID، أي إنها تقبل Snowflake IDs التي تُنشئهاgenerateSnowflakeIDوتنتج Snowflake IDs من النوع نفسه الذي تنتجهgenerateSnowflakeID(أيUInt64). بالإضافة إلى ذلك، تستخدم الدوال الجديدة افتراضيًا UNIX epoch (المعروف أيضًا باسم 1970-01-01)، تمامًا مثلgenerateSnowflakeID. وإذا لزم الأمر، يمكن تمرير epoch مختلف، مثل epoch الخاصة بـ Twitter/X بتاريخ 2010-11-04، أي 1288834974657 مللي ثانية منذ UNIX epoch. دوال التحويل القديمة مهملة وستُزال بعد فترة انتقالية: ولمواصلة استخدامها رغم ذلك، فعّل الإعدادallow_deprecated_snowflake_conversion_functions. #64948 (Robert Schulze).
ميزة جديدة
- السماح بتخزين المجموعات المسماة في ClickHouse Keeper. #64574 (Kseniia Sumarokova).
- دعم Tuples الفارغة. #55061 (Amos Bird).
- إضافة دوال لترميز منحنى Hilbert وفك ترميزه. #60156 (Artem Mustafin).
- إضافة دعم لتحليل الفهارس على
hilbertEncode. #64662 (Artem Mustafin). - تمت إضافة دعم لقراءة هندسة
LINESTRINGبتنسيق WKT باستخدام الدالةreadWKTLineString. #62519 (Nikita Mikhaylov). - السماح بإرفاق الأجزاء من قرص آخر. #63087 (Unalian).
- تمت إضافة دوال SQL جديدة
generateSnowflakeIDلإنشاء معرّفات Snowflake على نمط Twitter. #63577 (Danila Puzov). - تمت إضافة الإعدادين
merge_workloadوmutation_workloadلتنظيم كيفية استخدام الموارد وتشاركها بين عمليات الدمج وعمليات mutation وأعباء العمل الأخرى. #64061 (Sergei Trifonov). - إضافة دعم لمقارنة النوعين
IPv4وIPv6باستخدام العامل=. #64292 (Francisco J. Jurado Moreno). - دعم الوسيطات من نوع Decimal في الدوال الرياضية الثنائية (pow, atan2, max2, min2, hypot). #64582 (Mikhail Gorshkov).
- تمت إضافة دوال SQL
parseReadableSize(إلى جانب الصيغتينOrNullوOrZero). #64742 (Francisco J. Jurado Moreno). - إضافة إعدادات الخادم
max_table_num_to_throwوmax_database_num_to_throwلتقييد عدد قواعد البيانات أو الجداول في استعلاماتCREATE. #64781 (Xu Jia). - إضافة العمود الافتراضي
_timeإلى وسائط التخزين الشبيهة بالملفات (s3/file/hdfs/url/azureBlobStorage). #64947 (Ilya Golshtein). - تم تقديم دوال جديدة
base64URLEncodeوbase64URLDecodeوtryBase64URLDecode. #64991 (Mikhail Gorshkov). - إضافة الدالة الجديدة
editDistanceUTF8، التي تحسب مسافة التحرير بين سلسلتين نصيتين بترميز UTF8. #65269 (LiuNeng). - إضافة الإعداد
http_response_headersلدعم ترويسات الاستجابة المخصصة في معالجات HTTP المخصصة. #63562 (Grigorii). - تمت إضافة دالة جدول جديدة باسم
loopلدعم إرجاع نتائج الاستعلام في حلقة لا نهائية. #63452 (Sariel). وهذا مفيد للاختبار. - أُضيف عمودان إضافيان إلى
system.query_log: used_privilegesوmissing_privileges. يُملأused_privilegesبامتيازات الوصول التي جرى التحقق منها أثناء تنفيذ الاستعلام، ويحتويmissing_privilegesعلى امتيازات الوصول المطلوبة غير المتوفرة. #64597 (Alexey Katsman). - أُضيف الإعداد
output_format_pretty_display_footer_column_namesالذي يعرض، عند تمكينه، أسماء الأعمدة في تذييل الجدول للجداول الطويلة (50 صفًا افتراضيًا)، بينما تتحكمoutput_format_pretty_display_footer_column_names_min_rowsفي قيمة عتبة الحد الأدنى لعدد الصفوف. #65144 (Shaun Struwig).
الميزة التجريبية
- إضافة إحصاءات من نوع “عدد القيم المميزة”. #59357 (Han Fei).
- دعم الإحصاءات مع ReplicatedMergeTree. #64934 (Han Fei).
- إذا جرى تكوين “مجموعة النسخ المتماثلة” لقاعدة بيانات
Replicated، فسيُنشأ تلقائيًا cluster يضم النسخ المتماثلة من جميع المجموعات. #64312 (Alexander Tokmakov). - إضافة الإعدادين
parallel_replicas_custom_key_range_lowerوparallel_replicas_custom_key_range_upperللتحكم في كيفية قيام parallel replicas ذات الشظايا الديناميكية بموازاة الاستعلامات عند استخدام range filter. #64604 (josh-hildred).
تحسين الأداء
- إضافة إمكانية إعادة ترتيب الصفوف أثناء
insertلتحسين الحجم من دون الإخلال بالترتيب الذي يحددهPRIMARY KEY. يتحكم في ذلك الإعدادoptimize_row_order(معطّل افتراضيًا). #63578 (Igor Markelov). - إضافة قارئ Parquet أصلي يمكنه قراءة البيانات الثنائية لـ Parquet مباشرةً إلى أعمدة ClickHouse. يتحكم في ذلك الإعداد
input_format_parquet_use_native_reader(معطّل افتراضيًا). #60361 (ZhiHong Zhang). - دعم تحسين العدّ البسيط الجزئي عندما يكون مرشح
queryقادرًا على تحديدrangesدقيقة من جداول MergeTree. #60463 (Amos Bird). - تقليل الحد الأقصى لاستهلاك الذاكرة في عمليات
INSERTمتعددة الخيوط عبر تجميع دفعات من عدة خيوط في محوّل واحد. #61047 (Yarik Briukhovetskyi). - تقليل استهلاك الذاكرة عند استخدام تخزين الكائنات في Azure عبر استخدام تخصيص ذاكرة ثابت، مع تجنّب تخصيص
bufferإضافي. #63160 (SmitaRKulkarni). - تقليل عدد استدعاءات الدوال الافتراضية في
ColumnNullable::size. #60556 (HappenLee). - تسريع
splitByRegexpعندما تكون وسيطةregular expressionحرفًا واحدًا. #62696 (Robert Schulze). - تسريع التجميع باستخدام مفاتيح 8-bit و16-bit عبر تتبّع الحدين الأدنى والأقصى للمفاتيح المستخدمة. يتيح ذلك تقليل عدد الخلايا التي يلزم التحقق منها. #62746 (Jiebin Sun).
- تحسين العامل IN عندما يكون الطرف الأيسر
LowCardinalityوالطرف الأيمن مجموعة من الثوابت. #64060 (Zhiguo Zhou). - استخدام تجمّع خيوط لتهيئة جداول التجزئة وتدميرها داخل
ConcurrentHashJoin. #64241 (Nikita Taranov). - تحسين عمليات الدمج العمودي في الجداول ذات الأعمدة المتناثرة. #64311 (Anton Popov).
- تفعيل الجلب المسبق للبيانات من
remote filesystemأثناء عمليات الدمج العمودي. يحسّن ذلك زمن الاستجابة لعمليات الدمج العمودي في الجداول التي تُخزَّن بياناتها علىremote filesystem. #64314 (Anton Popov). - تقليل الاستدعاءات المتكررة إلى
isDefaultفيColumnSparse::filterلتحسين الأداء. #64426 (Jiebin Sun). - تسريع أوامر keeper-client
find_super_nodesوfind_big_familyعبر تنفيذ عدة طلباتgetChildrenغير متزامنة. #64628 (Alexander Gololobov). - تحسين الدالة
least/greatestلوسائط الأنواع الرقمية Nullable. #64668 (KevinyhZou). - السماح بدمج خطوتَي تصفية متتاليتين في
query plan. يحسّن ذلك تحسينfilter-push-downإذا أمكن دفعfilter conditionإلى الأسفل من الخطوة الأصل. #64760 (Nikolai Kochetov). - إزالة تحسين غير مناسب في تنفيذ
vertical final، وإعادة تفعيل خوارزميةvertical finalافتراضيًا. #64783 (Duc Canh Le). - إزالة عُقد ALIAS من تعبير التصفية. يؤدي ذلك إلى تحسين طفيف في أداء الاستعلامات التي تستخدم
PREWHERE(مع analyzer الجديد). #64793 (Nikolai Kochetov). - إعادة تفعيل التخزين المؤقت للجلسات في OpenSSL. #65111 (Robert Schulze).
- إضافة إعدادات لتعطيل materialization لـ skip indexes والإحصاءات عند insert (
materialize_skip_indexes_on_insertوmaterialize_statistics_on_insert). #64391 (Anton Popov). - استخدام حجم الذاكرة المخصَّصة لحساب حجم row group وتقليل Peak memory لكاتب Parquet في الوضع single-threaded. #64424 (LiuNeng).
- تحسين مكرِّر column المتناثر لتقليل عدد استدعاءات
size. #64497 (Jiebin Sun). - تحديث condition لاستخدام النسخ من جانب الخادم للنسخ الاحتياطية إلى Azure blob storage. #64518 (SmitaRKulkarni).
- تحسين استخدام الذاكرة في عمليات vertical merge للجداول التي تحتوي على عدد كبير من skip indexes. #64580 (Anton Popov).
تحسين
- سيعرض
SHOW CREATE TABLEعند تنفيذه على جداول النظام الآن تعليقًا فريدًا ومفيدًا جدًا لكل جدول، يوضح سبب الحاجة إلى هذا الجدول. #63788 (Nikita Mikhaylov). - يمكن الآن أن تكون الوسيطة الثانية (scale) للدوال
round(),roundBankers(),floor(),ceil()وtrunc()غير ثابتة. #64798 (Mikhail Gorshkov). - إعادة التحميل الفوري لسياسة التخزين لجداول
Distributedعند إضافة قرص جديد. #58285 (Duc Canh Le). - تجنّب احتمال حدوث حالة توقف تام أثناء تحليل الفهرس في MergeTree عند جدولة الخيوط في خدمة مثقلة. #59427 (Sean Haynes).
- عدة إصلاحات طفيفة لحالات طرفية في دعم وكيل S3 & الأنفاق. #63427 (Arthur Passos).
- تحسين وضوح إعادة الإرسال في io_uring. أُعيدت تسمية حدث profile
IOUringSQEsResubmits->IOUringSQEsResubmitsAsyncمع إضافة حدث جديدIOUringSQEsResubmitsSync. #63699 (Tomer Shafir). - أُضيف إعداد جديد،
metadata_keep_free_space_bytes، للإبقاء على مساحة خالية على قرص تخزين البيانات الوصفية. #64128 (MikhailBurdukov). - إضافة مقاييس لتتبّع عدد الأدلة التي ينشئها ويزيلها تخزين البيانات الوصفية
plain_rewritable، وعدد الإدخالات في الخريطة الموجودة في الذاكرة من المحلي إلى البعيد. #64175 (Julia Kartseva). - أصبحت ذاكرة التخزين المؤقت للاستعلامات تعتبر الآن الاستعلامات المتطابقة ذات الإعدادات المختلفة استعلاماتٍ مختلفة. ويزيد هذا من المتانة في الحالات التي تؤثر فيها إعدادات مختلفة (مثل
limitأوadditional_table_filters) في نتيجة الاستعلام. #64205 (Robert Schulze). - دعم رمز الخطأ غير القياسي
QpsLimitExceededفي object storage بوصفه خطأً قابلاً لإعادة المحاولة. #64225 (Sema Checherinda). - منع تحويل جدول MergeTree إلى replicated إذا كان مسار ZooKeeper لهذا الجدول موجودًا بالفعل. #64244 (Kirill).
- أُضيف إعداد جديد
input_format_parquet_prefer_block_bytesللتحكم في متوسط عدد بايتات block الناتج، كما عُدّلت القيمة الافتراضية لـinput_format_parquet_max_block_sizeإلى 65409. #64427 (LiuNeng). - السماح بتجاوز الوكيل للمضيفين المحددين في متغير البيئة
no_proxyوفي إعدادات وكيل ClickHouse. #63314 (Arthur Passos). - تشغيل Keeper دائمًا بعدد كافٍ من الخيوط في مجمع الخيوط العام. #64444 (Duc Canh Le).
- لا تؤثر الإعدادات من config المستخدم في عمليات الدمج والتعديلات لـ
MergeTreeفوق object storage. #64456 (alesapin). - دعم رمز الخطأ غير القياسي
TotalQpsLimitExceededفي تخزين الكائنات باعتباره خطأً قابلاً لإعادة المحاولة. #64520 (Sema Checherinda). - تحديث لوحة المعلومات المتقدمة لكلٍّ من الإصدار مفتوح المصدر وClickHouse Cloud لتشمل مخططًا لـ ‘الحد الأقصى لاتصالات الشبكة المتزامنة’. #64610 (Thom O’Connor).
- تحسين تقرير التقدّم في
zeros_mtوgenerateRandom. #64804 (Raúl Marín). - إضافة مقياس غير متزامن
jemalloc.profile.activeلإظهار ما إذا كان أخذ العينات نشطًا حاليًا. وهذه آلية تفعيل إضافية إلى جانبprof.active؛ ويجب أن يكون كلاهما نشطًا لكي يأخذ خيط التنفيذ المستدعي عينات. #64842 (Unalian). - إزالة تعليم
allow_experimental_join_conditionعلى أنه مهم. وقد يكون هذا التعليم قد منع تنفيذ الاستعلامات الموزعة بنجاح في عنقود ذي إصدارات مختلطة. #65008 (Nikita Mikhaylov). - إضافة مقاييس غير متزامنة على الخادم باسم
DiskGetObjectThrottler*وDiskGetObjectThrottler*تعكس حد معدل الطلبات في الثانية المحدد عبر إعدادات القرصs3_max_get_rpsوs3_max_put_rps، وكذلك العدد المتاح حاليًا من الطلبات التي يمكن إرسالها دون بلوغ حد تقييد المعدل على القرص. وتُعرَّف هذه المقاييس لكل قرص لديه حد مُهيأ. #65050 (Sergei Trifonov). - تهيئة جامع التتبّع العام لـ
Poco::ThreadPool(مطلوب لـ Keeper وغيرها). #65239 (Kseniia Sumarokova). - إضافة تحقّق عند إنشاء مستخدم باستخدام
bcrypt_hash. #65242 (Raúl Marín). - إضافة أحداث profile لعدد الصفوف المقروءة أثناء/بعد
PREWHERE. #64198 (Nikita Taranov). - طباعة الاستعلام في
EXPLAIN PLANمع النسخ المتماثلة المتوازية. #64298 (vdimir). - إعادة تسمية
allow_deprecated_functionsإلىallow_deprecated_error_prone_window_functions. #64358 (Raúl Marín). - تطبيق الإعداد
max_read_buffer_sizeأيضًا على واصفات الملفات في دالة الجدولfile. #64532 (Azat Khuzhin). - تعطيل المعاملات لوحدات التخزين غير المدعومة حتى بالنسبة إلى العروض المادية. #64918 (alesapin).
- حظر العبارة
QUALIFYفي المحلّل القديم. كان المحلّل القديم يتجاهلQUALIFY، لذا كان من الممكن أن يؤدي ذلك إلى إزالة غير متوقعة للبيانات في mutations. #65356 (Dmitry Novik).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- تم إصلاح خلل في مكتبة Apache ORC: أُصلح حساب إحصاءات ORC عند الكتابة للأنواع غير الموقعة على جميع المنصات، ولنوع Int8 على ARM. #64563 (Michael Kolupaev).
- أُعيد السلوك السابق لكيفية عمل ClickHouse وتفسيره لـ Tuples في CSV format. ويؤدي هذا التغيير فعليًا إلى التراجع عن https://github.com/ClickHouse/ClickHouse/pull/60994، مع إتاحته فقط عبر بعض الإعدادات:
output_format_csv_serialize_tuple_into_separate_columns,input_format_csv_deserialize_separate_columns_into_tupleوinput_format_csv_try_infer_strings_from_quoted_tuples. #65170 (Nikita Mikhaylov). - إصلاح خطأ في الأذونات يتيح لمستخدم، في حالة معيّنة، تصعيد امتيازاته على قاعدة البيانات default دون المنح اللازمة. #64769 (pufit).
- إصلاح تعطل مرتبط بـ UniqInjectiveFunctionsEliminationPass و uniqCombined. #65188 (Raúl Marín).
- إصلاح خلل في ClickHouse Keeper يتسبب في عدم تطابق digest أثناء إغلاق الجلسة. #65198 (Aleksei Filatov).
- استخدام محاذاة الذاكرة الصحيحة لمُعدِّل Distinct. سابقًا، كان من الممكن أن يحدث تعطل بسبب تخصيص غير صالح للذاكرة عند استخدام هذا المُعدِّل. #65379 (Antonio Andelic).
- إصلاح تعطل مع
DISTINCTوwindow functions. #64767 (Igor Nikonov). - تم إصلاح مشكلة عدم عمل skip index من نوع ‘set’ مع IN و indexHint(). #62083 (Michael Kolupaev).
- دعم تنفيذ function أثناء إسناد قيمة parameterized view. #63502 (SmitaRKulkarni).
- تم إصلاح تتبع الذاكرة في Parquet. #63584 (Michael Kolupaev).
- تم إصلاح قراءة columns من النوع
Tuple(Map(LowCardinality(String), String), ...). #63956 (Anton Popov). - إصلاح خطأ
Cyclic aliasesللأسماء المستعارة الدورية من أنواع مختلفة (expression و function). #63993 (Nikolai Kochetov). - سيستخدم هذا الإصلاح Context مُعاد تعريفه بشكل صحيح مع المُعرِّف المناسب لكل view على حدة ضمن query pipeline. #64079 (pufit).
- إصلاح analyzer: تم إصلاح خطأ “Not found column” عند استخدام INTERPOLATE. #64096 (Yakov Olkhovskiy).
- إصلاح إنشاء النسخ الاحتياطية في S3 buckets باستخدام بيانات اعتماد تختلف عن بيانات اعتماد disk الذي يحتوي على الملف. #64153 (Antonio Andelic).
- أصبح query cache الآن يميّز بين استعلامين متطابقين إذا كانا موجَّهين إلى قاعدتي بيانات مختلفتين. وكان من الممكن استغلال السلوك السابق لتجاوز الامتيازات المفقودة اللازمة لقراءة البيانات من جدول. #64199 (Robert Schulze).
- إصلاح احتمال التوقف بسبب استثناء غير ملتقط في ~WriteBufferFromFileDescriptor داخل StatusFile. #64206 (Kruglov Pavel).
- إصلاح الخطأ
duplicate aliasفي الاستعلامات الموزعة التي تتضمنARRAY JOIN. #64226 (Nikolai Kochetov). - إصلاح accurateCast غير المتوقَّع من سلسلة نصية إلى عدد صحيح. #64255 (wudidapaopao).
- إصلاح تبسيط CNF في حال احتوت أي مجموعة OR على ذرات متنافية فيما بينها. #64256 (Eduard Karacharov).
- إصلاح التحقق من حجم شجرة الاستعلام. #64377 (Dmitry Novik).
- إصلاح الخطأ
Logical error: Bad castفي جدولBufferمعPREWHERE. #64388 (Nikolai Kochetov). - منع التسجيل التكراري في
blob_storage_logعندما يكون مخزنًا على تخزين الكائنات. #64393 (vdimir). - إصلاح استعلامات
CREATE TABLE ASللجداول التي تحتوي على تعبيرات افتراضية. #64455 (Anton Popov). - إصلاح سلوك
optimize_read_in_orderمع ORDER BY … NULLS FIRST / LAST في الجداول ذات المفاتيحNullable. #64483 (Eduard Karacharov). - إصلاح الخطأين
Expression nodes list expected 1 projection namesوUnknown expression or identifierفي الاستعلامات التي تحتوي على أسماء مستعارة لـGLOBAL IN.. #64517 (Nikolai Kochetov). - إصلاح الخطأ
Cannot find columnفي الاستعلامات الموزعة التي تحتوي على CTE ثابت في مفتاحGROUP BY. #64519 (Nikolai Kochetov). - إصلاح حلقة التعطل عند الاستعادة من نسخة احتياطية عندما تُمنع العملية بسبب إنشاء MV بمُعرِّف definer لم تتم استعادته بعد. #64595 (pufit).
- إصلاح ناتج الدالة
formatDateTimeInJodaSyntaxعندما يُنتج المُنسِّق عددًا فرديًا من الأحرف ويكون الحرف الأخير0. على سبيل المثال،SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')تُرجع الآن150بشكل صحيح بدلًا من15سابقًا. #64614 (LiuNeng). - عدم إعادة كتابة التجميع إذا كان المُركِّب
-Ifمستخدمًا بالفعل. #64638 (Dmitry Novik). - إصلاح استنتاج النوع للقيم
float(في حال كانbufferصغيرًا، مثل--max_read_buffer_size 1). #64641 (Azat Khuzhin). - إصلاح خلل كان قد يؤدي إلى عدم عمل TTLs مع التعبيرات. #64694 (alesapin).
- إصلاح إزالة تعبيري
WHEREوPREWHEREعندما تكون قيمتهماtrueدائمًا (في المُحلِّل الجديد). #64695 (Nikolai Kochetov). - تم إصلاح الاستبعاد المفرط للأجزاء بواسطة فهارس النص المعتمدة على الرموز (
ngrambf,full_text) عند التصفية حسب ناتجstartsWithوendsWithوmatchوmultiSearchAny. #64720 (Eduard Karacharov). - تم إصلاح السلوك غير الصحيح لهروب ANSI CSI في الدالة
UTF8::computeWidth. #64756 (Shaun Struwig). - تم إصلاح حالة إزالة غير صحيحة لـ
ORDER BY/LIMIT BYعبر الاستعلامات الفرعية. #64766 (Raúl Marín). - تم إصلاح عملية ربط غير متساوٍ (تجريبية) مع الاستعلامات الفرعية للمجموعات الموجودة ضمن شروط الربط المختلطة. #64775 (lgbo).
- تم إصلاح تعطل في ذاكرة تخزين مؤقت محلية فوق القرص
plain_rewritable. #64778 (Julia Kartseva). - إصلاح في Keeper: إرجاع القيمة الصحيحة لـ
zk_latest_snapshot_sizeفي الأمرmntr. #64784 (Antonio Andelic). - تم إصلاح الخطأ
Cannot find columnفي استعلام موزع معARRAY JOINعلى عمودNested. يصلح #64755. #64801 (Nikolai Kochetov). - تم إصلاح تسرّب للذاكرة في سياسة التخزين المؤقت slru. #64803 (Kseniia Sumarokova).
- تم إصلاح احتمال تتبع الذاكرة بشكل غير صحيح في عدة أنواع من الاستعلامات: الاستعلامات التي تقرأ أي بيانات من S3، والاستعلامات عبر بروتوكول HTTP، وasynchronous inserts. #64844 (Anton Popov).
- تم إصلاح الخطأ
Block structure mismatchفي الاستعلامات التي تقرأ باستخدامPREWHEREمن العرض المادي عندما يحتوي العرض المادي على أعمدة من أنواع تختلف عن جدول المصدر. يصلح #64611. #64855 (Nikolai Kochetov). - تم إصلاح تعطل نادر عندما يحتوي الجدول على TTL مع subquery + قاعدة بيانات replicated + parallel replicas + المحلّل. هذه الحالة نادرة جدًا فعلًا، لكن يُرجى عدم استخدام TTLs مع الاستعلامات الفرعية. #64858 (alesapin).
- تم إصلاح تكرار أحداث
Deleteفيblob_storage_logعند وجود دفعة حذف كبيرة. #64924 (vdimir). - تم إصلاح الخطأ
Session moved to another serverمن [Zoo]Keeper، والذي قد يحدث بعد بدء تشغيل الخادم عندما يحتوي ملف الإعدادات على تضمينات من [Zoo]Keeper. #64986 (Alexander Tokmakov). - تم إصلاح الاستعلام
ALTER MODIFY COMMENTالذي كان معطّلًا معVIEWات ذات معلمات في https://github.com/ClickHouse/ClickHouse/pull/54211. #65031 (Nikolay Degterinsky). - تم إصلاح
host_idفي DatabaseReplicated عندما تكون المعلمةcluster_secure_connectionمُمكّنة. سابقًا، لم تكن جميع الاتصالات داخل الـ cluster التي ينشئها DatabaseReplicated آمنة، حتى إذا كانت المعلمة مُمكّنة. #65054 (Nikolay Degterinsky). - إصلاح الخطأ
Not-ready Setبعد تحسينPREWHEREفي StorageMerge. #65057 (Nikolai Kochetov). - تجنّب الكتابة إلى المخزن المؤقت المُنهى في وحدات التخزين الشبيهة بـ File. #65063 (Kruglov Pavel).
- إصلاح احتمال أن تصبح مدة الاستعلام غير منتهية في حالة الأسماء المستعارة الدورية. يُصلح #64849. #65081 (Nikolai Kochetov).
- إصلاح الخطأ
Unknown expression identifierفي الاستعلامات البعيدة معINTERPOLATE (alias)(المحلل الجديد). يُصلح #64636. #65090 (Nikolai Kochetov). - إصلاح نقل العمليات الحسابية إلى خارج التجميع. في المحلل الجديد، كان هذا التحسين يُطبَّق مرة واحدة فقط. #65104 (Dmitry Novik).
- إصلاح إعادة كتابة اسم الدالة التجميعية في المحلل الجديد. #65110 (Dmitry Novik).
- الاستجابة برمز 5xx بدلًا من 200 OK عند حدوث مهلة استلام أثناء قراءة (أجزاء من) جسم الطلب من مقبس العميل. #65118 (Julian Maicher).
- إصلاح احتمال حدوث تعطل في الطلبات الاحتياطية. #65206 (Azat Khuzhin).
- إصلاح الخلل في التقييم المختصر لقاموسي Hashed و Hashed_Array، والذي قد يقرأ قيمة رقمية غير مهيأة، مما يؤدي إلى أخطاء متنوعة. #65256 (jsc0218).
- يضمن هذا التغيير أن يكون نوع الثابت (المعامل الثاني لعامل
IN) مرئيًا دائمًا أثناء عملية تحويل النوع لعاملIN. وإلا، فقد يؤدي فقدان معلومات النوع إلى فشل بعض التحويلات، مثل التحويل من DateTime إلى Date. هذا يُصلح (#64487). #65315 (pn).
تحسينات البناء/الاختبار/التحزيم
- إضافة دعم LLVM XRay. #64592 #64837 (Tomer Shafir).
- توحيد تنفيذات التخزين s3/hdfs/azure في فئة واحدة تعمل مع IObjectStorage. وينطبق الأمر نفسه على *Cluster وبحيرات البيانات ووحدات تخزين Queue. #59767 (Kseniia Sumarokova).
- إعادة هيكلة مكوّن كتابة جزء البيانات لإزالة التبعيات على MergeTreeData و DataPart. #63620 (Alexander Gololobov).
- إعادة هيكلة
KeyConditionوتحليل المفتاح لتحسينPartitionPrunerوتحسين العدّ البسيط. هذا منفصل عن #60463. #61459 (Amos Bird). - إضافة تأكيدات للتحقق من أن جميع الدوال تُستدعى بأعمدة ذات الحجم الصحيح. #63723 (Raúl Marín).
- جعل خدمة
networkمطلوبة عند استخدام سكربت التهيئةrcلبدء خادوم ClickHouse كعملية خدمية. #60650 (Chun-Sheng, Li). - تقليل حجم بعض الاختبارات البطيئة. #64387 #64452 (Raúl Marín).
- إعادة تشغيل سجلات ZooKeeper باستخدام keeper-bench. #62481 (Antonio Andelic).
إصدار ClickHouse 24.5، 2024-05-30. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أُعيدت تسمية “الفهارس المعكوسة” إلى “فهارس النص الكامل” لأنه اسم أقل تقنية وأكثر سهولة للمستخدم. ويؤدي ذلك أيضًا إلى تغيير البيانات الوصفية الداخلية للجدول، كما يتسبب في تعطّل الجداول التي تحتوي على فهارس معكوسة (تجريبية) موجودة مسبقًا. يُرجى التأكد من إزالة هذه الفهارس قبل الترقية ثم إعادة إنشائها بعد الترقية. #62884 (Robert Schulze).
- أُهمل استخدام الدوال
neighborوrunningAccumulateوrunningDifferenceStartingWithFirstValueوrunningDifference(لأنها عرضة للأخطاء). ويجب استخدام دوال window function المناسبة بدلًا منها. ولإعادة تفعيلها، اضبطallow_deprecated_error_prone_window_functions = 1أو اضبطcompatibility = '24.4'أو إصدارًا أقدم. #63132 (Nikita Taranov). - ستصبح الاستعلامات على
system.columnsأسرع عند وجود عدد كبير من الأعمدة، لكن ذلك ينطبق عندما لا يكونSHOW TABLESممنوحًا للعديد من قواعد البيانات أو الجداول. لاحظ أنه في الإصدارات السابقة، إذا منحتSHOW COLUMNSلأعمدة فردية من دون منحSHOW TABLESللجداول المقابلة، فسيعرض جدولsystem.columnsهذه الأعمدة، أما في الإصدار الجديد فسيتخطى الجدول بالكامل. كما أُزيلت رسائل trace log “Access granted” و “Access denied” التي كانت تُبطئ الاستعلامات. #63439 (Alexey Milovidov).
ميزة جديدة
- يضيف تنسيق
Formلقراءة/كتابة سجل واحد بتنسيقapplication/x-www-form-urlencoded. #60199 (Shaun Struwig). - أُضيفت إمكانية استخدام الضغط في
CROSS JOIN. #60459 (p1rattttt). - أُضيفت إمكانية تنفيذ
CROSS JOINباستخدام الملفات المؤقتة إذا تجاوز الحجم الحدود المسموح بها. #63432 (p1rattttt). - دعم
joinبشروط عدم مساواة تتضمن أعمدة من كلٍّ من الجدول الأيسر والجدول الأيمن، مثل:t1.y < t2.y. للتفعيل، استخدمSET allow_experimental_join_condition = 1. #60920 (lgbo). - يمكن الآن أن تكون مفاتيح
Mapمن الأنواعFloat32,Float64,Array(T),Map(K, V)وTuple(T1, T2, ...). يُغلق #54537. #59318 (李扬). - تقديم التحميل المجمّع إلى
EmbeddedRocksDBعبر إنشاء ملف SST وإدخاله بدلًا من الاعتماد على memtable المضمّنة في rocksdb. يساعد ذلك على زيادة سرعة الاستيراد، خصوصًا مع استعلامات insert طويلة التشغيل إلى جداول StorageEmbeddedRocksDB. كما أُضيفت أيضًا table settings لـEmbeddedRocksDB. #59163 #63324 (Duc Canh Le). - يمكن للمستخدم الآن تحليل CRLF مع تنسيق TSV باستخدام الإعداد
input_format_tsv_crlf_end_of_line. يُغلق #56257. #59747 (Shaun Struwig). - إعداد جديد
input_format_force_null_for_omitted_fieldsيفرض قيم NULL للحقول المتروكة. #60887 (Constantine Peresypkin). - سابقًا، لم يكن تخزين S3 ودالة الجدول S3 يدعمان القراءة من ملفات الأرشيف مثل tarballs و zip و 7z. أما الآن، فأصبحا يتيحان استعراض الملفات داخل الأرشيفات في S3. #62259 (Daniil Ivanik).
- دعم الدالة الشرطية
clamp. #62377 (skyoct). - إضافة output format
NPy. #62430 (豪肥肥). - أُضيف التنسيق
Rawكاسم بديل لـTSVRaw. #63394 (Unalian). - أُضيفت دالة SQL جديدة
generateUUIDv7لتوليد معرّفات UUID بالإصدار 7، أي معرّفات UUID قائمة على الطابع الزمني مع مكوّن عشوائي. كما أُضيفت دالة جديدةUUIDToNumلاستخراج البايتات من UUID، ودالة جديدةUUIDv7ToDateTimeلاستخراج مكوّن الطابع الزمني من UUID بالإصدار 7. #62852 (Alexey Petrunyaka). - على Linux و MacOS، إذا كان stdout الخاص بالبرنامج مُعاد توجيهه إلى ملف ذي امتداد ضغط، فستُستخدم طريقة الضغط المقابلة بدلًا من عدم استخدام أي ضغط (بما يجعله يتصرف بصورة مشابهة لـ
INTO OUTFILE). #63662 (v01dXYZ). - تغيير التحذير عند وجود عدد كبير من الجداول المرفقة لتمييز الجداول وطرق العرض والقواميس. #64180 (Francisco J. Jurado Moreno).
- إضافة دعم للدالة
azureBlobStorageفي ClickHouse server لاستخدام هوية حمل العمل في Azure للمصادقة على Azure Blob Storage. إذا تم تعيين المعاملuse_workload_identityفي config، فستُستخدم هوية حمل العمل للمصادقة. #57881 (Vinay Suryadevara). - إضافة معلومات TTL إلى الجدول
system.parts_columns. #63200 (litlig).
الميزات التجريبية
- تنفيذ نوع البيانات
Dynamicالذي يتيح تخزين قيم من أي نوع داخله دون الحاجة إلى معرفة جميع الأنواع مسبقًا. يتوفر النوعDynamicعبر الإعدادallow_experimental_dynamic_type. مرجع: #54864. #63058 (Kruglov Pavel). - أصبح من الممكن إنشاء قاعدة بيانات
MaterializedMySQLدون اتصال بـ MySQL. #63397 (Kirill). - وضع علامة تلقائيًا على النسخة المتماثلة لقاعدة بيانات Replicated database باعتبارها مفقودة وبدء الاسترداد إذا فشلت مهمة DDL ما أكثر من
max_retries_before_automatic_recovery(100 افتراضيًا) مرة متتالية بالخطأ نفسه. كذلك، أُصلح خطأ كان يمكن أن يتسبب في تخطّي إدخالات DDL عند إطلاق استثناء خلال مرحلة مبكرة من تنفيذ الإدخال. #63549 (Alexander Tokmakov). - احتساب الملفات الفاشلة ضمن
s3queue_tracked_file_ttl_secوs3queue_traked_files_limitفيStorageS3Queue. #63638 (Kseniia Sumarokova).
تحسين الأداء
- تقليل التزاحم في ذاكرة التخزين المؤقت لنظام الملفات (الجزء 4). يتيح ذلك إبقاء ذاكرة التخزين المؤقت لنظام الملفات غير ممتلئة حتى الحد الأقصى عبر تنفيذ عمليات إخلاء إضافية في الخلفية (يتم التحكم فيها بواسطة
keep_free_space_size(elements)_ratio). وهذا يخفف الضغط الناتج عن حجز المساحة للاستعلامات (في methodtryReserve). كما يتم ذلك بطريقة خالية من الأقفال قدر الإمكان، بحيث لا ينبغي أن يعيق الاستخدام العادي لذاكرة التخزين المؤقت. #61250 (Kseniia Sumarokova). - تخطي merging لكتل projection التي أُنشئت حديثًا أثناء عمليات
INSERT. #59405 (Nikita Taranov). - معالجة دوال السلاسل النصية
...UTF8بأسلوبasciiإذا كانت سلاسل الإدخال كلها محارف ASCII. مستوحاة من https://github.com/apache/doris/pull/29799. تسريع إجمالي بمقدار 1.07x~1.62x. ويُلاحظ أن Peak memory usage انخفض في بعض الحالات. #61632 (李扬). - تحسين أداء globs الخاصة بالتحديد (
{}) في StorageS3. #62120 (Andrey Zvonov). - يحتوي HostResolver على كل عنوان IP عدة مرات. إذا كان للمضيف البعيد عدة عناوين IP، وكان الوصول — لسبب ما (مثل قواعد firewall) — مسموحًا لبعضها وممنوعًا لبعضها الآخر، فلن يُعلَّم إلا السجل الأول لعناوين IP المحظورة على أنه فاشل، وتبقى لهذه العناوين في كل محاولة فرصة لأن تُختار (وتفشل مرة أخرى). وحتى مع إصلاح ذلك، يتم إسقاط DNS cache كل 120 ثانية، وقد تُختار عناوين IP هذه مرة أخرى. #62652 (Anton Ivashkin).
- إضافة configuration جديدة باسم
prefer_merge_sort_block_bytesللتحكم في استهلاك الذاكرة وتسريع الفرز بمقدار مرتين عند merging عندما يكون هناك الكثير من الأعمدة. #62904 (LiuNeng). - سيبدأ
clickhouse-localبشكل أسرع. في الإصدارات السابقة، كان لا يحذف الأدلة المؤقتة بسبب خطأ. أما الآن فسيفعل ذلك. وهذا يغلق #62941. #63074 (Alexey Milovidov). - تحسينات دقيقة على الأداء للمحلل الجديد. #63429 (Raúl Marín).
- سيعمل index analysis إذا تمت مقارنة
DateTimeمعDateTime64. وهذا يغلق #63441. #63443 #63532 (Alexey Milovidov). - تسريع الفهارس من النوع
setقليلًا (بحوالي 1.5 مرة) عبر إزالة البيانات المهملة. #64098 (Alexey Milovidov). - إزالة نسخ البيانات عند الكتابة إلى ذاكرة التخزين المؤقت لنظام الملفات. #63401 (Kseniia Sumarokova).
- ستستخدم backups مع Azure blob storage الآن النسخ المتعدد. #64116 (alesapin).
- السماح باستخدام النسخ الأصلي لـ Azure حتى مع اختلاف الحاويات. #64154 (alesapin).
- أخيرًا، تم تمكين النسخ الأصلي لـ Azure. #64182 (alesapin).
تحسينات
- السماح باستخدام
clickhouse-localواختصاراتهclickhouseوchمع استعلام أو ملف استعلامات كوسيط موضعي. أمثلة:ch "SELECT 1",ch --param_test Hello "SELECT {test:String}",ch query.sql. يُغلق هذا #62361. #63081 (Alexey Milovidov). - تمكين البيانات الوصفية plain_rewritable لمخازن الكائنات المحلية وAzure (azure_blob_storage). #63365 (Julia Kartseva).
- دعم علامات الاقتباس Unicode بالنمط الإنجليزي، مثل “Hello” و’world’. هذا أمرٌ محلّ شك عموماً، لكنه مفيد عندما تكتب استعلامك في معالج نصوص مثل Google Docs. يُغلق هذا #58634. #63381 (Alexey Milovidov).
- السماح بفواصل لاحقة في قائمة الأعمدة ضمن استعلام INSERT. على سبيل المثال،
INSERT INTO test (a, b, c, ) VALUES .... #63803 (Alexey Milovidov). - تحسين رسائل الاستثناءات لتنسيق
Regexp. #63804 (Alexey Milovidov). - السماح بفواصل لاحقة في تنسيق
Values. على سبيل المثال، أصبح هذا الاستعلام مسموحاً:INSERT INTO test (a, b, c) VALUES (4, 5, 6,);. #63810 (Alexey Milovidov). - جعل RabbitMQ يرسل nack للرسائل المعطوبة. يُغلق #45350. #60312 (Kseniia Sumarokova).
- إصلاح crash في فكّ تكديس المكدس Asynchronous (مثل عند استخدام sampling query profiler) أثناء تفسير معلومات Debug. يُغلق هذا #60460. #60468 (Alexey Milovidov).
- رسائل منفصلة لخطأ S3 ‘no key’ في حالتي disk وstorage. #61108 (Sema Checherinda).
- سيعمل شريط التقدم مع الاستعلامات البسيطة التي تحتوي على LIMIT من
system.zerosوsystem.zeros_mt(وهو يعمل بالفعل معsystem.numbersوsystem.numbers_mt) ومع الدالة الجدوليةgenerateRandom. وكميزة إضافية، إذا كان العدد الإجمالي للسجلات أكبر من حدmax_rows_to_read، فسيتم throw an exception في وقت أبكر. يُغلق هذا #58183. #61823 (Alexey Milovidov). - دعم “Merge Key” في تكوينات YAML (هذه ميزة غريبة في YAML، يُرجى تجاهلها). #62685 (Azat Khuzhin).
- تحسين رسالة الخطأ عند استخدام دالة غير deterministic مع مصدر Replicated. #62896 (Grégoire Pineau).
- إصلاح secret بين الخوادم لـ Distributed فوق Distributed من
remote. #63013 (Azat Khuzhin). - دعم
include_fromفي ملفات YAML. ومع ذلك، يُفضَّل استخدامconfig.d#63106 (Eduard Karacharov). - الاحتفاظ بالبيانات السابقة في الطرفية بعد الاختيار من اقتراحات skim. #63261 (FlameFactory).
- أصبح عرض الحقول (في Pretty formats أو في الدالة
visibleWidth) يتجاهل ANSI escape sequences بشكل صحيح. #63270 (Shaun Struwig). - تحديث استخدام رمز الخطأ
NUMBER_OF_ARGUMENTS_DOESNT_MATCHإلى رموز أخطاء أدق عند الاقتضاء. #63406 (Yohann Jardin). - أصبح
os_userوclient_hostnameيُضبطان الآن بشكل صحيح للاستعلامات الخاصة باقتراحات سطر الأوامر في clickhouse-client. هذا يُغلق #63430. #63433 (Alexey Milovidov). - تصحيح
max_block_sizeتلقائياً إلى القيمة الافتراضية إذا كانت قيمته صفراً. #63587 (Antonio Andelic). - إضافة عمود ALIAS باسم build_id إلى trace_log لتسهيل إعادة التسمية التلقائية عند اكتشاف تغييرات في binary. وذلك لمعالجة #52086. #63656 (Zimu Li).
- تمكين عملية truncate لأقراص object storage. #63693 (MikhailBurdukov).
- أصبح تحميل قائمة الكلمات المفتاحية يعتمد الآن على revision الخاص بالخادم، وسيتم تعطيله في الإصدارات القديمة من ClickHouse server. CC @azat. #63786 (Nikita Mikhaylov).
- يجب أن تقرأ أقراص ClickHouse إعدادات الخادم للحصول على إصدار format الفعلي للـ metadata. #63831 (Sema Checherinda).
- تعطيل قيود pretty format (
output_format_pretty_max_rows/output_format_pretty_max_value_width) عندما لا يكون stdout من نوع TTY. #63942 (Azat Khuzhin). - أصبحت معالجة Exception تعمل الآن عند استخدام ClickHouse داخل AWS Lambda. المؤلف: Alexey Coolnev. #64014 (Alexey Milovidov).
- إطلاق
CANNOT_DECOMPRESSبدلاً منCORRUPTED_DATAعند تمرير بيانات compressed غير صالحة عبر HTTP. #64036 (vdimir). - أصبحت الآن إشارة التنبيه لرقم كبير واحد في Pretty formats تعمل مع Nullable وLowCardinality. هذا يُغلق #61993. #64084 (Alexey Milovidov).
- إضافة metrics وlogs وأسماء thread أثناء تصفية parts باستخدام الفهارس. #64130 (Alexey Milovidov).
- تجاهل
allow_suspicious_primary_keyعندATTACHوالتحقق منه عندALTER. #64202 (Azat Khuzhin).
تحسينات البناء/الاختبار/التحزيم
- يُبنى ClickHouse باستخدام clang-18. كما جرى تمكين الكثير من عمليات التحقّق الجديدة من clang-tidy-18. #60469 (Alexey Milovidov).
- دعم loongarch64 تجريبيًا كمنصة جديدة لـ ClickHouse. #63733 (qiangxuhui).
- تجري مراجعة Dockerfile من قِبل المكتبة الرسمية لـ Docker في https://github.com/docker-library/official-images/pull/15846. #63400 (Mikhail f. Shiryaev).
- ستُجمع معلومات عن كل رمز في كل وحدة ترجمة داخل قاعدة بيانات CI لكل عملية build ضمن CI. وبذلك يُغلَق #63494. #63495 (Alexey Milovidov).
- تحديث مكتبة Apache Datasketches. وهذا يحل #63858. #63923 (Alexey Milovidov).
- تمكين دعم GRPC لنظام aarch64 linux أثناء البناء المتقاطع للملف التنفيذي. #64072 (alesapin).
- إصلاح فكّ المكدس عند SIGSEGV على aarch64 (بسبب صِغر مكدس الإشارة) #64058 (Azat Khuzhin).
إصلاح خطأ
- تم تعطيل الإعداد
enable_vertical_finalافتراضيًا. لا ينبغي استخدام هذه الميزة لأنها تحتوي على خطأ: #64543. #64544 (Alexander Tokmakov). - إصلاح إنشاء نسخة احتياطية عند استخدام عدة shards #57684 (Vitaly Baranov).
- إصلاح تمرير projections/indexes/المفتاح الأساسي من قائمة الأعمدة في استعلام CREATE إلى الجدول الداخلي لـ MV #59183 (Azat Khuzhin).
- إصلاح الدمج غير الصحيح لـ boundRatio #60532 (Tao Wang).
- إصلاح تعطل يحدث عند استدعاء بعض الدوال على أعمدة ثابتة منخفضة الكاردينالية #61966 (Michael Kolupaev).
- إصلاح الاستعلامات التي تستخدم FINAL وتعطي نتائج غير صحيحة عندما لا يستخدم الجدول الحبيبية التكيفية #62432 (Duc Canh Le).
- تحسين اكتشاف دعم cgroups v2 لوحدات التحكم في الذاكرة #62903 (Robert Schulze).
- إصلاح الاستخدام اللاحق للجداول الخارجية في client #62964 (Azat Khuzhin).
- إصلاح تعطل عند استخدام untuple وlambda غير محلولة #63131 (Raúl Marín).
- إصلاح بدء الخادم في الاستماع للاتصالات قبل الأوان #63181 (alesapin).
- إصلاح الأجزاء المتداخلة عند إعادة التشغيل بعد أمر DROP PART #63202 (Han Fei).
- تحميل الإعدادات الافتراضية لـ SQL security بشكل صحيح أثناء بدء التشغيل #63209 (pufit).
- إصلاح filter join وpush down لمرشح JOIN #63234 (Maksim Kita).
- إصلاح الحلقة اللانهائية في AzureObjectStorage::listObjects #63257 (Julia Kartseva).
- إصلاح تجاهل CROSS join للإعداد join_algorithm #63273 (vdimir).
- إصلاح إنهاء WriteBufferToFileSegment وStatusFile #63346 (vdimir).
- إصلاح خطأ منطقي أثناء تنفيذ استعلام SELECT بعد ALTER في حالات نادرة #63353 (alesapin).
- إصلاح الترويسة
X-ClickHouse-Timezoneمعsession_timezone#63377 (Andrey Zvonov). - إصلاح assert في وضع Debug عند استخدام التجميع WITH ROLLUP وأنواع LowCardinality #63398 (Raúl Marín).
- إصلاحات بسيطة لـ group_by_use_nulls #63405 (vdimir).
- إصلاح النسخ الاحتياطي/الاستعادة لـ projection part في حال أُزيلت projection من البيانات الوصفية للجدول، بينما لا يزال الجزء يحتوي على projection #63426 (Kseniia Sumarokova).
- إصلاح mysql dictionary source #63481 (vdimir).
- إدراج QueryFinish عند AsyncInsertFlush في حال عدم وجود بيانات #63483 (Raúl Marín).
- إصلاح: used_dictionaries فارغة في system.query_log #63487 (Eduard Karacharov).
- جعل
MergeTreePrefetchedReadPoolأكثر أمانًا #63513 (Antonio Andelic). - إصلاح تعطل عند الخروج مع تمكين sentry (بسبب تدمير openssl قبل sentry) #63548 (Azat Khuzhin).
- إصلاح دعم Array وMap مع Keyed hashing #63628 (Salvatore Mesoraca).
- إصلاح filter pushdown لـ Parquet وربما StorageMerge #63642 (Michael Kolupaev).
- منع التحويل إلى Replicated إذا كان مسار ZooKeeper موجودًا بالفعل #63670 (Kirill).
- المحلل: تقرأ views الأعمدة المطلوبة فقط #63688 (Maksim Kita).
- المحلل: منع إعادة تعريف WINDOW #63694 (Dmitry Novik).
- كان flatten_nested معطّلًا مع Replicated database التجريبية. #63695 (Nikolai Kochetov).
- إصلاح #63653 #63722 (Nikolai Kochetov).
- السماح بالتحويل من Array(Nothing) إلى Map(Nothing, Nothing) #63753 (Nikolai Kochetov).
- إصلاح ILLEGAL_COLUMN في partial_merge join #63755 (vdimir).
- إصلاح: إزالة distinct الزائدة مع window functions #63776 (Igor Nikonov).
- إصلاح تعطل محتمل مع SYSTEM UNLOAD PRIMARY KEY #63778 (Raúl Marín).
- إصلاح query تحتوي على alias دورية مكررة. #63791 (Nikolai Kochetov).
- جعل
TokenIteratorlazy كما ينبغي #63801 (Alexey Milovidov). - إضافة الإعداد
endpoint_subpathإلى S3 URI #63806 (Julia Kartseva). - إصلاح حالة التوقف المتبادل في
ParallelReadBuffer#63814 (Antonio Andelic). - إصلاح الأعمدة المكافئة في push down لمرشح JOIN #63819 (Maksim Kita).
- إزالة البيانات من جميع الأقراص بعد DROP مع قاعدة بيانات Lazy. #63848 (MikhailBurdukov).
- إصلاح النتيجة غير الصحيحة عند القراءة من MV مع parallel replicas والمحلل الجديد #63861 (Nikita Taranov).
- إصلاحات في الأمرين
find_super_nodesوfind_big_familyفي keeper-client #63862 (Alexander Gololobov). - تحديث اسم تنفيذ lambda #63864 (Nikolai Kochetov).
- إصلاح SIGSEGV الناتج عن Profiler الخاص بـ CPU/Real #63865 (Azat Khuzhin).
- إصلاح الاستعلام
EXPLAIN CURRENT TRANSACTION#63926 (Anton Popov). - إصلاح في المحلل: إنها سلاحف حتى النهاية… #63930 (Yakov Olkhovskiy).
- السماح ببعض أوامر ALTER TABLE للقرص
plain_rewritable#63933 (Julia Kartseva). - إصلاح Distributed في CTE التكراري #63939 (Maksim Kita).
- المحلل: إصلاح resolve لـ COLUMNS #63962 (Dmitry Novik).
- LIMIT BY وskip_unused_shards مع المحلل #63983 (Nikolai Kochetov).
- إصلاح بعض المشاكل البسيطة (Kusto التجريبي) #63992 (Yong Wang).
- إلغاء تسلسل مدخلات binary غير الموثوق بها بطريقة أكثر أمانًا #64024 (Robert Schulze).
- إصلاح query analysis للاستعلامات التي تتضمن الإعداد
final= 1 للجداول الموزعة المبنية على جداول لا تنتمي إلى عائلة MergeTree. #64037 (Nikolai Kochetov). - إضافة Settings المفقودة إلى recoverLostReplica #64040 (Raúl Marín).
- إصلاح فحوصات الوصول لـ SQL security مع المحلل #64079 (pufit).
- إصلاح في المحلل: يجب استخدام تعبير interpolate فقط مع DAG #64096 (Yakov Olkhovskiy).
- إصلاح كتابة النسخ الاحتياطي على azure لكتل multipart بحجم 1 MiB (حجم read buffer) بدلًا من
max_upload_part_size(في حالة النسخ غير native) #64117 (Kseniia Sumarokova). - تنفيذ آلية fallback بشكل صحيح أثناء نسخ النسخة الاحتياطية #64153 (Antonio Andelic).
- منع LOGICAL_ERROR عند CREATE TABLE كعرض مادي #64174 (Raúl Marín).
- ذاكرة التخزين المؤقت للاستعلامات: اعتبار الاستعلامات المتطابقة على قواعد بيانات مختلفة استعلاماتٍ مختلفة #64199 (Robert Schulze).
- تجاهل
text_logفي Keeper #64218 (Antonio Andelic). - إصلاح خطأ منطقي: تحويل نوع غير صالح لجدول Buffer مع prewhere. #64388 (Nikolai Kochetov).
إصدار ClickHouse 24.4 بتاريخ 2024-04-30. العرض التقديمي، الفيديو
ملاحظات الترقية
- أصبحت
clickhouse-odbc-bridgeوclickhouse-library-bridgeالآن حزمتين منفصلتين. ويغلق هذا #61677. #62114 (Alexey Milovidov). - لم يعد مسموحًا بتعيين max_parallel_replicas (للقراءة المتوازية التجريبية من النسخ المتماثلة) إلى
0، لأن ذلك غير منطقي. ويغلق هذا #60140. #61201 (Kruglov Pavel). - أُزيل دعم الاستعلام
INSERT WATCH(وهو جزء من الميزة المتقادمةLIVE VIEW). #62382 (Alexey Milovidov). - أُزيل الإعداد
optimize_monotonous_functions_in_order_by. #63004 (Raúl Marín). - أُزيل الوسم التجريبي من محرك قاعدة البيانات
Replicated. وهو الآن في مرحلة Beta. #62937 (Justin de Guzman).
ميزة جديدة
- دعم عبارات CTE العودية. #62074 (Maksim Kita).
- دعم البند
QUALIFY. يُغلق #47819. #62619 (Maksim Kita). - أصبحت محركات الجداول قابلة للمنح الآن، ولن يؤثر ذلك في سلوك المستخدمين الحاليين. #60117 (jsc0218).
- أُضيف S3 disk قابل لإعادة الكتابة يدعم عمليات INSERT ولا يتطلب بيانات وصفية مخزنة محليًا. #61116 (Julia Kartseva). وحالة الاستخدام الرئيسية له هي جداول النظام.
- سيعمل تمييز الصياغة أثناء الكتابة في العميل على مستوى الصياغة (وكان يعمل سابقًا على مستوى المحلل المعجمي). #62123 (Alexey Milovidov).
- يدعم حذف عدة جداول في الوقت نفسه مثل
DROP TABLE a, b, c;. #58705 (zhongyuankai). - أصبح تعديل إعدادات جدول Memory عبر
ALTER MODIFY SETTINGمدعومًا الآن. مثال:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai). - أُضيفت معلمة الاستعلام
roleإلى واجهة HTTP. وهي تعمل بطريقة مشابهة لـSET ROLE x، إذ تطبّق الدور قبل تنفيذ العبارة. ويتيح ذلك تجاوز قيد واجهة HTTP، إذ لا يُسمح بعبارات متعددة، ولا يمكن إرسال كلٍّ منSET ROLE xوالعبارة نفسها في الوقت ذاته. ويمكن تعيين عدة أدوار بهذه الطريقة، مثل?role=x&role=y، وهو ما يعادلSET ROLE x, y. #62669 (Serge Klochkov). - أُضيف
SYSTEM UNLOAD PRIMARY KEYلتحرير استخدام الذاكرة للمفتاح الأساسي للجدول. #62738 (Pablo Marcos). - أُضيفت الأعمدة
value1وvalue2و… وvalue10إلىsystem.text_log. وتحتوي هذه الأعمدة على القيم التي استُخدمت لتنسيق الرسالة. #59619 (Alexey Katsman). - أُضيف العمود الافتراضي الدائم
_block_offsetالذي يخزّن الرقم الأصلي للصف داخل block كما أُسنِد عند insert. ويمكن تمكين تخزين العمود_block_offsetبشكل دائم عبر إعداد MergeTree enable_block_offset_column. وأُضيف العمود الافتراضي_part_data_versionالذي يحتوي إما على الحد الأدنى لرقم block أو إصدار mutation الخاص بالجزء. ولم يعد العمود الافتراضي الدائم_block_numberيُعد تجريبيًا. #60676 (Anton Popov). - أُضيف إعداد
input_format_json_throw_on_bad_escape_sequence، ويتيح تعطيله حفظ تسلسلات escape غير الصحيحة في JSON input formats. #61889 (Kruglov Pavel).
تحسين الأداء
- تحسينات على push down لمرشح JOIN باستخدام sets مكافئة. #61216 (Maksim Kita).
- تحسين لتحويل OUTER JOIN إلى INNER JOIN إذا كان المرشح بعد JOIN يرشّح القيم الافتراضية دائمًا. يمكن التحكم في هذا التحسين باستخدام الإعداد
query_plan_convert_outer_join_to_inner_join، وهو مُمكّن افتراضيًا. #62907 (Maksim Kita). - تحسين لـ AWS S3. يجب على العميل إرسال الترويسة ‘Keep-Alive: timeout=X’ إلى الخادم. وإذا تلقّى العميل استجابة من الخادم تتضمن هذه الترويسة، فعليه استخدام القيمة الواردة من الخادم. ومن الأفضل أيضًا ألّا يستخدم العميل اتصالًا يوشك على انتهاء صلاحيته لتجنّب حالة التسابق عند إغلاق الاتصال. #62249 (Sema Checherinda).
- تقليل الحمل الإضافي الناتج عن mutations لعمليات SELECT (الإصدار 2). #60856 (Azat Khuzhin).
- أصبحت الدوال الأكثر استدعاءً في PODArray تُدرج الآن قسرًا inline. #61144 (李扬).
- تسريع parsing لـ JSON عبر تخطي بقية الكائن بعد قراءة جميع الأعمدة المطلوبة. #62210 (lgbo).
- تحسين عمليات insert select البسيطة من الملفات في table functions من نوع file/s3/hdfs/url/… وتمت إضافة الإعداد المنفصل max_parsing_threads للتحكم في عدد threads المستخدمة في parsing المتوازي. #62404 (Kruglov Pavel).
- أصبحت الدالتان
to_utc_timestampوfrom_utc_timestampالآن أسرع بنحو الضعف. #62583 (KevinyhZou). - أصبحت الدوال
parseDateTimeOrNullوparseDateTimeOrZeroوparseDateTimeInJodaSyntaxOrNullوparseDateTimeInJodaSyntaxOrZeroتعمل الآن بسرعة أكبر بكثير (من 10x إلى 1000x) عندما يحتوي الإدخال في معظمه على قيم غير قابلة للتحليل. #62634 (LiuNeng). - أصبحت عمليات SELECT على
system.query_cacheالآن أسرع بشكل ملحوظ عندما يحتوي query cache على عدد كبير من entries (على سبيل المثال أكثر من 100.000). #62671 (Robert Schulze). - تقليل التنازع في filesystem cache (الجزء 3): تنفيذ الإزالة من filesystem دون قفل عند محاولة حجز المساحة. #61163 (Kseniia Sumarokova).
- تسريع تغيير الحجم الديناميكي لـ filesystem cache. #61723 (Kseniia Sumarokova).
- لا يُعاد تحميل dictionary source الذي يستخدم
INVALIDATE_QUERYمرتين عند بدء التشغيل. #62050 (vdimir). - إصلاح مشكلة تتمثل في أنه عند إضافة
= 1أو= 0بشكل زائد بعد تعبير Boolean يتضمن primary key، لا يُستخدم primary index. على سبيل المثال، كلٌّ منSELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1وSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0سينفّذان فحصًا كاملًا للجدول، رغم أنه يمكن استخدام primary index. #62142 (josh-hildred). - إرجاع تدفق من الكتل من
system.remote_data_pathsبدلًا من تجميع النتيجة بالكامل في كتلة واحدة كبيرة. يتيح ذلك استهلاك قدر أقل من الذاكرة، وعرض التقدّم المرحلي، وإلغاء الاستعلام. #62613 (Alexander Gololobov).
الميزة التجريبية
- دعم مخزن مؤقت للكتابة المتوازية في Azure Blob Storage، يُدار عبر الإعداد
azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni). - تعمل ذاكرة التخزين المؤقت للصفحات في userspace الآن مع تخزين الويب الثابت (
disk(type = web)). استخدم إعداد العميلuse_page_cache_for_disks_without_file_cache=1لتمكينها. #61911 (Michael Kolupaev). - عدم اعتبار متغيرات Bool والمتغيرات العددية مشبوهة في النوع
Variant. #61999 (Kruglov Pavel). - تحسين التحويل من String إلى
Variantباستخدام parsing. #62005 (Kruglov Pavel). - دعم
Variantفي دوال JSONExtract. #62014 (Kruglov Pavel). - وسم النوع
Variantعلى أنه قابل للمقارنة، بحيث يمكن استخدامه في المفتاح الأساسي. #62693 (Kruglov Pavel).
تحسين
- لتسهيل الأمر، سيعمل
SELECT * FROM numbers() بالطريقة نفسها التي يعمل بها SELECT * FROM system.numbers — من دون حد. #61969 (YenchangChan). - أُضيفت وسوم consumer/producer منفصلة لإعداد Kafka. يجنّب هذا التحذيرات الصادرة من librdkafka (مكتبة C سيئة وفيها الكثير من العلل) التي تفيد بأنه جرى تحديد خصائص consumer لنسخ producer والعكس صحيح (على سبيل المثال،
Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance). يغلق: #58983. #58956 (Aleksandr Musorin). - أصبحت الدالتان
date_diff وage تحسبان النتيجة الآن بدقة النانوثانية بدلًا من دقة الميكروثانية. كما أنهما تدعمان الآن nanosecond (أو nanoseconds أو ns) كقيمة ممكنة للمعامل unit. #61409 (Austin Kothig). - أُضيفت وحدات nano- وmicro- وmilliseconds إلى
date_trunc. #62335 (Misz606). - أُضيفت إعادة تحميل سلسلة الشهادات أثناء إعادة تحميل الشهادة. #61671 (Pervakov Grigorii).
- محاولة منع الخطأ #60432 بعدم السماح بإرفاق جدول إذا كانت هناك نسخة متماثلة نشطة لمسار النسخة المتماثلة نفسه. #61876 (Arthur Passos).
- تنفيذ دعم
input في clickhouse-local. #61923 (Azat Khuzhin). - أصبح محرك الجدول
Join مع strictness ANY متسقًا بعد إعادة التحميل. عند إدراج عدة صفوف بالمفتاح نفسه، ستكون للأولى أولوية أعلى (أما سابقًا، فكان الاختيار يتم عشوائيًا عند تحميل الجدول). يغلق #51027. #61972 (vdimir). - استنتاج أنواع الأعمدة Nullable تلقائيًا من schema الخاص بـ Apache Arrow. #61984 (Maksim Kita).
- السماح بإلغاء الدمج المتوازي للحالات التجميعية أثناء التجميع. مثال:
uniqExact. #61992 (Maksim Kita). - استخدام
system.keywords لملء الاقتراحات، واستخدامها أيضًا داخليًا في جميع المواضع. #62000 (Nikita Mikhaylov). - سيؤدي
OPTIMIZE FINAL لـ ReplicatedMergeTree الآن إلى انتظار اكتمال عمليات الدمج النشطة حاليًا، ثم إعادة محاولة جدولة دمج نهائي. وهذا يجعله أقرب إلى سلوك MergeTree العادي. #62067 (Nikita Taranov). - عند قراءة البيانات من ملف Hive Text File، كان السطر الأول من الملف يُستخدم لتحديد عدد حقول الإدخال، وأحيانًا لا يتطابق عدد الحقول في هذا السطر مع ما هو معرّف في Hive table. فعلى سبيل المثال، إذا كان Hive table معرّفًا بثلاثة أعمدة مثل
test_tbl(a Int32, b Int32, c Int32)، لكن السطر الأول من الملف النصي يحتوي على حقلين فقط، فسيُضبط عدد حقول الإدخال على 2. وإذا كان السطر التالي من الملف النصي يحتوي على 3 حقول، فلن تتم قراءة الحقل الثالث، بل ستُسند إليه القيمة الافتراضية 0، وهذا غير صحيح. #62086 (KevinyhZou). CREATE ASينسخ comment الخاص بالجدول. #62117 (Pablo Marcos).- إضافة Progress الاستعلام إلى جدول zookeeper. #62152 (JackyWoo).
- إضافة إمكانية تشغيل trace collector (Real و CPU) على مستوى server بالكامل. #62189 (alesapin).
- تمت إضافة الإعداد
lightweight_deletes_sync(القيمة الافتراضية: 2 - انتظار جميع replicas بشكل متزامن). وهو مشابه للإعدادmutations_sync، لكنه يؤثر فقط في سلوك lightweight deletes. #62195 (Anton Popov). - التمييز بين القيم Boolean والأعداد الصحيحة عند parsing القيم الخاصة بـ custom settings:
SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov). - دعم الوصول إلى S3 عبر endpoints من نوع AWS Private Link Interface. يُغلق هذا #60021 و #31074 و #53761. #62208 (Arthur Passos).
- عدم إنشاء directory لـ UDF في clickhouse-client إذا لم يكن موجودًا. يُغلق هذا #59597. #62366 (Alexey Milovidov).
- لم تعد query cache تخزّن نتائج queries على system tables (
system.*,information_schema.*,INFORMATION_SCHEMA.*). #62376 (Robert Schulze). - قد يتأخر الاستعلام
MOVE PARTITION TO TABLEأو قد يطلق الاستثناءTOO_MANY_PARTSلتجنّب تجاوز حدود part count. وتُطبَّق الإعدادات والحدود نفسها المطبقة على استعلامINSERT(راجع الإعداداتmax_parts_in_total,parts_to_delay_insert,parts_to_throw_insert,inactive_parts_to_throw_insert,inactive_parts_to_delay_insert,max_avg_part_size_for_too_many_parts,min_delay_to_insert_msوmax_delay_to_insert). #62420 (Sergei Trifonov). - تم تغيير directory التثبيت الافتراضي على MacOS من
/usr/binإلى/usr/local/bin. وهذا ضروري لأن ميزة System Integrity Protection من Apple، التي قُدمت مع MacOS El Capitan (2015)، تمنع الكتابة إلى/usr/binحتى عند استخدامsudo. #62489 (haohang). - جعل
transformيعيد دائمًا أول تطابق. #62518 (Raúl Marín). - أُضيف العمود
hostnameالمفقود إلى جدول النظامblob_storage_log. #62456 (Jayme Bird). - اتساقًا مع جداول النظام الأخرى، أصبح
system.backup_logيحتوي الآن على العمودevent_time. #62541 (Jayme Bird). - يحتوي الجدول
system.backup_logالآن على مفتاح الفرز “default”، وهوevent_date, event_time، مثل محركات الجداول_logالأخرى. #62667 (Nikita Mikhaylov). - تجنّب تقييم تعبيرات DEFAULT الخاصة بالجدول أثناء تنفيذ
RESTORE. #62601 (Vitaly Baranov). - تحتاج أيضًا وحدات تخزين S3 والنسخ الاحتياطية إلى إعدادات Keep alive الافتراضية نفسها مثل قرص S3. #62648 (Sema Checherinda).
- أُضيف معرّف العميل الخاص بـ librdkafka (تلك المكتبة سيئة السمعة المكتوبة بلغة C، والتي تتضمن كثيرًا من العيوب) إلى رسائل السجل، لتمييز رسائل السجل الصادرة من مستهلكين مختلفين لجدول واحد. #62813 (János Benjamin Antal).
- السماح باستخدام الماكروين الخاصين
{uuid}و{database}في مسار ZooKeeper لقاعدة بيانات Replicated. #62818 (Vitaly Baranov). - السماح باستخدام quota key مع آلية مصادقة مختلفة في طلبات HTTP. #62842 (Kseniia Sumarokova).
- تقليل مستوى التفصيل في وسيطة سطر الأوامر
--helpفيclickhouse clientوclickhouse local. ويُولَّد الإخراج السابق الآن بواسطة--help --verbose. #62973 (Yarik Briukhovetskyi). - أُزيل
log_bin_use_v1_row_eventsفي MySQL 8.3، وتم تعديل المحرك التجريبيMaterializedMySQLليتوافق مع ذلك #60479. #63101 (Eugene Klimov). المؤلف: Nikolay Yankin.
تحسينات البناء/الاختبار/التحزيم
- تضمين تبعيات Rust محليًا، بحيث يمكن بناء شيفرة Rust (التي نستخدمها لبعض الميزات الثانوية من باب الترف والتسلية) بطريقة سليمة، على نحو مماثل لـ C++. #62297 (Raúl Marín).
- يستخدم ClickHouse الآن OpenSSL 3.2 بدلًا من BoringSSL. #59870 (Robert Schulze). تجدر الإشارة إلى أن OpenSSL يتمتع عمومًا بثقافة هندسية أضعف (مثل وجود عدد غير صفري من تقارير sanitizer التي اضطررنا إلى ترقيعها، ونظام build معقد يتضمن ملفات مولَّدة، وما إلى ذلك)، لكنه يوفر توافقية أفضل.
- تجاهل استعلامات DROP في اختبار الإجهاد باحتمال 1/2، واستخدام TRUNCATE بدلًا من تجاهل DROP في فحص الترقية لجداول Memory/JOIN. #61476 (Kruglov Pavel).
- إزالة وحدات التخزين عند /etc/clickhouse-keeper و /var/log/clickhouse-keeper من Docker image الخاصة بـ Keeper. #61683 (Tristan).
- إضافة اختبارات لجميع التذاكر التي لم تعد ذات صلة مع تفعيل المحلل (Analyzer) افتراضيًا. Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- أُضيفت اختبارات إضافية من مشكلات لم تعد ذات صلة أو أصلحها analyzer. يغلق: #58985 يغلق: #59549 يغلق: #36963 يغلق: #39453 يغلق: #56521 يغلق: #47552 يغلق: #56503 يغلق: #59101 يغلق: #50271 يغلق: #54954 يغلق: #56466 يغلق: #11000 يغلق: #10894 يغلق: https://github.com/ClickHouse/ClickHouse/issues/448 يغلق: #8030 يغلق: #32139 يغلق: #47288 يغلق: #50705 يغلق: #54511 يغلق: #55466 يغلق: #58500 يغلق: #39923 يغلق: #39855 يغلق: #4596 يغلق: #47422 يغلق: #33000 يغلق: #14739 يغلق: #44039 يغلق: #8547 يغلق: #22923 يغلق: #23865 يغلق: #29748 يغلق: #4222. #62457 (Nikita Mikhaylov).
- أُصلحت أخطاء البناء عند ربط OpenSSL ديناميكيًا (ملاحظة: هذا غير مدعوم عمومًا ولا يلزم إلا لمنصات s390x من IBM). #62888 (Harry Lee).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- إصلاح خطأ منطقي عند التراجع عن معاملة إدراج quorum. #61953 (Han Fei).
- إصلاح خطأ في المحلّل عند استخدام COUNT(*) مع بند FILTER #61357 (Duc Canh Le).
- إصلاح خطأ منطقي في
group_by_use_nulls+ مجموعات التجميع + المحلّل + materialize/constant #61567 (Kruglov Pavel). - إلغاء عمليات الدمج قبل إزالة الأجزاء المنقولة #61610 (János Benjamin Antal).
- إصلاح الإنهاء القسري في Apache Arrow #61720 (Kruglov Pavel).
- البحث عن العلامة
convert_to_replicatedفي المسار الصحيح الموافق للقرص المحدد #61769 (Kirill). - إصلاح احتمال حدوث سباق بيانات في الاتصالات الخاصة بـ distributed_foreground_insert/distributed_background_insert_batch #61867 (Azat Khuzhin).
- تصنيف الخطأ CANNOT_PARSE_ESCAPE_SEQUENCE على أنه خطأ تحليل لتتمكن من تخطيه في تنسيقات إدخال الصفوف #61883 (Kruglov Pavel).
- إصلاح كتابة رسالة Exception في output format عبر HTTP عند استخدام http_wait_end_of_query #61951 (Kruglov Pavel).
- إصلاح مناسب لـ LowCardinality مع دوال JSONExtact #61957 (Nikita Mikhaylov).
- إصلاح crash في المحرك Merge إذا لم تكن Row Policy تحتوي على expression #61971 (Ilya Golshtein).
- إصلاح Exception غير ملتقطة في destructor الخاص بـ WriteBufferAzureBlobStorage #61988 (SmitaRKulkarni).
- إصلاح CREATE TABLE بدون تعريف الأعمدة لـ ReplicatedMergeTree #62040 (Azat Khuzhin).
- إصلاح optimize_skip_unused_shards_rewrite_in لمفتاح تجزئة مركّب #62047 (Azat Khuzhin).
- ضبط ReadWriteBufferFromHTTP على قيمة host الصحيحة في الترويسة عند إعادة التوجيه #62068 (Sema Checherinda).
- إصلاح تعذّر external table على تحليل نوع البيانات Bool #62115 (Duc Canh Le).
- المحلّل: إصلاح تحليل query parameter #62186 (Dmitry Novik).
- إصلاح استعادة الأجزاء في وضع readonly #62207 (Vitaly Baranov).
- إصلاح crash في تعريف index يحتوي على SQL UDF #62225 (vdimir).
- إصلاح بذرة عشوائية NULL في generateRandom مع المحلّل. #62248 (Nikolai Kochetov).
- التعامل بشكل صحيح مع الأعمدة الثابتة في Distinct Transfom #62250 (Antonio Andelic).
- إصلاح Parts Splitter للاستعلامات التي تستخدم المعدِّل FINAL #62268 (Nikita Taranov).
- المحلّل: إصلاح resolve للـ alias في العرض المعلَّم بمعاملات #62274 (Dmitry Novik).
- المحلّل: إصلاح resolve للأسماء من النطاقات الأصلية #62281 (Dmitry Novik).
- إصلاح argMax مع عمود رقمي غير native قابل لـ Nullable #62285 (Raúl Marín).
- إصلاح BACKUP وRESTORE لـ materialized view في قاعدة بيانات Ordinary #62295 (Vitaly Baranov).
- إصلاح data race على القيم scalar في Context #62305 (Kruglov Pavel).
- إصلاح المفتاح الأساسي في materialized view #62319 (Murat Khairulin).
- عدم إنشاء pipeline insert متعددة الخيوط للجداول التي لا تدعم ذلك #62333 (vdimir).
- إصلاح المحلّل مع الوسائط الموضعية في الاستعلام الموزّع #62362 (flynn).
- إصلاح filter pushdown من additional_table_filters في محرك Merge داخل المحلّل #62398 (Kruglov Pavel).
- إصلاح استعلامات جدول GLOBAL IN مع المحلّل. #62409 (Nikolai Kochetov).
- مراعاة الإعدادات truncate_on_insert/create_new_file_on_insert في محركات s3/hdfs/azure أثناء الكتابة المقسّمة حسب partition #62425 (Kruglov Pavel).
- إصلاح مسار restore للنسخ الاحتياطي في AzureBlobStorage #62447 (SmitaRKulkarni).
- إصلاح SimpleSquashingChunksTransform #62451 (Nikita Taranov).
- إصلاح التقاط lambda المتداخلة. #62462 (Nikolai Kochetov).
- تجنّب حدوث crash عند قراءة Protobuf مع أنواع recursive #62506 (Raúl Marín).
- إصلاح خطأ عند نقل partition إلى نفسها #62524 (helifu).
- إصلاح scalar subquery في LIMIT #62567 (Nikolai Kochetov).
- إصلاح segfault في Hive engine التجريبي وغير المدعوم، والذي لا نفضله على أي حال #62578 (Nikolay Degterinsky).
- إصلاح تسرّب الذاكرة في groupArraySorted #62597 (Antonio Andelic).
- إصلاح crash في largestTriangleThreeBuckets #62646 (Raúl Marín).
- إصلاح tumble[Start,End] و hop[Start,End] عند درجات دقة أعلى #62705 (Jordi Villar).
- إصلاح حالة combinator في argMin/argMax #62708 (Raúl Marín).
- إصلاح تعطل البيانات المؤقتة في cache بسبب تحسين التنازع على قفل cache #62715 (Kseniia Sumarokova).
- إصلاح crash في الدالة
mergeTreeIndex#62762 (Anton Popov). - إصلاح: تحديث: الأعمدة materialized المتداخلة: إصلاحات لفحص الحجم #62773 (Eliot Hautefeuille).
- إصلاح عدم تطبيق FINAL modifier في CTE مع المحلّل #62811 (Duc Canh Le).
- إصلاح crash في الدالة
formatRowمع format JSONوواجهة HTTP #62840 (Anton Popov). - Azure: إصلاح إنشاء عنوان URL النهائي من كائن endpoint #62850 (Daniel Pozo Escalona).
- إصلاح codec GCD #62853 (Nikita Taranov).
- إصلاح مفتاح LowCardinality(Nullable) في hyperrectangle #62866 (Amos Bird).
- إصلاح fromUnixtimestamp في صياغة Joda عندما تتجاوز قيمة الإدخال UInt32 #62901 (KevinyhZou).
- تعطيل optimize_rewrite_aggregate_function_with_if لـ sum(nullable) #62912 (Raúl Marín).
- إصلاح PREWHERE في StorageBuffer مع أنواع أعمدة مختلفة في source table. #62916 (Nikolai Kochetov).
- إصلاح التعامل غير الصحيح مع فشل إنشاء directory لمفتاح cache في البيانات المؤقتة في cache #62925 (Kseniia Sumarokova).
- gRPC: إصلاح crash عند اتصال peer عبر IPv6 #62978 (Konstantin Bogdanov).
- إصلاح احتمال حدوث CHECKSUM_DOESNT_MATCH (وأخطاء أخرى) أثناء fetches المتماثلة #62987 (Azat Khuzhin).
- إصلاح الإنهاء بسبب استثناء غير ملتقط في البيانات المؤقتة في cache #62998 (Kseniia Sumarokova).
- إصلاح التحويل الضمني في optimize_rewrite_aggregate_function_with_if #62999 (Raúl Marín).
- إصلاح الاستثناء غير المُعالَج في ~RestorerFromBackup #63040 (Vitaly Baranov).
- عدم إزالة ثوابت الخادم من مفتاح GROUP BY للاستعلام الثانوي. #63047 (Nikolai Kochetov).
- إصلاح التقدير الخاطئ لرتابة الدالة abs #63097 (Duc Canh Le).
- تعيين اسم الخادم لمصافحة SSL في محرك MongoDB #63122 (Alexander Gololobov).
- استخدام قاعدة البيانات التي يحددها المستخدم بدلًا من “config” للتحقق من إصدار بروتوكول wire في MongoDB #63126 (Alexander Gololobov).
إصدار ClickHouse 24.3 LTS، 2024-03-27. العرض التقديمي، الفيديو
ملاحظات الترقية
- يكون الإعداد
allow_experimental_analyzerمفعّلًا افتراضيًا، وهو ينقل query analysis إلى تنفيذ جديد يتمتع بتوافق أفضل واكتمال أكبر للميزات. وتُعد ميزة “analyzer” الآن في مرحلة بيتا بدلًا من تجريبية. يمكنك استعادة السلوك القديم عبر ضبطcompatibilityعلى24.2أو تعطيل الإعدادallow_experimental_analyzer. شاهد الفيديو على YouTube. - يتيح ClickHouse استخدام بيانات binary عشوائية في نوع البيانات String، الذي يكون عادةً UTF-8. ولا تدعم Strings في Parquet/ORC/Arrow سوى UTF-8. لذلك يمكنك اختيار نوع البيانات في Arrow الذي سيُستخدم مع نوع البيانات String في ClickHouse — أي String أو Binary. ويجري التحكم في ذلك عبر الإعدادات
output_format_parquet_string_as_stringوoutput_format_orc_string_as_stringوoutput_format_arrow_string_as_string. ومع أن Binary أكثر دقةً وتوافقًا، فإن استخدام String افتراضيًا يتوافق مع توقعات المستخدمين في معظم الحالات. ويدعم Parquet/ORC/Arrow العديد من طرق الضغط، بما في ذلك lz4 وzstd. ويدعم ClickHouse جميع طرق الضغط هذه. وبعض الأدوات الأقل جودة تفتقر إلى دعم طريقة الضغط الأسرعlz4، ولذلك جعلناzstdالخيار الافتراضي. ويجري التحكم في ذلك عبر الإعداداتoutput_format_parquet_compression_methodوoutput_format_orc_compression_methodوoutput_format_arrow_compression_method. لقد غيّرنا القيمة الافتراضية إلىzstdفي Parquet وORC، ولكن ليس في Arrow (إذ يركّز على الاستخدامات منخفضة المستوى). #61817 (Alexey Milovidov). - في إصدار ClickHouse الجديد، ستستخدم الدوال
geoDistanceوgreatCircleDistanceوgreatCircleAngleنوع البيانات ذي الفاصلة العائمة مزدوجة الدقة 64-بت في الحسابات الداخلية وفي نوع الإرجاع إذا كانت جميع الوسائط من نوع Float64. وهذا يُغلق #58476. في الإصدارات السابقة، كانت الدالة تستخدم دائمًا Float32. يمكنك العودة إلى السلوك القديم عبر ضبطgeo_distance_returns_float64_on_float64_argumentsعلىfalseأو ضبطcompatibilityعلى24.2أو أقدم. #61848 (Alexey Milovidov). بالمشاركة في التأليف مع Geet Patel. - أصبحت أجزاء البيانات القديمة الموجودة في الذاكرة مهملة منذ الإصدار 23.5، ولم تعد مدعومة منذ الإصدار 23.10. والآن أُزيلت الشيفرة المتبقية. استكمالًا لـ #55186 و#45409. ومن غير المرجح أنك استخدمت أجزاء البيانات الموجودة في الذاكرة لأنها كانت متاحة فقط قبل الإصدار 23.5، وفقط عند تفعيلها يدويًا بتحديد SETTINGS المقابلة لجدول MergeTree. للتحقق مما إذا كانت لديك أجزاء بيانات موجودة في الذاكرة، شغّل الاستعلام التالي:
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. ولتعطيل استخدام أجزاء البيانات الموجودة في الذاكرة، نفّذALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. قبل الترقية من إصدارات ClickHouse القديمة، تحقّق أولًا من عدم وجود أجزاء بيانات في الذاكرة لديك. وإذا وُجدت أجزاء بيانات في الذاكرة، فعطّلها أولًا، ثم انتظر حتى تختفي جميع أجزاء البيانات الموجودة في الذاكرة، وبعد ذلك واصل الترقية. #61127 (Alexey Milovidov). - تغيّر اسم العمود من
duration_msإلىduration_microsecondsفي جدولsystem.zookeeperليعكس حقيقة أن المدة تُقاس بدقة الميكروثانية. #60774 (Duc Canh Le). - ارفض استعلامات INSERT الواردة إذا كانت إعدادات مستوى الاستعلام
async_insertوdeduplicate_blocks_in_dependent_materialized_viewsمفعّلتين معًا. يتحكم في هذا السلوك الإعدادthrow_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert، وهو مفعّل افتراضيًا. ويُعد هذا استكمالًا لـ https://github.com/ClickHouse/ClickHouse/pull/59699، وهو مطلوب لإزالة العائق أمام https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov). - نُقلت الأداة
clickhouse-copierإلى repository منفصل على GitHub: https://github.com/ClickHouse/copier. لم تعد مضمنة في الحزمة، لكنها لا تزال متاحة للتنزيل بشكل منفصل. هذا يغلق: #60734 هذا يغلق: #60540 هذا يغلق: #60250 هذا يغلق: #52917 هذا يغلق: #51140 هذا يغلق: #47517 هذا يغلق: #47189 هذا يغلق: #46598 هذا يغلق: #40257 هذا يغلق: #36504 هذا يغلق: #35485 هذا يغلق: #33702 هذا يغلق: #26702. - لزيادة التوافق مع MySQL، أصبح الاسم البديل التوافقي
locateيقبل الآن الوسيطات(needle, haystack[, start_pos])افتراضيًا. ويمكن استعادة السلوك السابق(haystack, needle, [, start_pos])عبر ضبطfunction_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze). - يُمنع
SimpleAggregateFunctionفيORDER BYلجداولMergeTreeافتراضيًا (مثلAggregateFunction، إذ يُمنع كلاهما لأنه غير قابل للمقارنة) (استخدمallow_suspicious_primary_keyللسماح بهما). #61399 (Azat Khuzhin). - أصبح database engine
Ordinaryفي حالة Deprecated. ستتلقى تحذيرًا في clickhouse-client إذا كان server لديك يستخدمه. هذا يغلق #52229. #56942 (shabroo).
ميزة جديدة
- إضافة دعم لقراءة النسخ الاحتياطية وكتابتها بصيغة
tar(إلى جانبzip). #59535 (josh-hildred). - إضافة دعم لحاويات S3 Express. #59965 (Nikita Taranov).
- السماح بإرفاق الأجزاء من قرص مختلف (باستخدام النسخ بدلًا من الرابط الثابت). #60112 (Unalian).
- جداول
Memoryمحدودة الحجم: يجري التحكم بها عبر إعداداتهاmin_bytes_to_keep, max_bytes_to_keep, min_rows_to_keepوmax_rows_to_keep. #60612 (Jake Bamrah). - فصل الحدود الخاصة بعدد الاستعلامات المنتظرة والمنفَّذة. تمت إضافة إعداد خادم جديد
max_waiting_queriesيحدّ من عدد الاستعلامات المنتظرة بسببasync_load_databases. ولم تعد الحدود الحالية لعدد الاستعلامات المنفَّذة تحتسب الاستعلامات المنتظرة. #61053 (Sergei Trifonov). - تمت إضافة جدول
system.keywordsالذي يحتوي على جميع الكلمات المفتاحية من المُحلِّل. وهو مطلوب أساسًا وسيُستخدم لتحسين اختبار Fuzzing وإبراز الصياغة. #51808 (Nikita Mikhaylov). - إضافة دعم
ATTACH PARTITION ALL. #61107 (Kirill Nikiforov). - إضافة دالة جديدة،
getClientHTTPHeader. وبذلك أُغلقت #54665. بالمشاركة في التأليف مع @lingtaolf. #61820 (Alexey Milovidov). - إضافة
generate_seriesكدالة جدولية (اسم بديل متوافق مع PostgreSQL للدالة الحاليةnumbers). تُولِّد هذه الدالة جدولًا يحتوي على متتالية حسابية من الأعداد الطبيعية. #59390 (divanik). - إضافة وضع دعم لـ
topK/topkWeighedيُرجع عدد القيم وخطأها. #54508 (UnamedRus). - تمت إضافة الدالة
toMillisecondالتي تُرجع مكوّن الملّي ثانية للقيم من النوعDateTimeأوDateTime64. #60281 (Shaun Struwig). - السماح بتهيئة معالجات إعادة توجيه HTTP لـ clickhouse-server. على سبيل المثال، يمكنك جعل
/يعيد التوجيه إلى واجهة Play. #60390 (Alexey Milovidov).
تحسين الأداء
- جرى تحسين الدالة
dotProductلتجنّب نسخ الذاكرة غير الضروري والمكلف. #60928 (Robert Schulze). - أصبحت طباعة الأعداد الصحيحة ذات 256 بت أسرع بمقدار 30 مرة. #61100 (Raúl Marín).
- إذا كان المفتاح الأساسي للجدول يحتوي في معظمه على أعمدة غير مفيدة، فلا تُحتفَظ هذه الأعمدة في الذاكرة. ويُتحكَّم في ذلك عبر إعداد جديد هو
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columnsبقيمة افتراضية0.9، ما يعني أنه في المفتاح الأساسي المركّب، إذا كان أحد الأعمدة يغيّر قيمته في 0.9 على الأقل من إجمالي الحالات، فلن تُحمَّل الأعمدة التي تليه. #60255 (Alexey Milovidov). - تحسين أداء أساليب التجميع المتسلسلة عند وجود عدة أعمدة
Nullable. #55809 (Amos Bird). - إنشاء مخرجات JSON عند الحاجة فقط لتحسين أداء ALL JOIN. #58278 (LiuNeng).
- أصبحت اتصالات HTTP/HTTPS مع الخدمات الخارجية، مثل AWS S3، قابلة لإعادة الاستخدام في جميع حالات الاستخدام، حتى عندما تكون الاستجابة من فئة 3xx أو 4xx. #58845 (Sema Checherinda).
- تحسينات على الدوال التجميعية
argMin/argMax/any/anyLast/anyHeavy، وكذلك على استعلاماتORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín). - تحسين بسيط لمرشّح العمود. ويمكن خفض Peak memory إلى 44% من القيمة الأصلية في بعض الحالات. #59698 (李扬).
- تنفيذ الدالة
multiIfبأسلوب columnar عندما يكون النوع الأساسي لنوع النتيجة عددًا. #60384 (李扬). - أصبح
mutexأسرع (بما يقارب الضعف). #60823 (Azat Khuzhin). - تصريف عدة اتصالات بالتوازي عند اكتمال distributed query. #60845 (lizhuoyu5).
- تحسين نقل البيانات بين أعمدة من نوع Nullable رقمي أو Nullable نصي، ما يحسّن بعض الاختبارات المعيارية المصغّرة. #60846 (李扬).
- ستتأثر العمليات على filesystem cache بدرجة أقل من التنافس على القفل. #61066 (Alexey Milovidov).
- تحسين ARRAY JOIN وعمليات JOIN الأخرى عبر منع تحسين خاطئ من المصرّف. إغلاق #61074. #61075 (李扬).
- إذا كان الاستعلام الذي يحتوي على خطأ نحوي يتضمن المطابِق
COLUMNSمع تعبير نمطي، فكان التعبير النمطي يُصرَّف برمجيًا في كل مرة أثناء التراجع في المحلل النحوي، بدلًا من تصريفه مرة واحدة فقط. كان هذا خطأً جوهريًا. وقد وُضع التعبير النمطي المُصرَّف في AST. لكن الحرف A في AST يعني “abstract”، أي إنه يجب ألا يحتوي على كائنات ثقيلة. ويمكن إنشاء أجزاء من AST والتخلص منها أثناء التحليل النحوي، بما في ذلك أثناء عدد كبير من عمليات التراجع. يؤدي ذلك إلى بطء في جانب التحليل النحوي، وبالتالي يتيح تنفيذ هجوم DoS بواسطة مستخدمreadonly. لكن المشكلة الرئيسية هي أن ذلك يعيق التقدم في أدوات Fuzzers. #61543 (Alexey Milovidov). - أُضيفت مرحلة جديدة في المحلّل لتحسين العامل IN عند وجود قيمة واحدة. #61564 (LiuNeng).
- يقوم DNSResolver بخلط مجموعة عناوين IP التي تم حلّها، وهو ما يلزم لتحقيق استخدام متوازن لعدة نقاط نهاية في AWS S3. #60965 (Sema Checherinda).
ميزة تجريبية
- دعم القراءة المتوازية لـ Azure Blob Storage. يحسّن ذلك أداء تخزين الكائنات التجريبي في Azure. #61503 (SmitaRKulkarni).
- إضافة
WriteBufferغير متزامن لـ Azure Blob Storage، على غرار S3. يحسّن ذلك أداء تخزين الكائنات التجريبي في Azure. #59929 (SmitaRKulkarni). - استخدام الهوية المُدارة لعمليات الإدخال/الإخراج الخاصة بالنسخ الاحتياطية عند استخدام Azure Blob Storage. وإضافة إعداد يمنع ClickHouse من محاولة إنشاء حاوية غير موجودة، وهو ما يتطلب أذونات على مستوى حساب التخزين. #61785 (Daniel Pozo Escalona).
- إضافة الإعداد
parallel_replicas_allow_in_with_subquery = 1، الذي يتيح عمل الاستعلامات الفرعية لـ IN مع النسخ المتماثلة المتوازية. #60950 (Nikolai Kochetov). - تغيير يتعلق بالنسخ المتماثل “بدون نسخ”: يجب حذف جميع أقفال zero-copy المرتبطة بجدول عند حذف الجدول. كما يجب إزالة الدليل الذي يحتوي على هذه الأقفال. #57575 (Sema Checherinda).
تحسين
- استخدام
MergeTreeكمحرك الجدول الافتراضي. #60524 (Alexey Milovidov) - تفعيل
output_format_pretty_row_numbersافتراضيًا، لأنه أفضل من ناحية سهولة الاستخدام. #61791 (Alexey Milovidov). - في الإصدار السابق، لم تكن بعض الأرقام في تنسيقات Pretty منسّقة بالقدر الكافي. #61794 (Alexey Milovidov).
- لن تُقتطع القيمة الطويلة في تنسيقات Pretty إذا كانت هي القيمة الوحيدة في مجموعة النتائج، كما في ناتج الاستعلام
SHOW CREATE TABLE. #61795 (Alexey Milovidov). - على غرار
clickhouse-local، سيقبلclickhouse-clientالخيار--output-formatكمرادف للخيار--format. وهذا يغلق #59848. #61797 (Alexey Milovidov). - إذا كان stdout عبارة عن طرفية ولم يُحدَّد تنسيق الإخراج، فسيستخدم
clickhouse-clientوالأدوات المشابهةPrettyCompactافتراضيًا، كما في الوضع التفاعلي. وسيتعاملclickhouse-clientوclickhouse-localمع وسيطات سطر الأوامر الخاصة بتنسيقات الإدخال والإخراج بطريقة موحّدة. وهذا يغلق #61272. #61800 (Alexey Milovidov). - تجميع الأرقام بشرطات سفلية في تنسيقات Pretty لتحسين سهولة القراءة. ويتحكم في ذلك إعداد جديد هو
output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov). - إضافة إمكانية تجاوز إعدادات INSERT الأولية عبر
SYSTEM FLUSH DISTRIBUTED. #61832 (Azat Khuzhin). - تفعيل profiling للمعالجات افتراضيًا (الوقت المستغرق/عدد البايتات الداخلة والخارجة لعمليات الفرز والتجميع، …). #61096 (Azat Khuzhin).
- دعم الملفات التي لا تحتوي على امتداد تنسيق في قاعدة بيانات Filesystem. #60795 (Kruglov Pavel).
- جعل جميع أسماء التنسيقات غير حساسة لحالة الأحرف، مثل Tsv أو TSV أو tsv أو حتى rowbinary. #60420 (豪肥肥). وسأقدّر استمرارك في كتابتها بالشكل الصحيح، مثل
JSON😇 لاJson🤮، لكن لا بأس إن كتبتها بالطريقة التي تفضّلها. - تمت إضافة الوضع
none_only_activeللإعدادdistributed_ddl_output_mode. #60340 (Alexander Tokmakov). - أصبحت ألوان لوحة المعلومات المتقدمة أفضل قليلًا للرسوم البيانية متعددة الخطوط. #60391 (Alexey Milovidov).
- تحتوي لوحة المعلومات المتقدمة الآن على عناصر تحكم تظل مرئية دائمًا أثناء التمرير. وهذا يتيح لك إضافة مخطط جديد دون الحاجة إلى التمرير إلى الأعلى. #60692 (Alexey Milovidov).
- أثناء تنفيذ الاستعلام
MODIFY COLUMNللعروض المادية، تحقّق من بنية الجدول الداخلي للتأكد من وجود كل عمود. #47427 (sunny). - يمكن استخدام أنواع String وEnums في السياق نفسه، مثل: المصفوفات، واستعلامات UNION، والتعبيرات الشرطية. وبذلك تُغلَق المشكلة #60726. #60727 (Alexey Milovidov).
- السماح بتعريف Enums في بنية البيانات الخارجية لمعالجة الاستعلامات (وهو جدول مؤقت فوري يمكنك توفيره لاستعلامك). #57857 (Duc Canh Le).
- أُخذت الصفوف المحذوفة حذفًا خفيفًا في الاعتبار عند اختيار الأجزاء المراد دمجها، بحيث يمكن تقدير حجم القرص للجزء الناتج على نحوٍ أدق. #58223 (Zhuo Qiu).
- أُضيفت تعليقات للأعمدة في المزيد من جداول النظام. استكمالًا لـ https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
- أصبح بالإمكان الآن استخدام الأعمدة الافتراضية في PREWHERE. وهذا مفيد للأعمدة الافتراضية غير الثابتة مثل
_part_offset. #59033 (Amos Bird). وتحسّنت سهولة الاستخدام العامة للأعمدة الافتراضية. فقد أصبح الآن مسموحًا باستخدام الأعمدة الافتراضية فيPREWHERE(وهو أمر مفيد للأعمدة الافتراضية غير الثابتة مثل_part_offset). كما أصبحت الوثائق المضمّنة متاحة الآن للأعمدة الافتراضية بوصفها تعليقًا على العمود في استعلامDESCRIBEعند تمكين الإعدادdescribe_include_virtual_columns. #60205 (Anton Popov). - بدلًا من استخدام مفتاح ثابت، أصبح تخزين الكائنات الآن يُنشئ مفتاحًا لتحديد صلاحية إزالة الكائنات. #59495 (Sema Checherinda).
- السماح باستخدام “local” بوصفه نوع تخزين الكائنات بدلًا من “local_blob_storage”. #60165 (Kseniia Sumarokova).
- التفريغ المتوازي لكتل INSERT المعلّقة في محرك Distributed عند
DETACH/إيقاف الخادم وعندSYSTEM FLUSH DISTRIBUTED(لن يعمل التوازي إلا إذا كانت لديك سياسة متعددة الأقراص لجدول ما، كما هو الحال مع كل شيء في محرك Distributed حاليًا). #60225 (Azat Khuzhin). - إضافة إعداد لفرض استخدام read-through cache لعمليات الدمج. #60308 (Kseniia Sumarokova).
- تحسين لبروتوكول التوافق مع MySQL. تشير المشكلة #57598 إلى اختلاف في السلوك يتعلق بالتعامل مع المعاملات. إذ يُبلَّغ عن إرسال COMMIT/ROLLBACK عندما لا تكون هناك معاملة نشطة على أنه خطأ، خلافًا لسلوك MySQL. #60338 (PapaToemmsn).
- أصبحت الدالة
substringتملك الآن اسمًا مستعارًا جديدًا هوbyteSlice. #60494 (Robert Schulze). - أُعيدت تسمية إعداد الخادم
dns_cache_max_sizeإلىdns_cache_max_entriesلتقليل الالتباس. #60500 (Kirill Nikiforov). - لم يعد
SHOW INDEX | INDEXES | INDICES | KEYSيفرز النتائج حسب أعمدة المفتاح الأساسي (إذ كان ذلك غير بديهي). #60514 (Robert Schulze). - تحسين في Keeper: إيقاف التشغيل أثناء بدء التشغيل عند اكتشاف snapshot غير صالحة لتجنّب فقدان البيانات. #60537 (Antonio Andelic).
- تحديث tzdata إلى 2024a. #60768 (Raúl Marín).
- تحسين في Keeper: دعم
leadership_expiry_msفي إعدادات Keeper. #60806 (Brokenice0415). - استنتاج الأعداد ذات الصيغة الأسّية دائمًا في تنسيقات JSON بغضّ النظر عن الإعداد
input_format_try_infer_exponent_floats. وإضافة الإعدادinput_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objectsالذي يتيح استخدام String type للمسارات الملتبسة بدلًا من إرجاع استثناء أثناء استنتاج named Tuples من JSON objects. #60808 (Kruglov Pavel). - إضافة دعم لبنية
START TRANSACTIONالمستخدمة عادةً في صياغة MySQL، ما يحلّ https://github.com/ClickHouse/ClickHouse/discussions/60865. #60886 (Zach Naimon). - إضافة علامة إلى خوارزمية merge join ذات الفرز الكامل للتعامل مع null على أنها الأكبر أو الأصغر. وبذلك يمكن أن يصبح السلوك متوافقًا مع أنظمة SQL الأخرى، مثل Apache Spark. #60896 (loudongfeng).
- دعم اكتشاف تنسيق الإخراج بحسب امتداد الملف في
clickhouse-clientوclickhouse-local. #61036 (豪肥肥). - تحديث حد الذاكرة في بيئة التشغيل عند تغيّر قيمة CGroups في Linux. #61049 (Han Fei).
- إضافة الدالة
toUInt128OrZero، التي سقطت سهوًا في السابق (ويرتبط ذلك بـ https://github.com/ClickHouse/ClickHouse/pull/945). كما جرى جعل الأسماء المستعارة التوافقيةFROM_UNIXTIMEوDATE_FORMAT(وهما ليستا أصليتين في ClickHouse وتوجدان فقط للتوافق مع MySQL) غير حسّاستين لحالة الأحرف، كما هو متوقّع من الأسماء المستعارة المتوافقة مع SQL. #61114 (Alexey Milovidov). - تحسينات على عمليات التحقق من الوصول، بما يتيح سحب صلاحيات غير ممنوحة في حال لم يكن لدى المستخدم المستهدف أيضًا امتيازات السحب نفسها. مثال:
GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit). - إصلاح الدالة
has()مع عمودNullable(يُصلح #60214). #61249 (Mikhail Koviazin). - أصبح من الممكن الآن تحديد السمة
merge="true"في substitutions الخاصة بالإعدادات للأشجار الفرعية<include from_zk="/path" merge="true">. وعند تحديد هذه السمة، سيقوم ClickHouse بدمج الشجرة الفرعية مع الإعدادات الحالية، وإلا فسيكون السلوك الافتراضي هو إلحاق محتوى جديد بالإعدادات. #61299 (alesapin). - إضافة مقاييس غير متزامنة لتعيينات الذاكرة الافتراضية:
VMMaxMapCountوVMNumMaps. إغلاق #60662. #61354 (Tuan Pham Anh). - استخدام الإعداد
temporary_files_codecفي جميع المواضع التي تُنشأ فيها بيانات مؤقتة، مثل الفرز باستخدام الذاكرة الخارجية وGROUP BY باستخدام الذاكرة الخارجية. وكان يعمل سابقًا فقط مع خوارزمية JOINpartial_merge. #61456 (Maksim Kita). - إضافة إعداد جديد
max_parser_backtracksيتيح تقييد تعقيد parsing الاستعلام. #61502 (Alexey Milovidov). - تقليل التنازع أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات. #61524 (Kseniia Sumarokova).
- منع الوضع المُجزّأ لطابور StorageS3 لأنه ستُعاد كتابته. #61537 (Kseniia Sumarokova).
- إصلاح خطأ مطبعي: من
use_leagcy_max_levelإلىuse_legacy_max_level. #61545 (William Schoeffel). - إزالة بعض الإدخالات المكررة في
system.blob_storage_log. #61622 (YenchangChan). - إضافة الدالة
current_userكاسم بديل للتوافق مع MySQL. #61770 (Yarik Briukhovetskyi). - إصلاح عدم اتساق حالات الدوال التجميعية ذات الفاصلة العائمة في clusters مختلطة من x86-64 وARM #60610 (Harry Lee).
تحسينات البناء/الاختبار/التغليف
- بات مُحلّل الاستعلامات اللحظي يعمل الآن على AArch64. في الإصدارات السابقة، كان يعمل فقط عندما لا يقضي البرنامج وقتًا داخل استدعاء نظام (
syscall). #60807 (Alexey Milovidov). - أُضيف إصدار ClickHouse إلى وسوم Docker. يُغلق #54224. #60949 (Nikolay Monkov).
- ترقية
prqlcإلى 0.11.3. #60616 (Maximilian Roos). - إضافة مُولِّد اختبارات عشوائية عام لنص الاستعلام في
clickhouse-local. #61508 (Alexey Milovidov).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- إصلاح finished_mutations_to_keep=0 في MergeTree (كما تنص الوثائق، فإن 0 تعني الاحتفاظ بكل شيء) #60031 (Azat Khuzhin).
- كان هناك خلل في تحسين FINAL، وهكذا وصفه المؤلف: “PartsSplitter invalid ranges for the same part”. #60041 (Maksim Kita).
- كان هناك خلل في Apache Hive، وهو تجريبي وغير مدعوم. #60262 (shanfengp).
- تحسين للنسخ المتماثلة المتوازية التجريبية: فرض إعادة التحليل إذا تغيّرت النسخ المتماثلة المتوازية #60362 (Raúl Marín).
- إصلاح استخدام نوع البيانات الوصفية العادي مع خيار تهيئة الأقراص الجديد #60396 (Kseniia Sumarokova).
- محاولة إصلاح الخطأ المنطقي ‘Cannot capture column because it has incompatible type’ في mapContainsKeyLike #60451 (Kruglov Pavel).
- تجنب حساب الاستعلامات الفرعية القياسية في CREATE TABLE. #60464 (Nikolai Kochetov).
- إصلاح حالة توقف متبادل في التحليل المتوازي عند تخطي عدد كبير من الصفوف بسبب الأخطاء #60516 (Kruglov Pavel).
- كان هناك خلل في دعم KQL (Kusto) التجريبي: إصلاح
max_query_size_for_kql_compound_operator: #60534 (Yong Wang). - إصلاح في Keeper: إضافة مهلات عند انتظار سجلات commit #60544 (Antonio Andelic).
- عدم إخراج تلميحات رقمية لأنواع التاريخ #60577 (Raúl Marín).
- إصلاح القراءة من MergeTree مع الدوال غير الحتمية في عامل التصفية #60586 (Kruglov Pavel).
- إصلاح الخطأ المنطقي عند وجود نوع قيمة غير صحيح لإعداد التوافق #60596 (Kruglov Pavel).
- إصلاح(prql): معالج panic أكثر متانة #60615 (Maximilian Roos).
- إصلاح
intDivلوسائط decimal وdate #60672 (Yarik Briukhovetskyi). - إصلاح: توسيع CTE في استعلام alter modify #60682 (Yakov Olkhovskiy).
- إصلاح system.parts لمحرك قاعدة بيانات غير Atomic/Ordinary (أي Memory) #60689 (Azat Khuzhin).
- إصلاح “Invalid storage definition in metadata file” للعروض ذات المعلمات #60708 (Azat Khuzhin).
- إصلاح تجاوز سعة المخزن المؤقت في CompressionCodecMultiple #60731 (Alexey Milovidov).
- إزالة العبارات غير المنطقية من SQL/JSON #60738 (Alexey Milovidov).
- إزالة تعليمة assertion خاطئة في الدالة التجميعية quantileGK #60740 (李扬).
- إصلاح خطأ insert-select + insert_deduplication_token عبر ضبط streams على 1 #60745 (Jordi Villar).
- منع تعيين ترويسات metadata مخصصة في عمليات multipart upload غير المدعومة #60748 (Francisco J. Jurado Moreno).
- إصلاح toStartOfInterval #60763 (Andrey Zvonov).
- إصلاح تعطل في arrayEnumerateRanked #60764 (Raúl Marín).
- إصلاح تعطل عند استخدام input() في INSERT SELECT JOIN #60765 (Kruglov Pavel).
- إصلاح تعطل عند اختلاف قيمة allow_experimental_analyzer في subqueries #60770 (Dmitry Novik).
- إزالة الاستدعاء التكراري عند القراءة من S3 #60849 (Antonio Andelic).
- إصلاح احتمال التعليق عند حدوث خطأ في HashedDictionaryParallelLoader #60926 (vdimir).
- إصلاح RESTORE غير المتزامن مع قاعدة بيانات Replicated (ميزة تجريبية) #60934 (Antonio Andelic).
- إصلاح deadlock في async inserts إلى جداول
Logعبر البروتوكول الأصلي #61055 (Anton Popov). - إصلاح التنفيذ المؤجل للوسيطة الافتراضية في dictGetOrDefault لـ RangeHashedDictionary #61196 (Kruglov Pavel).
- إصلاح عدة أخطاء في groupArraySorted #61203 (Raúl Marín).
- إصلاح إعادة تهيئة Keeper للملف التنفيذي المستقل #61233 (Antonio Andelic).
- إصلاح استخدام session_token في محرك S3 #61234 (Kruglov Pavel).
- إصلاح احتمال ظهور نتيجة غير صحيحة للدالة التجميعية
uniqExact#61257 (Anton Popov). - إصلاح أخطاء في أمر show database #61269 (Raúl Marín).
- إصلاح logical error في تخزين RabbitMQ مع الأعمدة MATERIALIZED #61320 (vdimir).
- إصلاح CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
- إصلاح استعلام ATTACH مع ON CLUSTER خارجي #61365 (Nikolay Degterinsky).
- إصلاح تحسين المفاتيح المتتالية للمفاتيح القابلة لأن تكون NULL #61393 (Anton Popov).
- إصلاح مشكلة split في DAG الخاص بـ actions #61458 (Raúl Marín).
- إصلاح إكمال عملية RESTORE فاشلة #61466 (Vitaly Baranov).
- تعطيل async_insert_use_adaptive_busy_timeout بشكل صحيح مع إعدادات التوافق #61468 (Raúl Marín).
- السماح بوضع العمليات في الطابور ضمن pool الاستعادة #61475 (Nikita Taranov).
- إصلاح حالة عدم اتساق عند قراءة system.parts باستخدام UUID. #61479 (Dan Wu).
- إصلاح ALTER QUERY MODIFY SQL SECURITY #61480 (pufit).
- إصلاح تعطل في window view (ميزة تجريبية) #61526 (Alexey Milovidov).
- إصلاح
repeatمع الأعداد الصحيحة غير الأصلية #61527 (Antonio Andelic). - إصلاح الوسيط
-sالخاص بالعميل #61530 (Mikhail f. Shiryaev). - إصلاح تعطل في arrayPartialReverseSort #61539 (Raúl Marín).
- إصلاح البحث في السلاسل النصية مع موضع ثابت #61547 (Antonio Andelic).
- إصلاح تسبّب addDays في حدوث خطأ عند استخدام DateTime64 #61561 (Shuai li).
- منع نوع الإدخال LowCardinality لـ JSONExtract #61617 (Julia Kartseva).
- إصلاح
system.part_logمن أجل async insert مع إزالة التكرار #61620 (Antonio Andelic). - إصلاح استثناء
Non-ready setفي system.parts. #61666 (Nikolai Kochetov). - إصلاح actual_part_name لـ REPLACE_RANGE (
Entry actual part isn't empty yet) #61675 (Alexander Tokmakov). - إصلاح تقرير sanitizer في
multiSearchAllPositionsCaseInsensitiveUTF8بسبب UTF-8 غير الصحيح #61749 (pufit). - إصلاح ملاحظة تفيد بأن إطار RANGE غير مدعوم للأعمدة Nullable. #61766 (YuanLiu).
إصدار ClickHouse 24.2 بتاريخ 2024-02-29. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- التحقق من صحة الأنواع المريبة/التجريبية داخل الأنواع المتداخلة. سابقًا، لم نكن نتحقق من صحة هذه الأنواع (باستثناء JSON) داخل الأنواع المتداخلة مثل Array/Tuple/Map. #59385 (Kruglov Pavel).
- إضافة فحص سلامة لعدد خيوط التنفيذ وأحجام block. #60138 (Raúl Marín).
- عدم استنتاج قيم Float المكتوبة بالصياغة الأسّية افتراضيًا. تمت إضافة الإعداد
input_format_try_infer_exponent_floatsالذي يعيد السلوك السابق (وهو معطّل افتراضيًا). يُغلق #59476. #59500 (Kruglov Pavel). - السماح بإحاطة عمليات alter بأقواس. ويمكن التحكم في إضافة الأقواس عبر إعداد
format_alter_operations_with_parentheses. افتراضيًا، في queries المنسّقة، تتم إضافة الأقواس لأننا نخزّن عمليات alter المنسّقة في بعض المواضع على هيئة metadata (مثل: mutations). يوضّح Syntax الجديد بعض queries التي تنتهي فيها عمليات alter بقائمة. على سبيل المثال:ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN cلا يمكن parse له بشكل صحيح باستخدام Syntax القديم. في Syntax الجديد، تكون queryALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)واضحة. لا تستطيع الإصدارات الأقدم قراءة Syntax الجديد، لذلك قد يؤدي استخدامه إلى مشكلات إذا كانت إصدارات ClickHouse الأحدث والأقدم مختلطة داخل cluster واحد. #59532 (János Benjamin Antal). - إصلاح لمشكلة أمان في materialized view كانت تسمح للمستخدم بإجراء insert في table من دون grants المطلوبة لذلك. ويتحقق الإصلاح من أن لدى المستخدم permission لإجراء insert ليس فقط في materialized view، بل أيضًا في جميع underlying tables. وهذا يعني أن بعض queries التي كانت تعمل سابقًا قد تفشل الآن برسالة
Not enough privileges. ولمعالجة هذه المشكلة، يقدّم هذا الإصدار ميزة جديدة ضمن SQL security الخاصة بـ views https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 #60439 (pufit).
ميزة جديدة
- أُضيف بناء نحوي جديد يتيح تحديد المستخدم المعرِّف في view/materialized view. ويتيح ذلك تنفيذ عمليات SELECT/INSERT من الـ views من دون الحاجة إلى أذونات صريحة على الجداول الأساسية. وبذلك، سيحتوي الـ View الأذونات ضمنيًا. #54901 #60439 (pufit).
- إضافة محاولة لاكتشاف تنسيق الملف تلقائيًا أثناء استدلال المخطط إذا كان غير معروف في محركات
file/s3/hdfs/url/azureBlobStorage. يُغلق #50576. #59092 (Kruglov Pavel). - تنفيذ الضبط التلقائي لمهلات asynchronous insert. وقد أُضيفت الإعدادات التالية: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate. #58486 (Julia Kartseva).
- إتاحة تعيين QUOTA لعدد إخفاقات تسجيل الدخول المتتالية الأقصى. #54737 (Alexey Gerasimchuck).
- aggregate function جديدة باسم
groupArrayIntersect. متابعة لـ: #49862. #59598 (Yarik Briukhovetskyi). - دعم النسخ الاحتياطي والاستعادة لـ
AzureBlobStorage. يحل #50747. #56988 (SmitaRKulkarni). - يمكن للمستخدم الآن تحديد سلسلة Template مباشرةً في الاستعلام باستخدام
format_schema_rows_templateكبديل عنformat_template_row. يُغلق #31363. #59088 (Shaun Struwig). - تنفيذ التحويل التلقائي لجداول merge tree من أنواع مختلفة إلى محرك Replicated. أنشئ ملف
convert_to_replicatedفارغًا في دليل بيانات الجدول (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) وسيُحوَّل هذا الجدول تلقائيًا عند بدء تشغيل الخادم في المرة التالية. #57798 (Kirill). - أُضيف الاستعلام
ALTER TABLE table FORGET PARTITION partitionالذي يزيل عُقد ZooKeeper المرتبطة بـ partition فارغ. #59507 (Sergei Trifonov). هذه ميزة مخصصة للمستخدمين المتقدمين. - دعم ملف بيانات اعتماد JWT لمحرك الجدول NATS. #59543 (Nickolaj Jepsen).
- تنفيذ جدول
system.dns_cache، وقد يكون مفيدًا في استكشاف مشكلات DNS وإصلاحها. #59856 (Kirill Nikiforov). - سيقبل codec
LZ4HCمستوى جديدًا هو 2، وهو أسرع من الحد الأدنى السابق 3، لكن بمعدل ضغط أقل. في الإصدارات السابقة، كانLZ4HC(2)وما دونه يعادلLZ4HC(3). المؤلف: Cyan4973. #60090 (Alexey Milovidov). - تمت إضافة الجدول
system.dns_cache، وقد يكون مفيدًا في Debug مشكلات DNS. كما تمت إضافة إعداد خادم جديد هو dns_cache_max_size. #60257 (Kirill Nikiforov). - تمت إضافة دعم الإصدار أحادي الوسيط من table function
merge، بالشكلmerge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥). - تمت إضافة دعم الوسائط الموضعية السالبة. يُغلق #57736. #58292 (flynn).
- تمت إضافة دعم لتحديد مجموعة من المستخدمين المسموح لهم لبعض إعدادات S3 في config باستخدام المفتاح
user. #60144 (Antonio Andelic). - تمت إضافة table function
mergeTreeIndex. وهي تعرض محتويات ملفات index وmarks الخاصة بجداولMergeTree. ويمكن استخدامها لأغراض introspection. الصياغة:mergeTreeIndex(database, table, [with_marks = true])حيث إنdatabase.tableهو جدول موجود يستخدم المحركMergeTree. #58140 (Anton Popov).
ميزة تجريبية
- أُضيفت الدالة
seriesOutliersDetectTukeyلاكتشاف القيم الشاذة في البيانات المتسلسلة باستخدام خوارزمية حدود Tukey. #58632 (Bhavna Jindal). ضع في اعتبارك أن هذا السلوك سيتغير في إصدار التصحيح التالي. - أُضيفت الدالة
variantTypeالتي تُرجع قيمة Enum باسم نوع Variant لكل صف. #59398 (Kruglov Pavel). - دعم
LEFT JOINوALL INNER JOINوالاستعلامات الفرعية البسيطة للنسخ المتماثلة المتوازية (فقط مع المحلّل). يحدّد الإعداد الجديدparallel_replicas_prefer_local_joinما إذا كان سيتم تنفيذJOINمحليًا (افتراضيًا) أو باستخدامGLOBAL JOIN. يجب أن تكون جميع الجداول موجودة على كل نسخة متماثلة منcluster_for_parallel_replicas. ويُستخدم الإعدادان الجديدانmin_external_table_block_size_rowsوmin_external_table_block_size_bytesلدمج الكتل الصغيرة المُرسلة إلى الجداول المؤقتة (فقط مع المحلّل). #58916 (Nikolai Kochetov). - السماح بإنشاء الجداول بشكل متزامن في قاعدة البيانات
Replicatedأثناء إضافة نسخة متماثلة جديدة أو استعادتها. #59277 (Konstantin Bogdanov). - تنفيذ عامل مقارنة لقيم
Variantوإدراج قيم Field بشكل صحيح في عمودVariant. وعدم السماح افتراضيًا بإنشاء نوعVariantيضم أنواع Variant متشابهة (مع السماح بذلك عبر الإعدادallow_suspicious_variant_types). إغلاق #59996. إغلاق #59850. #60198 (Kruglov Pavel). - تعطيل JOIN للنسخ المتماثلة المتوازية مع CTE (من دون المحلّل) #59239 (Raúl Marín).
تحسين الأداء
- سيستخدم المفتاح الأساسي مقدارًا أقل من الذاكرة. #60049 (Alexey Milovidov).
- تحسين استخدام الذاكرة للمفتاح الأساسي وبعض العمليات الأخرى. #60050 (Alexey Milovidov).
- سيُحمَّل المفتاح الأساسي للجداول إلى الذاكرة بشكل lazy عند أول وصول. ويتحكم في ذلك إعداد MergeTree الجديد
primary_key_lazy_load، وهو مفعّل افتراضيًا. ويوفر هذا عدة مزايا: - لن يُحمَّل للجداول غير المستخدمة؛ - إذا لم تكن الذاكرة كافية، فسيتم طرح استثناء عند أول استخدام بدلًا من حدوث ذلك عند بدء تشغيل الخادوم. لكن لهذا أيضًا عدة عيوب: - ستظهر كلفة زمن الاستجابة لتحميل المفتاح الأساسي عند أول query بدلًا من قبل قبول الاتصالات؛ وقد يؤدي هذا نظريًا إلى مشكلة thundering herd. هذا يُغلق #11188. #60093 (Alexey Milovidov). - دوال مسافة متجهية تُستخدم في البحث المتجهي. #58866 (Robert Schulze).
- إضافة الدالة المتجهية
dotProductالمفيدة في البحث المتجهي. #60202 (Robert Schulze). - إضافة إمكانية short-circuit للدالة
dictGetOrDefault. يُغلق #52098. #57767 (jsc0218). - تحسين في Keeper: تخزين مقدار محدد فقط من السجلات مؤقتًا في الذاكرة، مع التحكم بذلك عبر
latest_logs_cache_size_thresholdوcommit_logs_cache_size_threshold. #59460 (Antonio Andelic). - تحسين في Keeper: تقليل حجم عقدة البيانات بدرجة أكبر. #59592 (Antonio Andelic).
- مواصلة تحسين إخفاق التفرع في الدالة
ifعندما يكون نوع النتيجة هوFloat*/Decimal*/*Int*، استكمالًا لـ https://github.com/ClickHouse/ClickHouse/pull/57885. #59148 (李扬). - تحسين الدالة
ifعندما يكون نوع الإدخالMap، مع تسريع يصل إلى نحو 10x. #59413 (李扬). - تحسين أداء النوع
Int8عبر تطبيق strict aliasing (وهو متوفر بالفعل لـUInt8وجميع الأنواع الصحيحة الأخرى). #59485 (Raúl Marín). - تحسين أداء sum/avg بشكل شرطي للأنواع bigint وbig decimal عبر تقليل إخفاق التفرع. #59504 (李扬).
- تحسين أداء عمليات SELECT مع mutations النشطة. #59531 (Azat Khuzhin).
- تحسين الدالة
isNotNullباستخدام AVX2. #59621 (李扬). - تحسين أداء ASOF JOIN للبيانات المرتبة أو شبه المرتبة. #59731 (Maksim Kita).
- تبيّن أن القيمة الافتراضية السابقة البالغة 1 MB لـ
async_insert_max_data_sizeكانت صغيرة جدًا. وستصبح القيمة الجديدة 10 MiB. #59536 (Nikita Mikhaylov). - استخدام عدة خيوط تنفيذ أثناء قراءة البيانات الوصفية للجداول من نسخة احتياطية عند تنفيذ أمر RESTORE. #60040 (Vitaly Baranov).
- الآن، إذا كان
StorageBufferيحتوي على أكثر من shard واحد (num_layers> 1)، فسيجري التفريغ في الخلفية بالتزامن لجميع الـ shards باستخدام عدة خيوط تنفيذ. #60111 (alesapin).
تحسين
- عندما يكون format الإخراج هو
Prettyوكانت الكتلة تتكوّن من قيمة رقمية واحدة تتجاوز المليون، فسيُطبع رقم سهل القراءة على يمين الجدول. #60379 (rogeryk). - أُضيفت الإعدادات
split_parts_ranges_into_intersecting_and_non_intersecting_finalوsplit_intersecting_parts_ranges_into_layers_final. هذه الإعدادات مطلوبة لتعطيل التحسينات للاستعلامات التي تستخدمFINAL، وهي مخصّصة لأغراض تصحيح الأخطاء فقط. #59705 (Maksim Kita). في الواقع، لا يقتصر استخدامها على ذلك فقط، إذ يمكنها أيضًا خفض استخدام الذاكرة على حساب الأداء. - أُعيدت تسمية الإعداد
extract_kvp_max_pairs_per_rowإلىextract_key_value_pairs_max_pairs_per_row. وقد ظهرت المشكلة (الاختصار غير الضروري في اسم الإعداد) في https://github.com/ClickHouse/ClickHouse/pull/43606. كما جرى إصلاح توثيق هذا الإعداد. #59683 (Alexey Milovidov). #59960 (jsc0218). - أصبح تنفيذ
ALTER COLUMN MATERIALIZEعلى عمود يحتوي على تعبيرDEFAULTأوMATERIALIZEDيطابق الدلالات بدقة. #58023 (Duc Canh Le). - جرى تفعيل آلية
backoffالأُسّي للتعامل مع الأخطاء أثناء mutations. وسيؤدي ذلك إلى تقليل استخدام CPU، واستخدام الذاكرة، وأحجام ملفات السجل. #58036 (MikhailBurdukov). - أُضيف تحسين لاحتساب حدث Profile
InitialQuery. #58195 (Unalian). - أصبح من الممكن تعريف
volume_priorityفيstorage_configuration. #58533 (Andrey Zvonov). - أُضيف دعم النوع
Date32في codec T64. #58738 (Hongbin Ma). - أصبح مسموحًا باستخدام الفواصل اللاحقة في الأنواع التي تحتوي على عدة عناصر. #59119 (Aleksandr Musorin).
- يمكن الآن تحديد إعدادات Distributed table engine في server configuration file (على غرار MergeTree settings)، مثل:
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin). - أُضيفت إعادة المحاولة عند انقطاع الاتصال وانتهاء sessions أثناء قراءة
system.zookeeper. وهذا مفيد عند قراءة عدد كبير من الصفوف من جدولsystem.zookeeper، خصوصًا في حال وجود حالات انقطاع اتصال مُفتعلة لاختبار الأعطال. #59388 (Alexander Gololobov). - لم تعد الأرقام التي تبدأ بأصفار تُفسَّر على أنها أعداد ثُمانية عندما يكون
input_format_values_interpret_expressions=0. #59403 (Joanna Hulboj). - عند بدء التشغيل، وكلما تغيّرت ملفات config، يحدّث ClickHouse الحدود الصارمة للذاكرة الخاصة بـ memory tracker الإجمالي لديه. وتُحتسب هذه الحدود استنادًا إلى server settings المختلفة وحدود cgroups (على Linux). في السابق، كان المسار
/sys/fs/cgroup/memory.max(في cgroups v2) مضمّنًا بشكل ثابت في الشيفرة. ونتيجة لذلك، كانت حدود ذاكرة cgroup v2 المضبوطة للمجموعات المتداخلة (التسلسلات الهرمية)، مثل/sys/fs/cgroup/my/nested/group/memory.max، تُتجاهل. وقد أُصلح ذلك الآن. أما سلوك حدود ذاكرة v1 فيبقى دون تغيير. #59435 (Robert Schulze). - أُضيفت profile events جديدة لمراقبة الوقت المستغرَق في حساب PK/projections/secondary indices أثناء عمليات
INSERT. #59436 (Nikita Taranov). - أصبح بالإمكان تحديد نقطة بداية لـ S3Queue في وضع Ordered عند الإنشاء باستخدام الإعداد
s3queue_last_processed_path. #59446 (Kseniia Sumarokova). - أصبحت التعليقات الخاصة بـ system tables متاحة أيضًا في
system.tablesضمنclickhouse-local. #59493 (Nikita Mikhaylov). - جدول
system.zookeeper: في السابق كانت النتيجة بالكامل تتراكم في الذاكرة ثم تُعاد على هيئة chunk كبيرة واحدة. من شأن هذا التغيير أن يساعد في تقليل استهلاك الذاكرة عند قراءة عدد كبير من rows منsystem.zookeeper، وإظهار التقدم المرحلي (عدد rows التي تمت قراءتها حتى الآن)، وتجنّب الوصول إلى Connection timeout عندما تكون result set كبيرة. #59545 (Alexander Gololobov). - أصبح dashboard الآن يفهم حالتي الضغط وعدم الضغط لـ #hash في عناوين URL أيضًا (للتوافق مع الإصدارات السابقة). استكمالًا لـ #59124. #59548 (Amos Bird).
- جرت ترقية Intel QPL (المستخدَم بواسطة codec
DEFLATE_QPL) من v1.3.1 إلى v1.4.0. كما أُصلح خلل في آلية polling timeout، إذ لاحظنا أنه في بعض الحالات لا يعمل timeout بالشكل الصحيح؛ فإذا حدث timeout، فقد يعالج كل من IAA وCPU الـ buffer بشكل concurrent. وفي الوقت الحالي، من الأفضل التأكد من أن حالة codec الخاصة بـ IAA ليست QPL_STS_BEING_PROCESSED، ثم fallback إلى codec البرمجي. #59551 (jasperzhu). - لا تعرض تحذيرًا بشأن إصدار server في ClickHouse Cloud، لأن ClickHouse Cloud تتولى Upgrades السلسة تلقائيًا. #59657 (Alexey Milovidov).
- بعد الاستخراج الذاتي، يُنقل الـ binary المؤقت بدلًا من نسخه. #59661 (Yakov Olkhovskiy).
- إصلاح فكّ تكديس stack على Apple macOS. يُغلق هذا #53653. #59690 (Nikita Mikhaylov).
- التحقق من تجاوز stack في parsers حتى إذا أساء المستخدم ضبط الإعداد
max_parser_depthعلى قيمة مرتفعة جدًا. يُغلق هذا #59622. #59697 (Alexey Milovidov). #60434 - توحيد سلوك named collection المُنشأة عبر XML وSQL في Kafka storage. #59710 (Pervakov Grigorii).
- إذا كانت قيمة
merge_max_block_size_bytesصغيرة بما يكفي وكانت الجداول تحتوي على rows عريضة (strings أو tuples)، فقد تعلق background merges في حلقة لا نهائية. وقد أُصلح هذا السلوك. متابعة لـ https://github.com/ClickHouse/ClickHouse/pull/59340. #59812 (Nikita Mikhaylov). - السماح باستخدام uuid في replica_path إذا كان CREATE TABLE يتضمنه صراحةً. #59908 (Azat Khuzhin).
- إضافة العمود
metadata_versionالخاص بجداول ReplicatedMergeTree إلى جدول النظامsystem.tables. #59942 (Maksim Kita). - تحسين في Keeper: إرسال المقاييس/الأحداث المرتبطة بـ Keeper فقط إلى Prometheus. #59945 (Antonio Andelic).
- ستعرض لوحة المعلومات المقاييس عبر إصدارات ClickHouse المختلفة حتى إذا تغيّرت بنية جداول النظام بعد الترقية. #59967 (Alexey Milovidov).
- السماح بتحميل معلومات AZ من ملف. #59976 (Konstantin Bogdanov).
- تحسين في Keeper: إضافة عمليات إعادة المحاولة عند الإخفاق في العمليات المرتبطة بـ Disk. #59980 (Antonio Andelic).
- إضافة إعداد config جديد
backups.remove_backup_files_after_failure:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov). - استخدام مسار احتياطي عند نسخ ملفات S3 من GCP إلى النسخ عبر buffer إذا أعاد GCP الخطأ
Internal Errorمع رمز خطأ HTTPGATEWAY_TIMEOUT. #60164 (Maksim Kita). - تنفيذ short-circuit للدالة
ULIDStringToDateTime. #60211 (Juan Madurga). - إضافة العمود
query_idإلى الجدولينsystem.backupsوsystem.backup_log. وإضافة stacktrace الخاص بالخطأ إلى العمودerror. #60220 (Maksim Kita). - أصبحت الاتصالات عبر منفذ MySQL تعمل تلقائيًا بالإعداد
prefer_column_name_to_alias = 1لدعم QuickSight دون إعدادات إضافية. كذلك، أصبح الإعدادانmysql_map_string_to_text_in_show_columnsوmysql_map_fixed_string_to_text_in_show_columnsمفعّلين افتراضيًا الآن، ويؤثران أيضًا فقط في اتصالات MySQL. وهذا يزيد التوافق مع المزيد من أدوات ذكاء الأعمال. #60365 (Robert Schulze). - إصلاح race condition في شيفرة JavaScript كانت تؤدي إلى تكرار المخططات فوق بعضها بعضًا. #60392 (Alexey Milovidov).
تحسينات البناء/الاختبار/التغليف
- أُضيفت عمليات بناء واختبارات مع جمع التغطية باستخدام الاستبطان. استكمالًا لـ #56102. #58792 (Alexey Milovidov).
- تحديث سلسلة أدوات Rust في
corrosion-cmakeعند ضبط متغير سلسلة أدوات الترجمة المتقاطعة في CMake. #59309 (Aris Tritas). - إضافة بعض اختبارات الإدخال العشوائي إلى ASTLiterals. #59383 (Raúl Marín).
- إذا كنت تريد تشغيل نصوص initdb البرمجية في كل مرة تبدأ فيها حاوية ClickHouse، فعليك تهيئة متغير البيئة CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS. #59808 (Alexander Nikolaev).
- إزالة إمكانية تعطيل المكوّنات العامة في ClickHouse (مثل server/client/…)، مع الإبقاء على بعض المكوّنات التي تتطلب مكتبات إضافية (مثل ODBC أو Keeper). #59857 (Azat Khuzhin).
- سيُجري Query fuzzer اختبارات على SETTINGS داخل الاستعلامات. #60087 (Alexey Milovidov).
- إضافة دعم لبناء ClickHouse باستخدام clang-19 (master). #60448 (Alexey Milovidov).
إصلاح خطأ (سلوك خاطئ يمكن للمستخدم ملاحظته في إصدار مستقر رسمي)
- إصلاح الخطأ “Non-ready set” في TTL WHERE. #57430 (Nikolai Kochetov).
- إصلاح خلل في الدالة
quantilesGK#58216 (李扬). - إصلاح سلوك غير صحيح في
intDivمع وسيطات Decimal #59243 (Yarik Briukhovetskyi). - إصلاح
translateمع مُدخلات FixedString #59356 (Raúl Marín). - إصلاح حساب البصمة في Keeper #59439 (Antonio Andelic).
- إصلاح تتبعات المكدس للملفات التنفيذية التي لا تحتوي على رموز تصحيح #59444 (Azat Khuzhin).
- إصلاح
ASTAlterCommand::formatImplفي حالة الإعدادات الخاصة بالعمود… #59445 (János Benjamin Antal). - إصلاح
SELECT * FROM [...] ORDER BY ALLمع المحلّل #59462 (zhongyuankai). - إصلاح استثناء محتمل غير مُلتقط أثناء إلغاء استعلام موزّع #59487 (Azat Khuzhin).
- جعل MAX يستخدم القواعد نفسها التي تستخدمها permutation للأنواع المعقدة #59498 (Raúl Marín).
- إصلاح حالة حدّية عند تمرير
update_insert_deduplication_token_in_dependent_materialized_views#59544 (Jordi Villar). - إصلاح النتيجة غير الصحيحة لـ
arrayElement/mapعند القيم الفارغة #59594 (Raúl Marín). - إصلاح تعطل في topK عند دمج حالات فارغة #59603 (Raúl Marín).
- إصلاح جدول موزّع بمفتاح تقسيم ثابت #59606 (Vitaly Baranov).
- إصلاح مشكلة في KQL اكتشفها WingFuzz #59626 (Yong Wang).
- إصلاح الخطأ “Read beyond last offset” في AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
- الحفاظ على الاسم المستعار للدالة في RewriteSumFunctionWithSumAndCountVisitor #59658 (Raúl Marín).
- إصلاح وقت بدء الاستعلام في الاستعلامات غير الأوّلية #59662 (Raúl Marín).
- التحقق من أنواع الوسيطات لفهرس التخطي
minmax#59733 (Anton Popov). - إصلاح الدالة leftPad / rightPad مع مُدخلات FixedString #59739 (Raúl Marín).
- إصلاح مشكلة في AST fuzzer في الدالة
countMatches#59752 (Robert Schulze). - RabbitMQ: إصلاح حالة الرسائل التي لم تُؤكَّد ولم تُرفَض #59775 (Kseniia Sumarokova).
- إصلاح تنفيذ StorageURL جزءًا من الاستعلام في خيط واحد #59833 (Michael Kolupaev).
- S3Queue: إصلاح قيمة غير مهيأة #59897 (Kseniia Sumarokova).
- إصلاح parsing لتعابير partition المحاطة بأقواس #59901 (János Benjamin Antal).
- إصلاح تعطل في format JSONColumnsWithMetadata عبر HTTP #59925 (Kruglov Pavel).
- عدم إعادة كتابة sum إلى count إذا كانت القيمة المعادة مختلفة في المحلّل #59926 (Azat Khuzhin).
- إصلاح تعطل عند قراءة UniqExactSet #59928 (Maksim Kita).
- إصلاح metadata_version غير الصالح في ReplicatedMergeTree #59946 (Maksim Kita).
- إصلاح حالة data race في
StorageDistributed#59987 (Nikita Taranov). - Docker: تشغيل نصوص التهيئة عند تفعيل الخيار بدلًا من تعطيله #59991 (jktng).
- إصلاح INSERT إلى
SQLiteعند وجود علامة اقتباس مفردة (بالهروب من علامات الاقتباس المفردة باستخدام علامة اقتباس بدلًا من الشرطة المائلة العكسية) #60015 (Azat Khuzhin). - إصلاح عدة أخطاء منطقية في
arrayFold#60022 (Raúl Marín). - إصلاح إزالة optimize_uniq_to_count للاسم المستعار للعمود #60026 (Raúl Marín).
- إصلاح استثناء محتمل من جدول S3Queue عند إسقاطه #60036 (Kseniia Sumarokova).
- إصلاح formatting لـ NOT مع القيم الحرفية المفردة #60042 (Raúl Marín).
- استخدام max_query_size من Context في DDLLogEntry بدلًا من القيمة الثابتة 4096 #60083 (Kruglov Pavel).
- إصلاح التنسيق غير المتسق للاستعلامات التي تحتوي على جداول باسم
table. إصلاح التنسيق الخاطئ للاستعلامات التي تتضمنUNION ALLوINTERSECTوEXCEPTعندما لا تكون بنيتها خطية. هذا يُغلق #52349. إصلاح التنسيق الخاطئ لاستعلاماتSYSTEM، بما في ذلكSYSTEM ... DROP FILESYSTEM CACHEوSYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEWوSYSTEM ENABLE/DISABLE FAILPOINT. إصلاح تنسيق استعلامات DDL المُعلَّمة بمعلمات. إصلاح تنسيق استعلامDESCRIBE FILESYSTEM CACHE. إصلاح التنسيق غير الصحيح لـSET param_...(استعلام يضبط معلمة). إصلاح التنسيق غير الصحيح لاستعلاماتCREATE INDEX. إصلاح التنسيق غير المتسق لـCREATE USERوالاستعلامات المشابهة. إصلاح التنسيق غير المتسق لـCREATE SETTINGS PROFILE. إصلاح التنسيق غير الصحيح لـALTER ... MODIFY REFRESH. إصلاح التنسيق غير المتسق لدوال window إذا كانت إزاحات frame تعبيرات. إصلاح التنسيق غير المتسق لـRESPECT NULLSوIGNORE NULLSإذا استُخدما بعد دالة تنفّذ operator (مثلplus). إصلاح التنسيق العبثي لـSYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM .... إصلاح التنسيق غير المتسق للاستعلامات غير الصالحة التي تحتوي علىGROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS. إصلاح التنسيق غير المتسق لـGRANT CURRENT GRANTS. إصلاح التنسيق غير المتسق لـCREATE TABLE (... COLLATE). بالإضافة إلى ذلك، أصلحتُ التنسيق غير الصحيح لـEXPLAINفي الاستعلامات الفرعية (#60102). وأُصلح التنسيق غير الصحيح لدوال lambda (#60012). وأُضيف فحص حتى لا تعود هذه الفظائع لتفوتنا مستقبلًا. #60095 (Alexey Milovidov). - إصلاح التنسيق غير المتسق لـ
EXPLAINفي الاستعلامات الفرعية #60102 (Alexey Milovidov). - إصلاح تعطل cosineDistance مع Nullable #60150 (Raúl Marín).
- السماح بتحويل Bools ذات التمثيل النصي إلى قيم Bool فعلية #60160 (Robert Schulze).
- إصلاح
system.s3queue_log#60166 (Kseniia Sumarokova). - إصلاح arrayReduce مع اسم دالة تجميعية Nullable #60188 (Raúl Marín).
- إخفاء المعلومات الحساسة لـ
S3Queue#60233 (Kseniia Sumarokova). - إصلاح رموز استثناءات HTTP. #60252 (Austin Kothig).
- S3Queue: إصلاح خطأ (ويُصلح أيضًا الاختبار غير المستقر test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
- إصلاح استخدام قيمة غير مهيأة ونتيجة غير صالحة في دوال التجزئة مع IPv6 #60359 (Kruglov Pavel).
- إصلاح OptimizeDateOrDateTimeConverterWithPreimageVisitor مع وسائط NULL #60453 (Raúl Marín).
- إصلاح خطأ بسيط كان يمنع تنفيذ استعلامات الجداول الموزعة المُرسلة من عملاء لهجتَي KQL أو PRQL على النسخ المتماثلة. #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).
إصدار ClickHouse 24.1، 2024-01-30. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصبح الإعداد
print_pretty_type_namesمفعّلًا افتراضيًا. يمكنك تعطيله للاحتفاظ بالسلوك السابق، أو تنفيذSET compatibility = '23.12'. #57726 (Alexey Milovidov). - تم إهمال إعداد MergeTree
clean_deleted_rows، ولم يعد له أي تأثير. ولم تعد الكلمة المفتاحيةCLEANUPالخاصة بـOPTIMIZEمسموحًا بها افتراضيًا (إلا إذا كانallow_experimental_replacing_merge_with_cleanupمفعّلًا). #58316 (Alexander Tokmakov). - لم تعد الدالة
reverseDNSQueryمتاحة. وبذلك أُغلقت #58368. #58369 (Alexey Milovidov). - جرى تفعيل تغييرات متعددة لتحسين آلية access control في configuration file. تؤثر هذه التغييرات في السلوك، لذا راجع
config.xmlضمن القسمaccess_control_improvements. وإذا لم تكن متأكدًا، فأبقِ القيم في configuration file كما كانت في الإصدار السابق. #58584 (Alexey Milovidov). - جرى تحسين عمل
sumMapFilteredمع قيم NaN. فأصبحت قيم NaN توضع الآن في النهاية (بدلًا من توزيعها عشوائيًا)، وتُعد مختلفة عن أي قيمة أخرى. كما أصبح-0يُعامل الآن على أنه مساوٍ لـ0؛ وبما أن القيم 0 تُستبعَد، فإن قيم-0تُستبعَد أيضًا. #58959 (Raúl Marín). - ستعمل الدالة
visibleWidthوفقًا للتوثيق. ففي الإصدارات السابقة، كانت تكتفي بعدّ code points بعد string serialization، مثل الدالةlengthUTF8، لكنها لم تكن تراعي المحارف ذات العرض الصفري، والمحارف المُركّبة، والمحارف كاملة العرض، وعلامات الجدولة، ومحارف الحذف. وقد تغيّر هذا السلوك الآن بما يتوافق مع التوثيق. وإذا أردت الاحتفاظ بالسلوك السابق، فاضبطfunction_visible_width_behaviorعلى0، أو اضبطcompatibilityعلى23.12أو إصدار أقدم. #59022 (Alexey Milovidov). - تم تعطيل dialect
Kustoإلى أن يُصلَح هذان الخطآن: #59037 و #59036. #59305 (Alexey Milovidov). وستؤدي أي محاولة لاستخدامKustoإلى ظهور Exception. - لم يعد التنفيذ الأكثر كفاءة للمُعدِّل
FINALيضمن الحفاظ على الترتيب حتى عند تعيينmax_threads = 1. وإذا كنت تعتمد على السلوك السابق، فاضبطenable_vertical_finalعلى 0 أوcompatibilityعلى23.12.
ميزة جديدة
- تنفيذ نوع البيانات
Variantالذي يمثّلunionلأنواع بيانات أخرى. يعني النوعVariant(T1, T2, ..., TN)أن كل صف من هذا النوع يحمل قيمة من النوعT1أوT2أو … أوTN، أو لا يحمل أيًّا منها (القيمةNULL). يتوفر نوعVariantعبر الإعدادallow_experimental_variant_type. مرجع: #54864. #58047 (Kruglov Pavel). - يمكن الآن تحديد بعض الإعدادات (حاليًا
min_compress_block_sizeوmax_compress_block_size) على مستوى العمود، بحيث تكون لها أولوية على الإعداد المناظر على مستوى الجدول. مثال:CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();. #55201 (Duc Canh Le). - إضافة الدالة التجميعية
quantileDD، إلى جانبquantilesDDوmedianDDالمقابلتين لها. وهي تستند إلى DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf. ### إدخال توثيقي للتغييرات الموجّهة للمستخدم. #56342 (Srikanth Chekuri). - السماح بتهيئة أي نوع من أنواع object storage مع أي نوع من أنواع metadata type. #58357 (Kseniia Sumarokova).
- إضافة الوضعين
null_status_on_timeout_only_activeوthrow_only_activeإلىdistributed_ddl_output_mode، بما يتيح تجنّب انتظار replicas غير النشطة. #58350 (Alexander Tokmakov). - إضافة الدالة
arrayShinglesلحساب المصفوفات الفرعية؛ فعلى سبيل المثال، تُرجعarrayShingles([1, 2, 3, 4, 5], 3)القيمة[[1,2,3],[2,3,4],[3,4,5]]. #58396 (Zheng Miao). - إضافة الدوال
punycodeEncodeوpunycodeDecodeوidnaEncodeوidnaDecode، وهي مفيدة لتحويل أسماء النطاقات الدولية إلى تمثيل ASCII وفقًا لمعيار IDNA. #58454 (Robert Schulze). - إضافة دوال similarity functions للسلاسل النصية:
dramerauLevenshteinDistanceوjaroSimilarityوjaroWinklerSimilarity. #58531 (Robert Schulze). - إضافة إعدادين هما
output_format_compression_levelلتغيير مستوى Compression للإخراج، وoutput_format_compression_zstd_window_logلتعيين window size للضغط صراحةً وتمكين الوضع بعيد المدى لضغط zstd إذا كانت Compression method للإخراج هيzstd. يُطبَّق ذلك علىINTO OUTFILEوعند الكتابة إلى table functionsfileوurlوhdfsوs3وazureBlobStorage. #58539 (Duc Canh Le). - تعطيل ANSI escape sequences تلقائيًا في Pretty formats إذا لم يكن الإخراج طرفية. إضافة وضع
autoجديد إلى الإعدادoutput_format_pretty_color. #58614 (Shaun Struwig). - إضافة الدالة
sqidDecodeالتي تفك ترميز Sqids. #58544 (Robert Schulze). - إتاحة قراءة قيم Bool كسلاسل String في JSON input formats. يتم ذلك عبر الإعداد
input_format_json_read_bools_as_stringsالمفعّل افتراضيًا. #58561 (Kruglov Pavel). - أُضيفت الدالة
seriesDecomposeSTLالتي تفكّك سلسلة زمنية إلى مكوّن موسمي واتجاه ومكوّن متبقٍ. #57078 (Bhavna Jindal). - تقديم MySQL Binlog Client لـ MaterializedMySQL: اتصال binlog واحد لعدة قواعد بيانات. #57323 (Val Doroshchuk).
- توفّر Intel QuickAssist Technology (QAT) تسريعًا عتاديًا للضغط والتشفير. حصل ClickHouse على compression codec جديد هو
ZSTD_QATيستفيد من QAT لضغط zstd. يستخدم هذا codec كلًا من QATlib من Intel وQAT ZSTD Plugin من Intel. حاليًا، لا يمكن تسريع سوى الضغط عتاديًا (مع اللجوء إلى fallback برمجي إذا تعذّرت تهيئة QAT)، بينما يعمل فك الضغط دائمًا برمجيًا. #57509 (jasperzhu). - تنفيذ الطريقة الجديدة لتوليد مفاتيح object storage لأقراص S3. ويمكن الآن تعريف format باستخدام صياغة Regex الخاصة بـ
re2عبر الخيارkey_templateفي وصف القرص. #57663 (Sema Checherinda). - يحتوي الجدول system.dropped_tables_parts على parts الخاصة بجداول system.dropped_tables (وهي الجداول التي أُسقطت ولكن لم تُزل بعد). #58038 (Yakov Olkhovskiy).
- إضافة الإعداد
max_materialized_views_size_for_tableلتقييد عدد materialized views المرتبطة بجدول. #58068 (zhongyuankai). - تحسينات على
clickhouse-format: دعم استعلامات INSERT معVALUES؛ ودعم comments (استخدم--commentsلإخراجها)؛ ودعم الخيار--max_line_lengthلتنسيق الاستعلامات الطويلة فقط بصيغة multiline. #58246 (vdimir). - Attach جميع system tables في
clickhouse-local، بما في ذلكsystem.parts. هذا يغلق #58312. #58359 (Alexey Milovidov). - دعم data types من نوع
Enumفي الدالةtransform. هذا يغلق #58241. #58360 (Alexey Milovidov). - إضافة الجدول
system.database_engines. #58390 (Bharat Nallan). والسماح بتسجيل database engines بشكل مستقل في codebase. #58365 (Bharat Nallan). والسماح بتسجيل Interpreters بشكل مستقل. #58443 (Bharat Nallan). - أُضيف المعدِّل
FROM <Replicas>إلى الاستعلامSYSTEM SYNC REPLICA LIGHTWEIGHT. يضمن المعدِّلFROMأننا ننتظر عمليات الجلب وعمليات drop-ranges فقط لنسخ المصدر المحددة، وكذلك لأي replica غير موجودة في ZooKeeper أو لهاsource_replicaفارغ. #58393 (Jayme Bird). - أُضيف الإعداد
update_insert_deduplication_token_in_dependent_materialized_views. يتيح هذا الإعداد تحديث رمز منع تكرار الإدراج باستخدام معرّف الجدول أثناء الإدراج في العروض المادية التابعة. يغلق #59165. #59238 (Maksim Kita). - أُضيفت العبارة
SYSTEM RELOAD ASYNCHRONOUS METRICSالتي تُحدِّث المقاييس غير المتزامنة. وهي مفيدة في الغالب للاختبار والتطوير. #53710 (Robert Schulze).
تحسين الأداء
- أُعيدت كتابة آلية التنسيق للنسخ المتماثلة المتوازية لتحسين التوازي وموضعية ذاكرة التخزين المؤقت. وقد اختُبرت من حيث قابلية التوسع الخطي على مئات النسخ المتماثلة. كما أُضيف إليها دعم القراءة بالترتيب. #57968 (Nikita Taranov).
- استُبدل التخزين المؤقت الصادر لـ HTTP بمخازن ClickHouse الأصلية. وأُضيفت مقاييس لاحتساب عدد البايتات للواجهات. #56064 (Yakov Olkhovskiy).
- ستُدمج حالات التجميع الكبيرة لـ
uniqExactبالتوازي في الاستعلامات الموزعة. #59009 (Nikita Taranov). - خُفِّض استخدام الذاكرة بعد القراءة من جداول
MergeTree. #59290 (Anton Popov). - خُفِّض استخدام الذاكرة في الدمج الرأسي. #59340 (Anton Popov).
- تجنُّب الاستهلاك الهائل للذاكرة أثناء بدء تشغيل Keeper في مزيد من الحالات. #58455 (Antonio Andelic).
- تحسين في Keeper: تقليل استخدام الذاكرة للعُقد المخزّنة. #59002 (Antonio Andelic).
- تنفيذ
FINALأكثر ملاءمة لذاكرة التخزين المؤقت. ملاحظة بشأن تغيّر السلوك: سابقًا، كانت الاستعلامات التي تستخدم المُعدِّلFINALوتقرأ عبرsingle stream(مثلmax_threads = 1) تنتج مخرجات مرتبة حتى بدون تحديد عبارةORDER BYصراحةً. لم يعد ذلك مضمونًا عندما تكونenable_vertical_final = true(وهي كذلك افتراضيًا). #54366 (Duc Canh Le). - تجاوز النسخ الإضافي في
ReadBufferFromIStream، الذي يُستخدم مثلًا للقراءة من S3. #56961 (Nikita Taranov). - تحسين دالة عنصر المصفوفة عندما يكون الإدخال Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal). كانت التطبيقات السابقة تُجري عمليات تخصيص أكثر من اللازم. وقد تصل زيادة السرعة الناتجة عن هذا التحسين إلى ~6x، خصوصًا عندما يكون نوع الإدخال Array(Map). #56403 (李扬).
- قراءة العمود مرة واحدة عند قراءة أكثر من عمود فرعي منه في الأجزاء compact. #57631 (Kruglov Pavel).
- أُعيدت كتابة AST للدالة
sum(column + constant). وهذا متاح كمرحلة تحسين في المُحلِّل #57853 (Jiebin Sun). - أصبح تقييم الدالة
matchيستفيد الآن من فهارس التجاوزngrambf_v1وtokenbf_v1. #57882 (凌涛). - أصبح تقييم الدالة
matchيستفيد الآن من الفهارس المعكوسة. #58284 (凌涛). - لا يعود
FINALفي MergeTree يقارن الصفوف من الجزء نفسه غير L0. #58142 (Duc Canh Le). - تسريع استدعاءات iota (ملء المصفوفة بأرقام متتالية). #58271 (Raúl Marín).
- تسريع MIN/MAX للأنواع غير الرقمية. #58334 (Raúl Marín).
- حسّن دمج عوامل التصفية (كما في
PREWHEREمتعدد المراحل) باستخدام تعليمات BMI2/SSE المضمّنة #58800 (Zhiguo Zhou). - استخدم خيط تنفيذ واحدًا أقل في
clickhouse-local. #58968 (Alexey Milovidov). - حسّن أداء الدالة
multiIfعندما يكون النوع Nullable. #57745 (KevinyhZou). - أضف
SYSTEM JEMALLOC PURGEلتطهير صفحات jemalloc غير المستخدمة، وSYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILEللتحكم في ملف تعريف jemalloc إذا كان Profiler مفعّلًا. وأُضيف أيضًا أمر 4LW مرتبط بـ jemalloc في Keeper:jmstلتفريغ إحصاءات jemalloc، وjmfpوjmepوjmdpللتحكم في ملف تعريف jemalloc إذا كان Profiler مفعّلًا. #58665 (Antonio Andelic). - خفّض استهلاك الذاكرة أثناء إنشاء النسخ الاحتياطية إلى S3. #58962 (Vitaly Baranov).
تحسين
- أُضيفت تعليقات (أوصاف موجزة) إلى جميع أعمدة جداول النظام. وهناك عدة أسباب لذلك: - نحن نستخدم جداول النظام كثيرًا، وقد يكون من الصعب جدًا أحيانًا على المطور فهم الغرض من عمود معيّن ومعناه. - نحن نُجري تغييرات كثيرة على جداول النظام (بإضافة أعمدة جديدة أو تعديل الأعمدة الموجودة)، وتكون وثائقها قديمة دائمًا. على سبيل المثال، ألقِ نظرة على صفحة التوثيق الخاصة بـ
system.parts. فهي تفتقد الكثير من الأعمدة - ونود في النهاية إنشاء التوثيق مباشرةً من ClickHouse. #58356 (Nikita Mikhaylov). - السماح بالاستعلامات التي لا تحتوي على أسماء مستعارة للاستعلامات الفرعية في
PASTE JOIN. #58654 (Yarik Briukhovetskyi). - تمكين تكامل
MySQL/MariaDBعلى macOS. هذا يُغلق #21191. #46316 (Alexey Milovidov) (Robert Schulze). - تعطيل
max_rows_in_set_to_optimize_joinافتراضيًا. #56396 (vdimir). - إضافة مَعلمة config باسم
<host_name>تتيح تجنب تحليل hostnames في استعلامات DDL مع ON CLUSTER ومحركات قواعد البيانات Replicated. وهذا يخفف احتمال تعطل الطابور في حال حدوث تغيير في تعريف cluster. يُغلق #57573. #57603 (Nikolay Degterinsky). - زيادة
load_metadata_threadsإلى 16 لذاكرة التخزين المؤقت لنظام الملفات. سيؤدي ذلك إلى تسريع بدء تشغيل الخادم. #57732 (Alexey Milovidov). - إضافة إمكانية تقييد merges/mutations (
max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server). #57877 (Azat Khuzhin). - استُبدل العمود غير الموثّق (boolean)
is_hot_reloadableفي جدول النظامsystem.server_settingsبالعمود (Enum8)changeable_without_restartذي القيم الممكنةNoوYesوIncreaseOnlyوDecreaseOnly. كما تم توثيق هذا العمود أيضًا. #58029 (skyoct). - يدعم Cluster discovery الآن تعيين username وpassword، ويُغلق #58063. #58123 (vdimir).
- دعم query parameters في
ALTER TABLE ... PART. #58297 (Azat Khuzhin). - إنشاء consumers لجداول Kafka عند الحاجة (مع الاحتفاظ بهم لفترة زمنية —
kafka_consumers_pool_ttl_msمنذ آخر استخدام). ومن المفترض أن يحل هذا مشكلة الإحصاءات الخاصة بـsystem.kafka_consumers(التي لا تُستهلك عندما لا يقرأ أحد من جدول Kafka، مما يؤدي إلى تسرّب مستمر في الذاكرة وبطء في فصل الجدول)، كما يعيد طلب السحب هذا أيضًا تمكين الإحصاءات الخاصة بـsystem.kafka_consumersافتراضيًا. #58310 (Azat Khuzhin). sparkBarكاسم مستعار لـsparkbar. #58335 (凌涛).- تجنب إرسال طلبات
ComposeObjectبعد الرفع إلىGCS. #58343 (Azat Khuzhin). - التعامل بشكل صحيح مع المفاتيح التي تحتوي أسماؤها على نقطة داخل ملفات XML الخاصة بالإعدادات. #58354 (Azat Khuzhin).
- جعل الدالة
formatتُرجع قيمة ثابتة عند استخدام argumentات ثابتة. هذا يُغلق #58355. #58358 (Alexey Milovidov). - إضافة إعداد
max_estimated_execution_timeللفصل بينmax_execution_timeوmax_estimated_execution_time. #58402 (Zhang Yifan). - تقديم تلميح عند استخدام اسم غير صالح لمحرك قاعدة البيانات. #58444 (Bharat Nallan).
- إضافة إعدادات لتحسين التحكم في نوع الفهارس في قاموس Arrow. واستخدام نوع عدد صحيح موقّع للفهارس افتراضيًا، كما يوصي Arrow. يُغلق #57401. #58519 (Kruglov Pavel).
- تنفيذ #58575: دعم متغير البيئة
CLICKHOUSE_PASSWORD_FILEعند تشغيل صورة Docker. #58583 (Eyal Halpern Shalev). - عند تنفيذ بعض الاستعلامات التي تتطلب عددًا كبيرًا من التدفقات لقراءة البيانات، كان الخطأ
"Paste JOIN requires sorted tables only"يظهر سابقًا. الآن يُخفَّض عدد التدفقات إلى 1 في هذه الحالة. #58608 (Yarik Briukhovetskyi). - تحسين رسالة الخطأ INVALID_IDENTIFIER. #58703 (Yakov Olkhovskiy).
- تحسين التعامل مع القيم الرقمية الحرفية الموقّعة في normalizeQuery. #58710 (Salvatore Mesoraca).
- دعم نوع البيانات Point في MySQL. #58721 (Kseniia Sumarokova).
- عند مقارنة عمود Float32 بسلسلة ثابتة، تُقرأ السلسلة على أنها Float32 (بدلًا من Float64). #58724 (Raúl Marín).
- تحسين التوافق مع S3، وإضافة دعم تخزين ECloud EOS. #58786 (xleoken).
- السماح لـ
KILL QUERYبإلغاء النسخ الاحتياطية وعمليات الاستعادة. كما يجعل هذا الطلب النسخ الاحتياطية وعمليات الاستعادة الجارية مرئية فيsystem.processes. كذلك، يوجد الآن إعداد جديد في إعدادات الخادم هوshutdown_wait_backups_and_restores(default=true)، ويجعل الخادم إما ينتظر عند إيقاف التشغيل حتى تكتمل جميع النسخ الاحتياطية وعمليات الاستعادة الجارية، أو يلغيها مباشرة. #58804 (Vitaly Baranov). - إضافة دعم codec ZSTD إلى Avro format. يُغلق #58735. #58805 (flynn).
- حصلت واجهة MySQL على دعم للإعدادين
net_write_timeoutوnet_read_timeout. ويُحوَّلnet_write_timeoutإلى إعداد ClickHouse الأصليsend_timeout، وبالمثل يُحوَّلnet_read_timeoutإلىreceive_timeout. وأُصلحت مشكلة كانت تجعل ضبط إعداد MySQL sql_select_limitممكنًا فقط إذا كانت عبارة SQL بأكملها مكتوبة بأحرف كبيرة. #58835 (Serge Klochkov). - تحسين رسالة الاستثناء عند تعارض إنشاء Dictionary وtable بالاسم نفسه. #58841 (Yarik Briukhovetskyi).
- التأكد من أنه بالنسبة إلى disks المخصّصة (المنشأة من SQL)، يجب تحديد إما
filesystem_caches_path(بادئة directory مشتركة لجميع filesystem caches) أوcustom_cached_disks_base_directory(بادئة directory مشتركة فقط لـ filesystem caches المنشأة من disks مخصّصة) في config الخاص بـ server. وتكون لـcustom_cached_disks_base_directoryأولوية أعلى للأقراص المخصّصة منfilesystem_caches_path، الذي يُستخدم إذا لم يكن الأول موجودًا. ويجب أن يقع إعداد filesystem cache pathداخل ذلك directory، وإلا فسيُطرح استثناء يمنع إنشاء disk. ولن يؤثر ذلك في disks التي أُنشئت على إصدار أقدم ثم جرت ترقية server، إذ لن يُطرح الاستثناء في هذه الحالة للسماح لـ server بالبدء بنجاح. كما أُضيفcustom_cached_disks_base_directoryإلى config الافتراضي لـ server بالقيمة/var/lib/clickhouse/caches/. يغلق #57825. #58869 (Kseniia Sumarokova). - حصلت واجهة MySQL على توافق مع queries
SHOW WARNINGS/SHOW COUNT(*) WARNINGS، مع أن النتيجة المعادة تكون دائمًا empty set. #58929 (Serge Klochkov). - تخطي replicas غير المتاحة عند تنفيذ
INSERT SELECTالموزّع المتوازي. #58931 (Alexander Tokmakov). - عرض log level بصيغة وصفية لفظية عند تمكين formatting السجلات المنظَّمة بتنسيق json. #58936 (Tim Liou).
- حصلت واجهة MySQL على دعم لعبارات
CAST(x AS SIGNED)وCAST(x AS UNSIGNED)عبر Aliases لأنواع البيانات:SIGNEDلـ Int64 وUNSIGNEDلـ UInt64. وهذا يحسّن التوافق مع أدوات BI مثل Looker Studio. #58954 (Serge Klochkov). - تغيير directory العمل إلى data path داخل حاوية docker. #58975 (cangyin).
- أُضيف إعداد لـ Azure Blob Storage باسم
azure_max_unexpected_write_error_retries، ويمكن أيضًا ضبطه من config ضمن قسم azure. #59001 (SmitaRKulkarni). - السماح لـ server بالبدء حتى مع وجود table معطوب في data lake. يغلق #58625. #59080 (Kseniia Sumarokova).
- السماح بتجاهل schema evolution في table engine
Icebergوقراءة جميع data باستخدام schema التي يحددها المستخدم عند إنشاء table أو أحدث schema جرى parsed من metadata عند إنشاء table. ويتم ذلك عبر الإعدادiceberg_engine_ignore_schema_evolution، وهو معطّل افتراضيًا. لاحظ أن تمكين هذا الإعداد قد يؤدي إلى نتائج غير صحيحة، لأنه في حالة تطور schema ستُقرأ جميع data files باستخدام schema نفسها. #59133 (Kruglov Pavel). - حظر العمليات القابلة للتعديل (
INSERT/ALTER/OPTIMIZE/…) على وحدات التخزين للقراءة فقط أو للكتابة لمرة واحدة، مع إرجاع الخطأ المناسبTABLE_IS_READ_ONLY(لتجنّب المخلّفات). وتجنّب ترك مخلّفات على الأقراص المخصّصة للكتابة لمرة واحدة (format_version.txt) عندCREATE/ATTACH. وتجاهلDROPفيReplicatedMergeTree(وكذلك فيMergeTree). وإصلاح التكرار عبرs3_plain(MetadataStorageFromPlainObjectStorage::iterateDirectory). للتوضيح: القرصwebللقراءة فقط، وs3_plainللكتابة لمرة واحدة. #59170 (Azat Khuzhin). - إصلاح خلل في العمود التجريبي
_block_numberكان يمكن أن يؤدي إلى خطأ منطقي عند الجمع المعقّد بين عملياتALTERوmerge. يُصلح #56202. ويستبدل #58601. #59295 (alesapin). - أصبحت واجهة Play تفهم متى يُعاد استثناء داخل JSON. تعديل من أجل #52853. #59303 (Alexey Milovidov).
- يتيح معالج HTTP
/binaryتحديد المستخدم والمضيف، واختياريًا كلمة المرور، في سلسلة الاستعلام. #59311 (Alexey Milovidov). - دعم النسخ الاحتياطية للجداول المضغوطة داخل الذاكرة. يُغلق هذا #57893. #59315 (Alexey Milovidov).
- دعم عبارة
FORMATفي استعلاماتBACKUPوRESTORE. #59338 (Vitaly Baranov). - تدعم الدالة
concatWithSeparatorالآن أي أنواع من الوسائط (بدلًا من قصرها على الوسائط من النوعينStringوFixedString). على سبيل المثال، يعيدSELECT concatWithSeparator('.', 'number', 1)الآن القيمةnumber.1. #59341 (Robert Schulze).
تحسينات البناء/الاختبار/التغليف
- تحسين الأسماء المستعارة للملف التنفيذي clickhouse (إذ أصبح
ch/clickhouseيشير الآن إلىclickhouse-localأوclickhouseبحسب الوسائط) وإضافة الإكمال التلقائي في bash للأسماء المستعارة الجديدة. #58344 (Azat Khuzhin). - إضافة فحص لتغييرات الإعدادات إلى CI للتأكد من أن جميع تغييرات الإعدادات تنعكس في سجل تغييرات الإعدادات. #58555 (Kruglov Pavel).
- استخدام الجداول المرفقة مباشرةً من S3 في الاختبارات ذات الحالة. #58791 (Alexey Milovidov).
- حفظ ملف
fuzzer.logكاملًا كأرشيف بدلًا من آخر 100 ألف سطر. كثيرًا ما يحذفtail -n 100000الأسطر التي تحتوي على تعريفات الجداول. مثال:. #58821 (Dmitry Novik). - تفعيل Rust على macOS مع Aarch64 (سيضيف هذا البحث التقريبي في العميل باستخدام skim ولغة PRQL، رغم أنني لا أظن أن هناك من يستضيف ClickHouse على Darwin، لذا أقول إن هذا مخصص في الغالب للبحث التقريبي في العميل). #59272 (Azat Khuzhin).
- إصلاح مشكلة في التجميع في العناقيد المختلطة من x86_64 وARM #59132 (Harry Lee).
خطأ (سلوك خاطئ يلاحظه المستخدم في إصدار مستقر رسمي)
- إضافة تحويل مفاتيح الربط لـ Nested LowCardinality #51550 (vdimir).
- تسطيح نوع Nested الحقيقي فقط إذا كانت
flatten_nested=1، وليس كل Array(Tuple) #56132 (Kruglov Pavel). - إصلاح خلل في الإسقاطات وإعداد
aggregate_functions_null_for_emptyأثناء الإدراج. #56944 (Amos Bird). - إصلاح استثناء محتمل بسبب UUID قديم لملف تعريف #57263 (Vasily Nemkov).
- إصلاح التعامل مع مخازن القراءة المؤقتة في StreamingFormatExecutor #57438 (Kruglov Pavel).
- تجاهل MVs التي يكون جدولها الهدف محذوفًا أثناء الدفع إلى العروض #57520 (Kruglov Pavel).
- إزالة احتمال حدوث تسابق بين ALTER_METADATA و MERGE_PARTS #57755 (Azat Khuzhin).
- إصلاح خلل في ترتيب expressions في group by مع rollup #57786 (Chen768959).
- إصلاح لميزة replication «zero-copy» المتقادمة: إصلاح فقدان الكتل الثنائية بعد حذف replica تحتوي على broken detached parts #58333 (Alexander Tokmakov).
- السماح للمستخدمين بالعمل مع الروابط الرمزية في user_files_path #58447 (Duc Canh Le).
- إصلاح تعطل عند عدم احتواء جدول graphite على دالة aggregate #58453 (Duc Canh Le).
- تأخير القراءة من StorageKafka للسماح بقراءات متعددة في العروض المادية #58477 (János Benjamin Antal).
- إصلاح حالة بسيطة من intersecting parts #58482 (Alexander Tokmakov).
- تعطيل MergeTreePrefetchedReadPool للاستعلامات التي تحتوي على LIMIT فقط #58505 (Maksim Kita).
- تمكين قواعد البيانات العادية أثناء الاستعادة #58520 (Jihyuk Bok).
- إصلاح القراءة عبر threadpool في Apache Hive لصيغ ORC/Parquet/… #58537 (sunny).
- إخفاء credentials في العمود
base_backup_nameضمنsystem.backup_log#58550 (Daniel Pozo Escalona). toStartOfIntervalلتقريب قيم الملّي ثانية والميكروثانية #58557 (Yarik Briukhovetskyi).- تعطيل
max_joined_block_rowsفي ConcurrentHashJoin #58595 (vdimir). - إصلاح join باستخدام Nullable في المُحلِّل القديم #58596 (vdimir).
makeDateTime64: السماح بأن تكون الوسيطةfractionغير ثابتة #58597 (Robert Schulze).- إصلاح احتمال فكّ إسناد NULL أثناء ترميز الإطارات المضمّنة #58607 (Azat Khuzhin).
- تحسين عزل إدخالات ذاكرة التخزين المؤقت للاستعلامات عند إعادة إنشاء المستخدمين أو تبديل الأدوار #58611 (Robert Schulze).
- إصلاح تحليل مفتاح partition المعطّل عند تنفيذ تحسين الإسقاط #58638 (Amos Bird).
- ذاكرة التخزين المؤقت للاستعلامات: إصلاح الحصة الخاصة بكل مستخدم #58731 (Robert Schulze).
- إصلاح partitioning للتدفق في دوال النوافذ المتوازية #58739 (Dmitry Novik).
- إصلاح الاستدعاء المزدوج لعملية التدمير عند رمي استثناء في addBatchLookupTable8 #58745 (Raúl Marín).
- عدم معالجة الطلبات في Keeper أثناء الإيقاف #58765 (Antonio Andelic).
- إصلاح فكّ إسناد مؤشر فارغ في
SlabsPolygonIndex::find#58771 (Yarik Briukhovetskyi). - إصلاح الدالة JSONExtract لأعمدة LowCardinality(Nullable) #58808 (vdimir).
- إصلاح التراكم غير المتوقع لاستخدام الذاكرة عند إنشاء عدد كبير جدًا من الجداول باستخدام CREATE و DROP. #58831 (Maksim Kita).
- قراءات متعددة من تخزين file log في mv #58877 (János Benjamin Antal).
- فرض قيود على معرّف مفتاح الوصول في S3. #58900 (MikhailBurdukov).
- إصلاح احتمال حدوث crash في clickhouse-local أثناء تحميل الاقتراحات #58907 (Kruglov Pavel).
- إصلاح crash عند استخدام
indexHint#58911 (Dmitry Novik). - إصلاح فقدان StorageURL للرؤوس عند إعادة تشغيل الخادم #58933 (Michael Kolupaev).
- المحلّل: إصلاح استبدال التخزين بكتلة الإدراج #58958 (Yakov Olkhovskiy).
- إصلاح عملية seek في ReadBufferFromZipArchive #58966 (Michael Kolupaev).
- إصلاح للفهارس المعكوسة التجريبية (لا تستخدمها في بيئة الإنتاج): أصبح
DROP INDEXللفهرس المعكوس يزيل الآن جميع الملفات ذات الصلة من التخزين الدائم #59040 (mochi). - إصلاح سباق بيانات في query_factories_info #59049 (Kseniia Sumarokova).
- تعطيل إعادة المحاولة عند ظهور خطأ “عدد كبير جدًا من عمليات إعادة التوجيه” #59099 (skyoct).
- إصلاح حالة توقف متبادل عند إيقاف تشغيل قاعدة بيانات لم تبدأ تشغيلها بعد #59137 (Sergei Trifonov).
- إصلاح: LIMIT BY و LIMIT في استعلام موزع #59153 (Igor Nikonov).
- إصلاح تعطل عند استخدام منطقة زمنية Nullable مع
toString#59190 (Yarik Briukhovetskyi). - إصلاح الإنهاء القسري في بيانات Iceberg الوصفية عند وجود مسارات ملفات غير صالحة #59275 (Kruglov Pavel).
- إصلاح اسم المعمارية عند تحديد هدف Rust #59307 (p1rattttt).
- إصلاح خطأ منطقي يتعلق بـ “set غير جاهزة” عند الاستعلام من
system.tablesباستخدام استعلام فرعي في عبارة IN. #59351 (Nikolai Kochetov).