Skip to main content

جدول المحتويات

إصدار ClickHouse‏ v24.12، 2024-12-19
إصدار 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 (يمكن تفعيلها عبر إعداد table use_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-local SELECT ضمنيًا افتراضيًا، مما يتيح استخدامه كآلة حاسبة. تحسين تمييز الصياغة النحوية لوضع 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 مدعومة فقط مع الجداول من family MergeTree‎. يغلق #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&#95;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، عند استخدام دالة aggregation group 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')‎ الآن قيمة DateTime 2021-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 التجريبية) عند وضعها داخل kql table 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). وهذا يخفف الضغط الناتج عن حجز المساحة للاستعلامات (في method tryReserve). كما يتم ذلك بطريقة خالية من الأقفال قدر الإمكان، بحيث لا ينبغي أن يعيق الاستخدام العادي لذاكرة التخزين المؤقت. #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).

تحسينات البناء/الاختبار/التحزيم

إصلاح خطأ

  • تم تعطيل الإعداد 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).
  • جعل TokenIterator lazy كما ينبغي #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.

تحسينات البناء/الاختبار/التحزيم

إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)

  • إصلاح خطأ منطقي عند التراجع عن معاملة إدراج 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 باستخدام الذاكرة الخارجية. وكان يعمل سابقًا فقط مع خوارزمية JOIN partial_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 الجديد، تكون query ALTER 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&#95;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 مع رمز خطأ HTTP GATEWAY_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 functions file و 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&#95;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).
آخر تعديل في ٣ يوليو ٢٠٢٦