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

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

إصدار ClickHouse ‏v25.12، 2025-12-18
إصدار ClickHouse ‏v25.11، 2025-11-27
إصدار ClickHouse ‏v25.10، 2025-10-30
إصدار ClickHouse ‏v25.9، 2025-09-25
إصدار ClickHouse ‏v25.8 LTS، 2025-08-28
إصدار ClickHouse ‏v25.7، 2025-07-24
إصدار ClickHouse ‏v25.6، 2025-06-26
إصدار ClickHouse ‏v25.5، 2025-05-22
إصدار ClickHouse ‏v25.4، 2025-04-22
إصدار ClickHouse ‏v25.3 LTS، 2025-03-20
إصدار ClickHouse ‏v25.2، 2025-02-27
إصدار ClickHouse ‏v25.1، 2025-01-28
سجل التغييرات لعام 2024
سجل التغييرات لعام 2023
سجل التغييرات لعام 2022
سجل التغييرات لعام 2021
سجل التغييرات لعام 2020
سجل التغييرات لعام 2019
سجل التغييرات لعام 2018
سجل التغييرات لعام 2017

إصدار ClickHouse 25.12، 2025-12-18

تغيير غير متوافق مع الإصدارات السابقة

  • يتطلب ALTER MODIFY COLUMN الآن تحديد DEFAULT صراحةً عند تحويل الأعمدة القابلة لـ NULL إلى أنواع غير قابلة لـ NULL. سابقًا، كان من الممكن أن تتعطل عمليات ALTER هذه بسبب أخطاء cannot convert null to not null، أما الآن فتُستبدل قيم NULL بتعبير default الخاص بالعمود. يحل #5985. #84770 (Vladimir Cherkasov).
  • لن يعيد tokenizer الخاص بـ Ngram بعد الآن ngrams يقل طولها عن N المضبوط عليه. كما لن يعيد Text Search أي صفوف عندما تكون tokens البحث فارغة. #89757 (George Larionov).
  • عند تعديل عمود من String إلى Nullable(String)، لن نُجري mutation على البيانات. لكن بالنسبة إلى aggregate function ‏uniq، فهي تستخدم بنية بيانات مختلفة: ففي حالة nullable column، سيُستخدم AggregateFunctionNull مع مجمّع uniq متداخل. كما سيقوم AggregateFunctionNull بإجراء serialize لعلامة bool إضافية. وهذا سيجعل ملف الإحصاءات غير متوافق. ويتمثل الإصلاح في إضافة علامة لتسجيل ما إذا كان العمود nullable column أثناء serialization. لقد تغيّر format الإحصاءات، وقد يفشل server إذا كانت لدينا إحصاءات بالتنسيق القديم. سيؤدي طلب السحب هذا #90904 إلى إصلاح الانهيار، وإطلاق exception عندما تستخدم الإحصاءات الحالية التنسيق القديم. ولتجنب exception، ينبغي تشغيل ALTER TABLE table MATERIALIZE STATISTICS ALL لإعادة إنشاء الإحصاءات وإصلاح المشكلة. #90311 (Han Fei).
  • أُزيلت settings ‏allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. إن السماح باستخدام أنواع غير قابلة للمقارنة في ORDER BY أو في دوال المقارنة قد يؤدي إلى logical errors ونتائج غير متوقعة. يحل #90028. #90527 (Pavel Kruglov).
  • تم تغيير القيمة الافتراضية للإعداد check_query_single_value_result من true إلى false. يؤدي هذا إلى أن يعيد CHECK TABLE نتائج مفصلة لكل جزء بدلًا من نتيجة مجمعة (1 = سليم، 0 = تم العثور على errors). وبالمقارنة مع السلوك السابق، فمن المرجح أن يكون هذا أكثر توافقًا مع ما يريده المستخدم. #91009 (Robert Schulze).
  • عدة إصلاحات تتعلق بالفهارس الضمنية. لن يتضمن schema المعروض أو المخزَّن (metadata الخاص بـ Keeper) الفهارس الضمنية، مثل تلك التي تُنشئها settings ‏add_minmax_index_for_numeric_columns أو add_minmax_index_for_string_columns. قد يتسبب هذا في أخطاء metadata عند إنشاء MergeTree table من نوع ReplicatedMergeTree أو تحديثه في إصدار أحدث، بينما توجد replica في إصدار أقدم. في هذه الحالات، أرسل عبارات DDL إلى replica القديمة حتى تتم ترقية cluster بالكامل. #91429 (Raúl Marín).
  • تم تحديث clickhouse-client ليعيد رمز خروج غير صفري (159 - TIMEOUT_EXCEEDED) عندما تنتهي مهلة query بسبب receive_timeout. سابقًا، كانت حالات timeout تعيد رمز الخروج 0 (نجاح)، مما كان يصعّب على البرامج النصية وعمليات الأتمتة اكتشاف حالات فشل timeout. #91432 (Sav).
  • أصبح الآن محظورًا إنشاء جداول MergeTree الخاصة (مثل ReplacingMergeTree وCollapsingMergeTree وغيرها) باستخدام مفتاح ORDER BY فارغ، لأن merge behavior في هذه الجداول غير معرّف. وإذا كنت لا تزال بحاجة إلى إنشاء مثل هذا table، فقم بتمكين الإعداد allow_suspicious_primary_key. #91569 (Anton Popov).
  • إصلاح الدالتين bitShiftLeft وbitShiftRight لكي تعيدا 0 أو قيمة فارغة عندما يكون shift مساويًا تمامًا لحجم النوع. #91943 (Pablo Marcos).
  • متابعة لـ #88380. يُصنّف طلب السحب هذا تعطيل الوسيطات الموضعية في الإسقاطات على أنه تغيير غير متوافق مع الإصدارات السابقة. بالإضافة إلى ذلك، يقدّم الإعداد enable_positional_arguments_for_projections لتمكين ترقية آمنة لعنقود ClickHouse عند وجود وسيطات موضعية في الإسقاطات. #92007 (Dmitry Novik).
  • تفعيل البيانات المشتركة المتقدمة لـ JSON افتراضيًا. بعد هذا التغيير، لن يعود الرجوع إلى إصدارات أقدم من 25.8 ممكنًا، لأن هذه الإصدارات لن تتمكن من قراءة أجزاء البيانات الجديدة التي تتضمن عمود JSON. ولضمان ترقيات آمنة، يُوصى بضبط إعداد compatibility على الإصدار السابق أو ضبط إعدادات MergeTree على dynamic_serialization_version='v2', object_serialization_version='v2'. #92511 (Pavel Kruglov).

ميزة جديدة

  • يمكن للمستخدمين الآن تهيئة جداول S3/Azure Queue لنقل الملفات المُعالجة أو وسمها، بالإضافة إلى الخيارات السابقة للاحتفاظ بالملفات أو حذفها. يعالج #72944. #86907 (Murat Khairulin).
  • في وحدة تخزين S3/Azure Queue، تمت إضافة الإعداد commit_on_select (لتحديد ما إذا كان يلزم تنفيذ commit للبيانات المُعالجة وما إذا كان يجب تطبيق الإجراء after_processing). القيمة الافتراضية هي false، مع إصلاح التحقق من mv المرفقة أثناء select. #91450 (Kseniia Sumarokova).
  • إضافة instrumentation وقت التشغيل باستخدام XRay لتصحيح المشكلات في بيئات production وإنشاء profile بشكل deterministic. يعالج #74249. #89173 (Pablo Marcos).
  • يتيح استخدام وسيطات ثانية غير ثابتة مع IN. كما يدعم استخدام Tuple كوسيطة ثانية. #77906 (Yarik Briukhovetskyi).
  • دوال لحساب المساحة والمحيط لنوع Geometry. #89047 (Konstantin Vedernikov).
  • تنفيذ الدالة dictGetKeys التي تُرجع مفتاح/مفاتيح Dictionary التي تساوي فيها attribute القيمة المحددة. وتستخدم cache للبحث العكسي لكل query، تُضبط عبر الإعداد max_reverse_dictionary_lookup_cache_size_bytes، لتسريع عمليات lookup المتكررة. #89197 (Nihal Z. Miaji).
  • تمت إضافة الإعداد type_json_skip_invalid_typed_paths لتعطيل الاستثناءات في عمليات insert/تحويل الأنواع إلى JSON type عندما يتعذر تحويل JSON المُدخل إلى paths محددة الأنواع صراحةً في JSON type. وفي هذه الحالة، يُستخدم بدلًا من ذلك القيمة null/zero للمسار المحدد النوع. #89886 (Max Justus Spransy).
  • دعم join من النوع direct (nested loop) لجداول MergeTree. لاستخدامه، حدده كخيار وحيد في الإعداد: join_algorithm = 'direct'. #89920 (Vladimir Cherkasov).
  • دعم ORDER BY في عملية CREATE لـ Iceberg، مع الفرز في INSERT. يعالج #89916. #90141 (Konstantin Vedernikov).
  • تقديم إعدادات على مستوى projection، متاحة عبر clause الجديدة WITH SETTINGS في ALTER TABLE ... ADD PROJECTION. تتيح هذه الإعدادات لـ projections تجاوز بعض معلمات تخزين MergeTree (مثل index_granularity وindex_granularity_bytes) لكل projection على حدة. #90158 (Amos Bird).
  • إضافة دالة SQL HMAC(algorithm, message, key) كجزء من #73900 و#38775. #90837 (Mikhail f. Shiryaev).
  • إضافة دعم للدالة has لاستخدام primary key وdata skipping indexes عندما تكون الوسيطة الأولى مصفوفة ثابتة. يغلق #90980. #91023 (Nihal Z. Miaji).
  • تنفيذ تنسيق إدخال/إخراج جديد Buffers. يشبه هذا التنسيق Native، لكنه بخلاف Native لا يخزّن أسماء الأعمدة أو أنواعها أو أي بيانات وصفية إضافية. يغلق #84017. #91156 (Nihal Z. Miaji).
  • إضافة إعداد max_streams_for_files_processing_in_cluster_functions للتحكم في عدد التدفقات المستخدمة لقراءة الملفات بالتوازي في Cluster table functions. يغلق #90223. #91323 (Pavel Kruglov).
  • إخفاء البيانات لأمان على مستوى الصفوف (متاح فقط في ClickHouse Cloud). إضافة محلّل سياسة إخفاء البيانات لدعم ذلك في clickhouse-client. #90552 (pufit).
  • إضافة الخيار allow_reentry إلى aggregate function windowFunnel. عند تفعيله مع strict_order، فإنه يتجاهل الأحداث التي تخالف الترتيب بدلًا من إيقاف تحليل مسار التحويل. يتيح ذلك التعامل مع رحلات المستخدم التي تتضمن عمليات تحديث (A->A->B) أو رجوعًا إلى الخلف (A->B->A->C) من دون التقليل من معدلات التحويل المُبلّغ عنها. #86916 (Lee ChaeRok).
  • توافق Keeper مع zookeeper: الإنشاء مع الإحصاءات. #88797 (Konstantin Vedernikov).
  • دعم watches الدائمة في ZooKeeper ضمن ClickHouse Keeper. متابعة الجزء 2: https://github.com/ClickHouse/ClickHouse/pull/78207. #88813 (Konstantin Vedernikov).
  • إضافة إعداد MergeTree alter_column_secondary_index_mode للتحكم في ما يجب فعله بالفَهارس أثناء mutations. القيم الممكنة: throw و drop و rebuild و compatibility. يغلق #77797. #89335 (Raúl Marín).
  • بما أن نوعي البيانات Time و Time64 أصبحا جاهزين لبيئات production، فقد أصبح الإعداد enable_time_time64_type مفعّلًا افتراضيًا الآن. #89345 (Yarik Briukhovetskyi).
  • دعم قراءة DeltaLake CDF عبر table function ‏deltaLake باستخدام الإعدادين delta_lake_snapshot_start_version و delta_lake_snapshot_end_version. يُفعَّل CDF ‏(Change Data Feed، وهي ميزة تتيح التقاط تغييرات البيانات على مستوى الصفوف والاستعلام عنها تلقائيًا — مثل inserts و updates و deletes — بين إصدارات جدول Delta) في DeltaLake عبر delta.enableChangeDataFeed. الأعمدة المتاحة إلى جانب البيانات هي _change_type و _commit_version و _commit_timestamp. #90431 (Kseniia Sumarokova).
  • دعم الفهارس السالبة للوصول إلى عناصر tuple (مثل tuple.-1). #91665 (Amos Bird).

ميزة تجريبية

  • تقديم تنسيق Text index v3 وترقيته إلى حالة Beta.
  • أُضيف منطق جديد لتنفيذ الاستعلامات تلقائيًا باستخدام النسخ المتماثلة المتوازية، ويتحكم فيه الإعداد automatic_parallel_replicas_mode. أثناء التنفيذ العادي على عقدة واحدة، يجمع ClickHouse إحصاءات ستُؤخذ في الحسبان لاحقًا خلال مرحلة التخطيط. وإذا أشارت هذه الإحصاءات إلى أن النسخ المتماثلة المتوازية قد تكون مفيدة، فسينفّذ ClickHouse الاستعلام المعني تلقائيًا باستخدام النسخ المتماثلة المتوازية. ولا تزال مجموعة الاستعلامات المدعومة محدودة نسبيًا في الوقت الحالي. #87541 (Nikita Taranov).
  • إتاحة الوصول إلى مثيلات ClickHouse Cloud باستخدام بيانات اعتماد Cloud عبر --login. #89261 (Krishna Mannem).
  • إضافة إعداد على مستوى الجلسة باسم aggregate_function_input_format لتحسين استعلامات INSERT إلى الجداول التي تحتوي على أعمدة AggregateFunction، بما يتيح إدراج البيانات كحالة مُسلسلة أو قيم خام أو مصفوفات. #88088 (Punith Nandyappa Subashchandra).

تحسين الأداء

  • حسِّن استعلامات ORDER BY...LIMIT N باستخدام skip index ومرشح العتبة الديناميكي لتقليل عدد الصفوف المُعالَجة بشكل كبير. #89835 (Shankar Iyer).
  • يستخدم ClickHouse الآن skip indexes لإجراء index analysis على عبارات WHERE التي تحتوي على شروط تصفية مختلطة مرتبطة بـ AND وOR. في السابق، كان يلزم أن تكون عبارة WHERE اقترانًا (AND) من شروط التصفية للاستفادة من skip indexes. يتحكم إعداد جديد use_skip_indexes_for_disjunctions (الافتراضي: on) في هذه الميزة. (issue #75228). #87781 (Shankar Iyer).
  • إضافة دعم للحفاظ على القراءة بالترتيب من الجدول الأيسر في عمليات LEFT/INNER JOIN، بحيث يمكن الاستفادة من ذلك في الخطوات اللاحقة. ويمكن تعطيل هذا السلوك باستخدام الإعداد query_plan_read_in_order_through_join. كما أُضيف دعم لتحسين الصف الافتراضي أثناء القراءة (راجع الإعداد read_in_order_use_virtual_row) لعمليات LEFT/INNER JOIN. #89815 (Vladimir Cherkasov).
  • تحسين أداء الأعمدة materialized مؤجلًا عند استخدام حد أكبر. #90309 (Nikolai Kochetov).
  • ينبغي أن يلاحظ المستخدمون انخفاضًا في زمن الاستجابة أثناء index analysis عند وجود فهارس minmax كبيرة (بملايين granules). #90428 (Shankar Iyer).
  • تنفيذ خوارزمية بسيطة من نوع DPsize لإعادة ترتيب INNER JOINs. يتحكم إعداد تجريبي جديد في الخوارزميات المستخدمة وترتيب استخدامها؛ فعلى سبيل المثال، يعني query_plan_optimize_join_order_algorithm='dpsize,greedy' أنه تتم تجربة DPsize أولًا مع fallback إلى greedy. #91002 (Alexander Gololobov).
  • الإخفاق سريعًا عندما تصل الاستعلامات إلى حدود الصفوف. يحل #61872. #62804 (Sean Haynes).
  • أضاف #84477 قيودًا على استعلامات select التي يمكن استخدامها في استعلامات insert select from s3Cluster(...) من أجل التنفيذ الموزع المتوازي. يتيح هذا التغيير استخدام where، وهو ما كان ممكنًا سابقًا. #84611 (Igor Nikonov).
  • تنفيذ prefetch للمفاتيح أثناء التكرار على hash table لتقليل cache misses إلى الحد الأدنى. #84708 (lgbo).
  • تحسين الدالة التجميعية histogram عبر فرز ذيل مصفوفة النقاط فقط وتخطي الفرز للمدخلات الرتيبة، بما يحقق تسريعًا بنحو ~10%. #85760 (MakarDev).
  • تحسين أداء التصفية للمسندات التي تتضمن دوال مثل like وequals وhas وغيرها، من خلال الاستفادة من مرشح أولي إضافي مبني على text index. ويُفعَّل هذا التحسين عبر الإعداد query_plan_text_index_add_hint. كما تحسّن استخدام text index للأعمدة من نوع البيانات Map. #88550 (Anton Popov).
  • تحسين عمليات lookup العكسية المتكررة في Dictionary عبر تنفيذ lookups أسرع ضمن مجموعة محسوبة مسبقًا من قيم المفاتيح الممكنة. يغلق #7968. #88971 (Nihal Z. Miaji).
  • تحسين أداء الدالة التجميعية topK وسلوكها. #90091 (Raúl Marín).
  • تحسين أداء عمليات مقارنة Decimal. يحلّ #28192. #90153 (Konstantin Bogdanov).
  • دعم partition pruning لدوال Apache Paimon، استكمالًا لما بدأ في https://github.com/ClickHouse/ClickHouse/pull/84423. #90253 (JIaQi).
  • استخدام عمليات SIMD متقدمة للدوال المنطقية عبر التوزيع الديناميكي. #90432 (Raúl Marín).
  • تحسين أداء تنفيذ دوال JIT عبر تجنّب تهيئة عمود النتيجة إلى الصفر دون داعٍ. #90449 (Raúl Marín).
  • تسريع فك ضغط T64 عبر التوزيع الديناميكي. #90610 (Raúl Marín).
  • تحسين التصفية الموضعية داخل قارئ MergeTree. يحلّ #87119. #90630 (Xiaozhe Yu).
  • إضافة آلية استدلالية جديدة لتقليل عرض خيارات الدمج المحددة. سيؤدي تنفيذ عمليات دمج أضيق إلى زيادة write amplification، لكنه قد يساعد في الوقت نفسه على تجنّب أخطاء TOO_MANY_PARTS. #91163 (Mikhail Artemenko).
  • تحسين query performance لجداول S3 المُنشأة باستخدام glob pattern عبر تمرير قيم مرشح _path إلى الأسفل، مما يتيح تجنّب عمليات سرد S3. ويتحكم في ذلك الإعداد s3_path_filter_limit. #91165 (Eduard Karacharov).
  • تسريع تحويل الأعمدة إلى bool (في WHERE clauses) عبر التوزيع الديناميكي. #91203 (Raúl Marín).
  • تسريع فرز block رقمي واحد عبر التوزيع الديناميكي. #91213 (Raúl Marín).
  • إضافة تحسين لإزالة الأعمدة غير المستخدمة في query plans. يحلّ #75152. #76487 (János Benjamin Antal).
  • تم تغيير default value لـ query_plan_optimize_join_order_limit إلى 10. #89312 (Alexey Milovidov).
  • تفعيل الإعداد allow_statistics_optimize افتراضيًا، بحيث يستخدم مُحسّن JOIN column statistics. #89332 (Alexey Milovidov).
  • دعم JOIN Runtime Filters لعمليات ANTI JOIN. كما أُعيدت هيكلة تنفيذ runtime filters لتقليل التنافس على الأقفال. #89710 (Dmitry Novik).
  • تقليل memory usage أثناء عمليات الدمج في جدول system.metric_log (المفعّل افتراضيًا) عبر ضبط min_bytes_for_wide_part وvertical_merge_algorithm_min_bytes_to_activate على 128MB. #89811 (filimonov).
  • تفعيل استخدام inverted index في PREWHERE. يحلّ #89975. #89977 (Peng Jian).
  • لا تُضِف مزوّدي S3 عند استخدام GCP OAuth، إذ يحسّن ذلك الأداء على GCS. #91706 (Antonio Andelic).

تحسينات

  • أُضيف إعداد جديد apply_row_policy_after_final يتيح للاستعلام تطبيق سياسة الصف فقط بعد final، مما يجعل سلوك ReplacingMergeTree مع سياسات الصفوف أكثر صحة. يُصلح #90986. #91065 (Yarik Briukhovetskyi).
  • في تنسيق Pretty، تُعرض الآن الـ named tuples بصيغة Pretty JSON. يُغلق هذا #65022. #91779 (Mostafa Mohamed Salah).
  • أُضيفت الحقول last_error_time وlast_error_message وlast_error_query_id وlast_error_trace إلى جدول system.error_log. #89879 (Narasimha Pakeer).
  • يمكن لعميل CLI الآن كتم الرسالة ‘ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded’ بتحديد --no-server-client-version-message أو false. #87784 (Larry Snizek).
  • أُضيفت رسالة خطأ تفيد بأن الجزء خضع لإزالة التكرار. #80264 (Aleksandr Musorin).
  • أُضيف العمودان dependencies وmissing_dependencies إلى system.kafka_consumers للإبلاغ عن الجداول المستهدفة للعروض المادية الخاصة بجداول Kafka. وأُضيف العداد KafkaMVNotReady. #85346 (Ilya Golshtein).
  • تعمل الآن التعبيرات الافتراضية للجدول بشكل صحيح مع عمليات insert باستخدام remote وnative protocol. يُغلق هذا #87972. #88540 (Pervakov Grigorii).
  • أُتيح تعطيل جمع المقاييس غير المتزامنة PSI_*_*. #88557 (MikhailBurdukov).
  • أُضيف دعم التسلسل المتناثر لأعمدة النوع Nullable. ويُكمل هذا #44539. #88999 (Amos Bird).
  • أصبح للقرص plain-rewritable الآن تنفيذ وتخطيط خاصان به، ولم يعد يعتمد على أقراص plain العادية كأساس له. #89807 (Mikhail Artemenko).
  • يجب ألا يتضمن أي Exception في HTTP مطلقًا القطعة الصفرية النهائية. #89998 (Kaviraj Kanagaraj).
  • أُضيف فحص من جهة خادم Keeper أثناء handshake لرفض العملاء عندما يكون last_zxid_seen (provided by the client) > last_processed_zxid. يمنع هذا القراءات المتقادمة عند إعادة اتصال العملاء بـ replicas المتأخرة. #90016 (Miсhael Stetsyuk).
  • أُضيف kafka_consumer_reschedule_ms كإعداد قابل للضبط لمحرك جداول Kafka لضبط مدة انتظار consumers للبيانات الجديدة. يحل #89204. #90112 (Jeremy Aguilon).
  • أُضيف عمود جديد parts_in_progress_names إلى system.mutations لتحسين التشخيص. #90155 (Shaohua Wang).
  • إعادة محاولة أخطاء الشبكة عندما تُحلِّل مكتبة S3 استجابة XML. #90216 (Sema Checherinda).
  • نريد تشغيل Keeper في عمليات خادم منفصلة، ولتجنّب إرهاق Prometheus في المناطق الكبيرة، ينبغي الاستمرار في إظهار المقاييس المرتبطة بـ Keeper فقط. #90244 (Miсhael Stetsyuk).
  • إضافة دعم لتحميل إعدادات ClickHouse Client من مسارات XDG Base Directory (مثل ~/.config/clickhouse/config.xml) بالإضافة إلى الموقع القديم ~/.clickhouse-client/. يحلّ #89882. #90306 (Wujun Jiang).
  • إضافة حدّ لحجم دفعة طلبات append بالبايت في Keeper. يمكن التحكّم في هذا الحد عبر keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic).
  • إضافة إعداد في Iceberg لمنع زيادة عدد الأقسام بشكل كبير. #90365 (Konstantin Vedernikov).
  • تحديث رسائل التحذير عند الاقتراب من حدود guardrails: إظهار القيم الحالية وقيم throw. #90438 (Nikita Fomichev).
  • بث الأجزاء في جدول system.filesystem_cache بدلًا من إنشاء جزء واحد يحتوي على حالة cache بالكامل. وقد تستغرق قراءة حالة filesystem cache وقتًا طويلًا في أحجام cache الكبيرة وتستهلك قدرًا كبيرًا من الذاكرة، لذا فإن بثّها ضروري في عمليات النشر الكبيرة. #90508 (Kseniia Sumarokova).
  • إصلاح رسالة Exception غير صحيحة في partitioning الخاص بـ Hive: إذ كانت تفتقد إلى مسافة. #90685 (Alexey Milovidov).
  • أصبحت الإدخالات في cache فهرس تشابه المتجهات تُزال الآن عند حذف table parts أو استبدالها بأجزاء أحدث. وقبل ذلك، كانت لا تُزال إلا تدريجيًا عبر eviction الخاص بـ cache. #90750 (Shankar Iyer).
  • ترقية chdig (أداة تشخيص ClickHouse لسطر الأوامر) إلى v25.12.1. #91394 (Azat Khuzhin).
  • أصبحت عناوين URL الموقَّعة مسبقًا تعمل الآن مع S3. يُغلق #65032. #90827 (Yarik Briukhovetskyi).
  • أصبح الفهرس النصي يعمل الآن مع جداول ReplacingMergeTree. #90908 (Elmi Ahmadov).
  • تجنّب كشف إصدار ClickHouse server في استجابات أخطاء HTTP المُعادة قبل المصادقة. #91003 (filimonov).
  • الآن سيُطرَح الاستثناء HTTP_CONNECTION_LIMIT_REACHED عند بلوغ hard_limit لاتصال عملاء http. وقد ضُبطت هذه القيمة على 20000 لاتصالات الأقراص. #91016 (Sema Checherinda).
  • تقديم system.background_schedule_pool{,_log} لتحسين introspection للوظائف الخلفية. #91157 (Azat Khuzhin).
  • يمكنك الآن بسرعة إضافة تعليق أو إزالة تعليق عن الأسطر المحددة حاليًا في محرر الاستعلامات في web UI باستخدام Ctrl+/ (أو Cmd+/ على Mac)، مما يسهل تعطيل أجزاء من الاستعلام مؤقتًا أثناء الاختبار. #91160 (Samuel K.).
  • أُضيف system.completions إلى قائمة الجداول المتاحة دائمًا. #91166 (Yakov Olkhovskiy).
  • أُضيفت profile events FailedInitialQuery وFailedInitialSelectQuery. #91172 (RinChanNOW).
  • تم إصلاح احتمال حدوث تجويع في thread pool عند قراءة عينات الأعمدة لأعمدة JSON التي تحتوي على عدد كبير من subcolumns، وذلك عبر مراعاة الإعداد merge_tree_use_prefixes_deserialization_thread_pool بدلًا من استخدام thread pool دائمًا. #91208 (Raufs Dunamalijevs).
  • تمت إضافة دعم النوع JSON في tupleElement. يُغلق #81630. #91327 (Pavel Kruglov).
  • تم إصلاح أخطاء memory limit غير الحقيقية عند تمكين userspace page cache. #91361 (Michael Kolupaev).
  • أصبح الآن بالإمكان إنشاء tokenizer من نوع Ngrams مع ngram_length = 1. #91529 (George Larionov).
  • تمت إضافة دعم إعدادات التخزين داخل الدوال في INSERT INTO FUNCTION، على غرار الدعم الموجود مسبقًا في SELECT. يُغلق #89386. #91707 (Kseniia Sumarokova).
  • يتم الآن إطلاق الخطأ “not implemented” لاستعلام truncate في data lake بدلًا من عدم تنفيذ أي شيء بصمت. يُغلق #86604. #91713 (Kseniia Sumarokova).
  • تم تعيين الحد الأقصى لحجم الرسالة في قارئ parquet v3 لتجنب ظهور DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reached. #91737 (Arthur Passos).
  • أُضيف الإعداد insert_select_deduplicate، ما يوضح بصورة أفضل كيفية التعامل مع insert deduplication في INSERT SELECT. وبوجه عام، لا يمكن إجراء deduplication لمثل هذه queries، لكن إذا لم يتغير الجدول وكانت النتيجة sorted، فيمكن إجراء deduplication عند retry. لم نكن قادرين على تتبع ما إذا كان source هو نفسه، لكن كان بإمكاننا التحقق مما إذا كانت نتيجة select query مرتبة. واتضح عمليًا أن التحقق من ذلك في الحالة العامة صعب جدًا، لكن الحالة البسيطة مع ORDER BY ALL سهلة. حاليًا، المنطق هنا معطّل بالفعل؛ فنحن نحاول إجراء deduplication، لكن في معظم الحالات لا يكتشف التكرارات بين blocks لأن select يعيد بيانات مختلفة. #91830 (Sema Checherinda).
  • السماح بالتحويل الضمني للنوع عند تحويل Array إلى QBit. ويمكن الآن إدراج مصفوفات الأعداد الصحيحة والفاصلة العائمة مباشرةً في columns من نوع QBit من دون تحويلات نوع صريحة. #91846 (Raufs Dunamalijevs).
  • أُضيف حد أقصى لحجم رسالة CapnProto. ويمكن تغييره باستخدام format_capn_proto_max_message_size. #91888 (Antonio Andelic).
  • تحسين مقاييس mark cache بحيث تقتصر على تتبّع الاستعلامات فقط (فبعد #83415 جرى تحديث MarkCacheHits/MarkCacheMisses لتشمل عمليات الدمج أيضًا، ويعيد طلب السحب هذا هذا السلوك إلى سابق عهده). #91910 (Azat Khuzhin).
  • إصلاح ضبط client_info.interface على TCP للاتصالات المحلية. #91933 (Konstantin Bogdanov).
  • أصبحت المعلَمة refresh_certificates_task_interval في تهيئة عميل ACME تتوقع قيمة بالثواني. #92211 (Konstantin Bogdanov).
  • تسجيل أحداث الأجزاء في system.part_log الخاصة بـ system.*_log. #92217 (Azat Khuzhin).

إصلاح خلل (سلوك غير صحيح ظاهر للمستخدم في إصدار مستقر رسمي)

  • يُصلح بعض الأخطاء في PREWHERE المرتبطة بالأنواع الفائقة لنوعي البيانات Time وTime64. يحلّ #84544. #84715 (Yarik Briukhovetskyi).
  • يهيّئ DNSResolver قبل استخدامه لمراعاة الإعدادات المخصصة. يُصلح #76296. #81302 (Zhigao Hong).
  • يُصلح قراءة الأعمدة الفرعية من عمود يحتوي اسمه على نقطة في بعض الحالات. يحلّ #81261, #82058, #88169. #87205 (Pavel Kruglov).
  • يُصلح تعطّل محرك GenerateRandom عند استخدام معلمات غير حرفية: يعيد BAD_ARGUMENTS مع رسالة واضحة بدلًا من LOGICAL_ERROR. #88157 (Shafi Ahmed).
  • يُصلح إزالة أعمدة الإسقاط غير المستخدمة عند وجود UNION. يُصلح #88180. #88350 (Sema Checherinda).
  • تم إصلاح التوزيع غير الصحيح على الشظايا في تحسين JOIN عندما يكون المفتاح الأساسي مرتبًا ترتيبًا تنازليًا. يحلّ #88512. #88794 (Amos Bird).
  • إعادة تفعيل s3queue_keeper_fault_injection_probablility، مع إصلاح المشكلات. #88800 (Kseniia Sumarokova).
  • تم إصلاح عدة مشكلات ناجمة عن إزالة الأعمدة مبكرًا في TTL. يحلّ #88002. #88860 (Amos Bird).
  • يطرح استثناءً عند تعيين temporary_files_buffer_size إلى 0. يحلّ #88900. #88917 (Vladimir Cherkasov).
  • يُصلح خطأ Bad get الذي كان يحدث أثناء تحليل الفهرس Set إذا كان المسند يحتوي على ثابت NULL. يُصلح #84856 و#82974. #89429 (Nikolai Kochetov).
  • يُصلح Cannot add subcolumn X.Y: column with this name already exists. يحلّ #89599. #89602 (Azat Khuzhin).
  • يُصلح أخطاءً في الدالتين theilsU وcontingency كانت تتسبب في نتائج غير صحيحة. #89760 (Nihal Z. Miaji).
  • إصلاح مشكلات استقرار الأسماء المستعارة: إصلاح StrictnessLevel مع SharedDatabaseCatalog، ومنع أن يكون الهدف أيضًا اسمًا مستعارًا، وتنفيذ واجهات إضافية (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare). يحلّ #89106. #89812 (Kai Zhu).
  • إصلاح احتمال حدوث crash أثناء query عن بُعد مع ARRAY JOIN داخل IN وعند تمكين الإعداد enable_lazy_columns_replication. يحلّ #90361. #89997 (Pavel Kruglov).
  • إصلاح احتمال حدوث logical error عند استخدام analyzer_compatibility_join_using_top_level_identifier مع عدة joins. #90010 (Vladimir Cherkasov).
  • إصلاح استنتاج قيم DateTime64 غير صحيحة من Strings في text formats في بعض الحالات. يحلّ #89368. #90013 (Pavel Kruglov).
  • إجراء فحوصات للحجم عند فك تسلسل البيانات من aggregation states ومصادر أخرى. #90031 (Raúl Marín).
  • تقسيم ranges الخاصة بـ parts حسب خصائص وحدات التخزين لتمكين merges الخاصة بإسقاط TTL لوحدات التخزين الباردة. بعد هذا التصحيح، ستُزال parts التي لها حد TTL أقصى < now من التخزين البارد. ولن تُجدول الخوارزمية إلا عمليات إسقاط لجزء واحد فقط. #90059 (Mikhail Artemenko).
  • إذا أُنشئ Kafka table بالإعداد kafka_handle_error_mode = 'dead_letter_queue' ولم يكن الجدول system.dead_letter_queue مهيأً، فقد كان من الممكن أن يتعطل server. تم إصلاح هذا السلوك. يحلّ #87573. #90064 (Nikita Mikhaylov).
  • إصلاح الخطأ المحتمل Column with Array type is not represented by ColumnArray column: Replicated أثناء Insertion مع استخدام ARRAY JOIN وتمكين الإعداد enable_lazy_columns_replication. #90066 (Pavel Kruglov).
  • إصلاح crash أثناء الإيقاف النظيف لـ server بسبب ترتيب إتلاف غير صحيح. يحلّ #82420. #90076 (Nikita Mikhaylov).
  • إصلاح logical error وخطأ في modulo في numbers system table عند استخدام حجم خطوة كبير. يُغلق #83398. #90123 (Nihal Z. Miaji).
  • إصلاح عدم احتفاظ كتابة Parquet بالترتيب الأصلي عند استخدام الكتابة أحادية الخيط مع الكاتب native. يتراجع جزئيًا عن https://github.com/ClickHouse/ClickHouse/pull/64424/files. #90126 (Arthur Passos).
  • عدم تطبيق تحسين العقدة الثابتة على expression الخاصة بـ LIMIT/OFFSET. يصلح #89607. #90156 (Yakov Olkhovskiy).
  • إصلاح عدم توافق تجزئة Hive الذي كان يمنع الترقية السلسة في 25.8 (ويعالج الخطأ All hive partitioning columns must be present in the schema أثناء الترقية). #90202 (Kseniia Sumarokova).
  • إصلاح JSON Exception في جدول Iceberg يحتوي على عمود timestamp عند استخدام Glue catalog. يحل #90210. #90209 (Alsu Giliazova).
  • إصلاح عدم تطابق عدد الصفوف في MergeTreeReaderIndex عندما يكون الجزء يحتوي فقط على عدد صفوف أقل من index_granularity. يحل #89691. #90254 (Peng Jian).
  • إصلاح استعلام WITH FILL اللانهائي مع nan/inf. يحل #69261. #90255 (Konstantin Bogdanov).
  • إصلاح خطأ ‘column not found’ عند استخدام query_plan_use_logical_join_step=0 مع شرط residual في JOIN ON. يحل #88635. #90279 (Vladimir Cherkasov).
  • إصلاح بعض queries مع تحسين aggregated projection. #90288 (János Benjamin Antal).
  • إصلاح خلل في قراءة subcolumns من JSON في compact parts كان قد يؤدي إلى الخطأ CANNOT_READ_ALL_DATA. يحل #90264. #90302 (Pavel Kruglov).
  • لن يستخدم ClickHouse الآن تحسين read-in-order مع Iceberg إذا لم يكن ترتيب الفرز محددًا في manifest files (أو لم يكن مطابقًا لـ default_sort_order في الجدول). يصلح #89178. #90304 (alesapin).
  • ينبغي الآن أن يراعي Time وTime64 المناطق الزمنية بشكل صحيح عند التحويل من DateTime وDateTime64 (أي يجب أن يعرض الوقت في نفس timezone التي تظهر للمستخدم عند عرضه كـ DateTime[64]). يغلق #89896. #90310 (Yarik Briukhovetskyi).
  • إصلاح خلل كان يؤدي فيه SELECT CAST(CAST(now(), 'Time'), 'Time64') إلى نتيجة غير صحيحة. يغلق #88349. #90324 (Yarik Briukhovetskyi).
  • إصلاح crash ناتج عن overflow عددي صحيح في randomStringUTF8. #90326 (Michael Kolupaev).
  • إصلاح تحديثات Cluster Discovery في البيئات متعددة العناقيد مع multicluster_root_path لمنع التأخير وفقدان تحديثات ZooKeeper. #90341 (RinChanNOW).
  • إصلاح خطأ منطقي محتمل في prewhere على JSON path غير موجود مع index&#95;granularity&#95;bytes=0. يحل #86924. #90375 (Pavel Kruglov).
  • أُصلح خلل في L2DistanceTransposed كان يتسبب في حدوث أعطال عندما تتجاوز وسيطة precision النطاق المسموح. يغلق #90401. #90405 (Raufs Dunamalijevs).
  • إصلاح خطأ منطقي محتمل في arrayUnion مع وسيطة Array(Dynamic). يحل #90270. #90409 (Pavel Kruglov).
  • إصلاح خطأ منطقي محتمل عند إعادة تسمية عمود Nested نفسه وتعديله ضمن عملية ALTER واحدة. يحل #90406. #90412 (Pavel Kruglov).
  • إصلاح parsing لقيم JSON/Dynamic/Variant من HTTP Parameters. يحل #88925. #90430 (Pavel Kruglov).
  • أُصلحت race condition في partitioning الخاصة بـ Hive، حيث كان KeyValuePairExtractor ثابتًا ويتسبب في تلف البيانات أو حدوث أعطال أثناء قراءات الملفات المتزامنة. #90474 (Paresh Joshi).
  • أُصلحت حسابات مسافة غير صحيحة في L2DistanceTransposed عند استخدام Reference vector على شكل مصفوفة (والتي تكون افتراضيًا Array(Float64)) مع أعمدة QBit ذات element type غير Float64 (Float32, BFloat16). أصبحت الدالة الآن تُحوِّل Reference vector تلقائيًا لمطابقة element type الخاص بـ QBit. يحل #89976. #90485 (Raufs Dunamalijevs).
  • يُصلح خللًا يتسبب في أن toDateTimeOrNull يعيد NULL عند تمرير وسيطة سالبة. #90490 (Yarik Briukhovetskyi).
  • إصلاح خطأ منطقي محتمل أثناء إخراج LowCardinality(Bool/Date32) بتنسيق Arrow. يحل #83883. #90505 (Pavel Kruglov).
  • أُصلحت دوال parsing الخاصة بـ IPv4 (مثل IPv4StringToNumOrDefault) التي كانت تُرجع قيَمًا عشوائية لبعض المدخلات غير الصالحة. يحل #90544. يحل #87583. #90545 (Michael Kolupaev).
  • إعادة محاولة markReplicasActive عند تعذر resolve العنوان أثناء التحقق من المضيف المحلي: اطبع سجل تحذير إذا حدث استثناء أثناء التحقق من المضيف المحلي في DDLTask. في DDLWorker::markReplicasActive، ارمِ استثناءً لإعادة المحاولة إذا لم يُعثر على مضيف محلي وكانت هناك معرّفات مضيفين في clusters. #90556 (Tuan Pham Anh).
  • إصلاح خطأ منطقي ناتج عن حالة نادرة في الدالة equals. يغلق #88142. #90557 (Nihal Z. Miaji).
  • يُفترض أن هذا يُصلح أعطال Thread sanitizer في test_ssh/test.py::test_paramiko_password. #90612 (Govind R Nair).
  • إصلاح خطأ منطقي في الدالة concatWithSeparator عند استخدام عمود const غير نصي. يغلق #90596. #90655 (Nihal Z. Miaji).
  • إصلاح التنسيق في INTO OUTFILE. يعالج #90207. #90656 (Azat Khuzhin).
  • إصلاح تعطل محتمل عند تنفيذ mutations مع الاستعلامات الفرعية وallow_statistics_optimize=1. يعالج #90626. #90664 (Azat Khuzhin).
  • إصلاح تحقق analyzer لـ LIMIT BY مع GROUP BY بحيث يُنتِج الخطأ الصحيح NOT_AN_AGGREGATE بدلًا من NOT_FOUND_COLUMN_IN_BLOCK عندما يستخدم LIMIT BY أعمدة غير موجودة في GROUP BY. يغلق #89713. #90665 (xiaohuanlin).
  • إصلاح أخطاء تحويل الأنواع عند استخدام أعمدة LowCardinality في partition key. يغلق #89412. #90666 (xiaohuanlin).
  • إصلاح مشكلة كانت تتسبب في استخدام query condition cache بشكل غير صحيح في الاستعلامات التي تحتوي filter predicates فيها على ثوابت مطوية من دوال غير حتمية (مثل shardNum()). #90692 (Eduard Karacharov).
  • إصلاح خطأ segfault في استعلام يحتوي على الدالة EXISTS ضمن قسم join on. والآن يُرجع الاستعلام ببساطة الخطأ INVALID_JOIN_ON_EXPRESSION. يغلق #90698. #90719 (Vladimir Cherkasov).
  • إصلاح الخطأ المنطقي: ‘Inconsistent AST formatting’ في AccessRightsElement عند استخدام قاعدة البيانات default بدون أي table. #90742 (Pablo Marcos).
  • إصلاح التحقق من صلاحيات الوصول لاستعلامات ALTER UPDATE عند استخدام table function remote مع localhost بوصفه المضيف الهدف. #90761 (pufit).
  • إصلاح اعتماد إخفاء secrets في named collections على display_secrets_in_show_and_select وformat_display_secrets_in_show_and_select. #90765 (Pablo Marcos).
  • تعطيل enable_shared_storage_snapshot_in_query (لأنه يؤدي إلى تسربات في الذاكرة). #90770 (Azat Khuzhin).
  • إصلاح مشكلة تكرار البيانات في RIGHT JOIN مع distributed table عند تمكين parallel replicas. #90806 (zoomxi).
  • إصلاح حالة محتملة من عدم الاتساق بين shared data وdynamic paths في JSON، مما قد يؤدي إلى أخطاء منطقية ونتائج غير متوقعة. #90816 (Pavel Kruglov).
  • إصلاح ALTER MODIFY QUERY مع dictGet() واسم القاموس في CSE ضمن SharedCatalog (ميزة متاحة على Cloud فقط). #90860 (Azat Khuzhin).
  • إصلاح توافق التسلسل داخل الذاكرة لحالة تجميع String. فقد كان اختلاف التسلسل قد يؤدي إلى نتائج مكررة إذا نُفِّذ استعلام تجميع على مثيلات بإصدارات مختلفة. ويمكن تمكين التسلسل الجديد باستخدام serialize_string_in_memory_with_zero_byte. #90880 (Antonio Andelic).
  • إصلاح التفريغ الخلفي لـ Buffer في حالة تكرار عمليات INSERT. #90892 (Azat Khuzhin).
  • عدم إدراج المجلد الأب contrib/ في system.licenses. #90901 (Raúl Marín).
  • إصلاح الارتفاع الكبير في استخدام الذاكرة أثناء قراءة أعمدة JSON/Dynamic/Variant. #90907 (Pavel Kruglov).
  • إصلاح تخصيص المخزن المؤقت للدالة base58Decode. #90909 (Antonio Andelic).
  • إصلاح خطأ منطقي محتمل عند تلقي طلب قراءة آخر من replica بعد إرسال استجابة تحمل العلامة finish=true. وكان ذلك ممكنًا بسبب حالة تسابق منطقية داخل MergeTreeReadPoolParallelReplicas، رغم أن احتمال حدوثه كان ضئيلًا جدًا. #90921 (Nikita Taranov).
  • إصلاح التحقق من grants ذات wildcard عند تنفيذ revoke جزئي. كما أُضيفت المزيد من الاختبارات. #90922 (pufit).
  • إصلاح التجميع في SummingMergeTree لأعمدة Nested LowCardinality. #90927 (Ivan Babrou).
  • إصلاح التعامل مع grants العامة عند استخدام revoke مع wildcard. ويعالج هذا مشكلةً قد تتسبب فيها إزالة wildcard grant في سحب بعض grants على المستوى العام، مثل CREATE USER، عن طريق الخطأ. #90928 (pufit).
  • إصلاح احتمال حدوث حلقة لا نهائية في azure list blobs. #90947 (Julia Kartseva).
  • إصلاح الزيادة المفرطة في عمليات تفريغ Buffer (تستهلك CPU وتنتج كمًا هائلًا من السجلات). #91000 (Azat Khuzhin).
  • … عدم السماح بضبط adaptive_write_buffer_initial_size على 0. #91001 (Pedro Ferreira).
  • إصلاح خلل في JSON عندما يمكن أن يكون path موجودًا في كلٍّ من shared data وdynamic paths أثناء قراءة sub-object في compact parts مع تعطيل write_marks_for_substreams_in_compact_parts. #91014 (Pavel Kruglov).
  • إصلاح std::out&#95;of&#95;range في CTE مع dictGet بدون arguments. يغلق #91027. #91022 (Pavel Kruglov).
  • إصلاح قراءة subcolumns الديناميكية من materialized columns في mutations. يغلق #90653. #91040 (Pavel Kruglov).
  • إصلاح مشكلة عدم عمل الدالة arrayFilter عند استخدام مصفوفة فارغة مع الدالة isNull. يُغلق #73849. #91105 (Nihal Z. Miaji).
  • إصلاح خطأ منطقي في ARRAY JOIN عندما يكون أحد أعمدة الجدول عمود Tuple فارغًا. يُغلق #90801. #91123 (Nihal Z. Miaji).
  • إصلاح الإظهار الكسول لعمود أُضيف عبر alter add column في الأجزاء القديمة. #91142 (Pavel Kruglov).
  • إصلاح دمج أعمدة JSON في Summing/Aggregating/Coalescing MergeTree. كان هذا قد يؤدي سابقًا إلى ظهور مسارات ديناميكية غير متوقعة أثناء الكتابة إلى أجزاء البيانات. #91151 (Pavel Kruglov).
  • إصلاح احتمال حدوث بنية ديناميكية غير متسقة أثناء الكتابة في compact parts، ما قد يؤدي إلى segfault. #91152 (Pavel Kruglov).
  • إصلاح parsing لقيم Float دون العادية بصيغة التدوين العلمي. يُغلق #78903. #91162 (Nihal Z. Miaji).
  • إصلاح الاستدلال الخاطئ على schema في INSERT SELECT من استعلام فرعي له source ذو schema ضمنية. #91204 (Pervakov Grigorii).
  • إصلاح المشكلة https://github.com/clickhouse/clickhouse/issues/91206: عند إنشاء table بإحصاءات وكتابة بعض البيانات ثم حذف إحدى الإحصاءات، كان ذلك يؤدي إلى crash عند قراءتها مرة أخرى، لأن النظام يفترض أن serialize و deserialize سيستخدمان أنواع الإحصاءات نفسها. في هذا الإصلاح، يتم التحقق مما إذا كانت metadata الحالية تحتوي على الإحصاءات المُسلسلة، وإذا لم تكن موجودة فستُنشأ إحصاءات وهمية ويُنفَّذ deserialize فقط لتجاوزها. #91227 (Han Fei).
  • إصلاح الإدراج في عمود CoalescingMergeTree يحتوي على Tuple من JSON/Dynamic و LowCardinality. يُغلق #91215. #91270 (Pavel Kruglov).
  • إصلاح SYSTEM DROP FILESYSTEM CACHE ON CLUSTER. #91304 (Anton Ivashkin).
  • إصلاح احتمال حدوث خطأ منطقي “Bad cast from type DB::ColumnSparse to DB::ColumnNullable”. يُغلق #91284. #91309 (Pavel Kruglov).
  • إصلاح crash عند فك تسلسل تدفقات بايت مُعدّة بخبث إلى أنواع QBit متداخلة، وهو أمر يُفترض أن يكون مستحيلًا، لكنه كان قابلًا للاستغلال للتسبب في تعطل server. #91313 (Raufs Dunamalijevs).
  • إصلاح Alias table ذات الوسائط الفارغة في Replicated database. حُلّت #91378. #91382 (Kai Zhu).
  • حاليًا، هذا الإعداد مضبوط على false، لذا عند flush لطابور async insert إلى server بعيد، تكون عمليات الإدراج متزامنة دائمًا، حتى إذا كانت قيمة الإعداد True لهذا المستخدم. #91386 (Mikhail f. Shiryaev).
  • إزالة الأعمدة المتناثرة من الترويسة في خوارزميات الدمج. يُغلق #91377. #91396 (Pavel Kruglov).
  • إصلاح خلل في partitioning الخاص بـ hive في الإصدار 25.8 قد يؤدي إلى ظهور الاستثناء A hive partitioned file can't contain only partition columns بشكل غير صحيح. #91403 (Kseniia Sumarokova).
  • إصلاح تعطل في dictGetDescendants يتسبب فيه NULL عندما يكون نوع القاموس يدعم Hierarchy، لكن لا يكون أي عمود من النوع HIERARCHICAL. يُغلق #92026. يُغلق #92121. #91420 (Nihal Z. Miaji).
  • إصلاح تعطل في الدالة IN عند استخدام lambda ووسيطات tuple غير ثابتة. يُغلق #91379. #91446 (Nihal Z. Miaji).
  • إصلاح عمليات الكتابة المتوازية التي تُفعَّل بواسطة عمليات insert الخاصة بـ MaterializedView إلى وحدات التخزين التي لا تدعمها. #91449 (Pervakov Grigorii).
  • التعامل مع القيم الفارغة في قواميس xml الخاصة بـ Ytsaurus. #91465 (MikhailBurdukov).
  • إصلاح فشل النوع QBit مع معلمات الاستعلام مثل SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}. #91488 (Raufs Dunamalijevs).
  • إصلاح LOGICAL_ERROR عند استخدام untuple في تعبير ثابت. #91507 (Pervakov Grigorii).
  • إصلاح احتمال حدوث سباق بيانات في librdkafka. #91521 (János Benjamin Antal).
  • إصلاح خطأ منطقي تسببه وسيطة النجمة في الدالة remote. يُغلق #90568. #91524 (Nihal Z. Miaji).
  • إصلاح overflow أثناء القراءة من format ‏ORC لأنواع Date وDateTime64. يُغلق #70976. #91572 (Yarik Briukhovetskyi).
  • منع أوامر ALTER لمحركات الجداول الخاصة بـ تخزين الكائنات. على سبيل المثال، كان يمكن أن يؤدي ALTER ADD PROJECTION إلى تعذر إعادة تشغيل الخادم، لأن محركات تخزين الكائنات لا تدعم الإسقاطات. #91573 (Nikolay Degterinsky).
  • إصلاح L2DistanceTransposed الذي كان يعيد نتائج غير صحيحة عند استخدام متجهات مرجعية غير ثابتة (على سبيل المثال، من جدول). #91517. #91593 (Raufs Dunamalijevs).
  • يُصلح خطأً في عمليات JOIN على شروط FALSE كان يؤدي إلى إرجاع LOGICAL_ERROR أثناء مرحلة التوزيع. يُغلق #91173. #91598 (Yarik Briukhovetskyi).
  • يُصلح زيادة استهلاك الذاكرة في عملية join مع “additional filter”، ويُغلق #91011. #91664 (Vladimir Cherkasov).
  • يُصلح استعلامات JOIN مع view ووضع parallel replicas المفعّل. #91813 (Igor Nikonov).
  • يُصلح إعداد delta lake delta_lake_snapshot_version الذي كان قد يُعطي نتيجة غير صحيحة عند استخدامه مع محرك جدول (وليس table function) وبالقيمة -1 (معطّل) بعد استخدام snapshot version سابقًا. يُغلق #87676. #91818 (Kseniia Sumarokova).
  • يُصلح LOGICAL_ERROR في RecursiveCTEChunkGenerator. #91827 (Pablo Marcos).
  • يُصلح عدم تطابق بنية block في الاستعلامات التي تستخدم FINAL وPREWHERE. #91847 (Antonio Andelic).
  • يُصلح logical error مع join_use_nulls وعمليات join متعددة إلى جانب cross join. #91853 (Vladimir Cherkasov).
  • يضيف آلية إصلاح لـ JSON في حال وجود path مكرر في shared data وdynamic paths، وهو ما كان قد يحدث بسبب الخطأ الذي أُصلح في https://github.com/ClickHouse/ClickHouse/pull/90816. #91886 (Pavel Kruglov).
  • يُصلح خطأً في قارئ ORC عند قراءة أعمدة string المُرمَّزة باستخدام DICTIONARY_V2 والتي لا تحتوي إلا على قيم NULL. #91889 (Peng Jian).
  • يُصلح حالة عدم اتساق في serialization بين substreams sparse وnullable في أعمدة Tuple، وكان ذلك قد يؤدي إلى parts تالفة أو إلى تعطل أثناء القراءة. يعالج هذا https://github.com/ClickHouse/ClickHouse/pull/91851 . @Algunenano هل يمكنك المساعدة في التحقق مما إذا كان هذا قد يُصلح stress test في المستودع الخاص؟ @CurtizJ هل يمكنك أيضًا إلقاء نظرة، من فضلك؟ شكرًا! #91932 (Amos Bird).
  • يُصلح الخطأ Directory '{}' does not exist (LOGICAL_ERROR) عند إنشاء backups على disks القابلة لإعادة الكتابة المباشرة. #91935 (Julia Kartseva).
  • يمنع حدوث crash عند الاتصال بـ MongoDB باستخدام named collections. #91959 (Antonio Andelic).
  • يُصلح الخطأ “TOO_MANY_MARKS” الذي كان يمكن أن يحدث بعد بعض استعلامات ALTER الخاصة بـ compact parts. #91980 (alesapin).
  • يُغلق https://github.com/clickhouse/clickhouse/issues/87417: يحتوي writing schema للتنسيق v1 على خطأ، إذ يجب أن يكون نوع “added_snapshot_id” هو “long” بدلًا من “null, long” لأنه حقل مطلوب. وهذا خلل لأنه غير متوافق مع أنظمة أخرى مثل spark. وعند مزج manifest files هذه، يظهر الخطأ. #92078 (Han Fei).
  • إصلاح الأسماء غير الصحيحة لـ readWKT وreadWKB، والتي كانت بالتنسيق الخاطئ في الإصدارات السابقة. #92094 (Alexey Milovidov).
  • إصلاح العديد من الأخطاء المنطقية، وحالات تجاوز السعة، والأخطاء الوظيفية في الدالة midpoint. يغلق #91816. #92102 (Nihal Z. Miaji).
  • إصلاح النتائج غير الصحيحة التي قد تظهر عند قراءة بعض الأعمدة الفرعية (مثل حجم السلسلة النصية) مع الترميز المتناثر. #92156 (Pavel Kruglov).
  • إصلاح فشل system.view_refreshes مع الخطأ No macro 'replica' in config. #92203 (Michael Kolupaev).
  • إصلاح استبدال UDF في التنسيق. #92210 (Raúl Marín).
  • في ddlworker::markreplicasactive، إذا لم يتم العثور على مضيف نشط وكان remote_servers يحتوي على بعض host_ids، فسيُطبع سجل تحذيري بدلًا من طرح استثناء. #92223 (Tuan Pham Anh).
  • إحاطة المعاملين IN وNOT IN بأقواس. يعالج #85075. #92225 (Mikhail f. Shiryaev).
  • إصلاح النسخ الاحتياطي لجداول KeeperMap وMemory. قد يؤدي إنشاء نسخة احتياطية للجداول التي تستخدم أحد هذين المحركين مع ضبط max_compress_block_size على 0 إلى حدوث crash. #92237 (Antonio Andelic).
  • إصلاح crash عند قراءة كلٍّ من بيانات String والعمود الفرعي .size من محرك Log. يعالج هذا #89909. ويتضمن ذلك بعض commits في #92290. #92341 (Amos Bird).
  • إصلاح خطأ منطقي ناتج عن استخدام النوع Nothing في argumentات الدالة caseWithExpression. يغلق #85354. #92351 (Nihal Z. Miaji).
  • إصلاح crash محتمل في aggregate functions بعد MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin).

تحسينات البناء/الاختبار/التغليف

إصدار ClickHouse 25.11، 2025-11-27

تغيير غير متوافق مع الإصدارات السابقة

  • إزالة النوع Object المهمل. #85718 (Pavel Kruglov).
  • إزالة الميزة LIVE VIEW المتقادمة. إذا كنت تستخدم LIVE VIEW، فلن تتمكن من الترقية إلى الإصدار الجديد. #88706 (Alexey Milovidov).
  • في الإصدارات السابقة، كان النوع Geometry مجرد اسم مستعار لـ String، لكنه أصبح الآن نوعًا كامل الميزات. #83344 (scanhex12).
  • تهريب أسماء الملفات المُنشأة للـ subcolumns من النوع Variant في جزء البيانات Wide من جداول MergeTree. يكسر هذا التغيير التوافق مع الجداول القديمة التي تستخدم أنواع البيانات Variant/Dynamic/JSON. كما يعالج تخزين الأنواع التي تحتوي على رموز خاصة داخل Variant (مثل DateTime مع timezone محددة تحتوي على \). ويمكن تعطيل هذا التهريب بتغيير إعداد MergeTree escape_variant_subcolumn_filenames (وللحفاظ على التوافق، عطّل هذا الإعداد في config الخاصة بـ MergeTree أو اضبط إعداد compatibility على الإصدار السابق قبل الترقية). يعالج #69590. #87300 (Pavel Kruglov).
  • تفعيل تنسيق serialization ‏with_size_stream لنوع البيانات String افتراضيًا. هذا التغيير متوافق مع الإصدارات السابقة، لكن تنسيق serialization الجديد مدعوم فقط بدءًا من الإصدار 25.10، ما يعني أن الرجوع إلى إصدارات أقدم من 25.10 لن يكون ممكنًا. وإذا أردت الحفاظ على إمكانية الرجوع إلى 25.9 وما قبله، فاضبط serialization_info_version على basic وstring_serialization_version على single_stream في قسم merge_tree من server configuration. #89329 (Alexey Milovidov).
  • دعم وسم الاستثناءات في استجابة نتائج HTTP لتمكين clients من parse الاستثناءات بدرجة أعلى من الموثوقية. يعالج #75175. الإعداد http_write_exception_in_output_format معطّل افتراضيًا لضمان الاتساق عبر formats. #88818 (Kaviraj Kanagaraj). ورغم أنه ليس من المفترض أن يؤدي إلى كسر أي سلوك قائم (وفي أسوأ الحالات ستُضاف سلسلة غريبة إلى رسالة الاستثناء)، فلا يزال من المنطقي استخدام “تغيير غير متوافق مع الإصدارات السابقة” كفئة في changelog للتنبيه فقط (لأنه لا أحد يعلم كيف قد تقوم بعض السكربتات الرديئة بتحليل رسالة الاستثناء).
  • حظر إنشاء عدة disks من نوع plain-rewritable فوق path مشترك في object storage، لأن ذلك قد يؤدي إلى سلوك غير معرّف عند حدوث تصادمات بين transactions مختلفة لـ metadata storage. #89038 (Mikhail Artemenko).
  • إصلاح أولوية إعدادات SASL الخاصة بـ Kafka storage. وأصبحت إعدادات SASL على مستوى الجدول والمحددة في استعلامات CREATE TABLE تتجاوز الآن بشكل صحيح الإعدادات الخاصة بالمستهلك/المنتِج الواردة من configuration files. #89401 (János Benjamin Antal).
  • أصبحت timestamps الخاصة بـ Parquet التي لا تحتوي على timezone (‏isAdjustedToUTC=false) تُقرأ الآن على أنها DateTime64(…, ‘UTC’) بدلًا من DateTime64(…). وهذا أقل خطأً، لأن تحويل timestamp من هذا النوع في UTC إلى سلسلة نصية ينتج تمثيلًا للوقت المحلي الصحيح. استخدم input_format_parquet_local_time_as_utc = 0 للحصول على السلوك القديم. يعالج #87469. #87872 (Michael Kolupaev).
  • تحسين طفيف في codec ‏T64: لم يعد يقبل أنواع البيانات التي لا تتوافق محاذاتها مع حجم عنصر الضغط، إذ كان ذلك يتسبب في خطأ برمجي. يعالج #89282. #89432 (yanglongwei).

ميزة جديدة

  • تقديم النوع Geometry مع دعم قراءة التنسيقين WKB وWKT. في الإصدارات السابقة، كان النوع Geometry اسماً مستعاراً لـ String، أما الآن فقد أصبح نوعاً متكاملاً بالكامل. #83344 (scanhex12).
  • إضافة عبارة SQL جديدة EXECUTE AS لدعم انتحال هوية المستخدم. يحل #39048. #70775 (Shankar).
  • إضافة الدالة naiveBayesClassifier لتصنيف النصوص باستخدام Naive Bayes بالاعتماد على ngrams. #88677 (Nihal Z. Miaji).
  • إضافة دعم LIMIT وOFFSET الكسريين لاختيار جزء من جدول. يُغلق #81892. #88755 (Ahmed Gouda).
  • نظام ClickHouse الفرعي لكتالوج Microsoft OneLake. #89366 (scanhex12).
  • إضافة الدالة flipCoordinates التي تفك العدد المطلوب من الأبعاد في Array وتبدّل المؤشرات داخل عمود Tuple. يحل #79469. #79634 (Sachin Kumar Singh).
  • إضافة جدول system.unicode الذي يحتوي على قائمة بمحارف Unicode وخصائصها. يُغلق #80055. #80857 (wxybear).
  • إضافة إعداد MergeTree جديد merge_max_dynamic_subcolumns_in_wide_part لإتاحة تقييد عدد الأعمدة الفرعية الديناميكية في Wide part بعد الدمج، بغض النظر عن المعلمات المحددة في نوع البيانات. #87646 (Pavel Kruglov).
  • إضافة دعم دالة window ‏cume_dist. يُصلح #86920. #88102 (Manuel).
  • يمكن للمستخدم الآن إضافة الوسيطة الجديدة preprocessor عند إنشاء text index. وهذه الوسيطة عبارة عن expression عشوائي يحوّل كل document قبل tokenization. #88272 (Jimmy Aguilar Mena).
  • إضافة الحقل memory_usage إلى X-ClickHouse-Progress وX-ClickHouse-Summary. ويمكن استخدامه لجمع معلومات استخدام الذاكرة للاستعلامات آنياً من جهة العميل. #88393 (Christoph Wurm).
  • إضافة الإعداد into_outfile_create_parent_directories لإنشاء الأدلة الأصلية تلقائياً من أجل INTO OUTFILE، مما يمنع حدوث أخطاء عندما لا تكون مسارات الإخراج موجودة. وهذا يبسّط سير العمل في الحالات التي تكتب فيها الاستعلامات النتائج إلى أدلة متداخلة. يحل #88610. #88795 (Saksham).
  • دعم صياغة CREATE OR REPLACE للجداول المؤقتة. يُغلق #35888. #89450 (Aleksandr Musorin).
  • دعم arrayRemove لإزالة جميع العناصر المساوية لـ elem من المصفوفة arr. وهذا مطلوب فقط للتوافق مع Postgres، لأن ClickHouse يوفّر بالفعل الدالة الأقوى بكثير arrayFilter. يحل #52099. #89585 (tiwarysaurav).
  • يقدّم الدالة scalar ‏midpoint التي تحسب المتوسط. يحل #89029. #89679 (simonmichal).
  • توفّر واجهة الويب الآن زر تنزيل. ويؤدي ذلك إلى تنزيل النتيجة كاملةً حتى إذا كانت واجهة المستخدم تعرض جزءًا منها فقط. #89768 (Alexey Milovidov).
  • إضافة الإعداد arrow_flight_request_descriptor_type لدعم Dremio وخوادم Arrow Flight الأخرى التي تتطلب descriptor بنمط الأوامر. ينفّذ #89523. #89826 (Shreyas Ganesh).
  • دوال aggregate جديدة argAndMin وargAndMax تُرجع الوسيط والقيمة المتطرفة المقابلة. وفي الإصدارات السابقة كان ذلك ممكنًا أيضًا باستخدام Tuple كوسيط. #89884 (AbdAlRahman Gad).
  • إعدادات لكتابة قيم التحقق الخاصة بـ Parquet والتحقق منها. #79012 (Michael Kolupaev).
  • تمت إضافة الإعداد kafka_schema_registry_skip_bytes إلى Kafka table engine لتخطي بايتات ترويسة الغلاف (مثل البادئة المكوّنة من 19 بايت في AWS Glue Schema Registry) قبل parsing للـ message payload. يتيح ذلك لـ ClickHouse استهلاك الرسائل من schema registries التي تضيف headers للـ metadata. #89621 (Taras Polishchuk).
  • إضافة الدالة h3PolygonToCells التي يمكنها ملء Geometry بخلايا h3 السداسية. يحل #33991. #66262 (Zacharias Knudsen).
  • إضافة العمود الافتراضي الجديد _tags ‏(Map(String, String)) الذي يتضمن جميع tags المرتبطة بالـ blob في S3 (ملاحظة: إذا لم تكن للـ blob أي tags، فلن يُجرى أي طلب إضافي). يحل #72945. #77773 (Zicong Qu).

ميزة تجريبية

  • دعم استرجاع شهادات TLS من موفري ACME، ‏RFC 8555، مثل Let’s Encrypt. يتيح ذلك التهيئة التلقائية لـ TLS على العناقيد الموزعة. #66315 (Konstantin Bogdanov).
  • دعم جزء من واجهة برمجة تطبيقات استعلامات HTTP الخاصة بـ Prometheus. لتمكين ذلك، أضف قاعدة بالنوع query_api في قسم <prometheus> ضمن ملف التهيئة. المعالجات المدعومة هي /api/v1/query_range و /api/v1/query. #86132 (Nikita Mikhaylov).
  • أصبح البحث بالنص الكامل الآن في مرحلة بيتا (بعد أن كان سابقًا في مرحلة تجريبية). #88928 (Robert Schulze).
  • نُقل Alias إلى المرحلة التجريبية، ويمكن تمكينه باستخدام allow_experimental_alias_table_engine = 1. #89712 (Kai Zhu).

تحسين الأداء

  • أصبح Parquet reader v3 مفعّلًا افتراضيًا. #88827 (Michael Kolupaev).
  • التنفيذ الموزّع: تقسيم المهام بشكل أفضل بحسب معرّفات row groups، لا بحسب الملفات. #87508 (scanhex12).
  • تستخدم عمليات RIGHT وFULL JOIN الآن ConcurrentHashJoin؛ ما يعني أن هذه الأنواع من عمليات join تعمل الآن بدرجة أعلى من التوازي. ويحسّن ذلك أداء حالات مختلفة لعمليات RIGHT وFULL JOIN بما يصل إلى الضعف. يعالج #78027. #78462 (Yarik Briukhovetskyi).
  • تحسين القيم الكبيرة في التعبيرات الثابتة داخل الاستعلامات. يغلق #72880. #81104 (Yakov Olkhovskiy).
  • استعلامات SELECT أسرع حتى 8 مرات عند استخدام partition pruning بكثافة على الجداول التي تحتوي على أكثر من 10 آلاف part. #85535 (James Morrison).
  • عندما يستخدم الاستعلام fixed hash map من أجل aggregation state ‏(group by على عدد صحيح صغير)، يدمج ClickHouse حالة التجميع بالتوازي لتسريع الاستعلام. #87366 (Jianfei Hu).
  • إتاحة استخدام projections ‏(التي تستخدم SELECT لـ _part_offset وORDER BY مختلفًا) بوصفها secondary index. عند تفعيل ذلك، يمكن استخدام بعض query predicates للقراءة من projection parts وتوليد bitmaps لتصفية الصفوف بكفاءة خلال مرحلة PREWHERE. وهذه هي الخطوة الثالثة لتنفيذ projection index، بعد #80343. #81021 (Amos Bird).
  • إصلاح VDSO لأنظمة Aarch64 النادرة، وربما لتركيبات أخرى من المعمارية/النواة. #86096 (Tomas Hulata).
  • تحسين سرعة فك ضغط LZ4 من خلال تبسيط الشيفرة وضبط خوارزمية الاختيار. #88360 (Raúl Marín).
  • يقسّم S3 الكائنات داخليًا استنادًا إلى prefixes أسماء المفاتيح، ويتوسّع تلقائيًا للتعامل مع معدلات طلبات مرتفعة لكل partition. يقدّم هذا التغيير إعدادَي BACKUP جديدين: data_file_name_generator و data_file_name_prefix_length. عندما تكون data_file_name_generator=checksum، تُسمّى data files الخاصة بالنسخ الاحتياطي باستخدام hash لمحتوياتها. Example: بالنسبة إلى checksum = abcd1234ef567890abcd1234ef567890 وdata_file_name_prefix_length = 3، سيكون المسار الناتج: abc/d1234ef567890abcd1234ef567890. ويعزّز توزيع المفاتيح الناتج load balancing عبر partitions في S3 ويقلّل من خطر throttling. #88418 (Julia Kartseva).
  • تحسين أداء text index عبر تخزين كتل dictionary مؤقتًا واستخدام جداول hash لعمليات token lookups بدلًا من binary search. #88786 (Elmi Ahmadov).
  • يمكن للاستعلامات الآن الاستفادة من optimize_read_in_order وquery_plan_optimize_lazy_materialization في الوقت نفسه. يعالج #88767. #88866 (Manuel).
  • استخدم aggregate projection للاستعلامات التي تتضمن DISTINCT. يغلق #86925. #88894 (Nihal Z. Miaji).
  • التخزين المؤقت لـ posting lists لتحسين الأداء في عمليات التشغيل المتتالية. #88912 (Elmi Ahmadov).
  • تشغيل تحويل LIMIT BY المتدفق في الحالات التي يطابق فيها ترتيب فرز الإدخال مفاتيح LIMIT BY. #88969 (Eduard Karacharov).
  • السماح بإعادة كتابة ANY LEFT JOIN أو ANY RIGHT JOIN إلى ALL INNER JOIN في بعض الحالات. #89403 (Dmitry Novik).
  • تقليل الكلفة الإضافية لـ logging: استخدام عدد أقل من العمليات atomic لكل entry. #89651 (Sergei Trifonov).
  • عند تفعيل Runtime Filters في query تحتوي على joins متعددة وإضافة عدة Runtime Filters، أصبح من الممكن تطبيق pushdown لخطوات filter المضافة حديثًا فوق الخطوات الأخرى. #89725 (Alexander Gololobov).
  • تسريع بعض عمليات uniqExact قليلًا عبر تقليل الكلفة الإضافية لدمج hash tables. #89727 (Raúl Marín).
  • زيادة الحد الأقصى لعدد rows في lazy materialization من 10 إلى 100. #89772 (Alexey Milovidov).
  • تفعيل الإعداد allow_special_serialization_kinds_in_output_formats افتراضيًا. سيؤدي ذلك إلى تقليل memory usage وتحسين سرعة query عند إخراج أعمدة Sparse/Replicated في بعض output formats المعتمدة على الصفوف. #89402 (Pavel Kruglov).
  • أُضيفت parallelism لاستعلامات ALTER TABLE ... FREEZE. #71743 (Kirill).
  • إضافة cache لمصادقة bcrypt. #87115 (Nikolay Degterinsky).
  • إذا كان skip index المستخدم في query مع FINAL على column يشكّل جزءًا من primary key، فإن الخطوة الإضافية للتحقق من تقاطع primary key في parts الأخرى تصبح غير ضرورية، ولم تعد تُنفَّذ. يحل #85897. #88368 (Shankar Iyer).
  • أصبح التحسين enable_lazy_columns_replication هو default الآن، مما سيوفر memory usage في joins. #89316 (Alexey Milovidov).
  • استحداث cache لكل table لـ ColumnsDescription الخاصة بـ parts، مما يقلل memory usage عندما تحتوي tables على عدد كبير من parts وcolumns كثيرة. #89352 (Azat Khuzhin).
  • أُدخلت cache للرأس المفكك التسلسل لـ text index لتقليل I/O وتحسين query performance. ويمكن ضبط هذه cache عبر server settings الجديدة: - text_index_header_cache_policy - text_index_header_cache_size - text_index_header_cache_max_entries - text_index_header_cache_size_ratio. #89513 (Elmi Ahmadov).

تحسينات

  • ينبغي أن يوفّر UNION توحيدًا للأنواع باستخدام Variant عند الحاجة، إذا كان use_variant_as_common_type مفعّلًا. يعالج #82772. #83246 (Mithun p).
  • أصبح بالإمكان الآن منح الأدوار المعرّفة في SQL إلى المستخدمين المعرّفين في users.xml. #88139 (c-end).
  • تسجيل الاستعلامات الداخلية (التي تُنفَّذ داخليًا بواسطة Dictionaries، وRefreshable Materialized Views، وغيرها)، وإضافة العمود الجديد is_internal إلى system.query_log. #83277 (Miсhael Stetsyuk).
  • تحسين المعامل IS NOT DISTINCT FROM (<=>): أُضيف دعم للمعكوس IS DISTINCT FROM، ودعم للمعاملات الرقمية المتوافقة من أنواع مختلفة (مثل Nullable(UInt32) و Nullable(Int64)). يعالج #86763. #87581 (yanglongwei).
  • سيقوم clickhouse-client و clickhouse-local في interactive mode بإبراز المعرّفات في سطر الأوامر التي تحمل الاسم نفسه للمعرّف الحالي الواقع تحت المؤشر. #89689 (Alexey Milovidov).
  • لم تعد الإعدادات المرتبطة بـ output format تؤثر في query caching. كذلك، سيتجاهل query caching الإعداد http_response_headers. وهذا مطلوب لإتاحة تنفيذ ميزات مثل تنزيل النتيجة من cache في Web UI. #89756 (Alexey Milovidov).
  • ستوفّر HTTP interface الترويستين Age و Expires عند استخدام query result cache. ويشير وجود الترويسة Age إلى ما إذا كانت النتيجة من cache، بينما تُضبط Expires أيضًا عند أول كتابة. كما أُضيفت profile events جديدة: QueryCacheAgeSeconds و QueryCacheReadRows و QueryCacheReadBytes و QueryCacheWrittenRows و QueryCacheWrittenBytes. #89759 (Alexey Milovidov).
  • السماح بالإدراج في الجداول البعيدة وجداول data lake عندما يكون disable_insertion_and_mutation مفعّلًا (أي warehouses للقراءة فقط في ClickHouse Cloud). #88549 (Alexander Tokmakov).
  • إضافة الاستعلام SYSTEM DROP TEXT INDEX CACHES. #90287 (Anton Popov).
  • تفعيل enable_shared_storage_snapshot_in_query افتراضيًا لتوفير ضمانات اتساق أفضل. ولا يُتوقع أن تكون لذلك أي سلبيات. #82634 (Alexey Milovidov).
  • أُضيف الإعداد send_profile_events الذي يتيح للعملاء تقليل Network traffic عندما لا تكون profile events مستخدمة. #89588 (Kaviraj Kanagaraj).
  • السماح بتعطيل التنزيل في الخلفية للمقاطع القريبة لكل query على حدة. يصلح #89524. #89668 (tanner-bruce).
  • السماح بـ FETCH PARTITION عند وجود أقراص تالفة في جداول replicated merge tree. #58663 (Duc Canh Le).
  • إصلاح استثناء غير ملتقط أثناء جلب schema جدول MySQL في MySQL database engine. #69358 (Duc Canh Le).
  • تُنفَّذ الآن جميع استعلامات DDL ‏ON CLUSTER ضمن سياق مستخدم الاستعلام الأصلي، لتحسين التحقق من صلاحيات الوصول. #71334 (pufit).
  • أُضيف دعم UUID في Parquet عندما يكون مُمثَّلًا بواسطة FixedString(16) مع النوع المنطقي UUID. #74484 (alekseev-maksim).
  • تعطيل ThreadFuzzer افتراضيًا في الملفات التنفيذية غير الخاصة بالخادم. #89115 (Raúl Marín).
  • جعل تحسينات خطة الاستعلام مرئية للخطة الفرعية المُدخلة للاستعلام الفرعي المترابط عبر تأجيل إضفاء الطابع المادي عليها. جزء من #79890. #85455 (Dmitry Novik).
  • يمكنك الآن رؤية شريط التقدم والسجلات وإحصاءات الأداء لاستعلامات CREATE OR REPLACE TABLE مع SELECT في clickhouse-client. ولن يؤدي هذا الاستعلام بعد الآن إلى timeout حتى إذا كان SELECT يستغرق وقتًا طويلًا. يحل #38416. #87247 (Diskein).
  • دعم النوعين JSON وDynamic في دوال hash. يحل #87734. #87791 (Pavel Kruglov).
  • تنفيذ الأجزاء المفقودة من خادم ArrowFlight. #88013 (Vitaly Baranov).
  • إضافة histogram metrics متعددة إلى الخادم وKeeper لقياس مدد مراحل تنفيذ طلبات Keeper. ستُضاف metrics التالية إلى الخادم: keeper_client_queue_duration_milliseconds وkeeper_client_send_duration_milliseconds وkeeper_client_roundtrip_duration_milliseconds. وستُضاف metrics التالية إلى Keeper: keeper_server_preprocess_request_duration_milliseconds وkeeper_server_process_request_duration_milliseconds وkeeper_server_queue_duration_milliseconds وkeeper_server_send_duration_milliseconds. #88158 (Miсhael Stetsyuk).
  • إضافة الخيار input_headers إلى استعلام EXPLAIN لإضافة headers الإدخال إلى الخطوات. #88311 (János Benjamin Antal).
  • إضافة profile events لعدّ عدد طلبات S3 وAzureBlobStorage التي تؤخرها throttlers. ويُصلح هذا عدم الاتساق في profile events الخاصة بـ ThrottlerCount المرتبطة بالـ disk وغير المرتبطة به. ولم تعد طلبات HTTP DELETE الخاصة بـ AzureBlobStorage خاضعة للتقييد. #88535 (Sergei Trifonov).
  • تخزين statistics على مستوى table مؤقتًا، مع إضافة إعدادين: إعداد merge tree ‏refresh_statistics_interval ويعني interval تحديث cache الإحصاءات، وتعني القيمة 0 عدم إنشاء cache. أما إعداد session ‏use_statistics_cache فيحدد ما إذا كان يجب استخدام statistics على مستوى table في query. وفي بعض الأحيان نرغب في statistics أفضل، لذلك نختار تجاهلها. #88670 (Han Fei).
  • إصلاح deserialization الثنائي لـ Array وMap لاستخدام الإعداد max_binary_array_size بدلًا من max_binary_string_size عند التحقق من حدود الحجم. ويضمن هذا تطبيق الحدود الصحيحة عند القراءة بتنسيق RowBinary. #88744 (Raufs Dunamalijevs).
  • أُضيف الصنف LockGuardWithStopWatch واستُخدم في background pool لتنفيذ عمليات الدمج. وإذا ظلّ mutex محتجزًا لمدة ثانية، أو واجه أحد الخيوط صعوبة في الحصول عليه خلال ثانية، فستُطبع رسالة تحذير. كما نُقل الكود الثقيل من destructor الخاص بـ MergeMutateSelectedEntry إلى الدالة finalize لتجنّب الاحتفاظ بالقفل داخل executor الخاص بـ MergeTreeBackground لمدة طويلة جدًا. #88898 (Nikita Mikhaylov).
  • أصبح من الممكن استخدام AWS Regions التي تتطلب opt-in مع S3 تلقائيًا عندما لا تكون المنطقة محددة في endpoint. مرجع: opt-in AWS regions. #88930 (Andrey Zvonov).
  • يمكن للمستخدم الآن إلغاء query في clickhouse-client بالضغط على Ctrl-C أثناء تشغيل pager. يحلّ هذا المشكلة #80778. #88935 (Grigorii).
  • ستعرض web UI أشرطة داخل الجدول حتى عندما تكون القيم سالبة. وبذلك يمكنها عرض مخطط أشرطة ثنائي الاتجاه بألوان مختلفة للأشرطة على الجانبين السالب والموجب. #89016 (Alexey Milovidov).
  • تعطيل shared_merge_tree_create_per_replica_metadata_nodes لتقليل كمية metadata التي يخزنها SharedMergeTree في Keeper. #89036 (Alexander Tokmakov).
  • جعل S3Queue يراعي server setting ‏disable_insertion_and_mutation. #89048 (Raúl Marín).
  • تعيين القيمة الافتراضية لـ s3_retry_attempts إلى 500 في 25.6 لضمان نجاح النسخ الاحتياطية عند حدوث إعادة تقسيم في S3 واستجابة S3 بأخطاء slow-down لأكثر من 10 دقائق. #89051 (Nikita Mikhaylov).
  • يمكن الآن استخدام الإعدادين kafka_compression_codec وkafka_compression_level لتحديد الضغط لمنتجي Kafka في كلا Kafka engines. #89073 (János Benjamin Antal).
  • إضافة column جديدة باسم statistics في system.columns، تشير إلى أنواع الإحصاءات المبنية على هذا الجدول. وإذا أُنشئ نوع من الإحصاءات تلقائيًا، فسيظهر مع اللاحقة (auto). #89086 (Han Fei).
  • تحسين رسالة الخطأ عند تمرير توسيع عام بدلًا من اسم cluster إلى table function من نوع *Cluster. #89093 (Konstantin Bogdanov).
  • YTsaurus: السماح باستخدام replicated_table كمصدر بيانات. #89107 (MikhailBurdukov).
  • لم تعد queries التي تبدأ بمسافات بيضاء تُحفَظ في history ضمن CLI. #89116 (Konstantin Bogdanov).
  • دعم Array من String كمدخل للدالتين hasAnyTokens وhasAllTokens. #89124 (Elmi Ahmadov).
  • تعديل طريقة تخزين الأقراص plain-rewritable لبياناتها الوصفية في الذاكرة، مما يعالج العديد من الأخطاء المرتبطة بتداخل الأدلة وما يتصل بذلك. #89125 (Mikhail Artemenko).
  • سيُجرى الحساب المسبق للاستعلامات الفرعية التي تظهر داخل تعبيرات IN عند الاستعلام عن جدول Iceberg على نحو صحيح قبل تحليل تقليم الأقسام. #89177 (Daniil Ivanik).
  • تفعيل create_table_empty_primary_key_by_default افتراضيًا. وهذا أفضل من ناحية سهولة الاستخدام. #89333 (Alexey Milovidov).
  • إصلاح شيفرة غير صحيحة في محرك قاعدة البيانات Backup، إذ كان قد يُنشئ استعلامًا غير صالحًا مع SHOW CREATE DATABASE أو عند الاستعلام عن engine_full من system.databases. يغلق #89477. #89341 (Alexey Milovidov).
  • في الإصدارات السابقة، كان الإعداد create_table_empty_primary_key_by_default غير فعّال عندما لا تحدد محرك الجدول في استعلام CREATE TABLE. #89342 (Alexey Milovidov).
  • تحديث chdig إلى v25.11.1 - ويتضمن تحسينات كبيرة في التسجيل وتحسينات متنوعة أخرى (ملاحظات الإصدار لـ 25.11). #89957 (Azat Khuzhin). (ملاحظات الإصدار لـ 25.10). #89452 (Azat Khuzhin).
  • جعل أداة تغيير حجم مربع نص الاستعلام في واجهة الويب بعرض كامل، مما يجعله أكثر سهولة قليلًا. كذلك، لم تكن أداة تغيير الحجم الأصلية في المتصفح متاحة في Safari على iPad، وبعد هذا التغيير أصبح بإمكانك على الأقل سحب الحافة السفلية لمربع النص إذا كنت تعرف ذلك. #89457 (Alexey Milovidov).
  • تحسين تتبع الذاكرة أثناء توليد نتائج hash joins. سابقًا، لم يكن يجري تتبع التخصيصات المؤقتة أثناء توليد نتيجة join بشكل صحيح، مما قد يؤدي إلى تجاوز حد الذاكرة. #89560 (Azat Khuzhin).
  • سجل الخادم غير المتزامن: إجراء flush في وقت أبكر وزيادة حجم queue الافتراضي. #89597 (Raúl Marín).
  • إصلاح القيم غير الصحيحة لـ FilesystemCacheBytes (وغيرها) في system.asynchronous_metrics. تشغيل استعلامات SYSTEM على مخابئ نظام الملفات مرة واحدة فقط. عرض ذري للمخابئ التي تشير إلى المسار نفسه في system.filesystem_caches. #89640 (Azat Khuzhin).
  • توضيح وصف بعض الأعمدة في system.view_refreshes. #89701 (Tuan Pham Anh).
  • تخزين بيانات اعتماد S3 التي تتعامل مع endpoint الخاص بـ STS مؤقتًا بحيث يمكن إعادة استخدامها عبر استدعاءات دوال مختلفة. ويمكن التحكم في عدد بيانات الاعتماد المخزنة مؤقتًا عبر s3_credentials_provider_max_cache_size. #89734 (Antonio Andelic).
  • إصلاح pushdown لمرشح runtime عندما توجد تحته عدة خطوات expression. #89741 (Alexander Gololobov).
  • إذا كانت ذاكرة النظام أقل من 5GB، فلا تُجرى mlock للملف التنفيذي افتراضيًا. #89751 (Alexey Milovidov).
  • لم تعد تلميحات الأنواع في واجهة الويب تتجاوز رأس الجدول. كما صُحِّح عرض التلميحات المنبثقة أيضًا، فلم تعد تظهر خلف رأس الجدول. #89753 (Alexey Milovidov).
  • إظهار خصائص الجدول في واجهة الويب. سيؤدي النقر على عدد الصفوف أو البايتات إلى إظهار استعلام من system.tables. وسيؤدي النقر على محرك الجدول إلى إظهار SHOW TABLES. #89771 (Alexey Milovidov).
  • دعم non_replicated_deduplication_window للجداول التي تستخدم قرصًا لا يدعم الكتابة بأسلوب append. يحل هذا #87281. #89796 (Tuan Pham Anh).
  • أُضيفت إمكانية تعيين قائمة بالجداول المطلوب تنفيذ flush لها في الأمر SYSTEM FLUSH ASYNC INSERT QUEUE. #89915 (Sema Checherinda).
  • تخزين معرّفات كتل إزالة التكرار في system.part_log. #89928 (Sema Checherinda).
  • تم تغيير القيمة الافتراضية لإعداد ذاكرة التخزين المؤقت لنظام الملفات keep_free_space_remove_batch من 10 إلى 100، لأنه أكثر كفاءة. #90030 (Kseniia Sumarokova).
  • تقديم نوع الدمج TTL DROP، وعدم تحديث الجدولة التالية لدمج حذف TTL بعد هذا النوع من عمليات الدمج. #90077 (Mikhail Artemenko).
  • استخدام حد أقل للعُقد في طلب RemoveRecursive الخاص بـ Keeper أثناء تنظيف S3Queue. #90201 (Antonio Andelic).
  • جعل الاستعلام SYSTEM FLUSH LOGS ينتظر إنشاء الجدول حتى عندما تكون السجلات فارغة. #89408 (János Benjamin Antal).
  • إصلاح القيمة غير الصحيحة لـ rows_before_limit_at_least عند وجود عدة أجزاء بعيدة مشاركة في تجميع موزع مع دمج، أو عند وجود استعلامات فرعية من نوع IN. ويصلح هذا #63280. #63511 (Amos Bird).
  • إصلاح ظهور 0 rows in set بعد استعلام INSERT INTO ... SELECT. يُغلق #47800. #79462 (Engel Danila).

إصلاح خلل (سلوك غير صحيح يمكن للمستخدم ملاحظته في إصدار مستقر رسمي)

  • إصلاح multiIf عند استخدام argument ثابتة والتقييم المختصر. يُغلق #72714. #84546 (Yakov Olkhovskiy).
  • إصلاح خطأ منطقي عند التحديد من جدول يحتوي على قيد استعلام فرعي. يحل #84190. #85575 (Pervakov Grigorii).
  • إصلاح خلل في الاستعلامات الخاصة التي تستخدم URI يحتوي على علامات استفهام. #85663 (Yarik Briukhovetskyi).
  • إصلاح مشكلة غياب بعض الأعمدة أحيانًا في مخرجات EXPLAIN indexes = 1. يحل #86696. #87083 (Michael Kolupaev).
  • إصلاح خطأ محتمل Cannot add subcolumn عند استخدام parallel replicas. يُغلق #84888. #87514 (Pavel Kruglov).
  • في parquet writer، إخراج سلسلة created_by بالتنسيق الصحيح، مثل ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f) بدلًا من ClickHouse v25.9.1.1-testing. وإصلاح توافق Parquet reader مع الملفات غير السليمة التي كتبها parquet-mr القديم. #87735 (Michael Kolupaev).
  • إصلاح احتساب phi-squared الذي كان يؤدي إلى نتائج غير صحيحة في cramersV وcramersVBiasCorrected وtheilsU وcontingency. #87831 (Nihal Z. Miaji).
  • إصلاح قراءة Array مختلطة من Float وBool في JSON. وكان إدراج مثل هذه البيانات يؤدي سابقًا إلى استثناء. #88008 (Pavel Kruglov).
  • استخدام shared_ptr مع QueryState في TCPHandler لاكتشاف ما إذا كانت الحالة غير صالحة في setProgressCallback وsetFileProgressCallback وsetBlockMarshallingCallback. #88201 (Tuan Pham Anh).
  • إصلاح خطأ منطقي في إعادة ترتيب CROSS JOIN عندما يكون query_plan_optimize_join_order_limit > 1. يُغلق #89409. #88286 (Vladimir Cherkasov).
  • إصلاح #88426: 1. منع تعريفات الأعمدة الصريحة في Alias، مع تحميل الأعمدة تلقائيًا من target table. وهذا يضمن أن يطابق alias دائمًا schema الخاصة بالجدول الهدف. 2. تمرير المزيد من method من IStorage عبر Proxy. #88552 (Kai Zhu).
  • بعد الاستعادة، قد تبقى replica في Replicated database عالقة لفترة طويلة وهي تطبع رسائل مثل Failed to marked query-0004647339 as finished (finished=No node, synced=No node)، وقد أُصلحت هذه المشكلة. #88671 (Alexander Tokmakov).
  • إصلاح احتمال ظهور الخطأ “Context has expired” مع analyzer الجديد عند استخدام subqueries. #88694 (Azat Khuzhin).
  • تم إصلاح خطأ segmentation fault في قارئ Parquet عندما تكون قيمة input_format_parquet_local_file_min_bytes_for_seek مضبوطة على 0. يحلّ هذا المشكلة #78456. #88784 (Animesh).
  • تم إصلاح النتيجة غير الصحيحة لـ min(PK)/max(PK) عندما يكون PK بترتيب عكسي. يحلّ هذا المشكلة #83619. #88796 (Amos Bird).
  • تم إصلاح تطبيق قيود الحجم التي تفرضها الإعدادات max_table_size_to_drop و max_partition_size_to_drop عند تنفيذ DROP على الجداول الداخلية. #88812 (Nikolay Degterinsky).
  • تم إصلاح top_k بحيث يراعي parameter الخاص بالعتبة عند استدعائه باستخدام argument واحد. يغلق هذا #88757. #88867 (Manuel).
  • أصبح بإمكان مصادر endpoint في ArrowFlight التي تتطلب connection عبر SSL (مثل تلك الموجودة خلف AWS ALB) الآن طلب dataset محدد بشكل صحيح. #88868 (alex-shchetkov).
  • تم إصلاح التعامل مع Nested(Tuple(…)) غير المُجسَّدة (المضافة عبر ALTER). يحلّ هذا المشكلة #83133. #88879 (Azat Khuzhin).
  • تم إصلاح خطأ في الدالة reverseUTF8. في الإصدارات السابقة، كانت تعكس بالخطأ بايتات code points في UTF-8 ذات الطول 4. يغلق هذا #88913. #88914 (Alexey Milovidov).
  • تم إصلاح protocol الخاص بـ icebergS3Cluster. وبدأ دعم schema evolution وعمليات الحذف الموضعي وحذف المساواة في دالة Iceberg cluster. يحلّ هذا المشكلة #88287. #88919 (Yang Jiang).
  • تم تعطيل parallel_replicas_support_projection للاستعلامات التي تستخدم parallel replicas عبر الجداول الموزعة. يغلق هذا #88899. #88922 (zoomxi).
  • تم تمرير Context في عمليات CAST الداخلية. وأُصلحت عدة مشكلات لم تكن فيها إعدادات CAST تُمرَّر. يغلق هذا #88873. ويغلق أيضًا #78025. #88929 (Manuel).
  • تم إصلاح تحديد format الملف من globs في الدالة file(). يحلّ هذا المشكلة #88920. #88947 (Vitaly Baranov).
  • لا يُتحقَّق من صلاحية الوصول SET DEFINER <current_user>:definer عند إنشاء VIEW باستخدام SQL SECURITY DEFINER. #88968 (pufit).
  • تم إصلاح LOGICAL_ERROR في L2DistanceTransposed(vec1, vec2, p)، إذ كانت آلية التحسين الخاصة بالقراءة الجزئية لـ QBit تزيل Nullable من نوع الإرجاع بشكل غير صحيح عندما كان p من النوع Nullable. #88974 (Raufs Dunamalijevs).
  • إصلاح تعطل عند وجود نوع catalog غير معروف. يحلّ #88819. #88987 (scanhex12).
  • إغلاق #88081. #88988 (scanhex12).
  • تم إصلاح تراجع الأداء في تحليل فهارس التخطي. #89004 (Anton Popov).
  • إصلاح خطأ ACCESS_ENTITY_NOT_FOUND عند محاولة تنفيذ clusterAllReplicas بواسطة مستخدم لديه دور غير موجود. يحلّ #87670. #89068 (pufit).
  • إصلاح معالجة الأعمدة المتفرقة بواسطة قيد CHECK. يغلق #88637. #89076 (Eduard Karacharov).
  • تم إصلاح العدد غير الصحيح للصفوف عند ملء الأعمدة الافتراضية في MergeTreeReaderTextIndex، مما كان يتسبب في تعطل مصحوب بـ LOGICAL_ERROR. #89095 (Peng Jian).
  • منع تسرّب عدّاد دمج TTL عند حدوث استثناءات أثناء تحضير الدمج. يحلّ #89019. #89127 (save-my-heart).
  • إصلاح حساب حجم المخزن المؤقت المطلوب لعمليات الترميز وفك الترميز base32/base58. #89133 (Antonio Andelic).
  • إصلاح مشكلة use-after-free في Distributed بسبب حالة تسابق بين الإيقاف وعمليات INSERT في الخلفية. يحلّ #88640. #89136 (Azat Khuzhin).
  • تجنّب احتمال حدوث حالات تسابق على البيانات بسبب استثناءات قابلة للتغيير أثناء تحليل Parquet. يُصلح #88385. #89174 (Azat Khuzhin).
  • العرض المادي القابل للتحديث: تم إصلاح تعطل نادر في الخادم إذا جرى إسقاط الجدول المصدر بالكامل أثناء التحديث. #89203 (Michael Kolupaev).
  • تفريغ المخازن المؤقتة عند إرسال خطأ في منتصف دفق مضغوط في واجهة HTTP. #89256 (Alexander Tokmakov).
  • منع تطبيق قواعد إخفاء الاستعلامات بشكل غير صحيح على عبارات DDL. #89272 (MikhailBurdukov).
  • تم إصلاح العدد غير الصحيح للصفوف عند ملء الأعمدة الافتراضية في MergeTreeReaderTextIndex، مما كان يتسبب في تعطل مصحوب بـ LOGICAL_ERROR. يعيد فتح #89095. #89303 (Jimmy Aguilar Mena).
  • إصلاح: Statistics countmin لا يدعم تقدير نوع البيانات LowCardinality(Nullable(String))، مما يؤدي إلى LOGICAL_ERROR. #89343 (Han Fei).
  • احتمال حدوث تعطل/سلوك غير معرّف في الدالة IN عندما تختلف أنواع أعمدة المفتاح الأساسي عن أنواع الأعمدة في الطرف الأيمن من الدالة IN. مثال: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT ‘5’, ‘not a number’). يظهر ذلك عند تحديد عدد كبير من الصفوف ووجود صفوف تتضمن أنواعًا غير متوافقة. #89367 (Ilya Golshtein).
  • إصلاح اقتطاع الوسيطات في countIf(*). يغلق #89372. #89373 (Manuel).
  • تجنّب فقدان checksums غير المضغوطة للإحصاءات أثناء تنفيذ mutations. #89381 (Azat Khuzhin).
  • إصلاح LOGICAL_ERROR في L2DistanceTransposed(vec1, vec2, p)، حيث أزالت عملية التحسين الخاصة بقراءة QBit الجزئية Nullable من نوع الإرجاع بشكل غير صحيح عندما كانت p من النوع LowCardinality(Nullable(T)). يحل #88362. #89397 (Raufs Dunamalijevs).
  • إصلاح تحميل الجداول ذات sparse serialization غير الصحيح لـ Tuple نفسه (وهو ما تكتبه إصدارات ClickHouse الأقدم). #89405 (Azat Khuzhin).
  • إصلاح المعالجة غير الصحيحة لعملية merge للأجزاء التي أفرغها TTL مع projections غير فارغة عند استخدام deduplicate_merge_projection_mode='ignore'. يحل #89430. #89458 (Amos Bird).
  • إصلاح logical error في full_sorting_merge join عند وجود أعمدة مكررة. يحل #86957. #89495 (Vladimir Cherkasov).
  • إصلاح قراءة changelogs أثناء بدء تشغيل Keeper في الحالات التي لم يُعاد فيها rename لـ changelog بشكل صحيح أثناء rotation. #89496 (Antonio Andelic).
  • إصلاح نتائج JOIN غير الصحيحة عند استخدام شروط OR مع مفاتيح فريدة في الجدول الأيمن. يحل #89391. #89512 (Vladimir Cherkasov).
  • إصلاح احتمال ظهور “Context has expired” مع analyzer و PK IN (استعلام فرعي) (v2). يُصلح #89433. #89527 (Azat Khuzhin).
  • إصلاح replication في MaterializedPostgreSQL للجداول التي تحتوي على أسماء أعمدة مُكوّنة بأحرف كبيرة. يحل #72363. #89530 (Danylo Osipchuk).
  • إصلاح تعطل في حال كانت حالة دالة aggregate تحتوي على قيمة متسلسلة لعمود من النوع LowCardinality(String). #89550 (Pavel Kruglov).
  • إصلاح تعطّل يحدث عند استخدام ARRAY JOIN على الجانب الأيمن من JOIN مع تفعيل الإعداد enable_lazy_columns_replication. #89551 (Pavel Kruglov).
  • إصلاح خطأ منطقي في query_plan_convert_join_to_in. يحل المشكلة #89066. #89554 (Vladimir Cherkasov).
  • إصلاح استثناء في مُقدِّر الإحصاءات عند محاولة تقدير الشروط في حال عدم تطابق أنواع العمود والثابت وتعذّر تحويلها. #89596 (Han Fei).
  • إضافة Runtime Filters فقط إلى خوارزميات join المدعومة، أي hash joins. لا يمكن إنشاء مرشّح إلا عندما تقرأ خوارزمية join الجانب الأيمن كاملًا أولًا ثم تقرأ الجانب الأيسر، لكن FullSortingMergeJoin مثلًا يقرأ الجانبين بالتزامن. يصلح #89220. #89652 (Alexander Gololobov).
  • إصلاح التنفيذات المتزامنة للدوال hasAnyTokens وhasAllTokens وtokens مع sparseGrams tokenizer. يحل المشكلة #89605. #89665 (Elmi Ahmadov).
  • إصلاح خطأ منطقي/تعطّل في runtime filter الخاص بـ join في بعض الحالات. يصلح #89062. #89666 (Alexander Gololobov).
  • إصلاح خطأ منطقي محتمل أثناء تنفيذ ARRAY JOIN على عمود Map مع تفعيل enable_lazy_columns_replication. يغلق #89705. #89717 (Pavel Kruglov).
  • تجنّب تعطّل ناتج عن القراءة من خادم بعيد بعد انقطاع الاتصال في الاستعلامات البعيدة أثناء الإلغاء. يحل المشكلة #89468. #89740 (Azat Khuzhin).
  • إصلاح race condition في مسار قراءة فهرس projection. يحل المشكلة #89497. #89762 (Peng Jian).
  • إصلاح خلل في قراءة فهرس projection كان قد يؤدي إلى race conditions. يحل المشكلة #89497. #89775 (Amos Bird).
  • إصلاح تعامل Paimon table function مع الجداول التي لا تحتوي على partition. يحل المشكلة #89690. #89793 (JIaQi).
  • إصلاح خطأ منطقي محتمل أثناء قراءة paths وsubcolumns التابعة لها في advanced JSON shared data serialization. يغلق #89805. #89819 (Pavel Kruglov).
  • إصلاح احتمال حدوث stack overflow أثناء فك التسلسل الثنائي لأنواع البيانات. يغلق #88710. #89822 (Pavel Kruglov).
  • إصلاح خطأ منطقي مرتبط بـ tuple فارغ داخل الدالة IN. يغلق #88343. #89850 (Nihal Z. Miaji).
  • إزالة الدوال الحقنية من GROUP BY بغض النظر عن optimize_injective_functions_in_group_by في المحلّل القديم، حفاظًا على التوافق. يحل #89854. #89870 (Raufs Dunamalijevs).
  • إذا انقطع الدمج بسبب، على سبيل المثال، حد الذاكرة، فسيستدعي المنفّذ الخلفي لطفرات الدمج cancel على مهمة الدمج من دون قفل، لكن في هذه الحالة لن تتم إزالة الجزء الناتج الذي أُنشئ جزئيًا (لأنه لم يكتمل، ولم يكن مرئيًا في هذه المرحلة). بعد ذلك ستُدمَّر مهمة الدمج، ما سيؤدي إلى تدمير الجزء الناتج. وسيؤدي ذلك إلى التراجع عن معاملة القرص والتسبب في إزالة البيانات من S3. وفي النهاية، نُفِّذ تنظيف هذه البيانات المهملة تحت قفل المنفّذ الخلفي لطفرات الدمج. #89875 (Mikhail Artemenko).
  • إصلاح خطأ منطقي مرتبط بـ tuple فارغ داخل الدالتين reverse وCAST. يغلق #89137. #89908 (Nihal Z. Miaji).
  • سيعرض ClickHouse الآن قاعدة بيانات كتالوج بحيرة البيانات في الاستعلام SHOW DATABASES افتراضيًا. #89914 (alesapin).
  • إصلاح استخدام النسخ الأصلي على GCS للنسخ الاحتياطية. وبسبب استنساخ غير صحيح للعميل، كان النسخ الأصلي على GCS يفشل دائمًا ويستخدم أسلوبًا أقل كفاءة يعتمد على القراءة والكتابة اليدويتين للبيانات. #89923 (Antonio Andelic).
  • إصلاح حساب حجم المخزن المؤقت للدالة base32Encode. كان حساب base32Encode لعمود من السلاسل النصية بحجم أقل من 5 قد يؤدي إلى انهيارات. يحل #89911. #89929 (Antonio Andelic).
  • إصلاح التعامل الخاطئ مع محارف الهروب في استعلامَي SHOW COLUMNS وSHOW FUNCTIONS. #89942 (alesapin).
  • إصلاح التحقق من URL في محرك MongoDB عندما يحتوي اسم المستخدم على الحرف ’@’. في السابق، كانت أسماء المستخدمين التي تحتوي على ’@’ تتسبب في خطأ بسبب الترميز غير الصحيح. #89970 (Kai Zhu).
  • نُقل إلى إصدار أقدم في #90592: إصلاح انهيار محتمل أثناء استعلام عن بُعد مع ARRAY JOIN داخل IN ومع تمكين الإعداد enable_lazy_columns_replication. يحل #90361. #89997 (Pavel Kruglov).
  • نُقل إلى إصدار أقدم في #90448: إصلاح استنتاج قيم DateTime64 غير صحيحة من Strings في تنسيقات النص في بعض الحالات. يحل #89368. #90013 (Pavel Kruglov).
  • إصلاح خطأ منطقي ناتج عن عمود Tuple فارغ في BSONEachRow وMsgPack. يُغلق #89814. يُغلق #71536. #90018 (Nihal Z. Miaji).
  • أُدرج أيضًا في #90457: إجراء فحوصات للحجم عند إلغاء تسلسل البيانات من حالات التجميع ومصادر أخرى. #90031 (Raúl Marín).
  • إصلاح احتمال ظهور الخطأ ‘عدد الصفوف غير صالح في Chunk’ في JOIN مع الأعمدة المكررة. يحل #89411. #90053 (Vladimir Cherkasov).
  • أُدرج أيضًا في #90588: إصلاح الخطأ المحتمل Column with Array type is not represented by ColumnArray column: Replicated أثناء insert عند استخدام ARRAY JOIN مع تفعيل الإعداد enable_lazy_columns_replication. #90066 (Pavel Kruglov).
  • السماح بالملفات التي تبدأ بنقطة في user_files. يُغلق #89662. #90079 (Raúl Marín).
  • أُدرج أيضًا في #90647: إصلاح خطأ منطقي وخلل في عملية modulo في جدول النظام numbers عند استخدام قيمة step كبيرة. يُغلق #83398. #90123 (Nihal Z. Miaji).
  • إصلاح overflow للأعداد الصحيحة أثناء parsing لوسيطات القاموس. يُغلق #78506. #90171 (Raúl Marín).
  • أُدرج أيضًا في #90468: إصلاح عدم توافق partitioning في hive الذي كان يمنع الترقية السلسة في 25.8 (ويعالج الخطأ All hive partitioning columns must be present in the schema أثناء الترقية). #90202 (Kseniia Sumarokova).
  • إصلاح احتمال ظهور نتائج query غير صحيحة بعد lightweight updates في استعلامات SELECT عند تفعيل query condition cache. يصلح #90176. يصلح #90054. #90204 (Anton Popov).
  • إصلاح تعطل في StorageDistributed عند parsing لأسماء أدلة shard غير الصالحة. #90243 (Aleksandr Musorin).
  • دعم التحويل الضمني من String إلى عدد صحيح أو قيمة Boolean في LogicalExpressionOptimizerPass. يحل #89803. #90245 (Elmi Ahmadov).
  • إصلاح التنسيق غير الصحيح لبعض skip indexes في تعريف الجدول، مما يتسبب في METADATA_MISMATCH ويعطّل إنشاء replicas جديدة في Replicated Database. #90251 (Nikolay Degterinsky).
  • تم ترحيل هذا الإصلاح إلى الإصدارات الأقدم في #90381: يُصلح عدم تطابق عدد الصفوف في MergeTreeReaderIndex عندما كان الجزء الوحيد يحتوي على عدد صفوف أقل من index_granularity. يحل #89691. #90254 (Peng Jian).
  • تم ترحيل هذا الإصلاح إلى الإصدارات الأقدم في #90608: إصلاح خلل في قراءة الأعمدة الفرعية من JSON في compact parts قد يؤدي إلى الخطأ CANNOT_READ_ALL_DATA. يحل #90264. #90302 (Pavel Kruglov).
  • إصلاح مشكلة عدم عمل الدوال trim وltrim وrtrim مع وسيطين. يغلق #90170. #90305 (Nihal Z. Miaji).
  • تم ترحيل هذا الإصلاح إلى الإصدارات الأقدم في #90625: إصلاح خطأ منطقي محتمل في prewhere عند استخدام مسار JSON غير موجود مع index_granularity_bytes=0. يحل #86924. #90375 (Pavel Kruglov).
  • تم ترحيل هذا الإصلاح إلى الإصدارات الأقدم في #90484: إصلاح خلل في L2DistanceTransposed كان يتسبب في تعطل البرنامج عندما تتجاوز قيمة الوسيط precision النطاق المسموح. يغلق #90401. #90405 (Raufs Dunamalijevs).
  • تم ترحيل هذا الإصلاح إلى الإصدارات الأقدم في #90577: إصلاح حسابات مسافة غير صحيحة في L2DistanceTransposed عند استخدام متجهات مرجعية من نوع array (والتي تكون افتراضيًا Array(Float64))) مع أعمدة QBit ذات element type غير Float64 (Float32 وBFloat16). أصبحت الدالة الآن تُجري CAST تلقائيًا للمتجه المرجعي ليتطابق مع element type الخاص بـ QBit. يحل #89976. #90485 (Raufs Dunamalijevs).
  • تم ترحيل هذا الإصلاح إلى الإصدارات الأقدم في #90601: إصلاح خطأ منطقي ناتج عن حالة نادرة في الدالة equals. يغلق #88142. #90557 (Nihal Z. Miaji).
  • إصلاح CoalescingMergeTree لأنواع Tuple. #88828 (scanhex12).

تحسينات البناء/الاختبار/التغليف

  • إصلاح خطأ رفض الاتصال عند تشغيل ClickHouse في Docker باستخدام نصوص SQL الخاصة بـ initdb ومنفذ TCP تمت إعادة تعريفه. #88042 (Grigorii).
  • دعم e2k تجريبيًا كمنصة جديدة لـ ClickHouse. #90159 (Ramil Sattarov).
  • إزالة ما تبقى من استخدام FindPackage من CMake. يجب ألا تعتمد عمليات البناء على حزم النظام. #89380 (Alexey Milovidov).
  • استخدام ذاكرة التخزين المؤقت للمترجم في عمليات البناء أثناء تهيئة CMake (مثل protoc). #89613 (Konstantin Bogdanov).
  • استخدام sysroot الخاص بـ FreeBSD 13.4. #89617 (Konstantin Bogdanov).

إصدار ClickHouse 25.10، بتاريخ 2025-10-31

تغيير غير متوافق مع الإصدارات السابقة

  • تم تغيير الإعداد الافتراضي schema_inference_make_columns_nullable بحيث يراعي معلومات قابلية العمود لأن يكون Nullable من البيانات الوصفية في Parquet/ORC/Arrow، بدلاً من جعل كل شيء Nullable. لا تغيير في التنسيقات النصية. #71499 (Michael Kolupaev).
  • ستتجاهل ذاكرة تخزين نتائج الاستعلامات المؤقتة الإعداد log_comment، بحيث إن تغيير log_comment فقط في الاستعلام لن يؤدي بعد الآن إلى تفويت في ذاكرة التخزين المؤقت. هناك احتمال ضئيل أن يكون بعض المستخدمين قد قسّموا الذاكرة المؤقتة لديهم عمداً عبر تغيير log_comment. يغيّر هذا التعديل ذلك السلوك، ولذلك فهو غير متوافق مع الإصدارات السابقة. يُرجى استخدام الإعداد query_cache_tag لهذا الغرض. #79878 (filimonov).
  • في الإصدارات السابقة، كانت الاستعلامات التي تحتوي على دوال جداول تحمل الاسم نفسه للدوال التنفيذية الخاصة بالمعاملات تُنسَّق بشكل غير متسق. يُغلق #81601. يُغلق #81977. يُغلق #82834. يُغلق #82835. لن تقوم استعلامات EXPLAIN SYNTAX دائماً بتنسيق المعاملات — ويعكس السلوك الجديد بشكل أفضل الغرض من شرح الصياغة. كما أن clickhouse-format وformatQuery وما شابههما لن ينسّقا الدوال باعتبارها معاملات إذا كان الاستعلام قد تضمّنها بصيغة دالية. #82825 (Alexey Milovidov).
  • يُحظر استخدام النوع Dynamic في مفاتيح JOIN. فقد يؤدي ذلك إلى نتائج غير متوقعة عند مقارنة قيمة من النوع Dynamic بنوع آخر غير Dynamic. ومن الأفضل تحويل العمود من النوع Dynamic إلى النوع المطلوب. #86358 (Pavel Kruglov).
  • أصبح خيار الخادم storage_metadata_write_full_object_key مفعّلاً افتراضياً، ولم يعد بالإمكان تعطيله الآن. هذا تغيير متوافق مع الإصدارات السابقة. وهذا للتنبيه فقط. كما أن هذا التغيير متوافق مستقبلياً فقط مع إصدارات 25.x. وهذا يعني أنه لا يمكنك الرجوع إلى إصدار أقدم إلا ضمن أي إصدار من سلسلة 25.x إذا اضطررت إلى التراجع عن الإصدار الجديد. #87335 (Sema Checherinda).
  • خُفِّض replicated_deduplication_window_seconds من أسبوع واحد إلى ساعة واحدة لتخزين عدد أقل من znode في ZooKeeper عندما يكون معدل الإدراج منخفضاً. #87414 (Sema Checherinda).
  • أُعيدت تسمية الإعداد query_plan_use_new_logical_join_step إلى query_plan_use_logical_join_step. #87679 (Vladimir Cherkasov).
  • تتيح الصياغة الجديدة أن تكون معلمة tokenizer الخاصة بالفهرس النصي أكثر تعبيراً. #87997 (Elmi Ahmadov).
  • أُعيدت تسمية الدالتين searchAny وsearchAll إلى hasAnyTokens وhasAllTokens لتحقيق اتساق أفضل مع الدالة الحالية hasToken. #88109 (Robert Schulze).
  • أُزيل cache_hits_threshold من ذاكرة التخزين المؤقت لنظام الملفات. أُضيفت هذه الميزة بواسطة مساهم خارجي قبل أن تتوفر لدينا سياسة cache من نوع SLRU، والآن بعد توفرها لم يعد من المنطقي دعم الاثنين معاً. #88344 (Kseniia Sumarokova).
  • تغييران طفيفان على آلية عمل الإعدادين min_free_disk_ratio_to_perform_insert وmin_free_disk_bytes_to_perform_insert: - استخدِم البايتات غير المحجوزة بدلًا من البايتات المتاحة لتحديد ما إذا كان ينبغي رفض عملية insert. قد لا يكون هذا بالغ الأهمية إذا كانت الحجوزات الخاصة بعمليات الدمج والتعديلات في الخلفية صغيرة مقارنةً بالعتبات المُعدّة، لكنه يبدو أدق. - لا تطبّق هذه الإعدادات على جداول النظام. والسبب هو أننا ما زلنا نريد أن تستمر جداول مثل query_log في التحديث. وهذا يساعد كثيرًا في استكشاف الأخطاء وإصلاحها. وعادةً ما تكون البيانات المكتوبة إلى جداول النظام صغيرة مقارنةً بالبيانات الفعلية، لذا ينبغي أن تتمكن من الاستمرار لفترة أطول بكثير مع عتبة معقولة لـ min_free_disk_ratio_to_perform_insert. #88468 (c-end).
  • فعِّل الوضع غير المتزامن للتكرار الداخلي في Keeper. سيحافظ Keeper على السلوك نفسه كما كان من قبل، مع احتمال تحقيق تحسينات في الأداء. إذا كنت تُحدِّث من إصدار أقدم من 23.9، فعليك إما التحديث أولًا إلى 23.9+ ثم إلى 25.10+، أو يمكنك أيضًا ضبط keeper_server.coordination_settings.async_replication على 0 قبل التحديث وتمكينه بعد اكتمال التحديث. #88515 (Antonio Andelic).

ميزة جديدة

  • إضافة دعم LIMIT وOFFSET بقيم سالبة. يُغلق #28913. #88411 (Nihal Z. Miaji).
  • يُنشئ المحرك Alias وكيلاً لجدول آخر. وتُمرَّر جميع عمليات القراءة والكتابة إلى الجدول الهدف، بينما لا يخزّن الاسم المستعار نفسه أي بيانات، ويحتفظ فقط بمرجع إلى الجدول الهدف. #87965 (Kai Zhu).
  • دعم كامل للمعامل IS NOT DISTINCT FROM (<=>). #88155 (simonmichal).
  • أُضيفت إمكانية إنشاء الإحصاءات تلقائيًا لجميع الأعمدة المناسبة في جداول MergeTree. كما أُضيف إعداد على مستوى الجدول باسم auto_statistics_types يخزّن أنواع الإحصاءات المطلوب إنشاؤها مفصولة بفواصل (مثل auto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).
  • فهرس bloom filter جديد للنصوص، وهو sparse_gram. #79985 (scanhex12).
  • دالة جديدة conv لتحويل الأرقام بين الأسس العددية، وتدعم حاليًا الأسس من 2 إلى 36. #83058 (hp).
  • أُضيف دعم صياغة LIMIT BY ALL. وعلى غرار GROUP BY ALL وORDER BY ALL، تتوسع LIMIT BY ALL تلقائيًا لاستخدام جميع التعبيرات غير التجميعية من عبارة SELECT كمفاتيح لـ LIMIT BY. على سبيل المثال، فإن SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL تكافئ SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. وتبسّط هذه الميزة الاستعلامات عندما تريد تطبيق التقييد على جميع الأعمدة المحددة غير التجميعية دون سردها صراحةً. يُغلق #59152. #84079 (Surya Kant Ranjan).
  • إضافة دعم الاستعلام عن Apache Paimon في ClickHouse. يتيح هذا التكامل لمستخدمي ClickHouse التفاعل مباشرةً مع تخزين بحيرة البيانات الخاص بـ Paimon. #84423 (JIaQi).
  • أُضيفت الدالة التجميعية studentTTestOneSample. #85436 (Dylan).
  • الدالة التجميعية quantilePrometheusHistogram، التي تقبل الحدود العليا والقيم التراكمية لسلال المدرج التكراري كوسائط، وتُجري استيفاءً خطيًا بين الحدين الأعلى والأدنى للسلة التي يقع فيها موضع الكوانتايل. وتتصرف بشكل مشابه لدالة PromQL histogram_quantile على المدرجات التكرارية التقليدية. #86294 (Stephen Chi).
  • جدول نظام جديد لملفات البيانات الوصفية الخاصة بـ delta lake. #87263 (scanhex12).
  • إضافة ALTER TABLE REWRITE PARTS — يعيد كتابة أجزاء الجدول من البداية باستخدام جميع الإعدادات الجديدة (إذ إن بعض الإعدادات، مثل use_const_adaptive_granularity، لا تُطبَّق إلا على الأجزاء الجديدة). #87774 (Azat Khuzhin).
  • إضافة الأمر SYSTEM RECONNECT ZOOKEEPER لفرض قطع الاتصال بـ ZooKeeper ثم إعادة الاتصال به (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri).
  • حدِّد عدد المجموعات المسماة عبر الإعدادين max_named_collection_num_to_warn وmax_named_collection_num_to_throw. وأُضيف Metric جديد NamedCollection والخطأ TOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
  • أُضيفت صيغ محسّنة غير متحسسة لحالة الأحرف من الدالتين startsWith وendsWith: startsWithCaseInsensitive وendsWithCaseInsensitive وstartsWithCaseInsensitiveUTF8 وendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).
  • أُضيفت طريقة لتوفير تعريفات WORKLOAD وRESOURCE في SQL باستخدام قسم إعدادات الخادم “resources_and_workloads”. #87430 (Sergei Trifonov).
  • أُضيف إعداد table جديد min_level_for_wide_part يتيح تحديد المستوى الأدنى الذي يجب أن يبلغه الـ part لكي يُنشأ كـ Wide part. #88179 (Christoph Wurm).
  • أُضيفت صيغ recursive للأمرين cp-cpr وmv-mvr في Keeper client. #88570 (Mikhail Artemenko).
  • أُضيف إعداد session لاستبعاد قائمة من skip indexes من materialization عند inserts (exclude_materialize_skip_indexes_on_insert). وأُضيف إعداد merge tree table لاستبعاد قائمة من skip indexes من materialization أثناء merge (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov).

ميزة تجريبية

  • تنفيذ نوع البيانات QBit الذي يخزّن المتجهات بتنسيق مقطّع على مستوى البتات، والدالة L2DistanceTransposed التي تتيح البحث المتجهي التقريبي، مع التحكّم في المفاضلة بين الدقة والسرعة بواسطة معلمة. #87922 (Raufs Dunamalijevs).
  • أصبحت الدالتان searchAll وsearchAny تعملان الآن أيضًا على أعمدة لا تتضمن أعمدة نصية. وفي هذه الحالات، تستخدمان الـ tokenizer الافتراضي. #87722 (Jimmy Aguilar Mena).

تحسين الأداء

  • تنفيذ النسخ المتماثل الكسول للأعمدة في JOIN و ARRAY JOIN، مع تجنّب تحويل تمثيل الأعمدة الخاصة مثل Sparse و Replicated إلى أعمدة كاملة في بعض تنسيقات الإخراج. يجنّب ذلك نسخ البيانات في الذاكرة دون داعٍ. #88752 (Pavel Kruglov).
  • إضافة تسلسل اختياري للعمود الفرعي .size لأعمدة String من المستوى الأعلى في جداول MergeTree لتحسين الضغط وإتاحة وصول فعّال إلى الأعمدة الفرعية. كما أُضيفت إعدادات MergeTree جديدة للتحكم في إصدار التسلسل وتحسين التعابير الخاصة بالسلاسل الفارغة. #82850 (Amos Bird).
  • دعم القراءة بالترتيب في Iceberg. #88454 (scanhex12).
  • تسريع بعض استعلامات JOIN عبر إنشاء bloom filter من الشجرة الفرعية اليمنى أثناء runtime وتمرير هذا المرشح إلى عملية المسح في الشجرة الفرعية اليسرى. وقد يكون ذلك مفيدًا في استعلامات مثل SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov).
  • تحسين query performance عبر إعادة تنظيم ترتيب تكامل Query Condition Cache ‏(QCC) مع index analysis. يُطبَّق الآن ترشيح QCC قبل تحليل primary key و skip index، ما يقلّل حسابات الفهارس غير الضرورية. كما جرى توسيع index analysis لدعم range filters متعددة، وتُخزَّن نتائج التصفية الناتجة عنه الآن مجددًا في QCC. يسرّع ذلك بشكل كبير الاستعلامات التي يهيمن فيها index analysis على زمن التنفيذ، خصوصًا تلك التي تعتمد على skip indexes (مثل vector indexes أو inverted indexes). #82380 (Amos Bird).
  • مجموعة من التحسينات الدقيقة لتسريع الاستعلامات الصغيرة. #83096 (Raúl Marín).
  • ضغط السجلات وprofile events في native protocol. في clusters التي تضم أكثر من 100 replica، تستهلك profile events غير المضغوطة من 1 إلى 10 ميغابايت/ثانية، ويصبح شريط التقدّم بطيئًا على اتصالات الإنترنت البطيئة. هذا يُغلق #82533. #83586 (Alexey Milovidov).
  • تحسين أداء البحث النصي الحساس لحالة الأحرف (في عمليات مثل التصفية، على سبيل المثال WHERE URL LIKE '%google%') باستخدام مكتبة StringZilla، مع الاستفادة من تعليمات SIMD الخاصة بالمعالج عند توفرها. #84161 (Raúl Marín).
  • تقليل تخصيص الذاكرة ونسخها عند تنفيذ select من جدول MergeTree تجميعي مع FINAL عندما يحتوي الجدول على أعمدة من النوع SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le).
  • توفير آلية لدفع predicates الخاصة بـ JOIN المبنية على disjunction إلى مستوى أدنى. مثال: في TPC-H Q7، بالنسبة إلى condition على جدولين n1 و n2 مثل (n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')، تُستخرج partial filters منفصلة لكل جدول: n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY' لـ n1 و n2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE' لـ n2. #84735 (Yarik Briukhovetskyi).
  • تحسين أداء LIKE مع البادئة أو اللاحقة باستخدام الإعداد الافتراضي الجديد optimize_rewrite_like_perfect_affix. #85920 (Guang Zhao).
  • إصلاح تراجع الأداء الناتج عن كِبر حجم المفتاح المُسلسل عند التجميع حسب عدة أعمدة من نوع string/number. وهذا استكمال لـ #83884. #85924 (李扬).
  • إضافة الإعداد الجديد joined_block_split_single_row لتقليل استخدام الذاكرة في hash joins التي تحتوي على عدد كبير من المطابقات لكل مفتاح. ويتيح ذلك تقسيم نتائج hash join إلى chunks حتى داخل المطابقات الخاصة بصف واحد من left table، وهو مفيد بشكل خاص عندما يطابق صف واحد من left table آلافًا أو ملايين الصفوف من right table. سابقًا، كان يجب إنشاء جميع المطابقات في الذاكرة دفعة واحدة. وهذا يقلل Peak memory usage، لكنه قد يزيد CPU usage. #87913 (Vladimir Cherkasov).
  • تحسينات على SharedMutex (تحسين الأداء عند وجود عدد كبير من queries المتزامنة). #87491 (Raúl Marín).
  • تحسين أداء بناء text index للمستندات التي تحتوي غالبًا على tokens غير متكررة. #87546 (Anton Popov).
  • تسريع الحالة الشائعة للـ destructor الخاص بـ Field (تحسين الأداء عند وجود عدد كبير من queries الصغيرة). #87631 (Raúl Marín).
  • تخطي إعادة حساب إحصاءات runtime للـ hash table أثناء تحسين JOIN (مما يحسن أداء جميع queries التي تحتوي على JOINs). وتمت إضافة profile events جديدة: JoinOptimizeMicroseconds و QueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov).
  • تفعيل حفظ marks في cache وتجنب direct IO لقارئ MergeTreeLazy. وهذا يحسن أداء queries التي تتضمن ORDER BY وLIMIT صغيرًا. #87989 (Nikita Taranov).
  • أصبح تنفيذ query من نوع SELECT مع clause FINAL على table من نوع ReplacingMergeTree تحتوي على العمود is_deleted أسرع الآن بفضل تحسين التوازي الناتج عن تحسينين موجودين بالفعل: 1. تحسين do_not_merge_across_partitions_select_final لأجل partitions في table التي تحتوي على part واحد فقط؛ 2. تقسيم ranges الأخرى المحددة من table إلى intersecting / non-intersecting، بحيث لا تمر عبر transform دمج FINAL إلا ranges المتقاطعة. #88090 (Shankar Iyer).
  • تقليل أثر عدم استخدام fail points (وهو مسار الشيفرة الافتراضي عندما لا يكون debugging نشطًا). #88196 (Raúl Marín).
  • تجنب الفحص الكامل لـ system.tables عند التصفية حسب uuid (وقد يكون هذا مفيدًا إذا لم يكن لديك سوى UUID من السجلات أو من ZooKeeper path). #88379 (Azat Khuzhin).
  • تحسين أداء الدوال tokens و hasAllTokens و hasAnyTokens. #88416 (Anton Popov).
  • جعل AddedColumns::appendFromBlock مضمّنًا inline لتحقيق تحسن طفيف في أداء JOIN في بعض الحالات. #88455 (Nikita Taranov).
  • أصبحت ميزة الإكمال التلقائي في Client أسرع وأكثر اتساقًا باستخدام system.completions بدلًا من تنفيذ عدة queries على جداول النظام. #84694 (|2ustam).
  • إضافة parameter جديد للـ text index باسم dictionary_block_frontcoding_compression للتحكم في Compression الخاصة بالـ dictionary. ويكون هذا مُمكّنًا افتراضيًا لاستخدام ضغط front-coding. #87175 (Elmi Ahmadov).
  • دمج البيانات من جميع خيوط التنفيذ قبل إدراجها في العروض المادية، وذلك وفقًا للإعدادين min_insert_block_size_rows_for_materialized_views و min_insert_block_size_bytes_for_materialized_views. سابقًا، إذا كان parallel_view_processing مفعّلًا، كانت كل خيط تنفيذ يُدرج في عرض مادي معيّن يدمج الإدراج بشكل مستقل، مما قد يؤدي إلى زيادة عدد الأجزاء المُنشأة. #87280 (Antonio Andelic).
  • إضافة الإعداد temporary_files_buffer_size للتحكم في حجم المخزن المؤقت الخاص بكاتبي الملفات المؤقتة. * تحسين استهلاك الذاكرة في عملية scatter (المستخدمة، على سبيل المثال، في grace hash join) لأعمدة LowCardinality. #88237 (Vladimir Cherkasov).
  • إضافة دعم القراءة المباشرة من فهارس النصوص مع النسخ المتماثلة المتوازية. وتحسين أداء قراءة فهارس النصوص من التخزين الكائني. #88262 (Anton Popov).
  • ستستخدم الاستعلامات التي تتضمن جداول من كتالوجات بحيرات البيانات النسخ المتماثلة المتوازية في المعالجة الموزعة. #88273 (scanhex12).
  • ستُنفَّذ الخوارزمية الاستدلالية الداخلية لضبط خوارزمية عمليات الدمج في الخلفية، والمسماة “to_remove_small_parts_at_right”، قبل حساب درجة نطاق الدمج. قبل ذلك، كان محدد الدمج يختار الدمج الواسع، ثم يرشّح لاحقته بعد ذلك. إصلاح: #85374. #88736 (Mikhail Artemenko).

تحسينات

  • تدعم الدالة generateSerialID الآن وسيطًا غير ثابت لاسم السلسلة. يُغلق #83750. #88270 (Alexey Milovidov).
  • أُضيفت المعلمة الاختيارية start_value إلى الدالة generateSerialID لتحديد قيم بدء مخصصة للسلاسل الجديدة. #88085 (Manuel).
  • أُضيف الخيار --semicolons_inline في clickhouse-format لتنسيق الاستعلامات بحيث توضع الفواصل المنقوطة في السطر الأخير بدلًا من سطر جديد. #88018 (Jan Rada).
  • أصبح من الممكن ضبط throttling على مستوى الخادم عندما تُستبدل التهيئة في Keeper. يُغلق #73964. #74066 (JIaQi).
  • لم تعد mannWhitneyUTest تطرح استثناءً عندما تحتوي كلتا العينتين على قيم متطابقة فقط. وهي الآن تُرجع نتيجة صالحة ومتسقة مع SciPy. وهذا يُغلق: #79814. #80009 (DeanNeaht).
  • تؤدي إعادة كتابة transaction لتخزين الكائنات على القرص إلى إزالة blobs البعيدة السابقة إذا جرى commit لـ transaction البيانات الوصفية. #81787 (Sema Checherinda).
  • إصلاح تمريرة التحسين الخاصة بالتعبير المتساوي الزائد عن الحاجة عندما تختلف LowCardinality للنوع الناتج قبل التحسين وبعده. #82651 (Yakov Olkhovskiy).
  • عندما يضبط عملاء HTTP الترويسة X-ClickHouse-100-Continue: defer بالإضافة إلى Expect: 100-continue، لا يرسل ClickHouse استجابة 100 Continue إلى العميل إلا بعد نجاح التحقق من الحصة، مما يمنع هدر عرض نطاق الشبكة في نقل أجسام الطلبات التي سيجري التخلص منها على أي حال. وهذا مهم لاستعلامات INSERT، إذ يمكن إرسال الاستعلام ضمن query string في عنوان URL، بينما تُرسل البيانات في request body. إن إلغاء الطلب قبل إرسال body كاملًا يمنع إعادة استخدام connection مع HTTP/1.1، لكن زمن الوصول الإضافي الناتج عن فتح connections جديدة يكون عادةً ضئيلًا مقارنةً بالمدة الإجمالية لعملية INSERT عند التعامل مع كميات كبيرة من البيانات. #84304 (c-end).
  • إخفاء بيانات اعتماد S3 في السجلات عند استخدام DATABASE ENGINE = Backup مع تخزين S3. #85336 (Kenny Sun).
  • جعل تحسينات query plan مرئية للخطة الفرعية المُدخلة لـ correlated subquery عبر تأجيل materialization الخاصة بها. جزء من #79890. #85455 (Dmitry Novik).
  • تغيير في SYSTEM DROP DATABASE REPLICA: - عند الحذف مع قاعدة بيانات أو عند حذف replica بالكامل: سيُحذف أيضًا replica لكل table في database - إذا تم توفير ‘WITH TABLES’، فسيُحذف replica لكل storage - بخلاف ذلك، يبقى المنطق كما هو، ولا يُحذف إلا replica على databases - عند حذف replica لقاعدة بيانات باستخدام Keeper path: - إذا تم توفير ‘WITH TABLES’: - استعادة database بصيغة Atomic - استعادة جداول RMT من statement في Keeper - حذف database (وتُحذف أيضًا الجداول المستعادة) - بخلاف ذلك، لا يُحذف إلا replica على Keeper path المحدد. #85637 (Tuan Pham Anh).
  • إصلاح عدم اتساق تنسيق TTL عندما يحتوي على الدالة materialize. يغلق #82828. #85749 (Alexey Milovidov).
  • لم تعد حالة جدول Iceberg تُخزَّن في كائن Storage. من شأن ذلك أن يجعل Iceberg في ClickHouse قابلاً للاستخدام مع الاستعلامات المتزامنة. #86062 (Daniil Ivanik).
  • جعل قفل bucket في وضع S3Queue المرتّب وضعًا دائمًا، على غرار processing nodes عند use_persistent_processing_nodes = 1. وإضافة حقن أعطال Keeper في الاختبارات. #86628 (Kseniia Sumarokova).
  • تقديم تلميحات عندما يكون لدى المستخدم خطأ مطبعي في اسم format. يغلق #86761. #87092 (flynn).
  • ستتجاوز replicas البعيدة تحليل الفهرس عند عدم وجود projections. #87096 (zoomxi).
  • السماح بتعطيل ترميز UTF8 لجدول ytsaurus. #87150 (MikhailBurdukov).
  • تعطيل s3_slow_all_threads_after_retryable_error افتراضيًا. #87198 (Nikita Mikhaylov).
  • إعادة تسمية table function ‏arrowflight إلى arrowFlight. #87249 (Vitaly Baranov).
  • تحديث clickhouse-benchmark ليقبل استخدام - بدلًا من _ في flags الخاصة بالـ CLI. #87251 (Ahmed Gouda).
  • جعل عملية flush إلى system.crash_log أثناء معالجة الإشارات متزامنة. #87253 (Miсhael Stetsyuk).
  • إضافة إعداد inject_random_order_for_select_without_order_by، الذي يحقن ORDER BY rand() في استعلامات SELECT ذات المستوى الأعلى التي لا تحتوي على clause ‏ORDER BY. #87261 (Rui Zhang).
  • تحسين رسالة الخطأ في joinGet بحيث توضّح بشكل صحيح أن عدد join_keys لا يساوي عدد right_table_keys. #87279 (Isak Ellmer).
  • إضافة إمكانية التحقق من stat لأي عقدة Keeper أثناء write tx. ويمكن أن يساعد ذلك في اكتشاف مشكلة ABA. #87282 (Mikhail Artemenko).
  • إعادة توجيه طلبات ytsaurus الثقيلة إلى heavy proxies. #87342 (MikhailBurdukov).
  • إصلاح حالات التراجع لعمليات unlink/rename/removeRecursive/removeDirectory/etc، وكذلك counts الخاصة بالـ hardlink ضمن أي workloads ممكنة لبيانات metadata في معاملات disk، مع تبسيط interfaces لجعلها أكثر عمومية بحيث يمكن إعادة استخدامها في مخازن meta أخرى. #87358 (Mikhail Artemenko).
  • إضافة parameter للإعداد keeper_server.tcp_nodelay يتيح تعطيل TCP_NODELAY لـ Keeper. #87363 (Copilot).
  • دعم الخيار --connection في clickhouse-benchmarks. وهو يعمل بالطريقة نفسها المدعومة في clickhouse-client، إذ يمكنك تحديد اتصالات معرّفة مسبقًا في config.xml/config.yaml الخاص بالعميل ضمن المسار connections_credentials، لتجنّب التصريح باسم المستخدم/كلمة المرور صراحةً عبر وسائط سطر الأوامر. كما أُضيف دعم --accept-invalid-certificate إلى clickhouse-benchmark. #87370 (Azat Khuzhin).
  • أصبح الإعداد max_insert_threads يسري الآن على جداول Iceberg. #87407 (alesapin).
  • إضافة مدرج تكراري ومقاييس متعددة الأبعاد إلى PrometheusMetricsWriter. وبهذه الطريقة، سيحتوي المعالج PrometheusRequestHandler على جميع المقاييس الأساسية، ويمكن استخدامه لجمع المقاييس بشكل موثوق وبأعباء منخفضة في Cloud. #87521 (Miсhael Stetsyuk).
  • أصبحت الدالة hasToken تُرجع الآن صفرًا من التطابقات للرمز token الفارغ (في حين كان ذلك يؤدي سابقًا إلى طرح استثناء). #87564 (Jimmy Aguilar Mena).
  • إضافة دعم الفهرس النصي لقيم Array وMap (mapKeys وmapValues). والدوال المدعومة هي mapContainsKey وhas. #87602 (Elmi Ahmadov).
  • إضافة مقياس جديد باسم ZooKeeperSessionExpired يشير إلى عدد جلسات ZooKeeper العامة منتهية الصلاحية. #87613 (Miсhael Stetsyuk).
  • استخدام عميل تخزين S3 بإعدادات خاصة بالنسخ الاحتياطي (على سبيل المثال، backup_slow_all_threads_after_retryable_s3_error) لإجراء نسخ من جهة الخادم (native) إلى وجهة النسخ الاحتياطي. كما أصبح الإعداد s3_slow_all_threads_after_retryable_error متقادماً. #87660 (Julia Kartseva).
  • إصلاح المعالجة غير الصحيحة للإعدادين max_joined_block_size_rows وmax_joined_block_size_bytes أثناء تسلسل خطة الاستعلام مع make_distributed_plan التجريبي. #87675 (Vladimir Cherkasov).
  • أصبح الإعداد enable_http_compression هو الإعداد الافتراضي الآن. وهذا يعني أنه إذا كان العميل يقبل ضغط HTTP، فسيستخدمه الخادم. ومع ذلك، لهذا التغيير بعض السلبيات. فقد يطلب العميل طريقة ضغط كثيفة مثل bzip2، وهو أمر غير عملي وسيزيد من استهلاك موارد الخادم (لكن ذلك لن يظهر إلا عند نقل نتائج كبيرة). وقد يطلب العميل gzip، وهو ليس سيئًا جدًا، لكنه أقل كفاءة من zstd. إغلاق #71591. #87703 (Alexey Milovidov).
  • إضافة مُدخل جديد في system.server_settings، وهو keeper_hosts، يعرض قائمة مضيفي [Zoo]Keeper التي يمكن لـ ClickHouse الاتصال بها. #87718 (Nikita Mikhaylov).
  • إضافة القيمتين from وto إلى لوحات معلومات النظام لتسهيل التحقيقات التاريخية. #87823 (Mikhail f. Shiryaev).
  • إضافة مزيد من المعلومات لتتبّع الأداء في عمليات SELECT على Iceberg. #87903 (Daniil Ivanik).
  • تحسين لذاكرة التخزين المؤقت لنظام الملفات: إعادة استخدام مكرّر أولوية ذاكرة التخزين المؤقت بين الخيوط التي تحجز مساحة فيها بالتزامن. #87914 (Kseniia Sumarokova).
  • إضافة إمكانية تقييد الطلبات في Keeper (إعداد max_request_size، وهو مماثل لـ jute.maxbuffer في ZooKeeper، ويكون معطّلًا افتراضيًا للحفاظ على backward compatibility، وسيُفعّل في الإصدارات القادمة). #87952 (Azat Khuzhin).
  • جعل clickhouse-benchmark لا يضمّن stacktraces في رسائل الخطأ افتراضيًا. #87954 (Ahmed Gouda).
  • تجنّب استخدام التحميل غير المتزامن للـ marks عبر thread pool (load_marks_asynchronously=1) عندما تكون الـ marks موجودة في cache (إذ قد تكون الـ pool تحت ضغط، ما يحمّل queries كلفة إضافية حتى إذا كانت الـ marks موجودة بالفعل في cache). #87967 (Azat Khuzhin).
  • ‏Ytsaurus: السماح بإنشاء جدول/table functions/dictionaries باستخدام مجموعة فرعية من columns. #87982 (MikhailBurdukov).
  • من الآن فصاعدًا، سيكون system.zookeeper_connection_log مفعّلًا افتراضيًا، ويمكن استخدامه للحصول على معلومات حول sessions الخاصة بـ Keeper. #88011 (János Benjamin Antal).
  • توحيد سلوك TCP وHTTP عند تمرير external tables مكررة. يتيح HTTP تمرير temporary table عدة مرات. #88032 (Sema Checherinda).
  • إزالة MemoryPools المخصصة لقراءة Arrow/ORC/Parquet. يبدو أن هذا component لم يعد مطلوبًا بعد #84082، لأننا الآن نتتبع جميع allocations على أي حال. #88035 (Nikita Mikhaylov).
  • السماح بإنشاء قاعدة بيانات Replicated بدون arguments. #88044 (Pervakov Grigorii).
  • clickhouse-keeper-client: إضافة دعم للاتصال بمنفذ TLS الخاص بـ clickhouse-keeper، مع الإبقاء على أسماء العلامات كما هي في clickhouse-client. #88065 (Pradeep Chhetri).
  • إضافة حدث profile جديد لتتبّع عدد المرات التي رُفض فيها دمج في الخلفية بسبب تجاوز حدود الذاكرة. #88084 (Grant Holly).
  • تمكين analyzer للتحقق من صحة تعبيرات القيم الافتراضية للأعمدة في CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
  • تحسين داخلي في تخطيط الاستعلامات: استخدام JoinStepLogical مع CROSS JOIN. #88151 (Vladimir Cherkasov).
  • إضافة alias للدالتين hasAnyTokens (hasAnyToken) وhasAllTokens (hasAllToken). #88162 (George Larionov).
  • تمكين sampling profiler العام افتراضيًا (أي حتى لخيوط الخادم غير المرتبطة بـ queries): جمع stacktraces لجميع الخيوط كل 10 ثوانٍ من وقت CPU والوقت الفعلي. #88209 (Alexander Tokmakov).
  • تحديث Azure SDK ليشمل إصلاحًا لمشكلة ‘Content-Length’ التي تظهر مع وظيفتَي النسخ وإنشاء الحاوية. #88278 (Smita Kulkarni).
  • جعل الدالة lag غير حساسة لحالة الأحرف للتوافق مع MySQL. #88322 (Lonny Kapelushnik).
  • السماح لـ clickhouse-local بالبدء من دليل clickhouse-server. في الإصدارات السابقة، كان يؤدي ذلك إلى ظهور الخطأ Cannot parse UUID: . والآن يمكنك تشغيل clickhouse-local والتعامل مع قواعد بيانات الخادم من دون تشغيل الخادم. #88383 (Alexey Milovidov).
  • إضافة الإعداد keeper_server.coordination_settings.check_node_acl_on_remove. إذا كان مُمكّنًا، فسيتم قبل كل عملية حذف لعقدة التحقق من قوائم ACL لكلٍّ من العقدة نفسها والعقدة الأصلية. وإلا فسيتم التحقق فقط من ACL الخاصة بالعقدة الأصلية. #88513 (Antonio Andelic).
  • أصبحت أعمدة JSON الآن تُعرَض بتنسيق مُنسّق عند استخدام format Vertical. يُغلق #81794. #88524 (Frank Rosner).
  • تخزين ملفات clickhouse-client (مثل history الاستعلامات) في المواقع المحددة في مواصفة XDG Base Directories بدلًا من جذر الدليل المنزلي. سيستمر استخدام ~/.clickhouse-client-history إذا كان موجودًا بالفعل. #88538 (Konstantin Bogdanov).
  • إصلاح تسرّب في الذاكرة ناتج عن GLOBAL IN (https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranavmehta94).
  • إضافة overload إلى hasAny/hasAllTokens لقبول مُدخل نصي. #88679 (George Larionov).
  • إضافة step إلى سكربت postinstall الخاص بـ clickhouse-keeper لتفعيل بدء التشغيل عند الإقلاع. #88746 (YenchangChan).
  • التحقق من بيانات الاعتماد في web UI عند اللصق فقط، بدلًا من التحقق عند كل ضغطة مفتاح. هذا يتجنب مشكلة مرتبطة بخوادم LDAP غير المضبوطة بشكل صحيح. يُغلق هذا #85777. #88769 (Alexey Milovidov).
  • تقييد طول رسالة الاستثناء عند انتهاك قيد. في الإصدارات السابقة، كان من الممكن الحصول على رسالة استثناء طويلة جدًا عند إدراج سلسلة نصية طويلة جدًا، ثم ينتهي بها المطاف مكتوبة في query_log. يُغلق #87032. #88801 (Alexey Milovidov).
  • إصلاح طلب بنية dataset من خادم ArrowFlight عند إنشاء table. #87542 (Vitaly Baranov).

إصلاح خلل (سلوك خاطئ ملحوظ للمستخدم في إصدار مستقر رسمي)

  • تم إصلاح GeoParquet الذي كان يتسبب في أخطاء في بروتوكول العميل. #84020 (Michael Kolupaev).
  • إصلاح تحليل الدوال المعتمدة على المضيف مثل shardNum() في الاستعلامات الفرعية على عقدة initiator. #84409 (Eduard Karacharov).
  • تم إصلاح المعالجة غير الصحيحة للتواريخ السابقة لـ epoch مع الأجزاء الكسرية من الثانية في عدة دوال مرتبطة بالتاريخ والوقت، مثل parseDateTime64BestEffort و change{Year,Month,Day} و makeDateTime64. في السابق، كان الجزء دون الثانية يُطرح من الثواني بدلًا من إضافته. على سبيل المثال، كانت parseDateTime64BestEffort('1969-01-01 00:00:00.468') تُرجع 1968-12-31 23:59:59.532 بدلًا من 1969-01-01 00:00:00.468. #85396 (xiaohuanlin).
  • إصلاح فشل أوامر ALTER COLUMN IF EXISTS عندما تتغير حالة العمود ضمن تعليمة ALTER نفسها. وأصبحت أوامر مثل DROP COLUMN IF EXISTS و MODIFY COLUMN IF EXISTS و COMMENT COLUMN IF EXISTS و RENAME COLUMN IF EXISTS تتعامل الآن بشكل صحيح مع الحالات التي يُحذف فيها العمود بواسطة أمر سابق ضمن التعليمة نفسها. #86046 (xiaohuanlin).
  • إصلاح استنتاج Date/DateTime/DateTime64 للتواريخ الواقعة خارج النطاق المدعوم. #86184 (Pavel Kruglov).
  • إصلاح تعطل كان يحدث عندما تؤدي بعض البيانات الصالحة المقدمة من المستخدم إلى عمود AggregateFunction(quantileDD) إلى تكرار عمليات الدمج بلا نهاية. #86560 (Raphaël Thériault).
  • دعم النوعين JSON/Dynamic في الجداول المُنشأة باستخدام table function ‏cluster. #86821 (Pavel Kruglov).
  • إصلاح كون نتيجة دالة محسوبة داخل CTE غير حتمية في الاستعلام. #86967 (Yakov Olkhovskiy).
  • إصلاح LOGICAL_ERROR في EXPLAIN عند استخدام pointInPolygon على أعمدة المفتاح الأساسي. #86971 (Michael Kolupaev).
  • إصلاح جداول data lake التي تحتوي على تسلسل مرمّز بالنسبة المئوية في الاسم. يُغلق #86626. #87020 (Anton Ivashkin).
  • إصلاح السلوك غير الصحيح لـ IS NULL على nullable columns في OUTER JOIN مع optimize_functions_to_subcolumns، وإغلاق #78625. #87058 (Vladimir Cherkasov).
  • تم إصلاح الاحتساب غير الصحيح لعمليات تحرير البيانات المؤقتة في تتبع الحد max_temporary_data_on_disk_size، وإغلاق #87118. #87140 (JIaQi).
  • أصبحت الدالة checkHeaders تتحقق الآن بشكل صحيح من headers المقدمة وترفض headers المحظورة. المؤلف الأصلي: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
  • يوحّد سلوك toDate وtoDate32 عبر جميع الأنواع الرقمية. ويُصلح فحص underflow في Date32 أثناء التحويل من int16. #87176 (Pervakov Grigorii).
  • يُصلح خطأ منطقيًا في parallel replicas للاستعلامات التي تحتوي على عدة عمليات JOIN، وخصوصًا عند وجود RIGHT JOIN بعد LEFT/INNER JOIN. #87178 (Igor Nikonov).
  • يراعي الإعداد input_format_try_infer_variants في ذاكرة التخزين المؤقت لاستنتاج المخطط. #87180 (Pavel Kruglov).
  • يجعل pathStartsWith يطابق فقط المسارات الواقعة ضمن البادئة. #87181 (Raúl Marín).
  • يُصلح الأخطاء المنطقية في العمود الافتراضي _row_number وعمليات الحذف الموضعي في Iceberg. #87220 (Michael Kolupaev).
  • يُصلح الخطأ LOGICAL_ERROR “Too large size passed to allocator” في JOIN بسبب خلط الكتل الثابتة وغير الثابتة. #87231 (Azat Khuzhin).
  • يُصلح lightweight updates مع الاستعلامات الفرعية التي تقرأ من جداول MergeTree أخرى. #87285 (Anton Popov).
  • يُصلح تحسين النقل إلى PREWHERE، الذي لم يكن يعمل عند وجود سياسة صفوف. وهو استكمال لـ #85118. ويغلق #69777. ويغلق #83748. #87303 (Nikolai Kochetov).
  • يُصلح تطبيق الرقع على الأعمدة ذات التعبير الافتراضي المفقودة في data parts. #87347 (Anton Popov).
  • يُصلح عطل segmentation fault عند استخدام أسماء حقول partition مكررة في جداول MergeTree. #87365 (xiaohuanlin).
  • يُصلح ترقية EmbeddedRocksDB. #87392 (Raúl Marín).
  • يُصلح القراءة المباشرة من فهرس النص في تخزين الكائنات. #87399 (Anton Popov).
  • يمنع إنشاء privilege باستخدام engine غير موجود. #87419 (Jitendra).
  • يتجاهل فقط أخطاء عدم العثور الخاصة بـ s3_plain_rewritable (ما قد يؤدي إلى شتى أنواع المشكلات). #87426 (Azat Khuzhin).
  • يُصلح Dictionaries ذات المصدر YTSaurus وتخطيطات *range_hashed. #87490 (MikhailBurdukov).
  • يُصلح إنشاء Array من Tuple فارغة. #87520 (Pavel Kruglov).
  • يتحقق من الأعمدة غير الصالحة أثناء إنشاء جدول مؤقت. #87524 (Pavel Kruglov).
  • لا تضع أعمدة partition الخاصة بـ hive مطلقًا في ترويسة التنسيق. يُصلح #87515. #87528 (Arthur Passos).
  • إصلاح تهيئة القراءة من التنسيق في DeltaLake عند استخدام تنسيق نصي. #87529 (Pavel Kruglov).
  • يُصلح التحقق من صلاحيات الوصول في عمليتَي select و insert لجداول Buffer. #87545 (pufit).
  • منع إنشاء فهرس تخطي البيانات لجدول S3. #87554 (Bharat Nallan).
  • تجنب تسرّب الذاكرة المتتبَّعة في التسجيل غير المتزامن (قد يحدث انحراف كبير، يصل خلال 10 ساعات إلى ~100GiB) و text_log (وقد يحدث فيه انحراف مماثل تقريبًا). #87584 (Azat Khuzhin).
  • إصلاح خلل قد يؤدي إلى تجاوز إعدادات الخادم العامة بواسطة إعدادات SELECT الخاصة بـ View أو Materialized View، إذا أُسقط هذا العرض بشكل غير متزامن وأُعيد تشغيل الخادم قبل اكتمال التنظيف الخلفي. #87603 (Alexander Tokmakov).
  • استبعاد بايتات userspace page cache (إن أمكن) عند حساب تحذير الحمل الزائد على الذاكرة. #87610 (Bharat Nallan).
  • إصلاح خلل كان يمكن أن يؤدي إلى LOGICAL_ERROR بسبب ترتيب الأنواع غير الصحيح أثناء إلغاء تسلسل CSV. #87622 (Yarik Briukhovetskyi).
  • إصلاح المعالجة غير الصحيحة لـ command_read_timeout في القواميس القابلة للتنفيذ. #87627 (Azat Khuzhin).
  • إصلاح السلوك غير الصحيح لـ SELECT * REPLACE في WHERE clause مع analyzer الجديد عند التصفية على الأعمدة المستبدلة. #87630 (xiaohuanlin).
  • إصلاح two-level aggregation عند استخدام Merge فوق Distributed. #87687 (c-end).
  • إصلاح إنشاء block الإخراج في خوارزمية HashJoin عندما لا تُستخدم قائمة الصفوف اليمنى. يُصلح #87401. #87699 (Dmitry Novik).
  • كان يمكن اختيار وضع قراءة parallel replicas بشكل غير صحيح إذا لم توجد بيانات للقراءة بعد تطبيق index analysis. يُغلق #87653. #87700 (zoomxi).
  • إصلاح معالجة أعمدة timestamp / timestamptz في Glue. #87733 (Andrey Zvonov).
  • هذا يُغلق #86587. #87761 (scanhex12).
  • إصلاح كتابة القيم المنطقية في PostgreSQL interface. #87762 (Artem Yurov).
  • إصلاح خطأ “جدول غير معروف” في query من نوع insert select مع CTE، #85368. #87789 (Guang Zhao).
  • إصلاح قراءة العمود الفرعي لخريطة null من Variants، التي لا يمكن أن تكون داخل Nullable. #87798 (Pavel Kruglov).
  • إصلاح التعامل مع الخطأ عند تعذّر إسقاط قاعدة البيانات بالكامل على الـ cluster من العقدة الثانوية. #87802 (Tuan Pham Anh).
  • إصلاح عدة أخطاء في فهارس التخطي. #87817 (Raúl Marín).
  • في AzureBlobStorage، تم التحديث لتجربة النسخ native أولًا ثم الرجوع إلى القراءة والكتابة عند حدوث الخطأ ‘Unauthroized’ (في AzureBlobStorage، إذا كانت storage accounts مختلفة بين المصدر والوجهة فسنحصل على الخطأ ‘Unauthorized’). كما تم إصلاح تطبيق “use_native_copy” عند تعريف endpoint في configuration. #87826 (Smita Kulkarni).
  • يتعطل ClickHouse إذا كان ملف ArrowStream يحتوي على Dictionary غير فريد. #87863 (Ilya Golshtein).
  • إصلاح عطل فادح عند استخدام approx_top_k و finalizeAggregation. #87892 (Jitendra).
  • إصلاح عملية الدمج مع projections عندما تكون آخر block فارغة. #87928 (Raúl Marín).
  • عدم إزالة الدوال الحقنية من GROUP BY إذا كانت أنواع arguments غير مسموح بها في GROUP BY. #87958 (Pavel Kruglov).
  • إصلاح الاستبعاد غير الصحيح لـ granules/partitions للمفاتيح المستندة إلى datetime عند استخدام الإعداد session_timezone في queries. #87987 (Eduard Karacharov).
  • إرجاع عدد الصفوف المتأثرة بعد query في واجهة PostgreSQL. #87990 (Artem Yurov).
  • تقييد استخدام filter pushdown مع PASTE JOIN لأنه قد يؤدي إلى نتائج غير صحيحة. #88078 (Yarik Briukhovetskyi).
  • تطبيق تطبيع URI قبل التقييم لعملية التحقق من grants التي أُضيفت في https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
  • إصلاح logical error عندما لا يطابق ARRAY JOIN COLUMNS() أي columns في analyzer الجديد. #88091 (xiaohuanlin).
  • إصلاح التحذير “High ClickHouse memory usage” (باستثناء page cache). #88092 (Azat Khuzhin).
  • إصلاح تلف محتمل للبيانات في جداول MergeTree التي تم تعيين TTL على column فيها. #88095 (Anton Popov).
  • إصلاح Exception محتمل غير مُلتقط أثناء قراءة system.tables عند وجود جداول غير صالحة في databases خارجية مرفقة (PostgreSQL/SQLite/…). #88105 (Azat Khuzhin).
  • إصلاح crash في الدالتين mortonEncode و hilbertEncode عند استدعائهما باستخدام argument من نوع tuple فارغ. #88110 (xiaohuanlin).
  • الآن ستستغرق استعلامات ON CLUSTER وقتًا أقل عند وجود نُسخ متماثلة غير نشطة في العنقود. #88153 (alesapin).
  • أصبح عامل DDL الآن ينظّف المضيفين القدامى من مجموعة النُسخ المتماثلة. سيؤدي ذلك إلى تقليل كمية البيانات الوصفية المخزنة في ZooKeeper. #88154 (alesapin).
  • إصلاح تشغيل ClickHouse بدون cgroups (إذ أصبحت cgroups، عن طريق الخطأ، متطلبًا للمقاييس غير المتزامنة). #88164 (Azat Khuzhin).
  • تنفيذ تراجع صحيح عن عملية نقل الدليل عند حدوث خطأ. نحتاج إلى إعادة كتابة جميع كائنات prefix.path التي تغيّرت أثناء التنفيذ، وليس الكائن الجذر فقط. #88198 (Mikhail Artemenko).
  • تم إصلاح نشر العلامة is_shared في ColumnLowCardinality. وقد يؤدي ذلك إلى نتيجة group-by غير صحيحة إذا أُدرجت قيمة جديدة في عمود بعد أن تكون قيم التجزئة قد حُسبت مسبقًا وخُزنت مؤقتًا بالفعل في ReverseIndex. #88213 (Nikita Taranov).
  • إصلاح إعداد workload ‏max_cpu_share. ويمكن الآن استخدامه دون الحاجة إلى تعيين إعداد workload ‏max_cpus. #88217 (Neerav).
  • إصلاح خطأ كان يؤدي إلى تعلّق الـ mutations الثقيلة جدًا التي تحتوي على استعلامات فرعية في مرحلة التحضير. وأصبح الآن من الممكن إيقاف هذه الـ mutations باستخدام SYSTEM STOP MERGES. #88241 (alesapin).
  • أصبحت الاستعلامات الفرعية المترابطة تعمل الآن مع وحدات التخزين الكائني. #88290 (alesapin).
  • تجنّب محاولة تهيئة قواعد بيانات DataLake عند الوصول إلى system.projections وsystem.data_skipping_indices. #88330 (Azat Khuzhin).
  • لن تظهر الآن catalogs الخاصة ببحيرات البيانات في جداول استبطان النظام إلا إذا كان show_data_lake_catalogs_in_system_tables مفعّلًا صراحةً. #88341 (alesapin).
  • تم إصلاح DatabaseReplicated بحيث يراعي إعداد interserver_http_host. #88378 (xiaohuanlin).
  • أصبحت positional arguments الآن معطّلة صراحةً في سياق تعريف Projections، لأنها غير منطقية في هذه المرحلة الداخلية من الاستعلام. يُصلح هذا #48604. #88380 (Amos Bird).
  • إصلاح التعقيد التربيعي في الدالة countMatches. يغلق #88400. #88401 (Alexey Milovidov).
  • أصبحت أوامر ALTER COLUMN ... COMMENT الخاصة بجداول KeeperMap متماثلة، بحيث تُعتمد في البيانات الوصفية لقاعدة البيانات Replicated وتُنشَر إلى جميع النُسخ المتماثلة. يغلق #88077. #88408 (Eduard Karacharov).
  • إصلاح حالة اعتماد دوري زائف مع Materialized Views في Database Replicated، كانت تمنع إضافة نُسخ متماثلة جديدة إلى قاعدة البيانات. #88423 (Nikolay Degterinsky).
  • إصلاح تجميع الأعمدة المتناثرة عند ضبط group_by_overflow_mode على any. #88440 (Eduard Karacharov).
  • إصلاح الخطأ “column not found” عند استخدام query_plan_use_logical_join_step=0 مع عدة عبارات FULL JOIN USING. يغلق #88103. #88473 (Vladimir Cherkasov).
  • في التجمعات الكبيرة التي يزيد عدد العقد فيها على 10، يرتفع احتمال فشل عملية الاستعادة مع الخطأ [941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. إذ تُستبدل العقدة num_hosts من قِبل العديد من المضيفين في الوقت نفسه. ويجعل هذا الإصلاح الإعداد الذي يتحكم في عدد المحاولات ديناميكيًا. يغلق #87721. #88484 (Mikhail f. Shiryaev).
  • هذا PR مخصص فقط لضمان التوافق مع 23.8 وما قبله. وقد أُدخلت مشكلة التوافق بواسطة هذا PR: https://github.com/ClickHouse/ClickHouse/pull/54240 سيفشل هذا SQL عند استخدام enable_analyzer=0 (قبل 23.8 كان ذلك يعمل بشكل صحيح). #88491 (JIaQi).
  • إصلاح تجاوز السعة الصحيحة الذي يرصدُه UBSAN في رسالة الخطأ accurateCast عند تحويل القيم الكبيرة إلى DateTime. #88520 (xiaohuanlin).
  • إصلاح محرك CoalescingMergeTree لأنواع Tuple. هذا يغلق #88469. #88526 (scanhex12).
  • منع عمليات الحذف عند iceberg_format_version=1. هذا يغلق #88444. #88532 (scanhex12).
  • يُصلح هذا التصحيح عملية نقل الأقراص plain-rewritable للمجلدات ذات العمق غير المحدود. #88586 (Mikhail Artemenko).
  • إصلاح SQL SECURITY DEFINER مع دوال *cluster. #88588 (Julian Maicher).
  • إصلاح احتمال حدوث تعطل بسبب mutation متزامنة لأعمدة PREWHERE الثابتة الأساسية. #88605 (Azat Khuzhin).
  • إصلاح القراءة من فهرس النص وتمكين ذاكرة التخزين المؤقت لشروط الاستعلام (مع تمكين الإعدادين use_skip_indexes_on_data_read و use_query_condition_cache). #88660 (Anton Popov).
  • قد يؤدي الاستثناء Poco::TimeoutException المطروح من Poco::Net::HTTPChunkedStreamBuf::readFromDevice إلى تعطل مع SIGABRT. #88668 (Miсhael Stetsyuk).
  • نُقل الإصلاح إلى #88910: بعد الاستعادة، قد تظل النسخة المتماثلة في قاعدة بيانات Replicated عالقةً لفترة طويلة وهي تطبع رسائل مثل Failed to marked query-0004647339 as finished (finished=No node, synced=No node)، وقد أُصلح ذلك. #88671 (Alexander Tokmakov).
  • إصلاح الإلحاق بـ system.zookeeper_connection_log في حال اتصل ClickHouse للمرة الأولى بعد إعادة تحميل الإعدادات. #88728 (Antonio Andelic).
  • أُصلح خلل كان قد يؤدي عند تحويل DateTime64 إلى Date مع date_time_overflow_behavior = 'saturate' إلى نتائج غير صحيحة للقيم الخارجة عن النطاق عند العمل مع المناطق الزمنية. #88737 (Manuel).
  • المحاولة رقم N لإصلاح خطأ “having zero bytes error” في محرك جدول S3 مع تفعيل cache. #88740 (Kseniia Sumarokova).
  • إصلاح التحقق من الوصول عند تنفيذ select على loop table function. #88802 (pufit).
  • التقاط الاستثناءات عند فشل async logging لمنع إنهاء البرنامج. #88814 (Raúl Marín).
  • نُقل الإصلاح إلى #89060: إصلاح top_k بحيث يراعي parameter المسمى threshold عند استدعائه باستخدام argument واحد. أُغلق #88757. #88867 (Manuel).
  • نُقل الإصلاح إلى #88944: إصلاح خلل في الدالة reverseUTF8. في الإصدارات السابقة، كانت تعكس عن طريق الخطأ بايتات UTF-8 code points ذات الطول 4. ويغلق هذا #88913. #88914 (Alexey Milovidov).
  • نُقل الإصلاح إلى #88980: عدم التحقق من صلاحية الوصول SET DEFINER <current_user>:definer عند إنشاء view باستخدام SQL SECURITY DEFINER. #88968 (pufit).
  • نُقل الإصلاح إلى #89058: أُصلح LOGICAL_ERROR في L2DistanceTransposed(vec1, vec2, p)، حيث كانت عملية التحسين الخاصة بقراءة QBit الجزئية تزيل Nullable من return type بشكل غير صحيح عندما كان p من النوع Nullable. #88974 (Raufs Dunamalijevs).
  • نُقل الإصلاح إلى #89167: إصلاح crash عند وجود catalog type غير معروف. يحلّ #88819. #88987 (scanhex12).
  • نُقل الإصلاح إلى #89028: أُصلح تراجع الأداء في تحليل skipping indexes. #89004 (Anton Popov).

تحسينات البناء/الاختبار/التغليف

  • استخدام الإصدار 18.0 من مكتبة postgres. #87647 (Konstantin Bogdanov).
  • تفعيل ICU على FreeBSD. #87891 (Raúl Marín).
  • استخدام SSE 4.2 عند استخدام التوجيه الديناميكي إلى SSE 4.2 بدلًا من SSE 4. #88029 (Raúl Marín).
  • عدم اشتراط العلامة NO_ARMV81_OR_HIGHER إذا لم يكن Speculative Store Bypass Safe متاحًا. #88051 (Konstantin Bogdanov).
  • عند بناء ClickHouse باستخدام ENABLE_LIBFIU=OFF، تصبح الدوال المرتبطة بـ failpoint من نوع no-op، ولم يعد بإمكانها التأثير في الأداء. وتُرجِع استعلامات SYSTEM ENABLE/DISABLE FAILPOINT الخطأ SUPPORT_IS_DISABLED في هذه الحالة. #88184 (c-end).

إصدار ClickHouse 25.9 بتاريخ 2025-09-25

تغيير غير متوافق مع الإصدارات السابقة

  • تعطيل العمليات الثنائية غير المنطقية مع IPv4/IPv6: تم تعطيل عمليتَي الجمع/الطرح على IPv4/IPv6 عند استخدامها مع نوع غير صحيح. في السابق، كان يُسمح بهذه العمليات مع الأنواع ذات الفاصلة العائمة، كما كانت تؤدي إلى ظهور أخطاء منطقية مع بعض الأنواع الأخرى (مثل DateTime). #86336 (Raúl Marín).
  • إيقاف الإعداد allow_dynamic_metadata_for_data_lakes تمهيدًا لإزالته. تحاول الآن جميع جداول Iceberg جلب مخطط الجدول الأحدث من التخزين قبل تنفيذ كل استعلام. #86366 (Daniil Ivanik).
  • تم تغيير آلية تحليل العمود الموحَّد الناتج عن عبارة OUTER JOIN ... USING لتكون أكثر اتساقًا: في السابق، عند تحديد عمود USING والأعمدة المؤهلة معًا (a, t1.a, t2.a) في OUTER JOIN، كان عمود USING يُحلَّل بشكل غير صحيح إلى t1.a، ما يؤدي إلى إظهار 0/NULL للصفوف القادمة من الجدول الأيمن التي ليس لها تطابق في الجدول الأيسر. الآن تُحلَّل المعرّفات الواردة في عبارة USING دائمًا إلى العمود الموحَّد، بينما تُحلَّل المعرّفات المؤهلة إلى الأعمدة غير الموحَّدة، بغض النظر عن المعرّفات الأخرى الموجودة في الاستعلام. على سبيل المثال: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — قبل: a=0, t1.a=0, t2.a=2 (غير صحيح - تم تحليل ‘a’ إلى t1.a) — بعد: a=2, t1.a=0, t2.a=2 (صحيح - ‘a’ موحَّد). #80848 (Vladimir Cherkasov).
  • زيادة نافذة إزالة التكرار في Replicated إلى 10000. هذا متوافق بالكامل، لكن يمكن تصوّر سيناريوهات قد يؤدي فيها هذا التغيير إلى ارتفاع استهلاك الموارد عند وجود عدد كبير من الجداول. #86820 (Sema Checherinda).

ميزة جديدة

  • يمكنك الآن استخدام NATS JetStream لاستهلاك الرسائل عبر تحديد الإعدادات الجديدة nats_stream وnats_consumer لمحرك NATS. #84799 (Dmitry Novikov).
  • أُضيف دعم للمصادقة وSSL في دالة الجدول arrowFlight. #87120 (Vitaly Baranov).
  • أُضيفت معلمة جديدة إلى محرك الجدول S3 ودالة الجدول s3 باسم storage_class_name، وتتيح تحديد فئة التخزين الذكية التي تدعمها AWS. وهي مدعومة بصيغة key-value وكذلك بالصيغة الموضعية (deprecated). #87122 (alesapin).
  • ALTER UPDATE لمحرك جدول Iceberg. #86059 (scanhex12).
  • أُضيف جدول النظام iceberg_metadata_log لاسترجاع ملفات بيانات Iceberg الوصفية أثناء عبارات SELECT. #86152 (scanhex12).
  • تدعم جداول Iceberg وDeltaLake تهيئة أقراص مخصصة عبر إعداد التخزين disk. #86778 (scanhex12).
  • أُضيف دعم Azure لأقراص بحيرات البيانات. #87173 (scanhex12).
  • أُضيف دعم كتالوج Unity فوق Azure blob storage. #80013 (Smita Kulkarni).
  • أُضيف دعم لمزيد من التنسيقات (ORC, Avro) في عمليات الكتابة إلى Iceberg. وهذا يُغلق #86179. #87277 (scanhex12).
  • أُضيف جدول نظام جديد database_replicas يتضمن معلومات عن نُسخ قواعد البيانات المتماثلة. #83408 (Konstantin Morozov).
  • أُضيفت الدالة arrayExcept التي تطرح مصفوفة من أخرى باعتبارها مجموعة. #82368 (Joanna Hulboj).
  • أُضيف جدول جديد system.aggregated_zookeeper_log. يحتوي الجدول على إحصاءات (مثل عدد العمليات، ومتوسط زمن الاستجابة، والأخطاء) لعمليات ZooKeeper، مجمّعة بحسب معرّف الجلسة، والمسار الأب، ونوع العملية، وتُكتب دوريًا إلى القرص. #85102 #87208 (Miсhael Stetsyuk).
  • دالة جديدة، isValidASCII. تُرجع 1 إذا كانت سلسلة الإدخال أو FixedString تحتوي فقط على بايتات ASCII ‏(0x00–0x7F)، وإلا فتُرجع 0. يُغلق #85377. … #85786 (rajat mohan).
  • يمكن تحديد الإعدادات المنطقية بدون وسائط، مثل SET use_query_cache;، وهو ما يعادل ضبطها على true. #85800 (thraeka).
  • خيارات تهيئة جديدة: يتيح logger.startupLevel وlogger.shutdownLevel تجاوز مستوى السجل أثناء بدء تشغيل ClickHouse وإيقافه، على التوالي. #85967 (Lennard Eijsackers).
  • الدالتان التجميعيتان timeSeriesChangesToGrid وtimeSeriesResetsToGrid. تعملان بطريقة مشابهة لـ timeSeriesRateToGrid، إذ تقبلان معاملات timestamp للبداية، وtimestamp للنهاية، وstep، ونافذة الرجوع للخلف، بالإضافة إلى وسيطين لـ timestamps وvalues، لكنهما تتطلبان عينة واحدة على الأقل لكل نافذة بدلًا من 2. وتحسبان changes/resets في PromQL، أي عدد المرات التي تتغير فيها قيمة العينة أو تنخفض داخل النافذة المحددة لكل timestamp في الشبكة الزمنية المعرّفة بهذه المعاملات. نوع الإرجاع هو Array(Nullable(Float64)). #86010 (Stephen Chi).
  • يتيح للمستخدمين إنشاء طرق عرض مؤقتة بصياغة مشابهة للجداول المؤقتة (CREATE TEMPORARY VIEW). #86432 (Aly Kafoury).
  • إضافة تحذيرات بشأن استخدام CPU والذاكرة إلى جدول system.warnings. #86838 (Bharat Nallan).
  • دعم المؤشر oneof في مدخلات Protobuf. يمكن استخدام عمود خاص للإشارة إلى وجود جزء من oneof. إذا كانت الرسالة تحتوي على oneof وكان input_format_protobuf_oneof_presence مضبوطًا، فسيملأ ClickHouse العمود الذي يحدد أي حقل من oneof تم العثور عليه. #82885 (Ilya Golshtein).
  • تحسين تحليل التخصيصات استنادًا إلى أدوات jemalloc الداخلية. يمكن الآن تمكين محلل jemalloc العام باستخدام الإعداد jemalloc_enable_global_profiler. ويمكن تخزين عينات التخصيصات العامة وعمليات إلغاء التخصيص في system.trace_log تحت النوع JemallocSample عبر تمكين الإعداد jemalloc_collect_global_profile_samples_in_trace_log. كما يمكن الآن تمكين تحليل jemalloc لكل استعلام على حدة باستخدام الإعداد jemalloc_enable_profiler. ويمكن التحكم في تخزين العينات في system.trace_log لكل استعلام باستخدام الإعداد jemalloc_collect_profile_samples_in_trace_log. وتم تحديث jemalloc إلى إصدار أحدث. #85438 (Antonio Andelic).
  • إعداد جديد لحذف الملفات عند حذف جداول Iceberg. هذا يُغلق #86211. #86501 (scanhex12).

ميزة تجريبية

  • أُعيد تصميم الفهرس النصي المعكوس من الصفر ليكون قابلاً للتوسع مع مجموعات البيانات التي لا تتسع في RAM. #86485 (Anton Popov).
  • تستخدم إعادة ترتيب عمليات JOIN الآن الإحصاءات. يمكن تمكين هذه الميزة بضبط allow_statistics_optimize = 1 و query_plan_optimize_join_order_limit = 10. #86822 (Han Fei).
  • أصبحت alter table ... materialize statistics all مدعومة، وهي تُطبّق جميع إحصاءات الجدول وتخزّنها فعليًا. #87197 (Han Fei).

تحسين الأداء

  • دعم تصفية أجزاء البيانات باستخدام فهارس التخطي أثناء القراءة لتقليل قراءات الفهارس غير الضرورية. يتم التحكم في ذلك عبر الإعداد الجديد use_skip_indexes_on_data_read (معطّل افتراضيًا). يعالج هذا #75774. ويتضمن أيضًا بعض الأعمال التأسيسية المشتركة مع #81021. #81526 (Amos Bird).
  • أُضيف تحسين لترتيب JOIN يمكنه إعادة ترتيب عمليات JOIN تلقائيًا لتحسين الأداء (ويتم التحكم فيه عبر الإعداد query_plan_optimize_join_order_limit). لاحظ أن تحسين ترتيب JOIN يدعم الإحصاءات حاليًا بشكل محدود، ويعتمد أساسًا على تقديرات عدد الصفوف من محركات التخزين - وستُضاف آليات أكثر تطورًا لجمع الإحصاءات وتقدير cardinality في الإصدارات القادمة. إذا واجهت مشكلات في استعلامات JOIN بعد الترقية، يمكنك تعطيل التنفيذ الجديد مؤقتًا عبر ضبط SET query_plan_use_new_logical_join_step = 0 ثم الإبلاغ عن المشكلة للتحقيق. ملاحظة حول تحليل المعرّفات من USING clause: تم تغيير تحليل العمود الموحَّد من clause OUTER JOIN ... USING ليصبح أكثر اتساقًا: سابقًا، عند تحديد كلٍّ من عمود USING والأعمدة المؤهلة (a, t1.a, t2.a) في OUTER JOIN، كان عمود USING يُحلَّل بشكل غير صحيح على أنه t1.a، مما يُظهر 0/NULL للصفوف القادمة من الجدول الأيمن التي لا تطابقها أي قيمة من اليسار. الآن، تُحلَّل المعرّفات من USING clause دائمًا إلى العمود الموحَّد، بينما تُحلَّل المعرّفات المؤهلة إلى الأعمدة غير الموحَّدة، بغض النظر عن المعرّفات الأخرى الموجودة في الاستعلام. على سبيل المثال: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — قبل: a=0, t1.a=0, t2.a=2 (غير صحيح - تم تحليل ‘a’ على أنه t1.a) — بعد: a=2, t1.a=0, t2.a=2 (صحيح - ‘a’ هو العمود الموحَّد). #80848 (Vladimir Cherkasov).
  • دعم INSERT SELECT الموزّع لبحيرات البيانات. #86783 (scanhex12).
  • تحسين PREWHERE optimization للشروط مثل func(primary_column) = 'xx' و column in (xxx). #85529 (李扬).
  • تنفيذ إعادة كتابة JOIN: 1. تحويل LEFT ANY JOIN و RIGHT ANY JOIN إلى SEMI/ANTI JOIN إذا كان شرط التصفية دائمًا false بالنسبة إلى الصفوف المتطابقة أو غير المتطابقة. يتم التحكم في هذا التحسين عبر الإعداد الجديد query_plan_convert_any_join_to_semi_or_anti_join. 2. تحويل FULL ALL JOIN إلى LEFT ALL أو RIGHT ALL JOIN إذا كان شرط التصفية دائمًا false بالنسبة إلى الصفوف غير المتطابقة من أحد الجانبين. #86028 (Dmitry Novik).
  • تحسين أداء عمليات الدمج العمودي بعد تنفيذ lightweight delete. #86169 (Anton Popov).
  • تحسين أداء HashJoin بشكل طفيف في حالة LEFT/RIGHT join الذي يحتوي على عدد كبير من الصفوف غير المتطابقة. #86312 (Nikita Taranov).
  • Radix sort: مساعدة المصرّف على استخدام SIMD وتحسين prefetching. يستخدم dynamic dispatch للاستفادة من software prefetching على معالجات Intel فقط. ويواصل هذا العمل الذي بدأه @taiyang-li في https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
  • تحسين أداء الاستعلامات القصيرة التي تحتوي على عدد كبير من الأجزاء في الجداول (من خلال تحسين MarkRanges باستخدام devector بدلًا من deque). #86933 (Azat Khuzhin).
  • تحسين أداء تطبيق patch parts في وضع JOIN. #87094 (Anton Popov).
  • تمت إضافة الإعداد query_condition_cache_selectivity_threshold (القيمة الافتراضية: 1.0)، الذي يستبعد نتائج الفحص الخاصة بالمسندات منخفضة الانتقائية من الإدراج في query condition cache. يتيح ذلك تقليل استهلاك الذاكرة في query condition cache، مقابل انخفاض معدل إصابات cache. #86076 (zhongyuankai).
  • تقليل استخدام الذاكرة في عمليات الكتابة إلى Iceberg. #86544 (scanhex12).

تحسينات

  • دعم كتابة عدة ملفات بيانات في Iceberg ضمن عملية insert واحدة. أُضيفت الإعدادات الجديدة iceberg_insert_max_rows_in_data_file وiceberg_insert_max_bytes_in_data_file للتحكم في هذه الحدود. #86275 (scanhex12).
  • إضافة حدّ للصفوف/البايتات لملفات البيانات المُدرجة في Delta Lake. ويجري التحكم بذلك عبر الإعدادين delta_lake_insert_max_rows_in_data_file وdelta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova).
  • دعم المزيد من الأنواع للتقسيمات في عمليات الكتابة إلى Iceberg. هذا يُغلق #86206. #86298 (scanhex12).
  • جعل استراتيجية إعادة المحاولة في S3 قابلة للتهيئة، كما أصبحت إعدادات قرص S3 قابلة لإعادة التحميل الفوري عند تغيير ملف config XML. #82642 (RinChanNOW).
  • تحسين محرك الجداول S3(Azure)Queue بحيث يتمكن من الاستمرار عند فقدان الاتصال بـ ZooKeeper من دون تكرارات محتملة. ويتطلب ذلك تمكين إعداد S3Queue use_persistent_processing_nodes (ويمكن تغييره عبر ALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova).
  • يمكنك استخدام معلمات الاستعلام بعد TO عند إنشاء عرض مادي، على سبيل المثال: CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein).
  • تقديم إرشادات أوضح للمستخدمين عند تحديد إعدادات غير صحيحة لمحرك الجداول Kafka2. #83701 (János Benjamin Antal).
  • لم يعد من الممكن تحديد مناطق زمنية للنوع Time (إذ لم يكن لذلك معنى). #84689 (Yarik Briukhovetskyi).
  • تبسيط المنطق المرتبط بتحليل Time/Time64 في وضع best_effort (مع تجنّب بعض الأخطاء أيضًا). #84730 (Yarik Briukhovetskyi).
  • إضافة الدالة deltaLakeAzureCluster (على غرار deltaLakeAzure لوضع العنقود) والدالة deltaLakeS3Cluster (اسم مستعار لـ deltaLakeCluster). يعالج هذا #85358. #85547 (Smita Kulkarni).
  • تطبيق الإعداد azure_max_single_part_copy_size على عمليات النسخ العادية بالطريقة نفسها المستخدمة في النسخ الاحتياطي. #85767 (Ilya Golshtein).
  • إبطاء خيوط عميل S3 عند حدوث أخطاء قابلة لإعادة المحاولة في تخزين الكائنات S3. ويوسّع هذا الإعداد السابق backup_slow_all_threads_after_retryable_s3_error ليشمل أقراص S3، مع إعادة تسميته إلى الاسم الأكثر عمومية s3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva).
  • وسم الإعدادات allow_experimental_variant/dynamic/json وenable_variant/dynamic/json بأنها متقادمة. والآن أصبحت الأنواع الثلاثة مفعّلة دائمًا دون شروط. #85934 (Pavel Kruglov).
  • دعم التصفية باستخدام سلسلة URL الكاملة (التوجيه full_url) في http_handlers (بما في ذلك المخطط وhost:port). #86155 (Azat Khuzhin).
  • إضافة إعداد جديد، allow_experimental_delta_lake_writes. #86180 (Kseniia Sumarokova).
  • إصلاح اكتشاف systemd في سكربت init.d (ما يصلح فحص “Install packages”). #86187 (Azat Khuzhin).
  • إضافة مقياس بُعدي جديد startup_scripts_failure_reason. هذا المقياس مطلوب للتمييز بين الأنواع المختلفة من الأخطاء التي تؤدي إلى فشل سكربتات بدء التشغيل. وعلى وجه الخصوص، نحتاج لأغراض التنبيه إلى التمييز بين الأخطاء العابرة (مثل MEMORY_LIMIT_EXCEEDED أو KEEPER_EXCEPTION) والأخطاء غير العابرة. #86202 (Miсhael Stetsyuk).
  • السماح بحذف دالة identity الخاصة بالـ partition في Iceberg table. #86314 (scanhex12).
  • إضافة إمكانية تفعيل تسجيل JSON لقناة محددة فقط؛ ولتحقيق ذلك، اضبط logger.formatting.channel على إحدى القيم syslog/console/errorlog/log. #86331 (Azat Khuzhin).
  • السماح باستخدام الأرقام الأصلية في WHERE. وهي مسموح بها بالفعل كوسيطات للدوال المنطقية. يبسّط ذلك تحسينات دفع عوامل التصفية ونقلها إلى PREWHERE. #86390 (Nikolai Kochetov).
  • إصلاح خطأ عند تنفيذ SYSTEM DROP REPLICA على catalog يحتوي على metadata تالفة. #86391 (Nikita Mikhaylov).
  • إضافة retries إضافية لفحص الوصول إلى القرص (skip_access_check = 0) في Azure، لأن تهيئة الوصول قد تستغرق وقتًا طويلًا نسبيًا. #86419 (Alexander Tokmakov).
  • جعل نافذة التقادم في الدوال timeSeries*() مفتوحة من اليسار ومغلقة من اليمين. #86588 (Vitaly Baranov).
  • إضافة أحداث profile جديدة FailedInternal*Query. #86627 (Shane Andrade).
  • إصلاح التعامل مع المستخدمين الذين تحتوي أسماؤهم على نقطة عند إضافتهم عبر config file. #86633 (Mikhail Koviazin).
  • إضافة مقياس غير متزامن لاستخدام الذاكرة في الاستعلامات (QueriesMemoryUsage وQueriesPeakMemoryUsage). #86669 (Azat Khuzhin).
  • يمكنك استخدام الخيار clickhouse-benchmark --precise للحصول على تقارير أكثر دقة عن QPS وغيرها من المقاييس لكل فترة. يساعد ذلك على الحصول على QPS متسق عندما تكون مدد الاستعلامات مقاربة لفاصل إعداد التقارير --delay D. #86684 (Sergei Trifonov).
  • جعل قيم nice لخيوط Linux قابلة للتهيئة لإسناد أولويات أعلى أو أقل لبعض الخيوط (merge/mutate، query، materialized view، zookeeper client). #86703 (Miсhael Stetsyuk).
  • إصلاح الخطأ المضلل “specified upload does not exist”، الذي يحدث عند فقدان الاستثناء الأصلي أثناء multipart upload بسبب race condition. #86725 (Julia Kartseva).
  • تقييد وصف query plan في استعلام EXPLAIN. لا يُحسب الوصف للاستعلامات الأخرى غير EXPLAIN. تمت إضافة الإعداد query_plan_max_step_description_length. #86741 (Nikolai Kochetov).
  • إضافة إمكانية ضبط الإشارات المعلّقة لمحاولة تجاوز CANNOT_CREATE_TIMER (لـ query profiler، ‏query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). وكذلك جمع SigQ من /proc/self/status لأغراض introspection (إذا كان ProcessSignalQueueSize قريبًا من ProcessSignalQueueLimit، فمن المرجح أن تظهر أخطاء CANNOT_CREATE_TIMER). #86760 (Azat Khuzhin).
  • تحسين أداء طلب RemoveRecursive في Keeper. #86789 (Antonio Andelic).
  • إزالة المسافات البيضاء الزائدة في PrettyJSONEachRow عند إخراج JSON type. #86819 (Pavel Kruglov).
  • نكتب الآن أحجام blobs الخاصة بـ prefix.path عند إزالة directory على القرص العادي القابل لإعادة الكتابة. #86908 (alesapin).
  • دعم Performance tests على مثيلات ClickHouse البعيدة، بما في ذلك ClickHouse Cloud. Usage example: tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs).
  • مراعاة حدود الذاكرة في بعض المواضع المعروفة بتخصيص كميات كبيرة من الذاكرة (>16MiB) (الفرز، async inserts، file log). #87035 (Azat Khuzhin).
  • إطلاق استثناء إذا لم يكن الإعداد network_compression_method يستخدم codec عامًا مدعومًا. #87097 (Robert Schulze).
  • أصبح system table system.query_cache يعيد الآن جميع cache entries في query result cache، بينما كان سابقًا يعيد فقط الإدخالات المشتركة أو الإدخالات غير المشتركة للمستخدم نفسه والدور نفسه. وهذا مقبول لأن الإدخالات غير المشتركة يُفترض ألا تكشف نتائج الاستعلامات، بينما يعيد system.query_cache سلاسل الاستعلامات. وهذا يجعل سلوك system table أكثر شبهًا بـ system.query_log. #87104 (Robert Schulze).
  • تمكين التقييم قصير الدارة للدالة parseDateTime. #87184 (Pavel Kruglov).
  • إضافة عمود جديد statistics إلى system.parts_columns. #87259 (Han Fei).

إصلاح خلل (سلوك غير صحيح ملحوظ للمستخدم في إصدار مستقر رسمي)

  • لا يجري التحقق من نتائج استعلامات ALTER إلا على العقدة البادئة في قواعد البيانات المكررة والجداول المكررة داخليًا. ويعالج هذا الحالات التي قد يعلق فيها استعلام ALTER مُعتمد بالفعل على عقد أخرى. #83849 (János Benjamin Antal).
  • تقييد عدد المهام من كل نوع في BackgroundSchedulePool. يجنّب ذلك الحالات التي تشغل فيها مهام من نوع واحد جميع الفتحات، بينما تبقى المهام الأخرى دون تنفيذ. كما يمنع حالات deadlocks عندما تنتظر المهام بعضها بعضًا. ويتحكم في ذلك إعداد الخادم background_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov).
  • إيقاف الجداول بشكل صحيح عند استعادة النسخة المتماثلة لقاعدة البيانات. وكان الإيقاف غير الصحيح يؤدي إلى LOGICAL_ERROR في بعض محركات الجداول أثناء استعادة النسخة المتماثلة لقاعدة البيانات. #84744 (Antonio Andelic).
  • التحقق من حقوق الوصول أثناء إنشاء تلميحات تصحيح الأخطاء المطبعية لاسم قاعدة البيانات. #85371 (Dmitry Novik).
    1. LowCardinality لأعمدة hive 2. ملء أعمدة hive قبل الأعمدة الافتراضية (مطلوب من أجل https://github.com/ClickHouse/ClickHouse/pull/81040) 3. ظهور LOGICAL_ERROR عند استخدام format فارغ لـ hive #85528 4. إصلاح التحقق في حالة كانت أعمدة partition في hive هي الأعمدة الوحيدة 5. التأكد من تحديد جميع أعمدة hive في المخطط 6. إصلاح جزئي لـ parallel_replicas_cluster مع hive 7. استخدام حاوية مرتبة في extractkeyValuePairs لأدوات hive المساعدة (مطلوب من أجل https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
  • منع التحسين غير الضروري للوسيطة الأولى في دوال IN، والذي كان يؤدي أحيانًا إلى حدوث خطأ عند استخدام تعيين المصفوفات. #85546 (Yakov Olkhovskiy).
  • لم تُعدَّل المطابقة بين معرّفات المصدر في iceberg وأسماء parquet بما يتوافق مع المخطط عند كتابة ملف parquet. يعالج طلب السحب هذا المخطط المرتبط بكل ملف بيانات في iceberg، وليس المخطط الحالي. #85829 (Daniil Ivanik).
  • إصلاح قراءة حجم الملف بشكل منفصل عن فتحه. يرتبط هذا بـ https://github.com/ClickHouse/ClickHouse/pull/33372، الذي أُضيف استجابةً لخلل في نوى Linux الأقدم من الإصدار 5.10. #85837 (Konstantin Bogdanov).
  • لم يعد ClickHouse Keeper يفشل في البدء على الأنظمة التي يكون فيها IPv6 معطّلًا على مستوى النواة (مثل RHEL مع ipv6.disable=1). وهو يحاول الآن الرجوع تلقائيًا إلى مستمع IPv4 إذا فشل مستمع IPv6 الأولي. #85901 (jskong1124).
  • يغلق طلب السحب هذا #77990. إضافة دعم TableFunctionRemote للنسخ المتماثلة المتوازية في globalJoin. #85929 (zoomxi).
  • إصلاح مؤشر NULL في orcschemareader::initializeifneeded(). يعالج طلب السحب هذا المشكلة التالية: #85292 ### توثيق للتغييرات الظاهرة للمستخدم. #85951 (yanglongwei).
  • إضافة تحقق للسماح بالاستعلامات الفرعية المترابطة في عبارة FROM فقط إذا كانت تستخدم أعمدة من الاستعلام الخارجي. يعالج #85469. ويعالج #85402. #85966 (Dmitry Novik).
  • إصلاح alter update لعمود يحتوي على عمود فرعي مستخدم في تعبير عمود مادي آخر. سابقًا، لم يكن العمود المادي الذي يحتوي تعبيره على عمود فرعي يُحدَّث بشكل صحيح. #85985 (Pavel Kruglov).
  • منع تعديل الأعمدة التي تُستخدم أعمدتها الفرعية في PK أو تعبير التقسيم. #86005 (Pavel Kruglov).
  • إصلاح قراءة الأعمدة الفرعية مع وضع المطابقة غير الافتراضي للعمود في DeltaLake storage. #86064 (Kseniia Sumarokova).
  • إصلاح استخدام القيم الافتراضية الخاطئة للمسار مع تلميح Enum داخل JSON. #86065 (Pavel Kruglov).
  • تحليل عنوان URL الخاص بـ DataLake hive catalog مع تنقية المدخلات. يغلق #86018. #86092 (rajat mohan).
  • إصلاح خطأ منطقي أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات. يغلق #86122. ويغلق https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
  • استخدام NonZeroUInt64 لـ logs_to_keep في DatabaseReplicatedSettings. #86142 (Tuan Pham Anh).
  • تم طرح Exception بواسطة استعلام FINAL مع skip index إذا كان الجدول (مثل ReplacingMergeTree) قد أُنشئ بالإعداد index_granularity_bytes = 0. وقد أُصلح هذا الاستثناء الآن. #86147 (Shankar Iyer).
  • يزيل سلوك UB ويُصلح مشكلات parsing في partition expression لـ Iceberg. #86166 (Daniil Ivanik).
  • إصلاح crash عند وجود blocks ثابتة وغير ثابتة في عملية INSERT واحدة. #86230 (Azat Khuzhin).
  • معالجة include من /etc/metrika.xml افتراضيًا عند إنشاء disks من SQL. #86232 (alekar).
  • إصلاح accurateCastOrNull/accurateCastOrDefault من String إلى JSON. #86240 (Pavel Kruglov).
  • دعم الأدلة التي لا تحتوي على ’/’ في engine الخاص بـ Iceberg. #86249 (scanhex12).
  • إصلاح crash في replaceRegex عند استخدام haystack من نوع FixedString وneedle فارغة. #86270 (Raúl Marín).
  • إصلاح crash أثناء ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
  • إصلاح column definer المفقود في system.tables. #86295 (Raúl Marín).
  • إصلاح cast من LowCardinality(Nullable(T)) إلى Dynamic. #86365 (Pavel Kruglov).
  • إصلاح logical error أثناء الكتابة إلى DeltaLake. يغلق #86175. #86367 (Kseniia Sumarokova).
  • إصلاح الخطأ 416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resource عند قراءة blobs فارغة من Azure blob storage للـ disk من نوع plain_rewritable. #86400 (Julia Kartseva).
  • إصلاح GROUP BY Nullable(JSON). #86410 (Pavel Kruglov).
  • إصلاح خطأ في Materialized Views: قد لا يعمل MV إذا أُنشئ ثم حُذف ثم أُنشئ مرة أخرى بالاسم نفسه. #86413 (Alexander Tokmakov).
  • الفشل إذا كانت جميع replicas غير متاحة عند القراءة من دوال *cluster. #86414 (Julian Maicher).
  • إصلاح تسرّب MergesMutationsMemoryTracking بسبب جداول Buffer وإصلاح query_views_log للبث من Kafka (وغيره). #86422 (Azat Khuzhin).
  • إصلاح عرض الجداول بعد حذف reference table الخاصة بـ alias storage. #86433 (RinChanNOW).
  • إصلاح غياب ترويسة chunk عند تمكين send_chunk_header واستدعاء UDF عبر بروتوكول HTTP. #86469 (Vladimir Cherkasov).
  • إصلاح احتمال حدوث توقف متبادل عند تمكين عمليات تفريغ profile الخاصة بـ jemalloc. #86473 (Azat Khuzhin).
  • إصلاح قراءة الأعمدة الفرعية في محرك الجدول DeltaLake. يغلق #86204. #86477 (Kseniia Sumarokova).
  • التعامل مع معرّف مضيف loopback بشكل صحيح لتجنب التصادم عند معالجة مهام DDL. #86479 (Tuan Pham Anh).
  • إصلاح detach/attach لجداول محرك قاعدة بيانات Postgres ذات الأعمدة الرقمية/العشرية. #86480 (Julian Maicher).
  • إصلاح استخدام ذاكرة غير مهيأة في getSubcolumnType. #86498 (Raúl Marín).
  • الدالتان searchAny وsearchAll عند استدعائهما بـ needles فارغة تُرجعان الآن true (أي “تطابق كل شيء”). سابقًا، كانتا تُرجعان false. (المشكلة #86300). #86500 (Elmi Ahmadov).
  • إصلاح الدالة timeSeriesResampleToGridWithStaleness() عندما لا تحتوي الفترة الأولى على أي قيمة. #86507 (Vitaly Baranov).
  • إصلاح التعطل الناتج عن ضبط merge_tree_min_read_task_size على 0. #86527 (yanglongwei).
  • أثناء القراءة، يُؤخذ التنسيق لكل ملف بيانات من البيانات الوصفية الخاصة بـ Iceberg (وكان يُؤخذ سابقًا من وسيطات الجدول). #86529 (Daniil Ivanik).
  • تجاهل الاستثناءات أثناء تفريغ السجل عند الإيقاف وجعل عملية الإيقاف أكثر أمانًا (لتجنب SIGSEGV). #86546 (Azat Khuzhin).
  • إصلاح تسبّب محرك قاعدة البيانات Backup في إطلاق استثناء عند تنفيذ استعلام على ملفات part ذات الحجم الصفري. #86563 (Max Justus Spransy).
  • إصلاح غياب ترويسة chunk عند تمكين send_chunk_header واستدعاء UDF عبر بروتوكول HTTP. #86606 (Vladimir Cherkasov).
  • إصلاح الخطأ المنطقي في S3Queue “Expected current processor to be equal to ”، الناجم عن انتهاء صلاحية جلسة Keeper. #86615 (Kseniia Sumarokova).
  • إصلاح أخطاء تتعلق بـ Nullable في عمليات insert وpruning. هذا يُغلق #86407. #86630 (scanhex12).
  • لا تُعطِّل cache نظام الملفات إذا كانت metadata cache الخاصة بـ Iceberg معطّلة. #86635 (Daniil Ivanik).
  • تم إصلاح الخطأ ‘Deadlock in Parquet::ReadManager (single-threaded)’ في Parquet reader v3. #86644 (Michael Kolupaev).
  • إصلاح دعم IPv6 في listen_host لـ ArrowFlight. #86664 (Vitaly Baranov).
  • إصلاح مشكلة الإيقاف في handler الخاص بـ ArrowFlight. يعالج هذا الطلب #86596. #86665 (Vitaly Baranov).
  • إصلاح distributed queries مع describe_compact_output=1. #86676 (Azat Khuzhin).
  • إصلاح parsing لتعريفات window وتطبيق query parameters. #86720 (Azat Khuzhin).
  • إصلاح الاستثناء Partition strategy wildcard can not be used without a '_partition_id' wildcard. عند إنشاء table باستخدام PARTITION BY ولكن بدون wildcard للقسم، وهو ما كان يعمل في الإصدارات السابقة لـ 25.8. يُغلق https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova).
  • إصلاح خطأ LogicalError عندما تحاول queries متوازية الحصول على قفل واحد. #86751 (Pervakov Grigorii).
  • إصلاح كتابة NULL إلى shared data في JSON ضمن input format من نوع RowBinary، مع إضافة بعض عمليات التحقق الإضافية في ColumnObject. #86812 (Pavel Kruglov).
  • إصلاح permutation فارغة لـ Tuple مع limit. #86828 (Pavel Kruglov).
  • عدم استخدام عقدة Keeper منفصلة لعقد المعالجة الدائمة. إصلاح لـ https://github.com/ClickHouse/ClickHouse/pull/85995. يُغلق #86406. #86841 (Kseniia Sumarokova).
  • إصلاح تعطل table الخاصة بمحرك TimeSeries عند إنشاء replica جديدة في Replicated Database. #86845 (Nikolay Degterinsky).
  • إصلاح الاستعلام عن system.distributed_ddl_queue في الحالات التي تفتقد فيها tasks بعض عقد Keeper. #86848 (Antonio Andelic).
  • إصلاح seek عند نهاية block غير المضغوط. #86906 (Pavel Kruglov).
  • معالجة الاستثناء الذي يُطرَح أثناء التنفيذ غير المتزامن لـ Iceberg Iterator. #86932 (Daniil Ivanik).
  • إصلاح حفظ إعدادات XML الكبيرة التي جرت معالجتها مسبقًا. #86934 (c-end).
  • إصلاح تعبئة حقل التاريخ في جدول system.iceberg_metadata_log. #86961 (Daniil Ivanik).
  • إصلاح إعادة الحساب اللانهائية لـ TTL مع WHERE. #86965 (Anton Popov).
  • إصلاح احتمال ظهور نتيجة غير صحيحة للدالة uniqExact مع المعدِّلين ROLLUP و CUBE. #87014 (Nikita Taranov).
  • إصلاح استنتاج مخطط الجدول باستخدام الدالة الجدولية url() عندما يكون الإعداد parallel_replicas_for_cluster_functions مضبوطًا على 1. #87029 (Konstantin Bogdanov).
  • تحويل ناتج PREWHERE بشكل صحيح بعد تقسيمه إلى عدة خطوات. #87040 (Antonio Andelic).
  • إصلاح lightweight updates مع عبارة ON CLUSTER. #87043 (Anton Popov).
  • إصلاح توافق بعض حالات الدوال التجميعية مع وسيط String. #87049 (Pavel Kruglov).
  • إصلاح مشكلة كانت تمنع تمرير اسم النموذج من OpenAI. #87100 (Kaushik Iska).
  • EmbeddedRocksDB: يجب أن يكون المسار داخل user_files. #87109 (Raúl Marín).
  • إصلاح جداول KeeperMap التي أُنشئت قبل 25.1 وكانت تترك البيانات في ZooKeeper بعد تنفيذ استعلام DROP. #87112 (Nikolay Degterinsky).
  • إصلاح قراءة معرّفات الحقول في maps و arrays من Parquet. #87136 (scanhex12).
  • إصلاح قراءة Array مع العمود الفرعي لأحجام المصفوفة في lazy materialization. #87139 (Pavel Kruglov).
  • إصلاح دالة CASE مع وسائط Dynamic. #87177 (Pavel Kruglov).
  • إصلاح قراءة Array فارغة من سلسلة فارغة في CSV. #87182 (Pavel Kruglov).
  • إصلاح احتمال ظهور نتيجة غير صحيحة لـ EXISTS غير المرتبط. كان هذا السلوك معطّلًا عند استخدام execute_exists_as_scalar_subquery=1، الذي أُدخل في https://github.com/ClickHouse/ClickHouse/pull/85481 ويؤثر في 25.8. يصلح #86415. #87207 (Nikolai Kochetov).
  • يُصدر خطأ إذا لم يكن iceberg_metadata_log مُهيأً وكان المستخدم يحاول الحصول على معلومات debug حول بيانات Iceberg الوصفية. كما يُصلح الوصول إلى nullptr. #87250 (Daniil Ivanik).

تحسينات البناء/الاختبار/التغليف

إصدار ClickHouse 25.8 LTS، 2025-08-28

تغيير غير متوافق مع الإصدارات السابقة

  • استنتاج Array(Dynamic) بدلًا من Tuple غير المُسمّاة للمصفوفات التي تحتوي على قيم من أنواع مختلفة في JSON. لاستخدام السلوك السابق، عطّل الإعداد input_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov).
  • نقل مقاييس زمن الاستجابة في S3 إلى المدرجات التكرارية لتحقيق التجانس والبساطة. #82305 (Miсhael Stetsyuk).
  • اشتراط استخدام العلامات المعكوسة حول المعرّفات التي تحتوي على نقاط في التعبيرات الافتراضية، لمنع تحليلها على أنها معرّفات مركّبة. #83162 (Pervakov Grigorii).
  • لا يكون التجسيد الكسول مفعّلًا إلا مع analyzer (وهو الإعداد الافتراضي)، وذلك لتجنّب صيانته بدون analyzer، والذي تبيّن من تجربتنا أنه يواجه بعض المشكلات (على سبيل المثال، عند استخدام indexHint() في الشروط). #83791 (Igor Nikonov).
  • كتابة قيم النوع Enum بصيغة BYTE_ARRAY مع النوع المنطقي ENUM في تنسيق إخراج Parquet افتراضيًا. #84169 (Pavel Kruglov).
  • تفعيل إعداد MergeTree write_marks_for_substreams_in_compact_parts افتراضيًا. ويحسّن ذلك بشكل كبير أداء قراءة الأعمدة الفرعية من أجزاء Compact المُنشأة حديثًا. ولن تتمكن الخوادم التي يقل إصدارها عن 25.5 من قراءة أجزاء Compact الجديدة. #84171 (Pavel Kruglov).
  • كانت القيمة الافتراضية السابقة لـ concurrent_threads_scheduler هي round_robin، وقد تبيّن أنها غير عادلة عند وجود عدد كبير من الاستعلامات أحادية الخيط (مثل INSERTs). يجعل هذا التغيير البديل الأكثر أمانًا fair_round_robin هو المُجدول الافتراضي. #84747 (Sergei Trifonov).
  • يدعم ClickHouse صياغة Heredoc على نمط PostgreSQL: $tag$ string contents... $tag$، والمعروفة أيضًا باسم السلاسل النصية المحاطة بعلامات الدولار. في الإصدارات السابقة، كانت القيود المفروضة على الوسوم أقل: إذ كان يمكن أن تحتوي على محارف عشوائية، بما في ذلك علامات الترقيم والمسافات البيضاء. وكان هذا يسبب التباسًا في التحليل مع المعرّفات التي يمكن أن تبدأ أيضًا بمحرف الدولار. وفي الوقت نفسه، لا يسمح PostgreSQL إلا بمحارف الكلمات داخل الوسوم. ولحل هذه المشكلة، نقصر الآن وسوم Heredoc على احتواء محارف الكلمات فقط. يغلق #84731. #84846 (Alexey Milovidov).
  • تم تحديث الدوال azureBlobStorage وdeltaLakeAzure وicebergAzure للتحقق بشكل صحيح من أذونات AZURE. وتتحقق الآن جميع الدوال ذات الصيغة العنقودية (دوال -Cluster) من الأذونات مقارنةً بنظيراتها غير العنقودية. بالإضافة إلى ذلك، تفرض الدالتان icebergLocal وdeltaLakeLocal الآن التحقق من أذونات FILE. #84938 (Nikita Mikhaylov).
  • تفعيل الإعداد allow_dynamic_metadata_for_data_lakes (إعداد على مستوى محرك الجدول) افتراضيًا. #85044 (Daniil Ivanik).
  • تعطيل وضع علامات اقتباس حول الأعداد الصحيحة ذات 64 بت في تنسيقات JSON افتراضيًا. #74079 (Pavel Kruglov)

ميزة جديدة

  • تمت إضافة دعم أساسي للهجة PromQL. لاستخدامها، عيّن dialect='promql' في clickhouse-client، ووجّهه إلى جدول TimeSeries باستخدام الإعداد promql_table_name='X'، ثم نفّذ استعلامات مثل rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]. بالإضافة إلى ذلك، يمكنك تضمين استعلام PromQL داخل SQL: SELECT * FROM prometheusQuery('up', ...);. وحتى الآن، لا يُدعَم سوى الدوال rate وdelta وincrease. ولا توجد operators أحادية/ثنائية، ولا واجهة برمجة تطبيقات HTTP. #75036 (Vitaly Baranov).
  • أصبح بإمكان توليد SQL المدعوم بالذكاء الاصطناعي الآن الاستدلال تلقائيًا من متغيرات البيئة ANTHROPIC_API_KEY وOPENAI_API_KEY إذا كانت متاحة، وذلك لتوفير خيار استخدام هذه الميزة دون أي إعداد. #83787 (Kaushik Iska).
  • تم تنفيذ دعم بروتوكول ArrowFlight RPC بإضافة table function جديدة هي arrowflight. #74184 (zakr600).
  • أصبحت جميع الجداول الآن تدعم العمود الافتراضي _table (وليس فقط الجداول التي تستخدم المحرك Merge)، وهو مفيد بشكل خاص للاستعلامات التي تتضمن UNION ALL. #63665 (Xiaozhe Yu).
  • أصبح من الممكن استخدام أي storage policy (أي object storage مثل S3) لأغراض external aggregation/sorting. #84734 (Azat Khuzhin).
  • تم تنفيذ authentication في AWS S3 باستخدام IAM role مُقدَّم صراحةً. كما تم تنفيذ OAuth لـ GCS. وكانت هذه الميزات متاحة حتى وقت قريب فقط في ClickHouse Cloud، وهي الآن مفتوحة المصدر. كما جرت مزامنة بعض interfaces، مثل serialization لمعاملات connection الخاصة بـ object storages. #84011 (Alexey Milovidov).
  • تمت إضافة دعم position deletes لمحرك الجداول Iceberg TableEngine. #83094 (Daniil Ivanik).
  • تمت إضافة دعم Iceberg Equality Deletes. #85843 (Han Fei).
  • دعم عمليات كتابة Iceberg عند الإنشاء. يغلق #83927. #83983 (Konstantin Vedernikov).
  • دعم Glue catalogs لعمليات الكتابة. #84136 (Konstantin Vedernikov).
  • دعم Iceberg REST catalogs لعمليات الكتابة. #84684 (Konstantin Vedernikov).
  • دمج جميع position delete files الخاصة بـ Iceberg في data files. سيؤدي ذلك إلى تقليل عدد ملفات Parquet وأحجامها في تخزين Iceberg. Syntax: OPTIMIZE TABLE table_name. #85250 (Konstantin Vedernikov).
  • دعم drop table لـ Iceberg (الإزالة من REST/Glue catalogs، بالإضافة إلى إزالة metadata الخاصة بالجدول). #85395 (Konstantin Vedernikov).
  • دعم alter delete mutations لـ Iceberg بتنسيق merge-on-read. #85549 (Konstantin Vedernikov).
  • دعم الكتابة إلى DeltaLake. يُغلق #79603. #85564 (Kseniia Sumarokova).
  • أُضيف الإعداد delta_lake_snapshot_version للسماح بقراءة إصدار snapshot محدد في table engine DeltaLake. #85295 (Kseniia Sumarokova).
  • كتابة المزيد من إحصاءات Iceberg (أحجام الأعمدة، والحدود الدنيا والعليا) في metadata (إدخالات manifest) من أجل pruning بأسلوب min-max. #85746 (Konstantin Vedernikov).
  • دعم إضافة/حذف/تعديل الأعمدة في Iceberg للأنواع البسيطة. #85769 (Konstantin Vedernikov).
  • Iceberg: دعم كتابة ملف version-hint. هذا يُغلق #85097. #85130 (Konstantin Vedernikov).
  • ستخزّن العروض Views التي ينشئها مستخدمون مؤقتون الآن نسخة من المستخدم الفعلي، ولن تعود تُبطَل بعد حذف المستخدم المؤقت. #84763 (pufit).
  • أصبح vector similarity index يدعم الآن binary quantization. ويقلّل binary quantization بشكل كبير من استهلاك الذاكرة ويُسرّع عملية بناء vector index (بفضل الحساب الأسرع للمسافة). كذلك، أصبح الإعداد الحالي vector_search_postfilter_multiplier قديمًا واستُبدل بإعداد أكثر عمومية: vector_search_index_fetch_multiplier. #85024 (Shankar Iyer).
  • السماح باستخدام معاملات key value في table engine/function s3 أو s3Cluster، على سبيل المثال s3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova).
  • system table جديد للاحتفاظ بالرسائل الواردة الخاطئة من engines مثل Kafka (“dead letter queue”). #68873 (Ilya Golshtein).
  • الأمر الجديد SYSTEM RESTORE DATABASE REPLICA لقواعد البيانات Replicated، على نحو مماثل للوظيفة الحالية الخاصة بالاستعادة في ReplicatedMergeTree. #73100 (Konstantin Morozov).
  • أصبح protocol الخاص بـ PostgreSQL يدعم الآن الأمر COPY. #74344 (Konstantin Vedernikov).
  • دعم client بلغة C# لبروتوكول mysql. هذا يُغلق #83992. #84397 (Konstantin Vedernikov).
  • إضافة دعم reads وwrites بأسلوب hive partition. #76802 (Arthur Passos).
  • إضافة system table باسم zookeeper_connection_log لتخزين معلومات تاريخية حول اتصالات ZooKeeper. #79494 (János Benjamin Antal).
  • يفعّل إعداد الخادم cpu_slot_preemption جدولة CPU الاستباقية لأحمال العمل ويضمن تخصيصًا عادلًا وفق مبدأ max-min لوقت CPU بين أحمال العمل. كما أُضيفت إعدادات workload جديدة لخنق CPU: max_cpus وmax_cpu_share وmax_burst_cpu_seconds. مزيد من التفاصيل: https://clickhouse.com/docs/operations/workload-scheduling#cpu&#95;scheduling. #80879 (Sergei Trifonov).
  • يُسقِط اتصال TCP بعد عدد queries مُعدّ مسبقًا أو عند بلوغ حد زمني معيّن. ويكون هذا مفيدًا لتحقيق توزيع أكثر تجانسًا للاتصالات بين عُقد cluster الواقعة خلف load balancer. يحل #68000. #81472 (Kenny Sun).
  • أصبحت parallel replicas تدعم الآن استخدام projections في queries. #82659. #82807 (zoomxi).
  • تمت إضافة دعم DESCRIBE SELECT بالإضافة إلى DESCRIBE (SELECT …). #82947 (Yarik Briukhovetskyi).
  • فرض اتصال آمن لـ mysql_port وpostgresql_port. #82962 (tiandiwonder).
  • يمكنك الآن إجراء lookups لمفاتيح JSON بدون حساسية لحالة الأحرف باستخدام JSONExtractCaseInsensitive (والمتغيرات الأخرى من JSONExtract). #83770 (Alistair Evans).
  • تقديم table ‏system.completions. يُغلق #81889. #83833 (|2ustam).
  • تمت إضافة function جديدة nowInBlock64. Example على الاستخدام: SELECT nowInBlock64(6) تُرجِع 2025-07-29 17:09:37.775725. #84178 (Halersson Paris).
  • إضافة extra_credentials إلى AzureBlobStorage للمصادقة باستخدام client_id وtenant_id. #84235 (Pablo Marcos).
  • تمت إضافة function ‏dateTimeToUUIDv7 لتحويل قيمة DateTime إلى UUIDv7. Example على الاستخدام: SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56')) تُرجِع 0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich).
  • دالتا aggregate ‏timeSeriesDerivToGrid وtimeSeriesPredictLinearToGrid لإعادة أخذ عينات data إلى شبكة زمنية يحدّدها start timestamp وend timestamp وstep؛ وتحسبان deriv وpredict_linear الشبيهتين بـ PromQL، على التوالي. #84328 (Stephen Chi).
  • إضافة دالتين جديدتين من TimeSeries: - timeSeriesRange(start_timestamp, end_timestamp, step), - timeSeriesFromGrid(start_timestamp, end_timestamp, step, values),. #85435 (Vitaly Baranov).
  • تمت إضافة صياغة جديدة: GRANT READ ON S3('s3://foo/.*') TO user. #84503 (pufit).
  • تمت إضافة Hash كتنسيق إخراج جديد. إذ يحسب قيمة hash واحدة لجميع الأعمدة والصفوف في النتيجة. ويُفيد ذلك في حساب “بصمة” للنتيجة، على سبيل المثال، في حالات الاستخدام التي يشكّل فيها نقل البيانات عنق الزجاجة. مثال: يُرجع SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hash القيمة e5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
  • تمت إضافة إمكانية إعداد watches مخصّصة في استعلامات Keeper Multi. #84964 (Mikhail Artemenko).
  • تمت إضافة الخيار --max-concurrency إلى أداة clickhouse-benchmark، وهو يفعّل وضعًا تزداد فيه أعداد الاستعلامات المتوازية تدريجيًا. #85623 (Sergei Trifonov).
  • دعم المقاييس المجمّعة جزئيًا. #85328 (Mikhail Artemenko).

ميزة تجريبية

  • تم تفعيل دعم الاستعلامات الفرعية المترابطة افتراضيًا، ولم يعد تجريبيًا. #85107 (Dmitry Novik).
  • تمت ترقية كتالوجات بحيرة البيانات Unity وGlue وRest وHive Metastore من الحالة التجريبية إلى بيتا. #85848 (Melvyn Peignon).
  • تمت ترقية التحديثات الخفيفة وعمليات الحذف من الحالة التجريبية إلى بيتا.
  • أصبح البحث التقريبي في المتجهات باستخدام فهارس تشابه المتجهات متاحًا الآن ضمن GA. #85888 (Robert Schulze).
  • محرك جدول Ytsaurus ودالة الجدول. #77606 (MikhailBurdukov).
  • سابقًا، كانت بيانات الفهرس النصي تُقسَّم إلى عدة مقاطع (وكان الحجم الافتراضي لكل مقطع 256 MiB). قد يساعد ذلك في تقليل استهلاك الذاكرة أثناء بناء الفهرس النصي، لكنه يزيد من المساحة المطلوبة على القرص ويرفع زمن استجابة الاستعلام. #84590 (Elmi Ahmadov).

تحسين الأداء

  • تنفيذ جديد لقارئ Parquet. وهو أسرع عمومًا ويدعم pushdown لتصفية البيانات على مستوى الصفحة وPREWHERE. وهو حاليًا تجريبي. استخدم الإعداد input_format_parquet_use_native_reader_v3 لتمكينه. #82789 (Michael Kolupaev).
  • استُبدل ناقل HTTP الرسمي في مكتبة Azure بتنفيذنا الخاص لعميل HTTP لخدمة Azure Blob Storage. وأُضيفت عدة إعدادات لهذا العميل تحاكي إعدادات S3. كما أُضيفت مهلات اتصال صارمة لكلٍّ من Azure وS3. وتحسّنت إمكانات الاستبطان لأحداث profile والمقاييس في Azure. العميل الجديد مفعّل افتراضيًا، ويوفّر زمن استجابة أفضل بكثير للاستعلامات الباردة على Azure Blob Storage. ويمكن الرجوع إلى عميل Curl القديم عبر ضبط azure_sdk_use_native_client=false. #83294 (alesapin). كان التنفيذ الرسمي السابق لعميل Azure غير مناسب لبيئات الإنتاج بسبب طفرات زمن الاستجابة الشديدة، التي تراوحت من خمس ثوانٍ إلى عدة دقائق. لقد تخلّصنا من ذلك التنفيذ السيئ جدًا، ونحن فخورون جدًا بذلك.
  • تُعالَج الفهارس بترتيب تصاعدي بحسب حجم الملف. ويمنح الترتيب النهائي للفهارس أولوية لفهارس minmax والفهارس المتجهية، نظرًا إلى البساطة والانتقائية على الترتيب، ثم للفهارس الصغيرة بعد ذلك. وضمن فهارس minmax/المتجهات، تُفضَّل أيضًا الفهارس الأصغر. #84094 (Maruth Goyal).
  • تمكين إعداد MergeTree ‏write_marks_for_substreams_in_compact_parts افتراضيًا. ويُحسّن ذلك بشكل كبير أداء قراءة الأعمدة الفرعية من أجزاء Compact المُنشأة حديثًا. ولن تتمكن الخوادم ذات الإصدارات الأقدم من 25.5 من قراءة أجزاء Compact الجديدة. #84171 (Pavel Kruglov).
  • محرك الجداول azureBlobStorage: تخزين رموز مصادقة الهوية المُدارة مؤقتًا وإعادة استخدامها عند الإمكان لتجنّب تقييد المعدل. #79860 (Nick Blakely).
  • ستُحوَّل عمليات JOIN من نوع ALL LEFT/INNER تلقائيًا إلى RightAny إذا كان الجانب الأيمن محددًا وظيفيًا بواسطة أعمدة مفتاح join (أي إن جميع الصفوف لها قيم فريدة لمفتاح join). #84010 (Nikita Taranov).
  • إضافة max_joined_block_size_bytes إلى جانب max_joined_block_size_rows للحد من استخدام الذاكرة في عمليات JOIN ذات الأعمدة الثقيلة. #83869 (Nikolai Kochetov).
  • أُضيف منطق جديد (يتحكم فيه الإعداد enable_producing_buckets_out_of_order_in_aggregation، وهو مفعّل افتراضيًا) يتيح إرسال بعض buckets خارج الترتيب أثناء التجميع الموفّر للذاكرة. وعندما تستغرق بعض buckets الخاصة بالتجميع وقتًا أطول بكثير من غيرها في الدمج، فإنه يحسّن الأداء من خلال السماح للعقدة initiator بدمج buckets ذات المعرّفات الأعلى في أثناء ذلك. والجانب السلبي هو احتمال زيادة استخدام الذاكرة (ومن المفترض ألا تكون كبيرة). #80179 (Nikita Taranov).
  • تقديم الإعداد optimize_rewrite_regexp_functions (مفعّل افتراضيًا)، الذي يتيح للمُحسّن إعادة كتابة بعض استدعاءات replaceRegexpAll وreplaceRegexpOne وextract إلى صيغ أبسط وأكثر كفاءة عند اكتشاف أنماط تعبير نمطي محددة. (issue #81981). #81992 (Amos Bird).
  • معالجة max_joined_block_rows خارج الحلقة الرئيسية في hash JOIN. أداء أفضل قليلًا لـ ALL JOIN. #83216 (Nikolai Kochetov).
  • معالجة فهارس min-max ذات granularity الأعلى أولًا. يُغلق #75381. #83798 (Maruth Goyal).
  • جعل دوال التجميع النافذية DISTINCT تعمل بزمن خطي، وإصلاح خطأ في sumDistinct. يغلق #79792. يغلق #52253. #79859 (Nihal Z. Miaji).
  • تُنجز استعلامات البحث المتجهي التي تستخدم فهرس تشابه المتجهات بزمن استجابة أقل، بفضل تقليل عمليات القراءة من التخزين وخفض استخدام CPU. #83803 (Shankar Iyer).
  • استخدام تجزئة Rendezvous لتحسين محلية cache في توزيع workload بين parallel replicas. #82511 (Anton Ivashkin).
  • تنفيذ addManyDefaults لمعدِّلات If، بحيث أصبحت aggregate functions التي تستخدم معدِّلات If أسرع الآن. #83870 (Raúl Marín).
  • حساب Key column المُسلسَل بأسلوب عمودي عند التجميع حسب عدة أعمدة string أو number. #83884 (李扬).
  • إزالة عمليات المسح الكامل في الحالات التي يؤدي فيها index analysis إلى ranges فارغة عند قراءة parallel replicas. #84971 (Eduard Karacharov).
  • تجربة -falign-functions=64 في محاولة لجعل اختبارات الأداء أكثر استقرارًا. #83920 (Azat Khuzhin).
  • أصبح فهرس bloom filter يُستخدم الآن مع conditions مثل has([c1, c2, ...], column)، حيث لا يكون column من النوع Array. ويحسّن ذلك أداء هذه queries، لتصبح بكفاءة العامل IN. #83945 (Doron David).
  • تقليل استدعاءات memcpy غير الضرورية في CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
  • تحسين largestTriangleThreeBuckets عبر إزالة البيانات المؤقتة. #84479 (Alexey Milovidov).
  • تحسين إلغاء تسلسل string عبر تبسيط الشيفرة. يغلق #38564. #84561 (Alexey Milovidov).
  • إصلاح حساب الحد الأدنى لـ task size الخاصة بـ parallel replicas. #84752 (Nikita Taranov).
  • تحسين أداء تطبيق patch parts في وضع Join. #85040 (Anton Popov).
  • إزالة البايت الصفري. يُغلق #85062. تم إصلاح بعض الأخطاء الطفيفة. لم تكن الدالتان structureToProtobufSchema وstructureToCapnProtoSchema تضيفان بايت الإنهاء الصفري على نحو صحيح، وكانتا تستخدمان سطرًا جديدًا بدلًا منه. وكان هذا يؤدي إلى غياب سطر جديد في المخرجات، وقد يتسبب في تجاوز سعة المخزن المؤقت عند استخدام دوال أخرى تعتمد على البايت الصفري (مثل logTrace وdemangle وextractURLParameter وtoStringCutToZero وencrypt/decrypt). كما أن dictionary layout ‏regexp_tree لم يكن يدعم معالجة السلاسل النصية التي تحتوي على بايتات صفرية. وكانت الدالة formatRowNoNewline، عند استدعائها بتنسيق Values أو بأي تنسيق آخر لا يحتوي على سطر جديد في نهاية الصفوف، تقطع آخر محرف من المخرجات بالخطأ. وكانت الدالة stem تحتوي على خطأ متعلقًا بسلامة الاستثناءات قد يؤدي إلى تسرّب في الذاكرة في حالات نادرة جدًا. وكانت الدالة initcap تعمل بشكل غير صحيح مع وسائط FixedString: إذ لم تكن تتعرّف على بداية الكلمة في أول السلسلة إذا كانت السلسلة السابقة في كتلة قد انتهت بمحرف كلمة. كما تم إصلاح ثغرة أمنية في تنسيق Apache ORC، كان من الممكن أن تؤدي إلى كشف ذاكرة غير مهيأة. وتغيّر سلوك الدالة replaceRegexpAll والاسم المستعار المقابل لها REGEXP_REPLACE: إذ أصبح بإمكانها الآن إجراء تطابق فارغ في نهاية السلسلة حتى إذا كان التطابق السابق قد عالج السلسلة بالكامل، كما في حالتي ^a*|a*$ أو ^|.* — وهذا يتوافق مع دلالات JavaScript وPerl وPython وPHP وRuby، لكنه يختلف عن دلالة PostgreSQL. كما جرى تبسيط تنفيذ العديد من الدوال وتحسينه. وكانت وثائق عدة دوال غير صحيحة، وقد صُحِّحت الآن. ضع في اعتبارك أن خرج byteSize لأعمدة String والأنواع المعقدة المؤلفة من أعمدة String قد تغيّر (من 9 بايتات لكل سلسلة فارغة إلى 8 بايتات لكل سلسلة فارغة)، وهذا أمر طبيعي. #85063 (Alexey Milovidov).
  • تحسين materialization للثوابت في الحالات التي لا نُجري فيها هذا الـ materialization إلا لإرجاع صف واحد. #85071 (Alexey Milovidov).
  • تحسين معالجة الملفات المتوازية باستخدام backend ‏delta-kernel-rs. #85642 (Azat Khuzhin).
  • تمت إضافة إعداد جديد هو enable_add_distinct_to_in_subqueries. عند تفعيله، سيضيف ClickHouse تلقائيًا DISTINCT إلى الاستعلامات الفرعية في عبارات IN للاستعلامات الموزعة. ويمكن أن يقلل ذلك بشكل كبير من حجم الجداول المؤقتة المنقولة بين الشظايا ويحسّن كفاءة الشبكة. ملاحظة: هذه مفاضلة — فبينما ينخفض النقل عبر الشبكة، يلزم تنفيذ عمل دمج إضافي (إزالة التكرار) على كل عقدة. فعّل هذا الإعداد عندما يكون النقل عبر الشبكة هو عنق الزجاجة وتكون كلفة الدمج مقبولة. #81908 (fhw12345).
  • تقليل الحمل الإضافي لتتبّع ذاكرة الاستعلامات في user-defined functions التنفيذية. #83929 (Eduard Karacharov).
  • تنفيذ filtering داخلي في delta-kernel-rs (الإحصاءات وpartition pruning) ضمن التخزين DeltaLake. #84006 (Kseniia Sumarokova).
  • تعطيل skipping indexes التي تعتمد على أعمدة جرى تحديثها on-the-fly أو بواسطة patch parts، ولكن بدرجة أكثر دقة. الآن، لا تُستخدم skipping indexes إلا في الأجزاء المتأثرة بـ on-the-fly mutations أو patch parts؛ أما سابقًا فكانت هذه الفهارس تُعطَّل لجميع الأجزاء. #84241 (Anton Popov).
  • تخصيص الحد الأدنى من الذاكرة المطلوبة لـ encrypted_buffer في named collections المشفّرة. #84432 (Pablo Marcos).
  • تحسين دعم Bloom filter indexes ‏(العادية وngram وtoken) بحيث يمكن استخدامها عندما تكون الوسيطة الأولى Array ثابتة (المجموعة) وتكون الثانية هي العمود المفهرس (المجموعة الفرعية)، مما يتيح تنفيذ الاستعلامات بكفاءة أكبر. #84700 (Doron David).
  • تقليل التزاحم على قفل التخزين في Keeper. #84732 (Antonio Andelic).
  • إضافة الدعم المفقود لـ read_in_order_use_virtual_row مع WHERE. يتيح ذلك تخطي قراءة المزيد من الأجزاء للاستعلامات التي تحتوي على عوامل تصفية لم تُدفَع بالكامل إلى PREWHERE. #84835 (Nikolai Kochetov).
  • يتيح التكرار غير المتزامن على الكائنات من جدول Iceberg دون تخزين الكائنات لكل ملف بيانات بشكل صريح. #85369 (Daniil Ivanik).
  • تنفيذ EXISTS غير المرتبط كاستعلام فرعي scalar. يتيح ذلك استخدام التخزين المؤقت للاستعلامات الفرعية scalar واختزال النتيجة إلى ثابت، مما يفيد الفهارس. ولأغراض التوافق، أُضيف الإعداد الجديد execute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov).

تحسينات

  • أُضيفت إعدادات database_replicated لتحديد القيم الافتراضية لـ DatabaseReplicatedSettings. وإذا لم يكن الإعداد موجودًا في استعلام إنشاء قاعدة بيانات Replicated، فستُستخدَم القيمة من هذا الإعداد. #85127 (Tuan Pham Anh).
  • أصبح بالإمكان تغيير حجم أعمدة الجدول في واجهة الويب (play). #84012 (Doron David).
  • دعم ملف .metadata.json مضغوط عبر الإعداد iceberg_metadata_compression_method. وهو يدعم جميع أساليب الضغط في ClickHouse. يُغلق هذا #84895. #85196 (Konstantin Vedernikov).
  • عرض عدد النطاقات المطلوب قراءتها في ناتج EXPLAIN indexes = 1. #79938 (Christoph Wurm).
  • إضافة إعدادات لتعيين حجم block ضغط ORC، مع تحديث قيمته الافتراضية من 64KB إلى 256KB للحفاظ على الاتساق مع spark أو hive. #80602 (李扬).
  • إضافة الملف columns_substreams.txt إلى Wide part لتتبّع جميع التيارات الفرعية المخزّنة في الجزء. ويساعد ذلك على تتبّع التيارات الديناميكية في نوعَي JSON وDynamic، وبالتالي تجنّب قراءة عيّنة من هذه الأعمدة للحصول على قائمة التيارات الديناميكية (على سبيل المثال، لحساب أحجام الأعمدة). كما أصبحت جميع التيارات الديناميكية تظهر الآن في system.parts_columns. #81091 (Pavel Kruglov).
  • إضافة علامة CLI ‏--show&#95;secrets إلى clickhouse format لإخفاء البيانات الحساسة افتراضيًا. #81524 (Nikolai Ryzhov).
  • أصبحت طلبات القراءة والكتابة في S3 خاضعة لتحديد المعدل على مستوى مقبس HTTP (بدلًا من طلبات S3 كاملة)، لتجنّب المشكلات المرتبطة بتحديد المعدل في max_remote_read_network_bandwidth_for_server وmax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov).
  • السماح بخلط قواعد ترتيب مختلفة للعمود نفسه في نوافذ مختلفة (لدوال النوافذ). #82877 (Yakov Olkhovskiy).
  • إضافة أداة لمحاكاة محددات الدمج وتصوّرها ومقارنتها. #71496 (Sergei Trifonov).
  • إضافة دعم دوال الجداول remote* مع النسخ المتماثلة المتوازية إذا جرى توفير cluster في الوسيط address_expression. كما يُصلح هذا #73295. #82904 (Igor Nikonov).
  • ضبط جميع رسائل السجل الخاصة بكتابة ملفات النسخ الاحتياطي على TRACE. #82907 (Hans Krutzer).
  • قد يُنسِّق منسّق SQL الدوال المعرّفة من قبل المستخدم ذات الأسماء غير المعتادة وcodecs بشكل غير متّسق. يُغلق هذا #83092. #83644 (Alexey Milovidov).
  • يمكنك الآن استخدام نوعَي Time وTime64 داخل نوع JSON. #83784 (Yarik Briukhovetskyi).
  • تستخدم عمليات joins مع parallel replicas الآن الخطوة المنطقية الخاصة بـ join. إذا واجهت أي مشكلات في استعلامات join التي تستخدم parallel replicas، فجرّب SET query_plan_use_new_logical_join_step=0 وأبلِغ عن issue. #83801 (Vladimir Cherkasov).
  • إصلاح التوافق مع cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova).
  • دعم تغيير إعدادات insert الخاصة بـ mv على مستوى جدول S3Queue. أُضيفت إعدادات جديدة على مستوى S3Queue: ‏min_insert_block_size_rows_for_materialized_views و min_insert_block_size_bytes_for_materialized_views. افتراضيًا، ستُستخدم إعدادات مستوى profile، وستتجاوزها إعدادات مستوى S3Queue. #83971 (Kseniia Sumarokova).
  • تمت إضافة حدث profile باسم MutationAffectedRowsUpperBound يعرض عدد الصفوف المتأثرة في mutation (على سبيل المثال، العدد الإجمالي للصفوف التي تستوفي الشرط في استعلام ALTER UPDATE أو ALTER DELETE). #83978 (Anton Popov).
  • استخدام معلومات cgroup (عند الاقتضاء، أي إذا كانت memory_worker_use_cgroup و cgroups متاحة) لضبط memory tracker ‏(memory_worker_correct_memory_tracker). #83981 (Azat Khuzhin).
  • MongoDB: parsing ضمني للسلاسل النصية إلى أنواع رقمية. سابقًا، إذا تم تلقي قيمة نصية من source في MongoDB لعمود رقمي في ClickHouse table، كان يتم طرح استثناء. الآن، يحاول engine تحليل القيمة الرقمية من السلسلة النصية تلقائيًا. يُغلق #81167. #84069 (Kirill Nikiforov).
  • إبراز مجموعات الأرقام في تنسيقات Pretty للأرقام من النوع Nullable. #84070 (Alexey Milovidov).
  • Dashboard: لن تتجاوز التلميحة حدود الحاوية من الأعلى. #84072 (Alexey Milovidov).
  • أصبحت النقاط في dashboard أفضل مظهرًا قليلًا. #84074 (Alexey Milovidov).
  • يحتوي dashboard الآن على favicon أفضل قليلًا. #84076 (Alexey Milovidov).
  • Web UI: إتاحة الفرصة للمتصفحات لحفظ password. كما سيتذكر أيضًا قيم URL. #84087 (Alexey Milovidov).
  • إضافة دعم لتطبيق ACL إضافي على عقد Keeper محددة باستخدام config ‏apply_to_children. #84137 (Antonio Andelic).
  • إصلاح استخدام serialization لمميّزات Variant من نوع “compact” في MergeTree. سابقًا، لم يكن يُستخدم في بعض الحالات التي كان يمكن استخدامه فيها. #84141 (Pavel Kruglov).
  • تمت إضافة server setting، logs_to_keep، إلى إعدادات Replicated database، مما يتيح تغيير parameter الافتراضي logs_to_keep لقواعد بيانات Replicated. تؤدي القيم الأقل إلى تقليل عدد ZNodes (خصوصًا إذا كان هناك العديد من قواعد البيانات)، بينما تسمح القيم الأعلى لـ replica مفقودة باللحاق بعد فترة زمنية أطول. #84183 (Alexey Khatskevich).
  • أُضيف الإعداد json_type_escape_dots_in_keys لتهريب النقاط في مفاتيح JSON أثناء تحليل JSON type. يكون هذا الإعداد معطّلًا افتراضيًا. #84207 (Pavel Kruglov).
  • التحقق مما إذا كان الاتصال قد أُلغي قبل التحقق من EOF، لمنع القراءة من اتصال مغلق. يعالج #83893. #84227 (Raufs Dunamalijevs).
  • تحسين طفيف في ألوان تحديد النص في واجهة الويب. يظهر الفرق بشكل ملحوظ فقط في خلايا الجداول المحددة في الوضع الداكن. في الإصدارات السابقة، لم يكن التباين بين النص وخلفية التحديد كافيًا. #84258 (Alexey Milovidov).
  • تحسين التعامل مع إيقاف تشغيل الخادم بالنسبة إلى اتصالات client من خلال تبسيط عمليات التحقق الداخلية. #84312 (Raufs Dunamalijevs).
  • أُضيف الإعداد delta_lake_enable_expression_visitor_logging لتعطيل سجلات expression visitor، إذ قد تكون مطولة أكثر من اللازم حتى عند مستوى سجل الاختبار أثناء debugging. #84315 (Kseniia Sumarokova).
  • أصبحت المقاييس على مستوى Cgroup والمقاييس على مستوى النظام تُبلّغ الآن معًا. وتحمل المقاييس على مستوى Cgroup الأسماء CGroup<Metric>، بينما تحمل المقاييس على مستوى نظام التشغيل (المجمّعة من procfs) الأسماء OS<Metric>. #84317 (Nikita Taranov).
  • تحسين طفيف في المخططات في واجهة الويب. ليس كثيرًا، لكنه أفضل. #84326 (Alexey Milovidov).
  • تغيير القيمة الافتراضية لإعداد قاعدة البيانات Replicated max_retries_before_automatic_recovery إلى 10، لتسريع recovery في بعض الحالات. #84369 (Alexander Tokmakov).
  • إصلاح تنسيق العبارة CREATE USER مع query parameters (أي CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin).
  • إضافة backup_restore_s3_retry_initial_backoff_ms وbackup_restore_s3_retry_max_backoff_ms وbackup_restore_s3_retry_jitter_factor لتهيئة strategy الخاصة بـ retry وbackoff في S3 المستخدمة أثناء عمليات النسخ الاحتياطي والاستعادة. #84421 (Julia Kartseva).
  • إصلاح نمط ordered في S3Queue: الخروج مبكرًا إذا طُلِب shutdown. #84463 (Kseniia Sumarokova).
  • دعم الكتابة إلى Iceberg بحيث يمكن القراءة من pyiceberg. #84466 (Konstantin Vedernikov).
  • السماح بتحويل نوع قيم Set عند دفع عوامل التصفية IN / GLOBAL IN إلى مستوى المفاتيح الأساسية لتخزين KeyValue (مثل EmbeddedRocksDB وKeeperMap). #84515 (Eduard Karacharov).
  • ترقية chdig إلى 25.7.1. #84521 (Azat Khuzhin).
  • أصبحت الأخطاء منخفضة المستوى أثناء تنفيذ UDF تؤدي الآن إلى الفشل برمز الخطأ UDF_EXECUTION_FAILED، بينما كان يمكن سابقًا إرجاع رموز أخطاء مختلفة. #84547 (Xu Jia).
  • إضافة الأمر get_acl إلى KeeperClient. #84641 (Antonio Andelic).
  • إضافة snapshot version إلى محركات جداول بحيرة البيانات. #84659 (Pete Hampton).
  • إضافة مقياس متعدد الأبعاد لحجم ConcurrentBoundedQueue، مع تصنيفه بحسب نوع queue (أي الغرض من queue) ومعرّف queue (أي معرّف مُولَّد عشوائيًا للمثيل الحالي من queue). #84675 (Miсhael Stetsyuk).
  • يوفّر الجدول system.columns الآن column كاسم مستعار للعمود name الموجود مسبقًا. #84695 (Yunchi Pang).
  • إضافة MergeTree setting جديد باسم search_orphaned_parts_drives لتقييد نطاق البحث عن parts، مثلًا بحسب الأقراص ذات البيانات الوصفية المحلية. #84710 (Ilya Golshtein).
  • إضافة 4LW جديد في Keeper، وهو lgrq، لتبديل تسجيل الطلبات الواردة. #84719 (Antonio Andelic).
  • أصبحت مطابقة forward_headers في المصادقة الخارجية تتم بدون حساسية لحالة الأحرف. #84737 (ingodwerust).
  • تدعم الأداة encrypt_decrypt الآن اتصالات ZooKeeper المشفّرة. #84764 (Roman Vasin).
  • إضافة عمود format string إلى system.errors. هذا العمود مطلوب للتجميع حسب نوع error نفسه في قواعد التنبيه. #84776 (Miсhael Stetsyuk).
  • تم تحديث clickhouse-format ليقبل --highlight كاسم مستعار لـ --hilite. - وتم تحديث clickhouse-client ليقبل --hilite كاسم مستعار لـ --highlight. - وتم تحديث توثيق clickhouse-format ليعكس هذا التغيير. #84806 (Rishabh Bhardwaj).
  • إصلاح قراءة Iceberg باستخدام معرّفات field للـ types المعقّدة. #84821 (Konstantin Vedernikov).
  • إضافة setting جديد باسم backup_slow_all_threads_after_retryable_s3_error لتقليل الضغط على S3 أثناء موجات retry الناتجة عن أخطاء مثل SlowDown، وذلك بإبطاء جميع threads بمجرد رصد error واحد قابل لإعادة المحاولة. #84854 (Julia Kartseva).
  • تخطّي إنشاء الجدول المؤقت القديم وإعادة تسميته لتعريفات RMV DDLs غير القابلة لـ append في قواعد البيانات Replicated. #84858 (Tuan Pham Anh).
  • تقييد حجم cache الخاص بـ Keeper log entry بعدد entries باستخدام keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold و keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
  • السماح باستخدام simdjson على معماريات غير مدعومة (وكان هذا يؤدي سابقًا إلى أخطاء CANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin).
  • التسجيل غير المتزامن: جعل الحدود قابلة للضبط وإضافة إمكانات فحص داخلي. #85105 (Raúl Marín).
  • اجمع جميع الكائنات المُزالة لتنفيذ عملية إزالة واحدة في تخزين الكائنات. #85316 (Mikhail Artemenko).
  • إن التنفيذ الحالي لملفات الحذف الموضعي في Iceberg يُبقي جميع البيانات في RAM. وقد يكون ذلك مكلفًا جدًا إذا كانت ملفات الحذف الموضعي كبيرة، وهذا يحدث كثيرًا. أما تنفيذي فيُبقي فقط آخر مجموعة صفوف من ملفات حذف Parquet في RAM، ما يقلّل التكلفة بشكل كبير. #85329 (Konstantin Vedernikov).
  • ‏chdig: إصلاح الآثار المتبقية على الشاشة، وإصلاح crash بعد تعديل query في المحرر، والبحث عن editor في path، والتحديث إلى 25.8.1. #85341 (Azat Khuzhin).
  • إضافة partition_columns_in_data_file المفقود إلى تهيئة Azure. #85373 (Arthur Passos).
  • السماح بخطوة صفرية في الدوال timeSeries*ToGrid. وهذا جزء من #75036. #85390 (Vitaly Baranov).
  • تمت إضافة العلامة show_data_lake_catalogs_in_system_tables للتحكم في إضافة جداول بحيرة البيانات إلى system.tables. يعالج هذا #85384. #85411 (Smita Kulkarni).
  • تمت إضافة دعم لتوسيع الماكرو في remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
  • سيبدو الذكاء الاصطناعي في clickhouse-client أفضل قليلًا. #85447 (Alexey Milovidov).
  • تفعيل trace_log.symbolize افتراضيًا لعمليات النشر القديمة. #85456 (Azat Khuzhin).
  • دعم حلّ المزيد من حالات المعرّفات المركبة. وعلى وجه الخصوص، يحسّن ذلك توافق ARRAY JOIN مع المحلل القديم. وتم تقديم إعداد جديد analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested للإبقاء على السلوك القديم. #85492 (Nikolai Kochetov).
  • تجاهل UNKNOWN_DATABASE أثناء الحصول على أحجام أعمدة الجداول لأجل system.columns. #85632 (Azat Khuzhin).
  • تمت إضافة حدّ (إعداد الجدول max_uncompressed_bytes_in_patches) لإجمالي البايتات غير المضغوطة في أجزاء التصحيح. ويمنع ذلك التباطؤ الكبير في استعلامات SELECT بعد التحديثات خفيفة الوزن، كما يمنع إساءة الاستخدام المحتملة للتحديثات خفيفة الوزن. #85641 (Anton Popov).
  • أضف عمود parameter إلى system.grants لتحديد نوع المصدر في GRANT READ/WRITE ومحرك الجدول في GRANT TABLE ENGINE. #85643 (MikhailBurdukov).
  • إصلاح تحليل الفاصلة الختامية في أعمدة استعلام CREATE DICTIONARY بعد عمود يحتوي على parameters، على سبيل المثال Decimal(8). يُغلق #85586. #85653 (Nikolay Degterinsky).
  • إضافة دعم للمصفوفات الداخلية في الدالة nested. #85719 (Nikolai Kochetov).
  • أصبحت جميع تخصيصات الذاكرة التي تجريها المكتبات الخارجية مرئية الآن لمتتبع الذاكرة في ClickHouse، ويجري احتسابها بشكل صحيح. وقد يؤدي ذلك إلى “زيادة” استخدام الذاكرة المُبلّغ عنه لبعض الاستعلامات، أو إلى حدوث إخفاقات مع MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov).

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

  • يُصلح طلب السحب هذا آلية تحديد metadata عند الاستعلام عن جداول Iceberg عبر REST Catalog. … #80562 (Saurabh Kumar Ojha).
  • إصلاح markReplicasActive في DDLWorker و DatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh).
  • إصلاح التراجع عن عمود Dynamic عند فشل التحليل. #82169 (Pavel Kruglov).
  • إذا استُدعيت الدالة trim بمدخلات ثابتة بالكامل، فإنها تُنتج الآن سلسلة خرج ثابتة. (خطأ #78796). #82900 (Robert Schulze).
  • إصلاح خطأ منطقي يتعلق بتكرار الاستعلامات الفرعية عند تمكين optimize_syntax_fuse_functions، مع إغلاق #75511. #83300 (Vladimir Cherkasov).
  • إصلاح النتائج غير الصحيحة للاستعلامات التي تتضمن clause ‏WHERE ... IN (<subquery>) عند تمكين query condition cache (الإعداد use_query_condition_cache). #83445 (LB7666).
  • تاريخيًا، لم تكن الدالة gcs تتطلب أي صلاحيات لاستخدامها. أما الآن، فستتحقق من permission ‏GRANT READ ON S3 عند الاستخدام. إغلاق #70567. #83503 (pufit).
  • تخطّي العُقد غير المتاحة أثناء INSERT SELECT من s3Cluster() إلى MergeTree مكرّر. #83676 (Igor Nikonov).
  • إصلاح الكتابة مع append (في MergeTree المستخدم للمعاملات Experimental) مع metadata types ‏plain_rewritable/plain، إذ كان يتم تجاهلها سابقًا تمامًا. #83695 (Tuan Pham Anh).
  • إخفاء تفاصيل authentication الخاصة بـ Avro schema registry حتى لا تظهر للمستخدم أو في السجلات. #83713 (János Benjamin Antal).
  • إصلاح المشكلة التي تحدث عندما يُنشأ جدول MergeTree باستخدام add_minmax_index_for_numeric_columns=1 أو add_minmax_index_for_string_columns=1، ثم يُجرى materialize للفهرس لاحقًا أثناء عملية ALTER، مما يمنع Replicated database من التهيئة بشكل صحيح على replica جديدة. #83751 (Nikolay Degterinsky).
  • إصلاح مُخرِج Parquet الذي كان يُنتج إحصاءات غير صحيحة (الحد الأدنى/الحد الأقصى) لأنواع Decimal. #83754 (Michael Kolupaev).
  • إصلاح فرز قيم NaN في النوع LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii).
  • عند restoring من نسخة احتياطية، قد لا يكون المستخدم المعرِّف قد نُسخ احتياطيًا، مما يؤدي إلى تعطل النسخة الاحتياطية بالكامل. ولحل ذلك، نؤجل التحقق من permissions عند إنشاء الجدول الهدف أثناء restore، ولا نتحقق منها إلا أثناء runtime. #83818 (pufit).
  • إصلاح تعطل في client بسبب ترك connection في حالة انقطاع بعد تنفيذ INSERT غير صالح. #83842 (Azat Khuzhin).
  • السماح بالإشارة إلى أي جدول في وسيطة view(...) الخاصة بالدالة الجدولية remote عند تمكين المحلّل. يعالج #78717. ويعالج #79377. #83844 (Dmitry Novik).
  • أصبحت استدعاءات Onprogress في jsoneachrowwithprogress متزامنة مع الإنهاء. #83879 (Sema Checherinda).
  • يغلق هذا #81303. #83892 (Konstantin Vedernikov).
  • إصلاح colorSRGBToOKLCH/colorOKLCHToSRGB عند المزج بين الوسائط الثابتة وغير الثابتة. #83906 (Azat Khuzhin).
  • إصلاح كتابة مسارات JSON ذات القيم NULL بتنسيق RowBinary. #83923 (Pavel Kruglov).
  • تم إصلاح تجاوز السعة للقيم الكبيرة (>2106-02-07) عند التحويل من Date إلى DateTime64. #83982 (Yarik Briukhovetskyi).
  • تطبيق filesystem_prefetches_limit دائمًا (وليس فقط من MergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
  • إصلاح خلل نادر قد يؤدي فيه استعلام MATERIALIZE COLUMN إلى ظهور ملفات غير متوقعة في checksums.txt وينتهي في النهاية إلى فصل أجزاء البيانات. #84007 (alesapin).
  • إصلاح الخطأ المنطقي Expected single dictionary argument for function عند تنفيذ JOIN على شرط عدم مساواة، عندما يكون أحد الأعمدة من النوع LowCardinality والآخر ثابتًا. يُغلق #81779. #84019 (Alexey Milovidov).
  • إصلاح تعطل clickhouse client عند استخدامه في الوضع التفاعلي مع تمييز بناء الجملة. #84025 (Bharat Nallan).
  • إصلاح النتائج غير الصحيحة عند استخدام ذاكرة التخزين المؤقت لشروط الاستعلام مع CTEs التكرارية (المشكلة #81506). #84026 (zhongyuankai).
  • التعامل مع الاستثناءات بشكل صحيح أثناء التحديث الدوري للأجزاء. #84083 (Azat Khuzhin).
  • إصلاح دمج المرشّح في شرط JOIN في الحالات التي تكون فيها معاملات المساواة من أنواع مختلفة أو تشير إلى ثوابت. يعالج #83432. #84145 (Dmitry Novik).
  • إصلاح تعطل نادر في ClickHouse عندما يحتوي الجدول على projection، وتكون lightweight_mutation_projection_mode = 'rebuild'، وينفّذ المستخدم حذفًا خفيفًا يحذف ALL الصفوف من أي block في الجدول. #84158 (alesapin).
  • إصلاح حالة تعطل تبادلي ناتجة عن خيط التحقق من الإلغاء في الخلفية. #84203 (Antonio Andelic).
  • إصلاح التحليل التكراري اللانهائي لتعريفات WINDOW غير الصالحة. يُصلح هذا #83131. #84242 (Dmitry Novik).
  • تم إصلاح خلل كان يتسبب في ترميز Bech32 وفك ترميزه بشكل غير صحيح. ولم يُكتشف هذا الخلل أصلًا لأن تنفيذًا للخوارزمية عبر الإنترنت استُخدم للاختبار كان يعاني من المشكلة نفسها. #84257 (George Larionov).
  • تم إصلاح الإنشاء غير الصحيح لـ tuples الفارغة في الدالة array(). يُصلح هذا #84202. #84297 (Amos Bird).
  • إصلاح LOGICAL_ERROR في الاستعلامات التي تستخدم parallel replicas وتحتوي على عدة عمليات INNER join تتبعها عملية RIGHT join. لا تستخدم parallel replicas مع مثل هذه الاستعلامات. #84299 (Vladimir Cherkasov).
  • سابقًا، لم تكن فهارس set تراعي الأعمدة من النوع Nullable عند التحقق مما إذا كانت granules تستوفي المرشح (المشكلة #75485). #84305 (Elmi Ahmadov).
  • أصبح ClickHouse الآن يقرأ الجداول من Glue Catalog عندما يكون نوع الجدول محددًا بأحرف صغيرة. #84316 (alesapin).
  • لا تحاول استبدال table functions ببديلها الخاص بالـ cluster عند وجود JOIN أو subquery. #84335 (Konstantin Bogdanov).
  • إصلاح استخدام logger في IAccessStorage. #84365 (Konstantin Bogdanov).
  • تم إصلاح logical error في lightweight updates التي تُحدّث جميع أعمدة الجدول. #84380 (Anton Popov).
  • أصبح من الممكن الآن تطبيق codec DoubleDelta على الأعمدة ذات النوع الرقمي فقط. وعلى وجه الخصوص، لم يعد بالإمكان ضغط أعمدة FixedString باستخدام DoubleDelta. (يُصلح #80220). #84383 (Jimmy Aguilar Mena).
  • لم تكن المقارنة مع قيمة nan تستخدم ranges الصحيحة أثناء تقييم فهرس MinMax. #84386 (Elmi Ahmadov).
  • إصلاح قراءة Variant column مع lazy materialization. #84400 (Pavel Kruglov).
  • اجعل zoutofmemory خطأً عتاديًا، وإلا فسيؤدي إلى logical error. راجع https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei).
  • تم إصلاح تعطل server عندما يحاول مستخدم أُنشئ باستخدام no_password تسجيل الدخول بعد تغيير server setting allow_no_password إلى 0. #84426 (Shankar Iyer).
  • إصلاح عمليات الكتابة غير المرتبة إلى changelog الخاص بـ Keeper. سابقًا، كان من الممكن وجود عمليات كتابة جارية إلى changelog، لكن التراجع قد يتسبب في تغيير متزامن لملف الوجهة. وكان هذا يؤدي إلى logs غير متسقة، مع احتمال فقدان البيانات. #84434 (Antonio Andelic).
  • الآن، إذا أُزيلت كل قيم TTL من الجدول، فلن ينفّذ MergeTree أي شيء متعلقًا بـ TTL. #84441 (alesapin).
  • كان يُسمح بتنفيذ INSERT SELECT موزّع ومتوازٍ مع LIMIT، وهذا غير صحيح لأنه يؤدي إلى تكرار البيانات في الجدول الهدف. #84477 (Igor Nikonov).
  • إصلاح تقليم الملفات باستخدام عمود افتراضي في بحيرات البيانات. #84520 (Kseniia Sumarokova).
  • إصلاح تسرّبات في Keeper مع تخزين rocksdb (لم تكن iterators تُدمَّر). #84523 (Azat Khuzhin).
  • إصلاح عدم تحقّق ALTER MODIFY ORDER BY من أعمدة TTL في مفاتيح الفرز. تُرفض أعمدة TTL الآن بشكل صحيح عند استخدامها في بنود ORDER BY أثناء عمليات ALTER، مما يمنع احتمال تلف الجدول. #84536 (xiaohuanlin).
  • تغيير القيمة السابقة للإصدار 25.5 من allow_experimental_delta_kernel_rs إلى false لأغراض التوافق. #84587 (Kseniia Sumarokova).
  • لم يعد يأخذ schema من manifest files، بل يخزّن schemas ذات الصلة لكل snapshot بشكل مستقل. ويستنتج schema المناسبة لكل ملف بيانات من snapshot المقابلة له. كان السلوك السابق يخالف مواصفة Iceberg بالنسبة إلى entries في manifest files ذات الحالة existing. #84588 (Daniil Ivanik).
  • إصلاح مشكلة كان فيها إعداد Keeper rotate_log_storage_interval = 0 يتسبب في تعطل ClickHouse. (المشكلة #83975). #84637 (George Larionov).
  • إصلاح logical error من S3Queue “Table is already registered”. يُغلق #84433. ظهر الخلل بعد https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
  • قفل ‘mutex’ عند الحصول على zookeeper من ‘view’ في RefreshTask. #84699 (Tuan Pham Anh).
  • إصلاح الخطأ CORRUPTED_DATA عند استخدام الأعمدة lazy مع الفرز الخارجي. #84738 (János Benjamin Antal).
  • إصلاح تقليم الأعمدة مع delta-kernel في التخزين DeltaLake. يُغلق #84543. #84745 (Kseniia Sumarokova).
  • تحديث credentials في delta-kernel في التخزين DeltaLake. #84751 (Kseniia Sumarokova).
  • إصلاح بدء backups داخلية غير ضرورية بعد مشكلات في الاتصال. #84755 (Vitaly Baranov).
  • إصلاح مشكلة كان فيها الاستعلام عن source بعيد بطيء الاستجابة قد يؤدي إلى تجاوز حدود المتجه. #84820 (George Larionov).
  • لم تعد tokenizers ngram و no_op تتسبب في تعطل text index ‏(التجريبي) عند وجود tokens إدخال فارغة. #84849 (Robert Schulze).
  • تم إصلاح lightweight updates للجداول التي تستخدم محرّكي ReplacingMergeTree وCollapsingMergeTree. #84851 (Anton Popov).
  • تخزين جميع Settings بشكل صحيح في metadata الجدول للجداول التي تستخدم محرّك object queue. #84860 (Antonio Andelic).
  • إصلاح العدد الإجمالي لـ watches التي يعيدها Keeper. #84890 (Antonio Andelic).
  • تم إصلاح lightweight updates للجداول ذات محرّك ReplicatedMergeTree التي أُنشئت على خوادم بإصدار أقل من 25.7. #84933 (Anton Popov).
  • تم إصلاح lightweight updates للجداول ذات محرّك MergeTree غير المكرّر بعد تنفيذ query من نوع ALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov).
  • إصلاح توليد أسماء الأعمدة للقيم الحرفية Boolean بحيث تستخدم “true”/“false” بدلًا من “1”/“0”، مما يمنع تعارض أسماء الأعمدة بين القيم الحرفية Boolean والقيم الصحيحة في queries. #84945 (xiaohuanlin).
  • إصلاح انحراف تتبّع الذاكرة الناتج عن background schedule pool وexecutor. #84946 (Azat Khuzhin).
  • إصلاح مشكلات محتملة في عدم دقة الفرز في محرّك الجداول Merge. #85025 (Xiaozhe Yu).
  • تنفيذ واجهات API المفقودة لـ DiskEncrypted. #85028 (Azat Khuzhin).
  • إضافة فحص للتحقق مما إذا كان subquery مترابطًا يُستخدم في سياق موزّع لتجنّب حدوث crash. يُصلح #82205. #85030 (Dmitry Novik).
  • لم يعد Iceberg يحاول تخزين snapshot version ذي الصلة مؤقتًا بين select queries، وأصبح يحاول دائمًا resolve الـ snapshot كما هو فعليًا. وكانت المحاولة السابقة لتخزين snapshot الخاص بـ Iceberg مؤقتًا قد أدت إلى مشكلات عند استخدام Iceberg table مع time travel. #85038 (Daniil Ivanik).
  • تم إصلاح التحرير المزدوج للذاكرة في AzureIteratorAsync. #85064 (Nikita Taranov).
  • تحسين رسالة error عند محاولة إنشاء user معرّف باستخدام JWT. #85072 (Konstantin Bogdanov).
  • تم إصلاح تنظيف patch parts في ReplicatedMergeTree. سابقًا، كان من الممكن ألا تكون نتيجة lightweight update مرئية مؤقتًا على replica إلى أن يتم تنزيل part مدموج أو mutated يقوم بـ materialize لـ patch parts من replica أخرى. #85121 (Anton Popov).
  • إصلاح الخطأ illegal_type_of_argument في mv عندما تكون types مختلفة. #85135 (Sema Checherinda).
  • إصلاح segfault في تنفيذ delta-kernel. #85160 (Kseniia Sumarokova).
  • إصلاح استعادة replicated databases عندما يستغرق نقل ملف metadata وقتًا طويلًا. #85177 (Tuan Pham Anh).
  • إصلاح Not-ready Set في IN (subquery) داخل إعداد additional_table_filters expression. #85210 (Nikolai Kochetov).
  • إزالة استدعاءات getStatus() غير الضرورية أثناء استعلامات SYSTEM DROP REPLICA. ويُصلح ذلك الحالة التي يُحذف فيها جدول في الخلفية ويُطرَح الاستثناء Shutdown for storage is called. #85220 (Nikolay Degterinsky).
  • إصلاح حالة تسابق في تنفيذ delta-kernel لمحرك DeltaLake. #85221 (Kseniia Sumarokova).
  • إصلاح قراءة البيانات المقسّمة إلى partition عند تعطيل delta-kernel في محرك DeltaLake. وقد كان هذا معطّلًا في الإصدار 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova).
  • إضافة عمليات التحقق المفقودة من طول اسم الجدول في استعلامات CREATE OR REPLACE و RENAME. #85326 (Michael Kolupaev).
  • إصلاح إنشاء RMV على نسخة متماثلة جديدة من قاعدة بيانات Replicated إذا جرى حذف DEFINER. #85327 (Nikolay Degterinsky).
  • إصلاح الكتابة إلى Iceberg للأنواع المعقّدة. #85330 (Konstantin Vedernikov).
  • كتابة الحدَّين الأدنى والأقصى غير مدعومة للأنواع المعقّدة. #85332 (Konstantin Vedernikov).
  • إصلاح خطأ منطقي أثناء القراءة من دوال تخزين الكائنات عبر جدول Distributed أو table function بعيدة. إصلاحات: #84658، و#85173، و#52022. #85359 (alesapin).
  • إصلاح النسخ الاحتياطي للأجزاء التي تحتوي على projections تالفة. #85362 (Antonio Andelic).
  • منع استخدام العمود _part_offset في projection ضمن الإصدارات إلى أن يستقر. #85372 (Sema Checherinda).
  • إصلاح تعطل وفساد البيانات أثناء ALTER UPDATE لـ JSON. #85383 (Pavel Kruglov).
  • قد تُنتج الاستعلامات التي تستخدم parallel replicas وتستفيد من تحسين القراءة العكسية in order نتائج غير صحيحة. #85406 (Igor Nikonov).
  • إصلاح احتمال حدوث UB (سلوك غير معرّف/أعطال) في حالة MEMORY_LIMIT_EXCEEDED أثناء deserialization لـ String. #85440 (Azat Khuzhin).
  • إصلاح عدم صحة المقاييس KafkaAssignedPartitions و KafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
  • إصلاح التقليل من تقدير إحصائية البايتات المعالَجة عند استخدام PREWHERE (صراحةً أو تلقائيًا). #85495 (Michael Kolupaev).
  • إصلاح شرط الإنهاء المبكر لإبطاء معدل طلبات S3: أصبح يكفي أن تكون إحدى القيمتين s3_slow_all_threads_after_network_error أو backup_slow_all_threads_after_retryable_s3_error مفعّلة لتطبيق سلوك الإبطاء عند توقّف جميع الخيوط بسبب خطأ قابل لإعادة المحاولة، بدلًا من اشتراط تفعيلهِما معًا. #85505 (Julia Kartseva).
  • يصلح هذا التغيير تحليل metadata عند الاستعلام عن جداول Iceberg عبر REST catalog. … #85531 (Saurabh Kumar Ojha).
  • إصلاح تعطل نادر في asynchronous inserts عند تغيير الإعدادين log_comment أو insert_deduplication_token. #85540 (Anton Popov).
  • كانت معلمات مثل date_time_input_format تُتجاهل عند استخدام HTTP مع multipart/form-data. #85570 (Sema Checherinda).
  • إصلاح إخفاء secrets في table functions ‏icebergS3Cluster و icebergAzureCluster. #85658 (MikhailBurdukov).
  • إصلاح فقدان الدقة في JSONExtract عند تحويل أرقام JSON إلى Decimal types. وتحافظ قيم JSON الرقمية الآن على تمثيلها العشري الدقيق، ما يتجنب أخطاء التقريب الخاصة بالأعداد ذات الفاصلة العائمة. #85665 (ssive7b).
  • إصلاح LOGICAL_ERROR عند استخدام COMMENT COLUMN IF EXISTS ضمن statement ‏ALTER نفسه بعد DROP COLUMN. وأصبحت clause ‏IF EXISTS الآن تتجاوز عملية التعليق بشكل صحيح إذا كان العمود قد أُزيل ضمن statement نفسه. #85688 (xiaohuanlin).
  • إصلاح قراءة العدد من cache في delta lake. #85704 (Kseniia Sumarokova).
  • إصلاح segfault نادر في CoalescingMergeTree عند التعامل مع Strings كبيرة. هذا يغلق #84582. #85709 (Konstantin Vedernikov).
  • تحديث timestamp الخاص بـ metadata في عمليات الكتابة إلى Iceberg. #85711 (Konstantin Vedernikov).
  • كان استخدام distributed_depth كمؤشر على *Cluster function غير صحيح، وقد يؤدي إلى ازدواجية البيانات؛ استخدم client_info.collaborate_with_initiator بدلًا من ذلك. #85734 (Konstantin Bogdanov).
  • يتعذر على Spark قراءة position delete files. #85762 (Konstantin Vedernikov).
  • إصلاح send_logs_source_regexp (بعد إعادة هيكلة logging غير المتزامن في #85105). #85797 (Azat Khuzhin).
  • إصلاح احتمال عدم الاتساق في Dictionaries التي تستخدم update_field عند حدوث أخطاء MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin).
  • دعم الثوابت العامة من عبارة WITH في عملية INSERT SELECT الموزعة المتوازية عند استخدام جدول الوجهة Distributed. في السابق، كان يمكن أن ينتج عن الاستعلام الخطأ Unknown expression identifier. #85811 (Nikolai Kochetov).
  • إخفاء بيانات الاعتماد لـ deltaLakeAzure وdeltaLakeCluster وicebergS3Cluster وicebergAzureCluster. #85889 (Julian Maicher).
  • إصلاح خطأ منطقي عند محاولة CREATE ... AS (SELECT * FROM s3Cluster(...)) مع DatabaseReplicated. #85904 (Konstantin Bogdanov).
  • إصلاح طلبات HTTP التي تُجريها دالة الجدول url() بحيث تُدرج أرقام المنافذ بشكل صحيح في ترويسة Host عند الوصول إلى منافذ غير قياسية. يحل هذا حالات فشل المصادقة عند استخدام عناوين URL موقّعة مسبقًا مع خدمات متوافقة مع S3 مثل MinIO التي تعمل على منافذ مخصصة، وهو أمر شائع في بيئات التطوير. (إصلاح #85898). #85921 (Tom Quist).
  • سيتجاهل Unity Catalog الآن المخططات ذات أنواع البيانات غير المعتادة في حالة الجداول غير التابعة لـ Delta. إصلاح #85699. #85950 (alesapin).
  • إصلاح قابلية الحقول لاستخدام القيم NULL في Iceberg. #85977 (Konstantin Vedernikov).
  • إصلاح خلل في تعافي قاعدة البيانات Replicated: إذا كان اسم الجدول يحتوي على الرمز %، فقد يُعاد إنشاء الجدول باسم مختلف أثناء التعافي. #85987 (Alexander Tokmakov).
  • إصلاح فشل الاستعادة من النسخ الاحتياطية بسبب الخطأ BACKUP_ENTRY_NOT_FOUND عند استعادة جدول Memory فارغ. #86012 (Julia Kartseva).
  • إضافة عمليات تحقق من sharding&#95;key أثناء تنفيذ ALTER على جدول Distributed. في السابق، كان ALTER غير الصحيح يؤدي إلى إتلاف تعريف الجدول والتسبب في إعادة تشغيل الخادم. #86015 (Nikolay Degterinsky).
  • عدم إنشاء ملف حذف فارغ في Iceberg. #86061 (Konstantin Vedernikov).
  • إصلاح مشكلة تسببت فيها قيم الإعدادات الكبيرة في تعطّل جداول S3Queue وإعادة تشغيل النسخة المتماثلة. #86074 (Nikolay Degterinsky).

تحسينات البناء/الاختبار/التغليف

  • استخدام الأقراص المشفّرة لاختبارات S3 افتراضيًا. #59898 (Nikita Mikhaylov).
  • استخدام الملف التنفيذي clickhouse في اختبارات التكامل للحصول على رموز تصحيح غير مُزالة. #83779 (Mikhail f. Shiryaev).
  • ترقية إصدار libxml2 الداخلي من 2.14.4 إلى 2.14.5. #84230 (Robert Schulze).
  • ترقية إصدار curl الداخلي من 8.14.0 إلى 8.15.0. #84231 (Robert Schulze).
  • نستخدم الآن ذاكرة أقل للتخزين المؤقت في CI، ولدينا اختبارات أفضل لآلية الإخلاء. #84676 (alesapin).

إصدار ClickHouse 25.7، 2025-07-24

تغيير غير متوافق مع الإصدارات السابقة

  • تغييرات على الدالة extractKeyValuePairs: أُضيفت وسيطة جديدة unexpected_quoting_character_strategy تتحكم في ما يحدث عند العثور، بشكل غير متوقع، على quoting_character أثناء قراءة مفتاح أو قيمة غير محاطين بعلامات اقتباس. يمكن أن تكون القيمة إحدى القيم التالية: invalid أو accept أو promote. تؤدي invalid إلى تجاهل المفتاح والعودة إلى حالة انتظار المفتاح. وتتعامل accept معه على أنه جزء من المفتاح. أما promote فتتجاهل الحرف السابق وتبدأ التحليل على أنه مفتاح محاط بعلامات اقتباس. بالإضافة إلى ذلك، بعد تحليل قيمة محاطة بعلامات اقتباس، لا يُحلَّل المفتاح التالي إلا إذا وُجد فاصل بين الأزواج. #80657 (Arthur Passos).
  • دعم المطابقة ذات الطول الصفري في الدالة countMatches. يمكن للمستخدمين الذين يرغبون في الاحتفاظ بالسلوك السابق تفعيل الإعداد count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • استخدام محددات المعدل على مستوى الخادم للعمليات المحلية (max_local_read_bandwidth_for_server وmax_local_write_bandwidth_for_server) والبعيدة (max_remote_read_network_bandwidth_for_server وmax_remote_write_network_bandwidth_for_server) عند إنشاء النسخ الاحتياطية، بالإضافة إلى إعدادات الخادم المخصصة لها (max_backup_bandwidth_for_server وmax_mutations_bandwidth_for_server وmax_merges_bandwidth_for_server). #81753 (Sergei Trifonov).
  • منع إنشاء جدول بدون أعمدة قابلة للإدراج. #81835 (Pervakov Grigorii).
  • جعل دوال cluster تعمل بالتوازي على مستوى الملفات داخل الأرشيفات. في الإصدارات السابقة، كان الأرشيف بالكامل (مثل zip أو tar أو 7z) يُعد وحدة عمل واحدة. أُضيف إعداد جديد cluster_function_process_archive_on_multiple_nodes، وقيمته الافتراضية true. وإذا ضُبط على true، فإنه يحسن أداء معالجة الأرشيفات في دوال cluster. ويجب ضبطه على false للحفاظ على التوافق وتجنب الأخطاء أثناء الترقية إلى 25.7+ عند استخدام دوال cluster مع الأرشيفات في الإصدارات الأقدم. #82355 (Kseniia Sumarokova).
  • كان الاستعلام SYSTEM RESTART REPLICAS يؤدي إلى إيقاظ الجداول في قاعدة البيانات Lazy، حتى من دون امتلاك صلاحية وصول إلى تلك القاعدة، وكان ذلك يحدث بينما كانت هذه الجداول تُحذف بالتزامن. ملاحظة: الآن لن يعيد SYSTEM RESTART REPLICAS تشغيل replicas إلا في قواعد البيانات التي لديك فيها صلاحية SHOW TABLES، وهذا هو السلوك الطبيعي. #83321 (Alexey Milovidov).

ميزة جديدة

  • أُضيف دعم lightweight updates لجداول عائلة MergeTree. ويمكن استخدام lightweight updates عبر صياغة جديدة: UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. كما أُضيف تنفيذ lightweight deletes من خلال lightweight updates. ويمكن تفعيل ذلك بضبط الإعداد lightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov).
  • دعم الأنواع المعقدة في schema evolution لـ Iceberg. #73714 (Konstantin Vedernikov).
  • إضافة دعم لعمليات INSERT في جداول Iceberg. #82692 (Konstantin Vedernikov).
  • قراءة data files في Iceberg باستخدام معرّفات الحقول. وهذا يحسّن التوافق مع Iceberg، إذ يمكن إعادة تسمية الحقول في metadata مع ربطها بأسماء مختلفة في Parquet files الأساسية. وهذا يُغلق #83065. #83653 (Konstantin Vedernikov).
  • يدعم ClickHouse الآن ملفات metadata.json المضغوطة الخاصة بـ Iceberg. يُصلح هذا #70874. #81451 (alesapin).
  • دعم TimestampTZ في Glue catalog. وهذا يُغلق #81654. #83132 (Konstantin Vedernikov).
  • إضافة توليد SQL بالذكاء الاصطناعي إلى clickhouse client. يمكنك الآن توليد استعلامات SQL من أوصاف باللغة الطبيعية عبر إضافة السابقة ?? إلى الاستعلام. ويدعم ذلك موفري OpenAI وAnthropic مع schema discovery تلقائيًا. #83314 (Kaushik Iska).
  • إضافة دالة لكتابة geo types بتنسيق WKB. #82935 (Konstantin Vedernikov).
  • استُحدث نوعا وصول جديدان: READ و WRITE للمصادر، مع إهمال جميع أنواع الوصول السابقة المتعلقة بالمصادر. سابقًا كان GRANT S3 ON *.* TO user، أما الآن فأصبح: GRANT READ, WRITE ON S3 TO user. ويتيح هذا أيضًا فصل أذونات READ و WRITE للمصادر، على سبيل المثال: GRANT READ ON * TO user، و GRANT WRITE ON S3 TO user. وتخضع هذه الميزة للإعداد access_control_improvements.enable_read_write_grants وهي معطّلة افتراضيًا. #73659 (pufit).
  • NumericIndexedVector: بنية بيانات متجهية جديدة تعتمد على ضغط bit-sliced وRoaring-bitmap، إلى جانب أكثر من 20 دالة للبناء والتحليل والحسابات النقطية. ويمكنها تقليل مساحة التخزين وتسريع joins وfilters وaggregations على البيانات sparse. وهي تنفّذ #70582 وورقة “Large-Scale Metric Computation in Online Controlled Experiment Platform” لـ T. Xiong وY. Wang من VLDB 2024. #74193 (FriendLey).
  • أصبح workload setting max_waiting_queries مدعومًا الآن. ويمكن استخدامه لتقييد حجم طابور الاستعلامات. وإذا جرى بلوغ الحد، فستُنهي جميع الاستعلامات اللاحقة مع الخطأ SERVER_OVERLOADED. #81250 (Oleg Doronin).
  • إضافة الدوال المالية: financialInternalRateOfReturnExtended (XIRR)، وfinancialInternalRateOfReturn (IRR)، وfinancialNetPresentValueExtended (XNPV)، وfinancialNetPresentValue (NPV). #81599 (Joanna Hulboj).
  • إضافة الدالتين الجيومكانيتين polygonsIntersectCartesian وpolygonsIntersectSpherical للتحقق مما إذا كان هناك تقاطع بين مضلعين. #81882 (Paul Lamb).
  • دعم العمود الافتراضي _part_granule_offset في جداول MergeTree-family. يشير هذا العمود إلى الفهرس الصفري لـ granule/mark الذي ينتمي إليه كل صف داخل data part الخاص به. يعالج هذا #79572. #82341 (Amos Bird). #82341 (Amos Bird)
  • إضافة دالتي SQL colorSRGBToOkLCH وcolorOkLCHToSRGB لتحويل الألوان بين فضاءَي الألوان sRGB وOkLCH. #83679 (Fgrtue).
  • السماح باستخدام المعاملات في استعلامات CREATE USER لأسماء المستخدمين. #81387 (Diskein).
  • يحتوي جدول system.formats الآن على معلومات موسعة حول التنسيقات، مثل نوع محتوى HTTP، وإمكانات استنتاج المخطط، وغير ذلك. #81505 (Alexey Milovidov).

ميزة تجريبية

  • أُضيفت الدالتان searchAny وsearchAll كأداتين عامتي الغرض للبحث في الفهارس النصية. #80641 (Elmi Ahmadov).
  • أصبح الفهرس النصي يدعم الآن أداة تقسيم النصوص split الجديدة. #81752 (Elmi Ahmadov).
  • تم تغيير القيمة الافتراضية لـ index granularity في فهارس text إلى 64. وهذا يحسّن الأداء المتوقع لمتوسط استعلامات الاختبار في اختبارات benchmark الداخلية. #82162 (Jimmy Aguilar Mena).
  • تخزّن بنية bitmap ذات 256 بت الـ labels الصادرة للحالة بترتيب معيّن، لكن تُحفَظ الحالات الصادرة على disk بالترتيب الذي تظهر به في hash table. لذلك قد يشير label إلى الحالة التالية الخاطئة عند القراءة من disk. #82783 (Elmi Ahmadov).
  • تم تفعيل ضغط zstd لـ FST tree blob في الفهارس النصية. #83093 (Elmi Ahmadov).
  • تمت ترقية vector similarity index إلى بيتا. كما أُضيف إعداد alias باسم enable_vector_similarity_index ويجب تمكينه لاستخدام vector similarity index. #83459 (Robert Schulze).
  • أُزيل منطق send_metadata التجريبي المرتبط بـ zero-copy replication التجريبية. لم يُستخدم هذا المنطق مطلقًا، ولا يوجد من يدعم هذا الكود. ونظرًا إلى عدم وجود أي اختبارات مرتبطة به، فمن المرجّح بدرجة كبيرة أنه معطّل منذ وقت طويل. #82508 (alesapin).
  • دُمج StorageKafka2 في system.kafka_consumers. #82652 (János Benjamin Antal).
  • أصبح من الممكن تقدير تعبيرات CNF/DNF المعقدة، مثل (a < 1 and a > 0) or b = 3، باستخدام الإحصاءات. #82663 (Han Fei).

تحسين الأداء

  • تقديم Logging غير المتزامن. عند إخراج السجلات إلى جهاز بطيء، لم يعد ذلك يؤخر الاستعلامات. #82516 (Raúl Marín). وتحديد الحد الأقصى لعدد الإدخالات المحتفَظ بها في قائمة الانتظار. #83214 (Raúl Marín).
  • أصبح INSERT SELECT الموزع المتوازي مفعّلًا افتراضيًا في الوضع الذي يُنفَّذ فيه INSERT SELECT على كل shard بشكل مستقل، راجع الإعداد parallel_distributed_insert_select. #83040 (Igor Nikonov).
  • عندما لا يحتوي aggregation query إلا على دالة count() واحدة على عمود غير Nullable، يُضمَّن منطق aggregation بالكامل أثناء فحص hash table. وهذا يجنّب تخصيص أي aggregation state أو إدارتها، مما يقلل بشكل ملحوظ من memory usage والعبء الإضافي على CPU. يعالج هذا جزئيًا #81982. #82104 (Amos Bird).
  • جرى تحسين أداء HashJoin بإزالة الحلقة الإضافية على hash maps في الحالة الشائعة التي تحتوي على key column واحدة فقط، كما أُزيلت فحوصات null_map وjoin_mask عندما تكون دائمًا true/false. #82308 (Nikita Taranov).
  • تحسين بسيط لمُعدِّل -If combinator. #78454 (李扬).
  • تُنفَّذ استعلامات vector search التي تستخدم vector similarity index بزمن latency أقل بفضل تقليل قراءات التخزين وخفض CPU usage. #79103 (Shankar Iyer).
  • مراعاة merge_tree_min_{rows,bytes}_for_seek في filterPartsByQueryConditionCache لمواءمته مع الطرق الأخرى التي تُجري التصفية باستخدام indexes. #80312 (李扬).
  • جعل pipeline بعد خطوة TOTALS متعدد الخيوط. #80331 (UnamedRus).
  • إصلاح التصفية حسب المفتاح في وحدات التخزين Redis وKeeperMap. #81833 (Pervakov Grigorii).
  • إضافة إعداد جديد min_joined_block_size_rows (مماثل لـ min_joined_block_size_bytes؛ وقيمته الافتراضية 65409) للتحكم في الحد الأدنى لحجم block (بالصفوف) لكتل الإدخال والإخراج الخاصة بـ JOIN (إذا كانت join algorithm تدعم ذلك). ستُدمَج الكتل الصغيرة. #81886 (Nikita Taranov).
  • لم يعد ATTACH PARTITION يؤدي إلى إسقاط جميع الذاكرات المخبئية. #82377 (Alexey Milovidov).
  • تحسين plan المُولَّدة للاستعلامات الفرعية correlated عبر إزالة JOIN operations الزائدة باستخدام فئات التكافؤ. وإذا وُجدت expressions مكافئة لكل الأعمدة correlated، فلن يُنشأ CROSS JOIN إذا كان الإعداد query_plan_correlated_subqueries_use_substitution مفعّلًا. #82435 (Dmitry Novik).
  • قراءة columns المطلوبة فقط في correlated subquery عندما تظهر بوصفها argument للدالة EXISTS. #82443 (Dmitry Novik).
  • تسريع مقارنات query trees قليلًا أثناء query analysis. #82617 (Nikolai Kochetov).
  • أُضيفت محاذاة في Counter الخاص بـ ProfileEvents للحد من المشاركة الزائفة. #82697 (Jiebin Sun).
  • طُبِّقت التحسينات الخاصة بـ null_map وJoinMask من #82308 على حالة JOIN ذات الشروط المنفصلة المتعددة أيضًا. كما جرى تحسين بنية البيانات KnownRowsHolder. #83041 (Nikita Taranov).
  • استُخدم std::vector<std::atomic_bool> العادي لأعلام join لتجنب حساب hash عند كل وصول إلى هذه الأعلام. #83043 (Nikita Taranov).
  • لم تعد الذاكرة تُخصَّص مسبقًا لأعمدة النتيجة عندما يستخدم HashJoin وضع الإخراج lazy. فهذا غير فعّال، خصوصًا عندما يكون عدد المطابقات منخفضًا. إضافةً إلى ذلك، يصبح العدد الدقيق للمطابقات معلومًا بعد اكتمال عملية joining، لذا يمكن إجراء التخصيص المسبق بدقة أكبر. #83304 (Nikita Taranov).
  • تقليل نسخ الذاكرة في headers الخاصة بالمنافذ أثناء إنشاء pipeline. PR الأصلي من heymind. #83381 (Raúl Marín).
  • تحسين بدء تشغيل clickhouse-keeper عند استخدامه تخزين rocksdb. #83390 (Antonio Andelic).
  • تجنب الاحتفاظ بالقفل أثناء إنشاء بيانات snapshot الخاصة بالتخزين لتقليل التزاحم على القفل عند ارتفاع الحمل المتزامن. #83510 (Duc Canh Le).
  • تحسين أداء input format ‏ProtobufSingle عبر إعادة استخدام المُسلسِل عندما لا تحدث parsing errors. #83613 (Eduard Karacharov).
  • تحسين أداء بناء pipeline، ما يسرّع queries القصيرة. #83631 (Raúl Marín).
  • تحسين MergeTreeReadersChain::getSampleBlock، ما يسرّع queries القصيرة. #83875 (Raúl Marín).
  • تسريع سرد الجداول في كتالوج البيانات من خلال الطلبات غير المتزامنة. #81084 (alesapin).
  • إدخال jitter إلى آلية retry الخاصة بـ S3 عند تفعيل config ‏s3_slow_all_threads_after_network_error. #81849 (zoomxi).

تحسينات

  • تلوين الأقواس بعدة ألوان لتحسين سهولة القراءة. #82538 (Konstantin Bogdanov).
  • إبراز المحارف الوصفية في أنماط LIKE/REGEXP أثناء الكتابة. هذا متاح بالفعل في clickhouse-format وفي إخراج echo ضمن clickhouse-client، وأصبح الآن متاحًا أيضًا في موجّه الأوامر. #82871 (Alexey Milovidov).
  • سيعمل التمييز في clickhouse-format وفي إخراج echo الخاص بالعميل بالطريقة نفسها التي يعمل بها التمييز في موجّه سطر الأوامر. #82874 (Alexey Milovidov).
  • أصبح يُسمح الآن باستخدام الأقراص plain_rewritable كأقراص للبيانات الوصفية لقاعدة البيانات. وتم تنفيذ الطريقتين moveFile وreplaceFile في plain_rewritable لدعم استخدامها كقرص قاعدة بيانات. #79424 (Tuan Pham Anh).
  • إتاحة النسخ الاحتياطي لقواعد بيانات PostgreSQL وMySQL وDataLake. ويقتصر النسخ الاحتياطي لهذه القواعد على حفظ التعريف فقط دون البيانات الموجودة بداخلها. #79982 (Nikolay Degterinsky).
  • وُسِم الإعداد allow_experimental_join_condition بأنه متقادم، لأنه أصبح الآن مسموحًا به دائمًا. #80566 (Vladimir Cherkasov).
  • إضافة مقاييس الضغط إلى المقاييس غير المتزامنة في ClickHouse. #80779 (Xander Garbett).
  • أُضيفت المقاييس MarkCacheEvictedBytes وMarkCacheEvictedMarks وMarkCacheEvictedFiles لتتبّع عمليات الإخلاء من ذاكرة التخزين المؤقت للعلامات. (المشكلة #60989). #80799 (Shivji Kumar Jha).
  • دعم كتابة enum في Parquet كمصفوفة بايتات كما تقتضي المواصفة. #81090 (Arthur Passos).
  • تحسين في محرك الجدول DeltaLake: يوفّر delta-kernel-rs واجهة ExpressionVisitor API، وقد نُفِّذت في طلب السحب هذا وطُبِّقت على تحويل تعبيرات أعمدة partition (وستحل محل أسلوب قديم مهمَل داخل delta-kernel-rs كان مستخدمًا سابقًا في شيفرتنا). مستقبلًا، ستتيح ExpressionVisitor أيضًا تنفيذ التشذيب المعتمد على الإحصاءات وبعض ميزات delta-lake الخاصة. بالإضافة إلى ذلك، يهدف هذا التغيير إلى دعم تشذيب الأقسام في محرك الجدول DeltaLakeCluster (إذ ستُسلسَل نتيجة التعبير المُحلَّل، أي ActionsDAG، وتُرسَل من العقدة البادئة مع مسار البيانات، لأن هذا النوع من المعلومات اللازمة للتشذيب لا يتوفر إلا كمعلومات وصفية عند سرد ملفات البيانات، وهي عملية تنفذها العقدة البادئة فقط، لكن يجب تطبيقها على البيانات في كل خادم قراءة). #81136 (Kseniia Sumarokova).
  • الاحتفاظ بأسماء العناصر عند اشتقاق الأنواع الفائقة لـ named tuples. #81345 (lgbo).
  • احتساب الرسائل المستهلَكة يدويًا لتجنّب الاعتماد على offset المعتمد سابقًا في StorageKafka2. #81662 (János Benjamin Antal).
  • تمت إضافة clickhouse-keeper-utils، وهي أداة سطر أوامر جديدة لإدارة بيانات ClickHouse Keeper وتحليلها. تدعم الأداة تفريغ الحالة من اللقطات وملفات changelog، وتحليل ملفات changelog، واستخراج نطاقات سجلات محددة. #81677 (Antonio Andelic).
  • لا يُعاد ضبط محددات الشبكة الإجمالية أو الخاصة بكل مستخدم مطلقًا، مما يضمن عدم تجاوز الحدَّين max_network_bandwidth_for_all_users وmax_network_bandwidth_for_all_users أبدًا. #81729 (Sergei Trifonov).
  • دعم كتابة ملفات GeoParquet كتنسيق إخراج. #81784 (Konstantin Vedernikov).
  • منع بدء alter mutation من نوع RENAME COLUMN إذا كان سيعيد تسمية عمود متأثر حاليًا بعملية mutation بيانات غير مكتملة. #81823 (Mikhail Artemenko).
  • يُرسَل الرأس Connection في نهاية الرؤوس، عند اتضاح ما إذا كان ينبغي الإبقاء على الاتصال. #81951 (Sema Checherinda).
  • ضبط قائمة انتظار خوادم TCP (64 افتراضيًا) استنادًا إلى listen_backlog (4096 افتراضيًا). #82045 (Azat Khuzhin).
  • إضافة إمكانية إعادة تحميل max_local_read_bandwidth_for_server وmax_local_write_bandwidth_for_server أثناء التشغيل دون إعادة تشغيل الخادم. #82083 (Kai Zhu).
  • إضافة دعم لمسح جميع التحذيرات من الجدول system.warnings باستخدام TRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov).
  • إصلاح استبعاد الأقسام غير اللازمة مع دوال cluster الخاصة بـ data lake. #82131 (Kseniia Sumarokova).
  • إصلاح قراءة البيانات المقسّمة إلى partitions في دالة الجدول DeltaLakeCluster. في هذا PR، جرى رفع protocol version الخاصة بدوال cluster، مما يتيح إرسال معلومات إضافية من initiator إلى replicas. وتتضمن هذه المعلومات تعبير delta-kernel transform، وهو مطلوب لتحليل partition columns (ولبعض الأمور الأخرى مستقبلًا، مثل generated columns، إلخ). #82132 (Kseniia Sumarokova).
  • أصبحت الدالة reinterpret تدعم الآن التحويل إلى Array(T) حيث يكون T نوع بيانات ثابت الحجم (issue #82621). #83399 (Shankar Iyer).
  • أصبحت قاعدة البيانات Datalake تُطلق الآن استثناءً أوضح. يُصلح #81211. #82304 (alesapin).
  • تحسين CROSS JOIN عبر إرجاع false من HashJoin::needUsedFlagsForPerRightTableRow. #82379 (lgbo).
  • السماح بكتابة/قراءة أعمدة map بصيغة Array من Tuples. #82408 (MikhailBurdukov).
  • إدراج تراخيص حزم Rust في system.licenses. #82440 (Raúl Marín).
  • يمكن الآن استخدام وحدات الماكرو مثل {uuid} في إعداد keeper_path لمحرك الجدول S3Queue. #82463 (Nikolay Degterinsky).
  • تحسين في Keeper: نقل ملفات changelog بين الأقراص في thread يعمل في الخلفية. سابقًا، كان نقل changelog إلى قرص آخر يحظر Keeper بالكامل إلى أن تكتمل عملية النقل. وكان هذا يؤدي إلى تراجع الأداء إذا كانت عملية النقل طويلة (على سبيل المثال، إلى قرص S3). #82485 (Antonio Andelic).
  • تحسين في Keeper: إضافة config جديدة باسم keeper_server.cleanup_old_and_ignore_new_acl. عند تفعيلها، ستُزال ACL من جميع العقد، مع تجاهل ACL للطلبات الجديدة. وإذا كان الهدف هو إزالة ACL بالكامل من العقد، فمن المهم إبقاء config مفعّلة إلى أن يتم إنشاء snapshot جديدة. #82496 (Antonio Andelic).
  • أُضيف إعداد خادم جديد s3queue_disable_streaming يعطّل streaming في الجداول التي تستخدم محرك الجدول S3Queue. ويمكن تغيير هذا الإعداد من دون إعادة تشغيل الخادم. #82515 (Kseniia Sumarokova).
  • أُعيدت هيكلة ميزة تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات، مع إضافة المزيد من السجلات لأغراض الفحص الداخلي. #82556 (Kseniia Sumarokova).
  • سيستمع clickhouse-server، حتى بدون ملف إعداد، أيضًا إلى منفذ PostgreSQL ‏9005، كما هو الحال مع الإعداد الافتراضي. #82633 (Alexey Milovidov).
  • في ReplicatedMergeTree::executeMetadataAlter، نحصل على StorageID، ثم نحاول استدعاء IDatabase::alterTable من دون أخذ DDLGuard. وخلال هذه الفترة قد يكون الجدول المعني قد استُبدل تقنيًا بجدول آخر، لذا فعند جلب التعريف سنحصل على تعريف غير صحيح. ولتجنّب ذلك، أُضيف تحقق منفصل لمطابقة UUIDs عند محاولة استدعاء IDatabase::alterTable. #82666 (Nikolay Degterinsky).
  • عند Attach قاعدة بيانات تستخدم قرصًا بعيدًا بوضع read-only، أضِف UUIDs الخاصة بالجداول يدويًا إلى DatabaseCatalog. #82670 (Tuan Pham Anh).
  • منع المستخدم من استخدام nan وinf مع NumericIndexedVector. يعالج #82239 وغير ذلك قليلًا. #82681 (Raufs Dunamalijevs).
  • لا تُهمِل القيم الصفرية في تنسيقات الترويسة X-ClickHouse-Progress وX-ClickHouse-Summary. #82727 (Nikita Mikhaylov).
  • تحسين في Keeper: دعم أذونات محددة لـ ACL من النوع world:anyone. #82755 (Antonio Andelic).
  • عدم السماح باستخدام RENAME COLUMN أو DROP COLUMN على الأعمدة المدرجة صراحةً للجمع في SummingMergeTree. يغلق #81836. #82821 (Alexey Milovidov).
  • تحسين دقة التحويل من Decimal إلى Float32، وتنفيذ التحويل من Decimal إلى BFloat16. يغلق #82660. #82823 (Alexey Milovidov).
  • ستبدو أشرطة التمرير في واجهة الويب أفضل قليلًا. #82869 (Alexey Milovidov).
  • سيتيح clickhouse-server المزود بإعدادات مضمّنة استخدام واجهة الويب عبر تقديم استجابة HTTP OPTIONS. #82870 (Alexey Milovidov).
  • إضافة دعم لتحديد ACL إضافية لـ Keeper للمسارات في config. إذا أردت إضافة ACL إضافية لمسار معيّن، فعرّفها في config تحت zookeeper.path_acls. #82898 (Antonio Andelic).
  • سيُبنى الآن snapshot الخاص بـ mutations انطلاقًا من snapshot الخاص بـ parts المرئية. كما ستُعاد أيضًا إعادة احتساب counters الخاصة بـ mutation المستخدمة في snapshot بناءً على mutations المضمّنة. #82945 (Mikhail Artemenko).
  • إضافة ProfileEvent عندما يرفض Keeper عملية كتابة بسبب soft memory limit. #82963 (Xander Garbett).
  • إضافة columns ‏commit_time وcommit_id إلى system.s3queue_log. #83016 (Kseniia Sumarokova).
  • في بعض الحالات، نحتاج إلى dimensions متعددة لمقاييسنا. على سبيل المثال، عدّ merges أو mutations الفاشلة حسب رموز error بدلًا من الاكتفاء بـ counter واحد. تقديم system.dimensional_metrics، الذي يحقق ذلك تحديدًا ويضيف أول metric متعدد الأبعاد باسم failed_merges. #83030 (Miсhael Stetsyuk).
  • توحيد تحذيرات Settings غير المعروفة في clickhouse client وتسجيلها على شكل ملخص. #83042 (Bharat Nallan).
  • أصبح clickhouse client الآن يعرض Port المحلي عند حدوث error في connection. #83050 (Jianfei Hu).
  • تحسين طفيف في معالجة error داخل AsynchronousMetrics. إذا كان directory ‏/sys/block موجودًا ولكن لا يمكن الوصول إليه، فسيبدأ server من دون Monitoring لأجهزة block device. يغلق #79229. #83115 (Alexey Milovidov).
  • إيقاف تشغيل SystemLogs بعد tables العادية (وقبل system tables بدلًا من قبل الجداول العادية). #83134 (Kseniia Sumarokova).
  • إضافة logs لعملية إيقاف تشغيل S3Queue. #83163 (Kseniia Sumarokova).
  • إمكانية parse ‏Time وTime64 بصيغ MM:SS أو M:SS أو SS أو S. #83299 (Yarik Briukhovetskyi).
  • عند distributed_ddl_output_mode='*_only_active'، لا تنتظر replicas الجديدة أو المستعادة التي يكون replication lag لديها أكبر من max_replication_lag_to_enqueue. من المفترض أن يساعد ذلك على تجنب DDL task is not finished on some hosts عندما تصبح replica جديدة نشطة بعد اكتمال التهيئة أو recovery، لكنها تكون قد راكمت replication log كبيرًا أثناء التهيئة. كذلك، تنفيذ query ‏SYSTEM SYNC DATABASE REPLICA STRICT التي تنتظر حتى يصبح replication log أقل من max_replication_lag_to_enqueue. #83302 (Alexander Tokmakov).
  • لا تُخرج أوصافًا طويلة جدًا لإجراءات expression في رسائل الاستثناء. يُغلق #83164. #83350 (Alexey Milovidov).
  • إضافة إمكانية parse بادئة part ولاحقتها، وكذلك التحقق من التغطية للأعمدة غير الثابتة. #83377 (Mikhail Artemenko).
  • توحيد أسماء parameter في ODBC وJDBC عند استخدام named collections. #83410 (Andrey Zvonov).
  • عند إيقاف تشغيل التخزين، يُطلق getStatus استثناءً من النوع ErrorCodes::ABORTED. في السابق، كان هذا يؤدي إلى فشل استعلام select. أما الآن فنلتقط استثناءات ErrorCodes::ABORTED ونتجاهلها عمدًا بدلًا من ذلك. #83435 (Miсhael Stetsyuk).
  • إضافة مقاييس resource الخاصة بالعملية (مثل UserTimeMicroseconds وSystemTimeMicroseconds وRealTimeMicroseconds) إلى أحداث profile events في part_log لإدخالات MergeParts. #83460 (Vladimir Cherkasov).
  • تفعيل علامات الميزات create_if_not_exists وcheck_not_exists وremove_recursive في Keeper افتراضيًا، ما يتيح أنواعًا جديدة من الطلبات. #83488 (Antonio Andelic).
  • إيقاف بث S3(Azure/etc)Queue قبل إيقاف أي table عند إيقاف server. #83530 (Kseniia Sumarokova).
  • تفعيل Date/Date32 كأعداد صحيحة في JSON input formats. #83597 (MikhailBurdukov).
  • جعل رسائل الاستثناء في بعض الحالات عند loading وإضافة projections أسهل قراءةً. #83728 (Robert Schulze).
  • تقديم خيار configuration لتخطي فحوصات سلامة checksum للملف التنفيذي clickhouse-server. يعالج #83637. #83749 (Rafael Roquetto).

إصلاح خلل (سلوك غير صحيح ظاهر للمستخدم في إصدار مستقر رسمي)

  • إصلاح القيمة الافتراضية الخاطئة للخيار --reconnect في clickhouse-benchmark. وقد تغيّرت بالخطأ في #79465. #82677 (Alexey Milovidov).
  • إصلاح عدم اتساق التنسيق في CREATE DICTIONARY. يُغلق #82105. #82829 (Alexey Milovidov).
  • إصلاح عدم اتساق تنسيق TTL عندما يحتوي على الدالة materialize. يُغلق #82828. #82831 (Alexey Milovidov).
  • إصلاح عدم اتساق تنسيق EXPLAIN AST في استعلام فرعي عندما يتضمن خيارات إخراج مثل INTO OUTFILE. يُغلق #82826. #82840 (Alexey Milovidov).
  • إصلاح عدم اتساق تنسيق التعبيرات الموضوعة بين قوسين مع الأسماء المستعارة في السياق الذي لا يُسمح فيه بالأسماء المستعارة. يُغلق #82836. يُغلق #82837. #82867 (Alexey Milovidov).
  • استخدام رمز الخطأ الصحيح عند ضرب حالة دالة تجميع مع IPv4. يُغلق #82817. #82818 (Alexey Milovidov).
  • إصلاح خطأ منطقي في ذاكرة التخزين المؤقت لنظام الملفات: “وجود صفر بايتات رغم أن النطاق لم يكتمل”. #81868 (Kseniia Sumarokova).
  • إعادة حساب فهرس الحد الأدنى-الحد الأقصى عندما يقلّص TTL عدد الصفوف، لضمان صحة الخوارزميات التي تعتمد عليه، مثل minmax_count_projection. يحل هذا #77091. #77166 (Amos Bird).
  • بالنسبة إلى الاستعلامات التي تجمع بين ORDER BY ... LIMIT BY ... LIMIT N، عندما يُنفَّذ ORDER BY على شكل PartialSorting، فإن العداد rows_before_limit_at_least يعكس الآن عدد الصفوف التي يستهلكها بند LIMIT بدلًا من عدد الصفوف التي تستهلكها عملية تحويل الفرز. #78999 (Eduard Karacharov).
  • إصلاح التخطي المفرط للحبيبات عند التصفية عبر فهارس token/ngram باستخدام regexp يحتوي على alternation وكان البديل الأول فيه غير حرفي. #79373 (Eduard Karacharov).
  • إصلاح خطأ منطقي مع العامل <=> وJoin storage، وبات الاستعلام يُرجع الآن رمز الخطأ الصحيح. #80165 (Vladimir Cherkasov).
  • إصلاح تعطل في الدالة loop عند استخدامها مع عائلة الدالة remote. وضمان الالتزام ببند LIMIT في loop(remote(...)). #80299 (Julia Kartseva).
  • إصلاح السلوك غير الصحيح للدالتين to_utc_timestamp وfrom_utc_timestamp عند التعامل مع التواريخ السابقة لبداية Unix epoch ‏(1970-01-01) واللاحقة للتاريخ الأقصى ‏(2106-02-07 06:28:15). أصبحت هاتان الدالتان الآن تقيدان القيم بشكل صحيح عند بداية epoch والتاريخ الأقصى، على التوالي. #80498 (Surya Kant Ranjan).
  • في بعض الاستعلامات المنفذة باستخدام parallel replicas، كان يمكن تطبيق تحسينات القراءة بالترتيب على initiator بينما يتعذر تطبيقها على العقد البعيدة. وهذا يؤدي إلى استخدام أوضاع قراءة مختلفة من قبل parallel replicas coordinator ‏(على initiator) وعلى العقد البعيدة، وهو خطأ منطقي. #80652 (Igor Nikonov).
  • إصلاح خطأ منطقي أثناء materialize projection عند تغيير column type إلى Nullable. #80741 (Pavel Kruglov).
  • إصلاح إعادة احتساب TTL بشكل غير صحيح في TTL GROUP BY عند تحديث TTL. #81222 (Evgeniy Ulasik).
  • إصلاح تطبيق Parquet bloom filter للشرط مثل WHERE function(key) IN (...) بشكل غير صحيح كما لو كان WHERE key IN (...). #81255 (Michael Kolupaev).
  • إصلاح احتمال حدوث crash في Aggregator في حال وقوع استثناء أثناء merge. #81450 (Nikita Taranov).
  • إصلاح InterpreterInsertQuery::extendQueryLogElemImpl لإضافة العلامات العكسية إلى اسمي database وtable عند الحاجة (مثلًا عندما تحتوي الأسماء على محارف خاصة مثل -). #81528 (Ilia Shvyrialkin).
  • إصلاح تنفيذ IN مع transform_null_in=1 عند وجود NULL في argument الأيسر ونتيجة subquery غير Nullable. #81584 (Pavel Kruglov).
  • لم يعد يتم التحقق من الأنواع التجريبية/المشبوهة في تنفيذ expression ‏default/materialize أثناء القراءة من table موجود. #81618 (Pavel Kruglov).
  • إصلاح خطأ “Context has expired” أثناء merges عند استخدام dict في expression ‏TTL. #81690 (Azat Khuzhin).
  • إصلاح الرتابة في دالة cast. #81722 (zoomxi).
  • إصلاح المشكلة التي لا تُقرأ فيها columns المطلوبة أثناء query processing الخاصة بـ scalar correlated subquery. ويعالج هذا #81716. #81805 (Dmitry Novik).
  • في الإصدارات السابقة، كان server يعيد محتوى زائدًا للطلبات الموجهة إلى /js. وهذا يُغلق #61890. #81895 (Alexey Milovidov).
  • سابقًا، كان يمكن لتعريفات table engine الخاصة بـ MongoDB أن تتضمن مكوّن path في argument ‏host:port، وكان يُتجاهل بصمت. وكان تكامل mongodb يرفض تحميل مثل هذه الجداول. مع هذا الإصلاح أصبحنا نسمح بتحميل هذه الجداول ونتجاهل مكوّن path إذا كان engine ‏MongoDB يحتوي على خمس arguments، مع استخدام Database name من arguments. ملاحظة: لا يُطبَّق هذا الإصلاح على الجداول المُنشأة حديثًا أو الاستعلامات التي تستخدم mongo table function، وكذلك على dictionary sources وnamed collections. #81942 (Vladimir Cherkasov).
  • إصلاح تعطل محتمل في Aggregator عند حدوث استثناء أثناء الدمج. #82022 (Nikita Taranov).
  • إصلاح تحليل عامل التصفية عند استخدام عمود alias ثابت فقط في الاستعلام. يُصلح #79448. #82037 (Dmitry Novik).
  • إصلاح LOGICAL&#95;ERROR والتعطل الذي يليه عند استخدام العمود نفسه في TTL مع GROUP BY و SET. #82054 (Pablo Marcos).
  • إصلاح التحقق من وسيطات دالة الجدول S3 عند إخفاء الأسرار، ما يمنع حدوث LOGICAL_ERROR محتمل. يغلق #80620. #82056 (Vladimir Cherkasov).
  • إصلاح حالات سباق البيانات في Iceberg. #82088 (Azat Khuzhin).
  • إصلاح DatabaseReplicated::getClusterImpl. إذا كان العنصر الأول (أو العناصر الأولى) من hosts يحتوي على id == DROPPED_MARK ولم تكن هناك عناصر أخرى للشريحة نفسها، فسيكون العنصر الأول من shards متجهًا فارغًا، ما يؤدي إلى std::out_of_range. #82093 (Miсhael Stetsyuk).
  • إصلاح خطأ نسخ ولصق في arraySimilarity يمنع استخدام الأوزان UInt32 و Int32. وتحديث الاختبارات والوثائق. #82103 (Mikhail f. Shiryaev).
  • إصلاح الخطأ Not found column في الاستعلامات التي تستخدم arrayJoin ضمن شرط WHERE ومع IndexSet. #82113 (Nikolai Kochetov).
  • إصلاح خلل في تكامل Glue catalog. يمكن الآن لـ ClickHouse قراءة الجداول ذات أنواع البيانات المتداخلة التي تحتوي بعض الأعمدة الفرعية فيها على قيم عشرية، مثل: map<string, decimal(9, 2)>. يُصلح #81301. #82114 (alesapin).
  • إصلاح تراجع في الأداء في SummingMergeTree أُدخل في الإصدار 25.5 في https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
  • عند تمرير الإعدادات عبر URI، تُؤخذ القيمة الأخيرة في الاعتبار. #82137 (Sema Checherinda).
  • إصلاح الخطأ “Context has expired” في Iceberg. #82146 (Azat Khuzhin).
  • إصلاح احتمال حدوث deadlock في الاستعلامات البعيدة عندما يكون الخادم تحت ضغط الذاكرة. #82160 (Kirill).
  • إصلاح تجاوز السعة في الدوال numericIndexedVectorPointwiseAdd و numericIndexedVectorPointwiseSubtract و numericIndexedVectorPointwiseMultiply و numericIndexedVectorPointwiseDivide الذي كان يحدث عند تطبيقها على أعداد كبيرة. #82165 (Raufs Dunamalijevs).
  • إصلاح خلل في تبعيات الجداول كان يتسبب في عدم التقاط Materialized Views لاستعلامات INSERT. #82222 (Nikolay Degterinsky).
  • إصلاح احتمال حدوث data-race بين خيط الاقتراحات وخيط العميل الرئيسي. #82233 (Azat Khuzhin).
  • أصبح بإمكان ClickHouse الآن قراءة جداول Iceberg من Glue catalog بعد schema evolution. يعالج هذا #81272. #82301 (alesapin).
  • إصلاح التحقق من إعدادات المقاييس غير المتزامنة asynchronous_metrics_update_period_s وasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan).
  • إصلاح خطأ منطقي عند حلّ المطابِق في استعلام يحتوي على عدة عمليات JOIN، وإغلاق #81969. #82421 (Vladimir Cherkasov).
  • إضافة وقت انتهاء صلاحية إلى رمز AWS ECS المميز بحيث يمكن إعادة تحميله. #82422 (Konstantin Bogdanov).
  • إصلاح خلل في الوسائط NULL في الدالة CASE. #82436 (Yarik Briukhovetskyi).
  • إصلاح حالات data-race في العميل (من خلال عدم استخدام السياق العام) وتجاوزات session_timezone (سابقًا، إذا كانت session_timezone مضبوطة — مثلًا في users.xml/خيارات العميل — على قيمة غير فارغة، بينما كانت في سياق الاستعلام فارغة، فكانت القيمة من users.xml تُستخدم، وهذا غير صحيح؛ أما الآن فستكون الأولوية دائمًا لسياق الاستعلام على السياق العام). #82444 (Azat Khuzhin).
  • إصلاح تعطيل محاذاة الحدود للمخزن المؤقت cached في محركات الجداول الخارجية. وقد تعطل ذلك في https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
  • إصلاح الانهيار عند ضمّ تخزين key-value باستخدام مفتاح محوَّل النوع. #82497 (Pervakov Grigorii).
  • إصلاح إخفاء قيم named collection في السجلات/query_log. يغلق #82405. #82510 (Kseniia Sumarokova).
  • إصلاح احتمال حدوث انهيار في logging أثناء إنهاء جلسة، إذ قد يكون user_id فارغًا أحيانًا. #82513 (Bharat Nallan).
  • إصلاح الحالات التي كان يمكن أن يتسبب فيها parsing الخاص بـ Time في مشكلات msan. ويعالج هذا: #82477. #82514 (Yarik Briukhovetskyi).
  • عدم السماح بضبط threadpool_writer_pool_size على الصفر لضمان عدم تعطل عمليات الخادم. #82532 (Bharat Nallan).
  • إصلاح LOGICAL_ERROR أثناء تحليل تعبير سياسة الصفوف للأعمدة المترابطة. #82618 (Dmitry Novik).
  • إصلاح الاستخدام غير الصحيح للبيانات الوصفية الأصلية في table function ‏mergeTreeProjection عندما تكون enable_shared_storage_snapshot_in_query = 1. وهذا مرتبط بـ #82634. #82638 (Amos Bird).
  • تدعم الدوال trim{Left,Right,Both} الآن سلاسل الإدخال من النوع “FixedString(N)”. على سبيل المثال، أصبح SELECT trimBoth(toFixedString('abc', 3), 'ac') يعمل الآن. #82691 (Robert Schulze).
  • في AzureBlobStorage، عند استخدام النسخ الأصلي، تُقارَن طرق المصادقة، وإذا وقع استثناء أثناء ذلك، فقد جرى تحديث الشيفرة للرجوع إلى أسلوب القراءة ثم النسخ (أي النسخ غير الأصلي). #82693 (Smita Kulkarni).
  • إصلاح إلغاء التسلسل لـ groupArraySample/groupArrayLast في حالة العناصر الفارغة (إذ كان إلغاء التسلسل قد يتخطى جزءًا من البيانات الثنائية إذا كان الإدخال فارغًا، ما قد يؤدي إلى تلف أثناء قراءة البيانات وظهور UNKNOWN_PACKET_FROM_SERVER في بروتوكول TCP). لا يؤثر هذا في الأرقام وأنواع التاريخ والوقت. #82763 (Pedro Ferreira).
  • إصلاح النسخ الاحتياطي لجدول Memory فارغ، والذي كان يتسبب في فشل استعادة النسخة الاحتياطية مع الخطأ BACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva).
  • إصلاح السلامة عند الاستثناء في إعادة كتابة union/intersect/except_default_mode. يُغلق #82664. #82820 (Alexey Milovidov).
  • تتبّع عدد مهام تحميل الجداول غير المتزامنة. إذا كانت هناك مهام قيد التشغيل، فلا تُحدِّث tail_ptr في TransactionLog::removeOldEntries. #82824 (Tuan Pham Anh).
  • إصلاح حالات سباق البيانات في Iceberg. #82841 (Azat Khuzhin).
  • كان من الممكن أن يفشل تحسين الإعداد use_skip_indexes_if_final_exact_mode (المُقدَّم في 25.6) في اختيار نطاق مرشّح مناسب، وذلك بحسب إعدادات محرك MergeTree / توزيع البيانات. وقد تم حل ذلك الآن. #82879 (Shankar Iyer).
  • تعيين قيمة salt لبيانات المصادقة عند التحليل من AST بالنوع SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
  • عند استخدام تنفيذ Database غير قائم على التخزين المؤقت، تُحذف البيانات الوصفية للجدول المقابل بعد إرجاع الأعمدة، ويصبح المرجع غير صالح. #82939 (buyval01).
  • إصلاح تعديل عامل التصفية للاستعلامات التي تحتوي على تعبير JOIN مع جدول يستخدم التخزين Merge. يُصلح #82092. #82950 (Dmitry Novik).
  • إصلاح LOGICAL_ERROR في QueryMetricLog: لا يمكن أن يكون Mutex مساويًا لـ NULL. #82979 (Pablo Marcos).
  • إصلاح المخرجات غير الصحيحة للدالة formatDateTime عند استخدام المنسِّق %f مع المنسِّقات ذات الحجم المتغير (مثل %M). #83020 (Robert Schulze).
  • إصلاح تراجع الأداء مع المحلل المفعّل عندما كانت الاستعلامات الثانوية تقرأ دائمًا جميع الأعمدة من VIEWs. يُصلح #81718. #83036 (Dmitry Novik).
  • إصلاح رسالة الخطأ المضللة عند استعادة نسخة احتياطية على قرص للقراءة فقط. #83051 (Julia Kartseva).
  • عدم التحقق من وجود تبعيات دورية عند إنشاء جدول بلا تبعيات. يعالج هذا تراجع الأداء في حالات الاستخدام التي تتضمن إنشاء آلاف الجداول، والذي أُدخل في https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
  • إصلاح مشكلة القراءة الضمنية لقيم Time السالبة إلى الجدول، وجعل الوثائق أكثر وضوحًا. #83091 (Yarik Briukhovetskyi).
  • عدم استخدام أجزاء غير مرتبطة من قاموس مشترك في الدالة lowCardinalityKeys. #83118 (Alexey Milovidov).
  • إصلاح التراجع في استخدام subcolumns مع Materialized Views. ويعالج هذا: #82784. #83221 (Nikita Mikhaylov).
  • إصلاح تعطل في العميل بسبب بقاء الاتصال في حالة disconnected بعد تنفيذ INSERT غير صالح. #83253 (Azat Khuzhin).
  • إصلاح تعطل عند حساب حجم block يحتوي على columns فارغة. #83271 (Raúl Marín).
  • إصلاح تعطل محتمل في Variant type ضمن UNION. #83295 (Pavel Kruglov).
  • إصلاح LOGICAL_ERROR في clickhouse-local لاستعلامات SYSTEM غير المدعومة. #83333 (Surya Kant Ranjan).
  • إصلاح no_sign_request لعميل S3. يمكن استخدامه لتجنب توقيع طلبات S3 صراحةً. كما يمكن تعريفه لنقاط endpoint محددة باستخدام إعدادات مستندة إلى endpoint. #83379 (Antonio Andelic).
  • إصلاح تعطل قد يحدث لاستعلام يتضمن الإعداد ‘max_threads=1’ عند تنفيذه تحت حمل مع تمكين scheduling للـ CPU. #83387 (Fan Ziqi).
  • إصلاح الاستثناء TOO_DEEP_SUBQUERIES عندما يشير تعريف CTE إلى تعبير جدول آخر يحمل الاسم نفسه. #83413 (Dmitry Novik).
  • إصلاح السلوك غير الصحيح عند تنفيذ REVOKE S3 ON system.*، إذ كان يؤدي إلى سحب أذونات S3 من *.*. ويعالج هذا #83417. #83420 (pufit).
  • عدم مشاركة async_read_counters بين الاستعلامات. #83423 (Azat Khuzhin).
  • تعطيل parallel replicas عندما يحتوي subquery على FINAL. #83455 (zoomxi).
  • معالجة تجاوز عددي صحيح طفيف في configuration الخاصة بالإعداد role_cache_expiration_time_seconds (المشكلة #83374). #83461 (wushap).
  • إصلاح خطأ أُدخل في https://github.com/ClickHouse/ClickHouse/pull/79963. عند الإدراج في MV مع definer، يجب أن يستخدم التحقق من الأذونات الامتيازات الخاصة بالـ definer. يُصلح هذا #79951. #83502 (pufit).
  • تعطيل تقليم الملفات المستند إلى الحدود لعناصر Array في Iceberg وقيم Map في Iceberg، بما في ذلك جميع الحقول الفرعية Nested التابعة لها. #83520 (Daniil Ivanik).
  • إصلاح أخطاء محتملة تشير إلى أن File Cache لم تتم تهيئتها عند استخدامها كمخزن بيانات مؤقت. #83539 (Bharat Nallan).
  • إصلاح في Keeper: تحديث العدد الإجمالي لـ watch بشكل صحيح عند حذف العقد الزائلة عند إغلاق الجلسة. #83583 (Antonio Andelic).
  • إصلاح سلوك غير صحيح في الذاكرة يتعلق بـ max_untracked_memory. #83607 (Azat Khuzhin).
  • قد يؤدي INSERT SELECT مع UNION ALL إلى إلغاء مرجعية مؤشر NULL في حالة نادرة. يُغلق هذا #83618. #83643 (Alexey Milovidov).
  • منع القيمة الصفرية لـ max_insert_block_size لأنها قد تتسبب في خطأ منطقي. #83688 (Bharat Nallan).
  • إصلاح حلقة لا نهائية في estimateCompressionRatio() عند block_size_bytes=0. #83704 (Azat Khuzhin).
  • إصلاح مقاييس IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles (إذ كانت تُدرج سابقًا ضمن metric من دون البادئة Cache). #83730 (Azat Khuzhin).
  • إصلاح احتمال حدوث إنهاء قسري (بسبب ضم threads من المهمة) ونأمل أيضًا حالات التعليق (في اختبارات الوحدة) أثناء إيقاف BackgroundSchedulePool. #83769 (Azat Khuzhin).
  • إضافة إعداد للتوافق مع الإصدارات السابقة للسماح للمحلل الجديد بالإشارة إلى alias خارجي في عبارة WITH عند حدوث تعارض في الأسماء. يُصلح #82700. #83797 (Dmitry Novik).
  • إصلاح حالة توقف متبادل عند الإيقاف بسبب قفل السياق بشكل تكراري أثناء تنظيف library bridge. #83824 (Azat Khuzhin).

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

  • إنشاء مكتبة C مصغّرة (10 كيلوبايت) لمحلّل ClickHouse. هذا مطلوب من أجل #80977. #81347 (Alexey Milovidov). إضافة اختبار لمحلّل مستقل، وإضافة وسم الاختبار fasttest-only. #82472 (Yakov Olkhovskiy).
  • إضافة فحص لمدخلات الوحدة الفرعية Nix. #81691 (Konstantin Bogdanov).
  • إصلاح مجموعة من المشكلات التي قد تحدث عند محاولة تشغيل اختبارات التكامل على localhost. #82135 (Oleg Doronin).
  • تجميع SymbolIndex على Mac وFreeBSD. (لكنه سيعمل فقط على أنظمة ELF، أي Linux وFreeBSD). #82347 (Alexey Milovidov).
  • ترقية Azure SDK إلى v1.15.0. #82747 (Smita Kulkarni).
  • إضافة وحدة التخزين من google-cloud-cpp إلى نظام البناء. #82881 (Pablo Marcos).
  • تغيير Dockerfile.ubuntu الخاص بـ clickhouse-server ليتوافق مع متطلبات Docker Official Library. #83039 (Mikhail f. Shiryaev).
  • متابعة لـ #83158 لإصلاح رفع نواتج البناء إلى curl clickhouse.com. #83463 (Mikhail f. Shiryaev).
  • إضافة الملف التنفيذي busybox وأدوات التثبيت إلى صور clickhouse/clickhouse-server وصور clickhouse الرسمية. #83735 (Mikhail f. Shiryaev).
  • إضافة دعم لمتغير البيئة CLICKHOUSE_HOST لتحديد مضيف خادم ClickHouse، بما يتماشى مع متغيرَي البيئة CLICKHOUSE_USER وCLICKHOUSE_PASSWORD الموجودين مسبقًا. يتيح ذلك تهيئة أسهل من دون تعديل العميل أو ملفات التهيئة مباشرةً. #83659 (Doron David).

إصدار ClickHouse 25.6، 2025-06-26

تغيير غير متوافق مع الإصدارات السابقة

  • سابقًا، كانت الدالة countMatches تتوقف عن العد عند أول تطابق فارغ حتى لو كان النمط يسمح بذلك. ولتجاوز هذه المشكلة، تواصل countMatches الآن التنفيذ بالتقدّم بمقدار محرف واحد عند حدوث تطابق فارغ. ويمكن للمستخدمين الذين يفضّلون الإبقاء على السلوك السابق تفعيل الإعداد count_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
  • طفيف: فرض أن تكون إعدادات الخادم backup_threads وrestore_threads غير صفرية. #80224 (Raúl Marín).
  • طفيف: إصلاح bitNot مع String بحيث يعيد سلسلة منتهية بصفر في التمثيل الداخلي للذاكرة. ولا يُفترض أن يؤثر هذا في أي سلوك ظاهر للمستخدم، لكن المؤلف أراد مع ذلك لفت الانتباه إلى هذا التغيير. #80791 (Azat Khuzhin).

ميزة جديدة

  • أنواع بيانات جديدة: Time ([H]HH:MM:SS) وTime64 ([H]HH:MM:SS[.fractional])، إلى جانب بعض دوال التحويل الأساسية ودوال للتعامل مع أنواع بيانات أخرى. أُضيفت إعدادات للتوافق مع الدالة الحالية toTime. وتم ضبط الإعداد use_legacy_to_time للإبقاء على السلوك القديم في الوقت الحالي. #81217 (Yarik Briukhovetskyi). كما أُضيف دعم للمقارنة بين Time وTime64. #80327 (Yarik Briukhovetskyi).
  • أداة CLI جديدة، وهي chdig - واجهة TUI لـ ClickHouse (مشابهة لـ top) كجزء من ClickHouse. #79666 (Azat Khuzhin).
  • دعم الإعداد disk لمحركي قواعد البيانات Atomic وOrdinary، لتحديد القرص الذي تُخزَّن عليه ملفات البيانات الوصفية للجداول. #80546 (Tuan Pham Anh). يتيح ذلك إرفاق قواعد بيانات من مصادر خارجية.
  • نوع جديد من MergeTree، وهو CoalescingMergeTree - حيث يأخذ المحرك أول قيمة غير NULL أثناء عمليات الدمج في الخلفية. هذا يُغلق #78869. #79344 (scanhex12).
  • دعم دوال لقراءة WKB (“Well-Known Binary” هو تنسيق للترميز الثنائي لمختلف الأنواع الهندسية، ويُستخدم في تطبيقات GIS). انظر #43941. #80139 (scanhex12).
  • أُضيفت جدولة فتحات الاستعلامات لأحمال العمل، راجع workload scheduling للتفاصيل. #78415 (Sergei Trifonov).
  • دوال مساعدة timeSeries* لتسريع بعض السيناريوهات عند العمل مع بيانات السلاسل الزمنية: - إعادة أخذ عينات من البيانات إلى شبكة زمنية مع تحديد timestamp البداية وtimestamp النهاية والخطوة - حساب delta وrate وidelta وirate بأسلوب مشابه لـ PromQL. #80590 (Alexander Gololobov).
  • إضافة الدوال mapContainsValuesLike/mapContainsValues/mapExtractValuesLike للتصفية حسب قيم map، مع دعمها في الفهارس المعتمدة على bloom filter. #78171 (UnamedRus).
  • يمكن الآن لقيود الإعدادات تحديد مجموعة من القيم غير المسموح بها. #78499 (Bharat Nallan).
  • أُضيف الإعداد enable_shared_storage_snapshot_in_query لتمكين مشاركة لقطة التخزين نفسها عبر جميع الاستعلامات الفرعية ضمن استعلام واحد. وهذا يضمن قراءات متسقة من الجدول نفسه، حتى عند الرجوع إلى الجدول عدة مرات داخل الاستعلام. #79471 (Amos Bird).
  • دعم كتابة أعمدة JSON إلى Parquet وقراءة أعمدة JSON من Parquet مباشرةً. #79649 (Nihal Z. Miaji).
  • إضافة دعم MultiPolygon إلى pointInPolygon. #79773 (Nihal Z. Miaji).
  • إضافة دعم للاستعلام عن جداول Delta المربوطة على نظام الملفات المحلي عبر دالة الجدول deltaLakeLocal. #79781 (roykim98).
  • إضافة الإعداد الجديد cast_string_to_date_time_mode الذي يتيح اختيار وضع تحليل DateTime أثناء التحويل من String. #80210 (Pavel Kruglov). على سبيل المثال، يمكنك ضبطه على وضع best effort.
  • تمت إضافة الدالتين bech32Encode وbech32Decode للعمل مع خوارزمية Bech الخاصة بـBitcoin (المشكلة #40381). #80239 (George Larionov).
  • إضافة دوال SQL لتحليل أسماء أجزاء MergeTree. #80573 (Mikhail Artemenko).
  • السماح بتصفية الأجزاء المحددة للاستعلام بحسب القرص الموجودة عليه، وذلك عبر إضافة عمود افتراضي جديد هو _disk_name. #80650 (tanner-bruce).
  • إضافة صفحة رئيسية تتضمن قائمة بأدوات الويب المضمنة. وستُفتح عند طلبها من متصفح أو user agent مشابه. #81129 (Alexey Milovidov).
  • ستستبعد الدوال arrayFirst وarrayFirstIndex وarrayLast وarrayLastIndex الآن قيم NULL التي يعيدها تعبير التصفية. في الإصدارات السابقة، لم تكن نتائج التصفية من النوع Nullable مدعومة. يُصلح هذا #81113. #81197 (Lennard Eijsackers).
  • أصبح من الممكن الآن كتابة USE DATABASE name بدلًا من USE name. #81307 (Yarik Briukhovetskyi).
  • تمت إضافة جدول نظام جديد system.codecs لاستعراض الترميزات المتاحة. (المشكلة #81525). #81600 (Jimmy Aguilar Mena).
  • دعم دالتي النوافذ lag وlead. يُغلق هذا #9887. #82108 (Dmitry Novik).
  • تدعم الدالة tokens الآن tokenizer جديدًا باسم split، وهو مناسب للسجلات. #80195 (Robert Schulze).
  • إضافة دعم للوسيط --database في clickhouse-local. يمكنك التبديل إلى قاعدة بيانات أُنشئت مسبقًا. يُغلق هذا #44115. #81465 (Alexey Milovidov).

ميزة تجريبية

  • تنفيذ منطق شبيه بإعادة توازن Kafka في Kafka2 باستخدام ClickHouse Keeper. ولكل replica، ندعم نوعين من أقفال partition: أقفال دائمة وأقفال مؤقتة. وتحاول الـ replica الاحتفاظ بالأقفال الدائمة لأطول فترة ممكنة. وفي أي لحظة، لا يكون لدى الـ replica أكثر من all_topic_partitions / active_replicas_count (حيث إن all_topic_partitions هو إجمالي عدد partitions، وactive_replicas_count هو عدد replicas النشطة) من الأقفال الدائمة؛ وإذا تجاوز العدد ذلك، فإن الـ replica تُحرِّر بعض partitions. كما تحتفظ الـ replica ببعض partitions مؤقتًا. ويتغير الحد الأقصى لعدد الأقفال المؤقتة على الـ replica ديناميكيًا لإتاحة الفرصة أمام replicas الأخرى لأخذ بعض partitions كأقفال دائمة. وعند تحديث الأقفال المؤقتة، تُحرِّر الـ replica جميعها ثم تحاول الحصول على أقفال أخرى من جديد. #78726 (Daria Fomina).
  • تحسين للفهرس النصي التجريبي: أصبحت المعلمات الصريحة مدعومة عبر أزواج key-value. والمعلمات المدعومة حاليًا هي tokenizer الإلزامي، وmax_rows_per_postings_list وngram_size الاختياريتان. #80262 (Elmi Ahmadov).
  • سابقًا، لم تكن وحدة التخزين packed مدعومة في full-text index، لأن معرّف segment كان يُحدَّث أثناء التنفيذ عبر قراءة ملف .gin_sid على disk وكتابته. وفي حالة وحدة التخزين packed، لا تكون قراءة قيمة من ملف غير مُعتمَد (uncommited) مدعومة، مما أدى إلى issue. أما الآن، فقد أصبح ذلك يعمل بصورة صحيحة. #80852 (Elmi Ahmadov).
  • أُعيدت تسمية indexes التجريبية من النوع gin (وهو اسم لا يعجبني لأنه مزحة داخلية بين مطوري PostgreSQL) إلى text. وما زالت indexes الحالية من النوع gin قابلة للتحميل، لكنها سترمي استثناءً (مع اقتراح استخدام indexes من النوع text بدلًا منها) عند محاولة استخدامها في البحث. #80855 (Robert Schulze).

تحسين الأداء

  • تمكين دعم التصفية باستخدام عدة projection، بما يتيح استخدام أكثر من projection واحدة للتصفية على مستوى الأجزاء. يعالج هذا #55525. وهذه هي الخطوة الثانية لتنفيذ فهرس projection، بعد #78429. #80343 (Amos Bird).
  • استخدام سياسة cache ‏SLRU في filesystem cache افتراضيًا. #75072 (Kseniia Sumarokova).
  • إزالة التزاحم في خطوة Resize ضمن query pipeline. #77562 (Zhiguo Zhou).
  • أُضيف خيار لنقل عمليات (de)compression و(de)serialization الخاصة بـ blocks إلى خيوط الـpipeline بدلًا من خيط واحد مرتبط باتصال شبكي. يتم التحكم في ذلك بواسطة الإعداد enable_parallel_blocks_marshalling. ومن المفترض أن يؤدي ذلك إلى تسريع distributed queries التي تنقل كميات كبيرة من البيانات بين initiator والعُقد البعيدة. #78694 (Nikita Taranov).
  • تحسينات في الأداء لجميع أنواع bloom filter. Video from the OpenHouse conference #79800 (Delyan Kratunov).
  • أُضيف مسار سريع في UniqExactSet::merge عندما تكون إحدى المجموعتين فارغة. كذلك، إذا كانت مجموعة LHS الآن ثنائية المستوى وكانت RHS أحادية المستوى، فلن نُجري تحويل RHS إلى ثنائية المستوى. #79971 (Nikita Taranov).
  • تحسين كفاءة إعادة استخدام الذاكرة وتقليل أخطاء الصفحات عند استخدام hash tables ثنائية المستوى. ومن شأن ذلك تسريع GROUP BY. #80245 (Jiebin Sun).
  • تجنّب التحديثات غير الضرورية وتقليل التزاحم على الأقفال في query condition cache. #80247 (Jiebin Sun).
  • تحسين بسيط لـ concatenateBlocks. ومن المرجّح أن يكون مفيدًا لـ parallel hash join. #80328 (李扬).
  • عند تحديد mark ranges من نطاق primary key، لا يمكن استخدام binary search إذا كانت primary key مغلّفة بدوال. يخفف هذا الـPR من هذا القيد: إذ يظل بالإمكان تطبيق binary search عندما تكون primary key مغلّفة بسلسلة دوال رتيبة دائمًا، أو عندما تحتوي RPN على عنصر يكون صحيحًا دائمًا. يُغلق #45536. #80597 (zoomxi).
  • تحسين سرعة إيقاف تشغيل محرك Kafka (إزالة تأخير إضافي قدره 3 ثوانٍ في حالة وجود جداول Kafka متعددة). #80796 (Azat Khuzhin).
  • Async inserts: تقليل memory usage وتحسين أداء استعلامات insert. #80972 (Raúl Marín).
  • عدم إجراء profile على processors إذا كان جدول السجل معطّلًا. #81256 (Raúl Marín). وهذا يسرّع الاستعلامات القصيرة جدًا.
  • تسريع toFixedString عندما تكون القيمة المصدر مطابقة تمامًا لما هو مطلوب. #81257 (Raúl Marín).
  • لا تُعالَج قيم الحصص إذا لم يكن المستخدم خاضعًا لقيود. #81549 (Raúl Marín). يسرّع ذلك الاستعلامات القصيرة جدًا.
  • إصلاح تراجع في الأداء في تتبّع الذاكرة. #81694 (Michael Kolupaev).
  • تحسين أمثلية مفتاح التجزئة في الاستعلام الموزّع. #78452 (fhw12345).
  • النسخ المتماثلة المتوازية: تجنُّب انتظار النسخ المتماثلة البطيئة غير المستخدمة إذا كانت جميع مهام القراءة قد أُسنِدت إلى نسخ متماثلة أخرى. #80199 (Igor Nikonov).
  • تستخدم النسخ المتماثلة المتوازية مهلة اتصال مستقلة، راجع الإعداد parallel_replicas_connect_timeout_ms. سابقًا كانت الإعدادات connect_timeout_with_failover_ms/connect_timeout_with_failover_secure_ms تُستخدم كقيم مهلة الاتصال لاستعلامات النسخ المتماثلة المتوازية (ثانية واحدة افتراضيًا). #80421 (Igor Nikonov).
  • في نظام ملفات مزوّد بسجل، تُكتَب عملية mkdir في سجل نظام الملفات المحفوظ على القرص. وإذا كان القرص بطيئًا، فقد يستغرق ذلك وقتًا طويلًا. نُقِل هذا خارج نطاق قفل الحجز. #81371 (Kseniia Sumarokova).
  • تأجيل قراءة ملفات manifest الخاصة بـ Iceberg حتى أول استعلام قراءة. #81619 (Daniil Ivanik).
  • السماح بنقل الشرط GLOBAL [NOT] IN إلى عبارة PREWHERE عند الاقتضاء. #79996 (Eduard Karacharov).

تحسينات

  • يستخدم EXPLAIN SYNTAX الآن محلّلًا جديدًا. ويُرجع AST مُنشأً من شجرة الاستعلام. وأُضيف الخيار query_tree_passes للتحكم في عدد التمريرات التي تُنفَّذ قبل تحويل شجرة الاستعلام إلى AST. #74536 (Vladimir Cherkasov).
  • أُضيف تسلسل مسطّح لـ Dynamic وJSON في Native format، ما يتيح تسلسل/فك تسلسل بيانات Dynamic وJSON دون الحاجة إلى بُنى خاصة مثل shared variant لـ Dynamic وshared data لـ JSON. ويمكن تمكين هذا التسلسل عبر الإعداد output_format_native_use_flattened_dynamic_and_json_serialization. كما يمكن استخدامه لتسهيل دعم Dynamic وJSON في بروتوكول TCP لدى العملاء بمختلف اللغات. #80499 (Pavel Kruglov).
  • تحديث بيانات اعتماد S3 بعد الخطأ AuthenticationRequired. #77353 (Vitaly Baranov).
  • أُضيفت مقاييس القواميس إلى system.asynchronous_metrics - DictionaryMaxUpdateDelay - أقصى تأخير (بالثواني) في تحديث القاموس. - DictionaryTotalFailedUpdates - عدد الأخطاء منذ آخر تحميل ناجح في جميع القواميس. #78175 (Vlad).
  • إضافة تحذير بشأن قواعد البيانات التي قد تكون أُنشئت لحفظ الجداول المعطوبة. #78841 (János Benjamin Antal).
  • إضافة العمود الظاهري _time في محرّكي S3Queue وAzureQueue. #78926 (Anton Ivashkin).
  • جعل الإعدادات التي تتحكم في قطع الاتصال عند زيادة حمل CPU قابلة لإعادة التحميل الفوري. #79052 (Alexey Katsman).
  • إضافة بادئة الحاوية إلى مسارات البيانات المُبلّغ عنها في system.tables للأقراص العادية في Azure blob storage، بما يجعل التقارير متسقة مع S3 وGCP. #79241 (Julia Kartseva).
  • يقبل clickhouse-client وlocal الآن أيضًا معلمات الاستعلام بصيغة param-<name> (شرطة) إلى جانب param_<name> (شرطة سفلية). وهذا يُغلق #63093. #79429 (Engel Danila).
  • رسالة تحذير مفصّلة بشأن خصم عرض النطاق الترددي عند نسخ البيانات من التخزين المحلي إلى S3 البعيد مع تمكين checksum. #79464 (VicoWu).
  • سابقًا، عندما كانت القيمة input_format_parquet_max_block_size = 0 (وهي قيمة غير صالحة)، كان ClickHouse يتوقف عن الاستجابة. وقد أُصلح هذا السلوك الآن. وهذا يُغلق #79394. #79601 (abashkeev).
  • إضافة الإعداد throw_on_error إلى startup_scripts: عندما تكون قيمة throw_on_error هي true، فلن يبدأ الخادوم ما لم تكتمل جميع الاستعلامات بنجاح. وتكون قيمة throw_on_error افتراضيًا false، مع الحفاظ على السلوك السابق. #79732 (Aleksandr Musorin).
  • السماح بإضافة http_response_headers في http_handlers من أي نوع. #79975 (Andrey Zvonov).
  • تدعم الدالة reverse الآن نوع البيانات Tuple. يُغلق #80053. #80083 (flynn).
  • حل #75817: السماح بجلب بيانات auxiliary_zookeepers من جدول system.zookeeper. #80146 (Nikolay Govorov).
  • إضافة metrics غير متزامنة عن مقابس TCP الخاصة بالخادم. وهذا يحسّن قابلية الرصد. يغلق #80187. #80188 (Alexey Milovidov).
  • دعم anyLast_respect_nulls و any_respect_nulls بوصفهما SimpleAggregateFunction. #80219 (Diskein).
  • إزالة الاستدعاء غير الضروري adjustCreateQueryForBackup لقواعد البيانات Replicated. #80282 (Vitaly Baranov).
  • السماح بتمرير خيارات إضافية (تأتي بعد -- مثل -- --config.value='abc') في clickhouse-local من دون علامة المساواة. يغلق #80292. #80293 (Alexey Milovidov).
  • إبراز المحارف الخاصة في استعلامات SHOW ... LIKE. هذا يغلق #80275. #80297 (Alexey Milovidov).
  • جعل SQL UDF دائمة في clickhouse-local. وستُحمَّل الدالة التي أُنشئت مسبقًا عند بدء التشغيل. هذا يغلق #80085. #80300 (Alexey Milovidov).
  • إصلاح الوصف في خطة EXPLAIN لخطوة DISTINCT التمهيدية. #80330 (UnamedRus).
  • السماح باستخدام named collections في ODBC/JDBC. #80334 (Andrey Zvonov).
  • إضافة metrics لعدد الأقراص readonly والمعطلة. كما تُسجَّل رسالة في السجل عند بدء تشغيل DiskLocalCheckThread. #80391 (VicoWu).
  • تنفيذ دعم التخزين s3_plain_rewritable مع projections. في الإصدارات السابقة، لم تكن كائنات metadata في S3 التي تشير إلى projections تُحدَّث عند نقلها. يغلق #70258. #80393 (Sav).
  • لن يحاول الأمر SYSTEM UNFREEZE البحث عن parts في الأقراص readonly وأقراص الكتابة لمرة واحدة. هذا يغلق #80430. #80432 (Alexey Milovidov).
  • خفض مستوى التسجيل لرسائل merged parts. #80476 (Hans Krutzer).
  • تغيير السلوك الافتراضي لاستبعاد الأقسام في جداول Iceberg. #80583 (Melvyn Peignon).
  • إضافة اثنين من ProfileEvents الجديدة لقابلية رصد خوارزميات البحث في index: IndexBinarySearchAlgorithm و IndexGenericExclusionSearchAlgorithm. #80679 (Pablo Marcos).
  • لا تُصدر رسائل في السجلات بشأن عدم دعم MADV_POPULATE_WRITE في النوى الأقدم (لتجنّب ازدحام السجلات). #80704 (Robert Schulze).
  • أُضيف دعم Date32 وDateTime64 في تعبيرات TTL. #80710 (Andrey Zvonov).
  • عُدّلت قيم التوافق الخاصة بـ max_merge_delayed_streams_for_parallel_write. #80760 (Azat Khuzhin).
  • إصلاح عطل: إذا طُرح استثناء أثناء محاولة إزالة ملف مؤقت (تُستخدم هذه الملفات لكتابة البيانات المؤقتة إلى القرص عند spilling) داخل المُخرِّب، فقد ينتهي البرنامج. #80776 (Alexey Milovidov).
  • إضافة المُعدِّل IF EXISTS إلى SYSTEM SYNC REPLICA. #80810 (Raúl Marín).
  • توسيع رسالة الاستثناء حول “Having zero bytes, but read range is not finished…”، وإضافة العمود finished_download_time إلى system.filesystem_cache. #80849 (Kseniia Sumarokova).
  • إضافة قسم خوارزمية البحث إلى مخرجات EXPLAIN عند استخدامه مع indexes = 1. ويعرض إما “binary search” أو “generic exclusion search”. #80881 (Pablo Marcos).
  • في بداية عام 2024، كانت prefer_column_name_to_alias مضبوطة برمجيًا على true لمعالج MySQL لأن analyzer الجديد لم يكن مفعّلًا افتراضيًا. والآن يمكن إلغاء هذا الضبط البرمجي. #80916 (Yarik Briukhovetskyi).
  • يعرض system.iceberg_history الآن السجلّ لقواعد بيانات catalogs مثل glue أو iceberg rest. كما أُعيدت تسمية العمودين table_name وdatabase_name إلى table وdatabase في system.iceberg_history لتحقيق الاتساق. #80975 (alesapin).
  • السماح بوضع القراءة فقط للدالة الجدولية merge، بحيث لا يعود امتياز CREATE TEMPORARY TABLE مطلوبًا لاستخدامها. #80981 (Miсhael Stetsyuk).
  • تحسين استبطان الذاكرات المخبئية داخل الذاكرة (بعرض معلومات عن الذاكرات المخبئية في system.metrics بدلًا من system.asynchronouse_metrics غير المكتمل). وإضافة حجم الذاكرات المخبئية داخل الذاكرة (بالبايت) إلى dashboard.html. كما أُعيدت تسمية VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSize إلى VectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytes. #81023 (Azat Khuzhin).
  • تجاهل قواعد البيانات ذات engines التي لا يمكن أن تحتوي على جداول RocksDB أثناء القراءة من system.rocksdb. #81083 (Pervakov Grigorii).
  • السماح باستخدام filesystem_caches وnamed_collections في ملف الإعداد clickhouse-local. #81105 (Alexey Milovidov).
  • إصلاح تمييز PARTITION BY في استعلامات INSERT. ففي الإصدارات السابقة، لم يكن PARTITION BY يُعرَض ككلمة مفتاحية. #81106 (Alexey Milovidov).
  • تحسينان صغيران في واجهة الويب: - التعامل بشكل صحيح مع الاستعلامات التي لا تُنتج مخرجات، مثل CREATE وINSERT (فحتى وقت قريب، كانت هذه الاستعلامات تؤدي إلى ظهور مؤشّر تحميل لا نهائي)؛ - عند النقر المزدوج على جدول، يتم التمرير إلى الأعلى. #81131 (Alexey Milovidov).
  • يوفّر المقياس MemoryResidentWithoutPageCache مقدار الذاكرة الفعلية التي تستهلكها عملية الخادم، باستثناء userspace page cache، بالبايت. ويمنح ذلك رؤية أدق لاستخدام الذاكرة الفعلي عند استخدام userspace page cache. وعند تعطيل userspace page cache، تكون هذه القيمة مساوية لـ MemoryResident. #81233 (Jayme Bird).
  • وسم الاستثناءات التي سُجّلت يدويًا في client والخادم المحلي وKeeper client وتطبيق disks على أنها مسجّلة، حتى لا تُسجَّل مرتين. #81271 (Miсhael Stetsyuk).
  • أصبحت الإعدادات use_skip_indexes_if_final وuse_skip_indexes_if_final_exact_mode تستخدم True افتراضيًا. وستستخدم الاستعلامات التي تتضمن العبارة FINAL الآن skip indexes (عند الاقتضاء) لتضييق نطاق granules، كما ستقرأ أي granules إضافية تقابل نطاقات primary key المطابقة. ويمكن للمستخدمين الذين يحتاجون إلى السلوك السابق القائم على النتائج التقريبية أو غير الدقيقة ضبط use_skip_indexes_if_final_exact_mode على FALSE بعد تقييم دقيق. #81331 (Shankar Iyer).
  • عند وجود عدة استعلامات في web UI، سيُشغَّل الاستعلام الموجود تحت المؤشر. استكمالًا لـ #80977. #81354 (Alexey Milovidov).
  • يعالج هذا PR مشكلات في تنفيذ is_strict ضمن فحوصات الرتابة لدوال التحويل. حاليًا، تُرجع بعض دوال التحويل، مثل toFloat64(UInt32) وtoDate(UInt8)، قيمة is_strict على أنها false بشكل غير صحيح، بينما ينبغي أن تُرجع true. #81359 (zoomxi).
  • عند التحقق مما إذا كان KeyCondition يطابق نطاقًا متصلًا، وإذا كان المفتاح مغلفًا بسلسلة دوال غير strict، فقد يلزم تحويل Constraint::POINT إلى Constraint::RANGE. على سبيل المثال: toDate(event_time) = '2025-06-03' يعني وجود نطاق لـ event_time: [‘2025-06-03 00:00:00’, ‘2025-06-04 00:00:00’). يُصلح هذا PR هذا السلوك. #81400 (zoomxi).
  • ستؤدي الأسماء المستعارة clickhouse/ch إلى استدعاء clickhouse-client بدلًا من clickhouse-local إذا جرى تحديد --host أو --port. استكمالًا لـ #79422. يُغلق #65252. #81509 (Alexey Milovidov).
  • بعد توفّر بيانات توزيع زمن استجابة Keeper، أصبح بإمكاننا ضبط buckets الخاصة بالمدرج التكراري للمقاييس. #81516 (Miсhael Stetsyuk).
  • إضافة حدث profile باسم PageCacheReadBytes. #81742 (Kseniia Sumarokova).
  • إصلاح خطأ منطقي في filesystem cache: “وجود صفر بايتات لكن النطاق لم ينتهِ”. #81868 (Kseniia Sumarokova).

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

  • إصلاح العرض ذي المعلمات مع استعلام SELECT EXCEPT. يغلق #49447. #57380 (Nikolay Degterinsky).
  • المحلّل: إصلاح اسم إسقاط العمود بعد ترقية نوع العمود في join. يغلق #63345. #63519 (Dmitry Novik).
  • إصلاح خطأ منطقي في حالات تعارض أسماء الأعمدة عندما يكون analyzer_compatibility_join_using_top_level_identifier مفعّلًا. #75676 (Vladimir Cherkasov).
  • إصلاح استخدام CTE في predicates المدفوعة للأسفل عندما يكون allow_push_predicate_ast_for_distributed_subqueries مفعّلًا. يصلح #75647. يصلح #79672. #77316 (Dmitry Novik).
  • إصلاح مشكلة كان فيها الأمر SYSTEM SYNC REPLICA LIGHTWEIGHT ‘foo’ يبلّغ عن نجاح العملية حتى عندما لا تكون النسخة المتماثلة المحددة موجودة. وأصبح الأمر الآن يتحقق بشكل صحيح من وجود النسخة المتماثلة في Keeper قبل محاولة المزامنة. #78405 (Jayme Bird).
  • إصلاح انهيار في حالة محددة جدًا عند استخدام الدالة currentDatabase في أقسام CONSTRAINT ضمن استعلامات ON CLUSTER يغلق #78100. #79070 (pufit).
  • إصلاح تمرير الأدوار الخارجية في الاستعلامات بين الخوادم. #79099 (Andrey Zvonov).
  • محاولة استخدام IColumn بدلًا من Field في SingleValueDataGeneric. وهذا يُصلح قيم الإرجاع غير الصحيحة لبعض الدوال التجميعية مثل argMax للأنواع Dynamic/Variant/JSON. #79166 (Pavel Kruglov).
  • إصلاح تطبيق الإعدادين use_native_copy و allow_azure_native_copy على Azure blob storage، وتحديث السلوك لاستخدام النسخ الأصلي فقط عند تطابق بيانات الاعتماد، مما يحل #78964. #79561 (Smita Kulkarni).
  • إصلاح أخطاء منطقية تتعلق بنطاق منشأ غير معروف لعمود، وكانت تظهر أثناء التحقق مما إذا كان هذا العمود مرتبطًا. يصلح #78183. يصلح #79451. #79727 (Dmitry Novik).
  • إصلاح النتائج غير الصحيحة لمجموعات التجميع مع ColumnConst والمحلّل. #79743 (Andrey Zvonov).
  • إصلاح تكرار نتائج الجزء المحلي عند القراءة من جدول موزّع عندما تكون النسخة المتماثلة المحلية متقادمة. #79761 (Eduard Karacharov).
  • إصلاح ترتيب الفرز لقيم NaN ذات بت الإشارة السالب. #79847 (Pervakov Grigorii).
  • الآن لم يعد GROUP BY ALL يراعي جزء GROUPING. #79915 (Yarik Briukhovetskyi).
  • تم إصلاح دمج الحالة غير الصحيح في الدالتين TopK / TopKWeighted، الذي كان يؤدي إلى قيم خطأ مفرطة حتى عند عدم استنفاد السعة. #79939 (Joel Höner).
  • تمت مراعاة الإعداد readonly في azure_blob_storage object storage. #79954 (Julia Kartseva).
  • تم إصلاح نتائج query غير الصحيحة وانهيارات نفاد الذاكرة عند استخدام match(column, '^…') مع محارف مُهرَّبة باستخدام backslash. #79969 (filimonov).
  • تعطيل partitioning بنمط Hive لبحيرات البيانات. يعالج هذا جزئيًا https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937. #80005 (Daniil Ivanik).
  • تعذر تطبيق skip indexes مع تعبيرات lambda. تم إصلاح الحالة التي تتطابق فيها الدوال عالية المستوى في تعريف index تمامًا مع الموجودة في query. #80025 (Nikolai Kochetov).
  • إصلاح إصدار metadata أثناء attach part على replica التي تنفذ أمر ATTACH_PART من سجل replication. #80038 (Aleksei Filatov).
  • لا تُضاف أسماء Executable User Defined Functions ‏(eUDF) إلى العمود used_functions في الجدول system.query_log، بخلاف الدوال الأخرى. ينفذ طلب السحب هذا إضافة اسم eUDF إذا استُخدمت eUDF في الطلب. #80073 (Kyamran).
  • إصلاح logical error في Arrow format مع LowCardinality(FixedString). #80156 (Pavel Kruglov).
  • إصلاح قراءة subcolumns من محرك Merge. #80158 (Pavel Kruglov).
  • إصلاح خلل في المقارنة بين الأنواع الرقمية داخل KeyCondition. #80207 (Yarik Briukhovetskyi).
  • إصلاح AMBIGUOUS_COLUMN_NAME عند تطبيق lazy materialization على table تحتوي على projections. #80251 (Igor Nikonov).
  • إصلاح تحسين العدّ غير الصحيح لعوامل تصفية prefix للسلاسل مثل LIKE ‘ab_c%’ عند استخدام projections الضمنية. ويعالج هذا #80250. #80261 (Amos Bird).
  • إصلاح serialization غير الصحيح لحقول رقمية متداخلة كسلاسل نصية في مستندات MongoDB. وإزالة الحد الأقصى لعمق المستندات من MongoDB. #80289 (Kirill Nikiforov).
  • إجراء فحوصات metadata أقل صرامة لـ RMT في Replicated database. يُغلق هذا #80296. #80298 (Nikolay Degterinsky).
  • إصلاح التمثيل النصي لـ DateTime وDateTime64 في PostgreSQL storage. #80301 (Yakov Olkhovskiy).
  • السماح باستخدام DateTime مع منطقة زمنية في جداول StripeLog. يُغلق هذا #44120. #80304 (Alexey Milovidov).
  • تعطيل filter-push-down للـ predicate الذي يحتوي على دالة غير حتمية إذا كانت خطوة في query plan تغيّر عدد الصفوف. يُصلح هذا #40273. #80329 (Nikolai Kochetov).
  • إصلاح الأخطاء المنطقية المحتملة والأعطال في projections مع subcolumns. #80333 (Pavel Kruglov).
  • إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK الناتج عن تحسين filter-push-down لخطوة JOIN المنطقية عندما لا يكون التعبير ON عبارة عن مساواة بسيطة. يُصلح هذا #79647 ويُصلح #77848. #80360 (Nikolai Kochetov).
  • إصلاح النتيجة غير الصحيحة عند قراءة المفاتيح المرتبة ترتيبًا عكسيًا في الجداول المُقسَّمة إلى partitionات. يُصلح هذا #79987. #80448 (Amos Bird).
  • إصلاح الفرز غير الصحيح في الجداول التي تحتوي على مفتاح Nullable مع تفعيل optimize_read_in_order. #80515 (Pervakov Grigorii).
  • إصلاح تعطل عملية DROP للـ refreshable materialized view إذا كان العرض قد أُوقِف باستخدام SYSTEM STOP REPLICATED VIEW. #80543 (Michael Kolupaev).
  • إصلاح الخطأ ‘Cannot find column’ مع Tuple ثابت في distributed query. #80596 (Yakov Olkhovskiy).
  • إصلاح الدالة shardNum في جداول Distributed مع join_use_nulls. #80612 (János Benjamin Antal).
  • إصلاح النتيجة غير الصحيحة عند قراءة column موجود في subset من الجداول في محرك Merge. #80643 (Pavel Kruglov).
  • إصلاح مشكلة محتملة في بروتوكول SSH (بسبب تعليق في replxx). #80688 (Azat Khuzhin).
  • أصبح الـ timestamp في جدول iceberg_history صحيحًا الآن. #80711 (Melvyn Peignon).
  • إصلاح عطل محتمل عند فشل تسجيل Dictionary (فعندما يفشل CREATE DICTIONARY مع CANNOT_SCHEDULE_TASK قد يترك ذلك مؤشرًا معلّقًا في registry الخاص بالـ Dictionary، ما قد يؤدي لاحقًا إلى عطل). #80714 (Azat Khuzhin).
  • إصلاح التعامل مع globs من نوع enum ذات العنصر الواحد في table functions الخاصة بـ object storage. #80716 (Konstantin Bogdanov).
  • إصلاح نوع النتيجة غير الصحيح لدوال المقارنة مع Tuple(Dynamic) وString، والذي كان يؤدي إلى خطأ منطقي. #80728 (Pavel Kruglov).
  • إضافة دعم نوع البيانات المفقود timestamp_ntz في Unity Catalog. يُصلح #79535، ويُصلح #79875. #80740 (alesapin).
  • إصلاح الخطأ THERE_IS_NO_COLUMN في الاستعلامات الموزعة مع IN cte. يُصلح #75032. #80757 (Nikolai Kochetov).
  • إصلاح العدد المفرط من الملفات (مما يؤدي إلى استهلاك مفرط للذاكرة) في ORDER BY الخارجي. #80777 (Azat Khuzhin).
  • قد يُغلق طلب السحب هذا #80742. #80783 (zoomxi).
  • إصلاح تعطل في Kafka بسبب أن get_member_id() كان يُنشئ std::string من NULL (وربما كانت هذه المشكلة تحدث فقط عند فشل الاتصال بالوسيط). #80793 (Azat Khuzhin).
  • انتظار المستهلكين بشكل صحيح قبل إيقاف Kafka engine (إذ يمكن أن تؤدي المستهلكات النشطة بعد الإيقاف إلى تشغيل عمليات تحقق Debug متنوعة، وقد تقرأ أيضًا بيانات من الوسطاء في الخلفية بعد إسقاط الجدول أو فصله). #80795 (Azat Khuzhin).
  • إصلاح NOT_FOUND_COLUMN_IN_BLOCK الناتج عن تحسين predicate-push-down. يُصلح #80443. #80834 (Nikolai Kochetov).
  • إصلاح خطأ منطقي عند تحليل مطابقة النجمة (*) في table function ضمن JOIN مع USING. #80894 (Vladimir Cherkasov).
  • إصلاح احتساب الذاكرة لذاكرة التخزين المؤقت الخاصة بملفات بيانات Iceberg الوصفية. #80904 (Azat Khuzhin).
  • إصلاح التقسيم غير الصحيح مع partition key قابل لـ NULL. #80913 (Pervakov Grigorii).
  • إصلاح الخطأ Table does not exist في الاستعلامات الموزعة مع predicate مدفوع إلى الأسفل (allow_push_predicate_ast_for_distributed_subqueries=1) عندما لا يكون source table موجودًا على initiator. يُصلح #77281. #80915 (Nikolai Kochetov).
  • إصلاح خطأ منطقي في الدوال المتداخلة مع نوافذ مسماة. #80926 (Pervakov Grigorii).
  • إصلاح Extremes للأعمدة القابلة لـ NULL وأعمدة الأعداد ذات الفاصلة العائمة. #80970 (Pervakov Grigorii).
  • إصلاح تعطل محتمل أثناء الاستعلام من system.tables (وربما يحدث ذلك عند وجود ضغط على الذاكرة). #80976 (Azat Khuzhin).
  • إصلاح إعادة التسمية الذرية مع truncate للملفات التي يُستدل على الضغط فيها من امتداد الملف. #80979 (Pablo Marcos).
  • إصلاح ErrorCodes::getName. #81032 (RinChanNOW).
  • إصلاح خلل كان يمنع المستخدم من سرد الجداول في Unity Catalog من دون امتلاك أذونات عليها جميعًا. الآن تُدرج كل الجداول بشكل صحيح، وأي محاولة للقراءة من جدول مقيّد ستؤدي إلى إطلاق استثناء. #81044 (alesapin).
  • سيتجاهل ClickHouse الآن الأخطاء والاستجابات غير المتوقعة من كتالوجات بحيرات البيانات في استعلام SHOW TABLES. يعالج هذا #79725. #81046 (alesapin).
  • إصلاح تحليل DateTime64 من الأعداد الصحيحة في JSONExtract وعند تحليل نوع JSON. #81050 (Pavel Kruglov).
  • أخذ الإعداد date_time_input_format في الحسبان ضمن ذاكرة التخزين المؤقت لاستدلال المخطط. #81052 (Pavel Kruglov).
  • إصلاح التعطل عند INSERT إذا حُذف الجدول بعد بدء الاستعلام ولكن قبل إرسال الأعمدة. #81053 (Azat Khuzhin).
  • إصلاح use-of-uninitialized-value في quantileDeterministic. #81062 (Azat Khuzhin).
  • إصلاح إدارة عدد الروابط الصلبة لمعاملات القرص metadatastoragefromdisk. وإضافة اختبارات. #81066 (Sema Checherinda).
  • لا تُضاف أسماء User Defined Functions (UDF) إلى جدول system.query_log بخلاف الدوال الأخرى. يضيف هذا التغيير اسم UDF إلى أحد العمودين used_executable_user_defined_functions أو used_sql_user_defined_functions إذا استُخدمت UDF في الطلب. #81101 (Kyamran).
  • إصلاح أخطاء Too large size ... passed to allocator أو حالات التعطل المحتملة في عمليات INSERT عبر بروتوكول HTTP باستخدام التنسيقات النصية (JSON, Values, …) مع حذف حقول Enum. #81145 (Anton Popov).
  • إصلاح LOGICAL_ERROR عند وجود عمود Sparse في block خاص بـ INSERT مُرسل إلى MV غير MT. #81161 (Azat Khuzhin).
  • إصلاح Unknown table expression identifier في distributed_product_mode_local=local مع النسخ المتماثل المتقاطع. #81162 (Nikolai Kochetov).
  • إصلاح التخزين المؤقت غير الصحيح لعدد الصفوف في ملفات Parquet بعد التصفية. #81184 (Michael Kolupaev).
  • إصلاح الإعداد fs cache max_size_to_total_space عند استخدامه مع مسار cache نسبي. #81237 (Kseniia Sumarokova).
  • إصلاح تعطل clickhouse-local عند إخراج tuples أو maps ثابتة بتنسيق Parquet. #81249 (Michael Kolupaev).
  • التحقق من offsets الخاصة بالمصفوفات المستلمة عبر الشبكة. #81269 (Azat Khuzhin).
  • إصلاح بعض الحالات الطرفية في استعلام يربط جداول فارغة ويستخدم دوال النافذة. يؤدي هذا الخلل إلى تضخم عدد التدفقات المتوازية، مما يسبب حالات نفاد الذاكرة (OOM). #81299 (Alexander Gololobov).
  • إصلاحات لدوال Cluster الخاصة بـ data lake (deltaLakeCluster وicebergCluster وما إلى ذلك): (1) إصلاح احتمال حدوث segfault في DataLakeConfiguration عند استخدام الدالة Cluster مع المحلّل القديم؛ (2) إزالة التحديثات المكررة لبيانات data lake الوصفية (طلبات إضافية إلى تخزين الكائنات)؛ (3) إصلاح عمليات الإدراج الزائدة في تخزين الكائنات عندما لا يكون التنسيق محددًا صراحةً (وكان ذلك قد أُنجز بالفعل لمحركات data lake غير العنقودية). #81300 (Kseniia Sumarokova).
  • جعل العلامة force_restore_data تستعيد البيانات الوصفية المفقودة لـ Keeper. #81324 (Raúl Marín).
  • إصلاح خطأ Region في delta-kernel. يُصلح #79914. #81353 (Kseniia Sumarokova).
  • تعطيل JIT غير الصحيح لـ divideOrNull. #81370 (Raúl Marín).
  • إصلاح خطأ insert عند وجود اسم طويل لعمود partition في جدول MergeTree. #81390 (hy123q).
  • نُقل الإصلاح إلى الإصدارات الأقدم في #81957: إصلاح احتمال حدوث crash في Aggregator عند وقوع استثناء أثناء merge. #81450 (Nikita Taranov).
  • لا تخزّن محتوى عدة ملفات manifest في الذاكرة. #81470 (Daniil Ivanik).
  • إصلاح احتمال حدوث crash أثناء إيقاف مجمعات الخلفية (background_.*pool_size). #81473 (Azat Khuzhin).
  • إصلاح قراءة خارج الحدود في التنسيق Npy عند الكتابة إلى table يستخدم engine URL. يُغلق هذا #81356. #81502 (Alexey Milovidov).
  • هناك احتمال أن تعرض واجهة الويب NaN% (وهي من مشكلات JavaScript المعتادة). #81507 (Alexey Milovidov).
  • إصلاح DatabaseReplicated للحالة database_replicated_enforce_synchronous_settings=1. #81564 (Azat Khuzhin).
  • إصلاح ترتيب الفرز للأنواع LowCardinality(Nullable(…)). #81583 (Pervakov Grigorii).
  • يجب ألا يحتفظ الخادم باتصال HTTP إذا لم تتم قراءة الطلب بالكامل من socket. #81595 (Sema Checherinda).
  • جعل الاستعلامات الفرعية المترابطة scalar تُرجع نتيجة Nullable لتعبير projection. وإصلاح الحالة التي يُنتج فيها الاستعلام الفرعي المترابط مجموعة نتائج فارغة. #81632 (Dmitry Novik).
  • إصلاح Unexpected relative path for a deduplicated part أثناء ATTACH إلى ReplicatedMergeTree. #81647 (Azat Khuzhin).
  • لن تسري إعدادات الاستعلام use_iceberg_partition_pruning على تخزين Iceberg لأنها تستخدم السياق العام بدلًا من سياق الاستعلام. وهذا ليس أمرًا حرجًا لأن القيمة الافتراضية هي true. ويمكن لهذا التغيير إصلاح ذلك. #81673 (Han Fei).
  • تم ترحيله أيضًا إلى الإصدارات السابقة في #82128: إصلاح الخطأ “Context has expired” أثناء عمليات الدمج عند استخدام قاموس في تعبير TTL. #81690 (Azat Khuzhin).
  • إضافة تحقّق من صحة إعداد MergeTree ‏merge_max_block_size لضمان ألا يساوي صفرًا. #81693 (Bharat Nallan).
  • إصلاح مشكلات في clickhouse-local تتعلق باستعلامات DROP VIEW العالقة. #81705 (Bharat Nallan).
  • إصلاح عملية join في StorageRedis في بعض الحالات. #81736 (Pervakov Grigorii).
  • إصلاح تعطل في ConcurrentHashJoin عند استخدام USING () فارغة مع تفعيل المحلّل القديم. #81754 (Nikita Taranov).
  • إصلاح في Keeper: منع اعتماد سجلات جديدة إذا وُجد إدخال غير صالح في السجلات. سابقًا، إذا طبّق القائد بعض السجلات بشكل غير صحيح، فكان يواصل اعتماد سجلات جديدة، رغم أن التابع كان سيكتشف عدم تطابق digest ويتوقف. #81780 (Antonio Andelic).
  • إصلاح المشكلة التي لا تُقرأ فيها الأعمدة المطلوبة أثناء معالجة الاستعلامات الفرعية scalar المترابطة. يُصلح #81716. #81805 (Dmitry Novik).
  • قام أحدهم بحشو شيفرتنا بـ Kusto. وتم تنظيف ذلك. هذا يغلق #81643. #81885 (Alexey Milovidov).
  • في الإصدارات السابقة، كان الخادم يعيد محتوى زائدًا للطلبات الموجّهة إلى /js. هذا يغلق #61890. #81895 (Alexey Milovidov).
  • سابقًا، كان يمكن أن تتضمن تعريفات محرك الجدول MongoDB مكوّن مسار في الوسيط host:port، وكان يُتجاهل بصمت. ويرفض تكامل MongoDB تحميل مثل هذه الجداول. ومع هذا الإصلاح نسمح بتحميل هذه الجداول ونتجاهل مكوّن المسار إذا كان لمحرك MongoDB خمسة وسائط، مع استخدام اسم قاعدة البيانات من الوسائط. ملاحظة: لا يُطبَّق هذا الإصلاح على الجداول المُنشأة حديثًا أو على الاستعلامات التي تستخدم دالة الجدول mongo، وكذلك على مصادر القواميس والمجموعات المسماة. #81942 (Vladimir Cherkasov).
  • إصلاح تعطل محتمل في Aggregator عند حدوث استثناء أثناء الدمج. #82022 (Nikita Taranov).
  • إصلاح خطأ نسخ ولصق في arraySimilarity، ومنع استخدام أوزان UInt32 وInt32. مع تحديث الاختبارات والوثائق. #82103 (Mikhail f. Shiryaev).
  • إصلاح احتمال حدوث سباق بيانات بين خيط الاقتراحات والخيط الرئيسي للعميل. #82233 (Azat Khuzhin).

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

إصدار ClickHouse 25.5، 2025-05-22

تغيير غير متوافق مع الإصدارات السابقة

  • أصبحت الدالة geoToH3 تقبل المُدخلات الآن بالترتيب (lat, lon, res) (وهو الترتيب الشائع في الدوال الهندسية الأخرى). ويمكن للمستخدمين الذين يرغبون في الاحتفاظ بترتيب النتائج السابق (lon, lat, res) ضبط الإعداد geotoh3_argument_order = 'lon_lat'. #78852 (Pratima Patel).
  • أُضيف إعداد لذاكرة التخزين المؤقت لنظام الملفات allow_dynamic_cache_resize، وقيمته الافتراضية false، للسماح بتغيير حجم ذاكرة التخزين المؤقت لنظام الملفات ديناميكيًا. السبب: في بعض البيئات (ClickHouse Cloud)، تحدث جميع أحداث التوسّع عبر إعادة تشغيل العملية، ونرغب في أن تكون هذه الميزة معطّلة صراحةً لمزيد من التحكم في السلوك وكإجراء احترازي أيضًا. وقد وُسِم طلب السحب هذا بأنه غير متوافق مع الإصدارات السابقة، لأن تغيير الحجم الديناميكي لذاكرة التخزين المؤقت كان يعمل افتراضيًا في الإصدارات الأقدم من دون إعداد خاص. #79148 (Kseniia Sumarokova).
  • أُزيل دعم أنواع الفهارس القديمة annoy وusearch. وكان كلاهما مجرد هياكل صورية منذ وقت طويل، أي إن كل محاولة لاستخدام هذه الفهارس القديمة كانت تُرجع خطأً على أي حال. إذا كانت لا تزال لديك فهارس annoy وusearch، فيُرجى حذفها. #79802 (Robert Schulze).
  • أُزيل إعداد الخادم format_alter_commands_with_parentheses. أُضيف هذا الإعداد وكان معطّلًا افتراضيًا في 24.2. ثم فُعِّل افتراضيًا في 25.2. وبما أنه لا توجد إصدارات LTS لا تدعم التنسيق الجديد، فيمكن إزالة هذا الإعداد. #79970 (János Benjamin Antal).
  • فُعِّل تنفيذ delta-kernel-rs لتخزين DeltaLake افتراضيًا. #79541 (Kseniia Sumarokova).
  • إذا كانت القراءة من URL تتضمن عدة عمليات إعادة توجيه، فسيُطبَّق الإعداد enable_url_encoding بشكل صحيح عبر جميع عمليات إعادة التوجيه في السلسلة. #79563 (Shankar Iyer). أصبحت القيمة الافتراضية للإعداد enble_url_encoding الآن false. #80088 (Shankar Iyer).

ميزة جديدة

  • دعم الاستعلامات الفرعية المترابطة القيمية في جملة WHERE. ويُغلق هذا #6697. #79600 (Dmitry Novik). ودعم الاستعلامات الفرعية المترابطة في قائمة الإسقاط في الحالات البسيطة. #79925 (Dmitry Novik). #76078 (Dmitry Novik). ويغطي الآن 100% من مجموعة اختبارات TPC-H.
  • أصبح البحث المتجهي باستخدام فهرس تشابه المتجهات الآن في مرحلة بيتا (بعد أن كان سابقًا تجريبيًا). #80164 (Robert Schulze).
  • دعم الأنواع الجغرافية في تنسيق Parquet. ويُغلق هذا #75317. #79777 (scanhex12).
  • دوال جديدة sparseGrams, sparseGramsHashes, sparseGramsHashesUTF8, sparseGramsUTF8 لحساب “sparse-ngrams” — وهي خوارزمية قوية لاستخراج السلاسل الفرعية لأغراض الفهرسة والبحث. #79517 (scanhex12).
  • يستخدم clickhouse-local (واسمه المستعار المختصر ch) الآن FROM table ضمنيًا عند وجود بيانات إدخال للمعالجة. ويُغلق هذا #65023. كما أُتيح استنتاج التنسيق في clickhouse-local إذا لم يُحدَّد --input-format وكان يعالج ملفًا عاديًا. #79085 (Alexey Milovidov).
  • إضافة الدالتين stringBytesUniq وstringBytesEntropy للبحث عن بيانات قد تكون عشوائية أو مشفرة. #79350 (Sachin Kumar Singh).
  • أُضيفت دوال لترميز base32 وفك ترميزه. #79809 (Joanna Hulboj).
  • إضافة الدالتين getServerSetting وgetMergeTreeSetting. ويُغلق هذا #78318. #78439 (NamNguyenHoai).
  • إضافة الإعداد الجديد iceberg_enable_version_hint للاستفادة من ملف version-hint.text. #78594 (Arnaud Briche).
  • يتيح إمكانية TRUNCATE لجداول محددة من قاعدة بيانات، مع تصفيتها باستخدام الكلمة المفتاحية LIKE. #78597 (Yarik Briukhovetskyi).
  • دعم العمود الافتراضي _part_starting_offset في جداول عائلة MergeTree. يمثّل هذا العمود العدد التراكمي للصفوف في جميع الأجزاء السابقة، ويُحسَب في وقت الاستعلام استنادًا إلى قائمة الأجزاء الحالية. وتُحفَظ القيم التراكمية طوال تنفيذ الاستعلام وتظل سارية حتى بعد part pruning. كما أُعيدت هيكلة المنطق الداخلي ذي الصلة لدعم هذا السلوك. #79417 (Amos Bird).
  • إضافة الدوال divideOrNull,moduloOrNull, intDivOrNull,positiveModuloOrNull لإرجاع NULL عندما تكون المعطاة اليمنى صفرًا. #78276 (kevinyhzou).
  • يدعم البحث المتجهي في ClickHouse الآن كلاً من التصفية المسبقة والتصفية اللاحقة، ويوفر إعدادات ذات صلة لمزيد من التحكم الدقيق. (التذكرة #78161). #79854 (Shankar Iyer).
  • إضافة الدالتين icebergHash وicebergBucket. ودعم استبعاد ملفات البيانات في جداول Iceberg المُقسَّمة باستخدام bucket transfom. #79262 (Daniil Ivanik).

ميزة تجريبية

  • أنواع البيانات الجديدة Time/Time64: ‏Time (HHH:MM:SS) وTime64 (HHH:MM:SS.<fractional>) مع بعض دوال التحويل الأساسية ودوال للتعامل مع أنواع البيانات الأخرى. كذلك، تم تغيير اسم الدالة الحالية من toTime إلى toTimeWithFixedDate لأن الدالة toTime مطلوبة لدالة التحويل. #75735 (Yarik Briukhovetskyi). 72459).
  • كتالوج Hive metastore لبحيرة بيانات Iceberg. #77677 (scanhex12).
  • أُعيدت تسمية الفهارس من النوع full_text إلى gin. وهذا يتماشى مع المصطلحات الأكثر شيوعًا في PostgreSQL وقواعد البيانات الأخرى. تظل الفهارس الحالية من النوع full_text قابلة للتحميل، لكنها ستطرح استثناءً (مع اقتراح فهارس gin بدلًا منها) عند محاولة استخدامها في عمليات البحث. #79024 (Robert Schulze).

تحسين الأداء

  • تغيير تنسيق الأجزاء compact لحفظ العلامات لكل substream بما يتيح قراءة subcolumns الفردية. ولا يزال تنسيق Compact القديم مدعومًا لعمليات القراءة، كما يمكن تمكينه لعمليات الكتابة باستخدام إعداد MergeTree write_marks_for_substreams_in_compact_parts. وهو معطّل افتراضيًا لجعل الترقيات أكثر أمانًا، لأنه يغيّر طريقة تخزين الأجزاء compact. وسيُفعَّل افتراضيًا في أحد الإصدارات القادمة. #77940 (Pavel Kruglov).
  • السماح بنقل الشروط التي تتضمن subcolumns إلى prewhere. #79489 (Pavel Kruglov).
  • تسريع الفهارس الثانوية عبر تقييم تعبيراتها على عدة granules دفعةً واحدة. #64109 (Alexey Milovidov).
  • تمكين compile_expressions (مصرّف JIT لأجزاء من التعبيرات العادية) افتراضيًا. يُغلق هذا #51264 و#56386 و#66486. #79907 (Alexey Milovidov).
  • تقديم إعداد جديد: use_skip_indexes_in_final_exact_mode. إذا كان الاستعلام على جدول ReplacingMergeTree يتضمن العبارة FINAL، فإن قراءة نطاقات الجدول فقط استنادًا إلى skip indexes قد تؤدي إلى نتيجة غير صحيحة. يضمن هذا الإعداد إرجاع نتائج صحيحة من خلال فحص الأجزاء الأحدث التي تتداخل مع نطاقات المفتاح الأساسي التي يعيدها skip index. اضبطه على 0 للتعطيل، و1 للتمكين. #78350 (Shankar Iyer).
  • ستُسنِد Table functions الخاصة بالـ cluster في object storage (مثل s3Cluster) الآن الملفات إلى replicas للقراءة استنادًا إلى consistent hash لتحسين تمركز ذاكرة التخزين المؤقت. #77326 (Andrej Hoos).
  • تحسين أداء S3Queue/AzureQueue عبر السماح بتنفيذ عمليات INSERT للبيانات بالتوازي (يمكن تمكين ذلك باستخدام إعداد queue parallel_inserts=true). سابقًا، كان S3Queue/AzureQueue لا ينفذان بالتوازي إلا الجزء الأول من pipeline (التنزيل والتحليل)، وكانت عملية INSERT أحادية الخيط. كما أن عمليات INSERT تكاد تكون دائمًا هي عنق الزجاجة. والآن سيزداد الأداء بشكل شبه خطي مع processing_threads_num. #77671 (Azat Khuzhin). كما جرى تحسين عدالة max_processed_files_before_commit في S3Queue/AzureQueue. #79363 (Azat Khuzhin).
  • تقديم threshold (يُنظَّم بواسطة الإعداد parallel_hash_join_threshold) للرجوع إلى الخوارزمية hash عندما يكون حجم الجدول الأيمن أقل من threshold. #76185 (Nikita Taranov).
  • نستخدم الآن عدد replicas لتحديد task size لعمليات القراءة عند تمكين parallel replicas. ويوفر ذلك توزيعًا أفضل للعمل بين replicas عندما لا تكون كمية البيانات المطلوب قراءتها كبيرة فعليًا. #78695 (Nikita Taranov).
  • السماح بالدمج المتوازي لحالات uniqExact خلال المرحلة النهائية من aggregation الموزع. #78703 (Nikita Taranov).
  • إصلاح احتمال تراجع الأداء في الدمج المتوازي لحالات uniqExact عند aggregation باستخدام مفتاح. #78724 (Nikita Taranov).
  • تقليل عدد استدعاءات List Blobs API إلى Azure storage. #78860 (Julia Kartseva).
  • تحسين أداء INSERT SELECT الموزّع مع النسخ المتماثلة المتوازية. #79441 (Azat Khuzhin).
  • منع LogSeriesLimiter من إجراء التنظيف عند كل عملية إنشاء، ما يجنّب التنازع على الأقفال وتراجع الأداء في سيناريوهات التزامن العالي. #79864 (filimonov).
  • تسريع الاستعلامات عبر تحسين العدّ البسيط. #79945 (Raúl Marín).
  • تحسين التضمين لبعض العمليات مع Decimal. #79999 (Konstantin Bogdanov).
  • تعيين input_format_parquet_bloom_filter_push_down إلى true افتراضيًا. وكذلك إصلاح خطأ في سجل تغييرات الإعدادات. #80058 (Alexey Milovidov).
  • تحسين mutations الخاصة بـ ALTER ... DELETE للأجزاء التي يجب حذف جميع الصفوف فيها. والآن، في مثل هذه الحالات، يُنشأ جزء فارغ بدلًا من الجزء الأصلي من دون تنفيذ mutation. #79307 (Anton Popov).
  • تجنّب النسخ الإضافي لـ block أثناء الإدراج في Compact part عند الإمكان. #79536 (Pavel Kruglov).
  • إضافة الإعداد input_format_max_block_size_bytes لتقييد blocks التي تُنشأ في input formats بالبايت. ويمكن أن يساعد ذلك في تجنّب ارتفاع memory usage أثناء استيراد البيانات عندما تحتوي الصفوف على values كبيرة. #79495 (Pavel Kruglov).
  • إزالة صفحات الحماية لـ threads و async_socket_for_remote/use_hedge_requests. وتغيير طريقة التخصيص في FiberStack من mmap إلى aligned_alloc. وبما أن ذلك يؤدي إلى تقسيم VMA، فقد يتم بلوغ vm.max_map_count تحت الحمل الشديد. #79147 (Sema Checherinda).
  • Lazy Materialization مع النسخ المتماثلة المتوازية. #79401 (Igor Nikonov).

تحسينات

  • أُضيفت إمكانية تطبيق lightweight deletes مباشرةً أثناء التنفيذ (باستخدام الإعدادات lightweight_deletes_sync = 0 و apply_mutations_on_fly = 1). #79281 (Anton Popov).
  • إذا كانت البيانات المعروضة بتنسيق Pretty تظهر في الطرفية، وكان block لاحق يستخدم عروض الأعمدة نفسها، فيمكن متابعته من block السابق ودمجه معه عبر تحريك المؤشر إلى الأعلى. وبذلك يُغلَق #79333. وتخضع هذه الميزة للإعداد الجديد output_format_pretty_glue_chunks. #79339 (Alexey Milovidov).
  • تم توسيع الدالة isIPAddressInRange لتدعم أنواع البيانات String و IPv4 و IPv6 و Nullable(String) و Nullable(IPv4) و Nullable(IPv6). #78364 (YjyJeff).
  • أصبح من الممكن تغيير إعدادات pooler لاتصال محرك PostgreSQL ديناميكيًا. #78414 (Samay Sharma).
  • أصبح من الممكن تحديد _part_offset في projection العادي. وهذه هي الخطوة الأولى نحو بناء فهرس projection. ويمكن استخدامه مع #58224، وقد يساعد في تحسين #63207. #78429 (Amos Bird).
  • أُضيفت أعمدة جديدة (create_query و source) إلى system.named_collections. وبذلك يُغلَق #78179. #78582 (MikhailBurdukov).
  • أُضيف حقل جديد باسم condition إلى جدول النظام system.query_condition_cache. ويخزّن هذا الحقل الشرط بصيغته النصية الصريحة، والذي يُستخدم hash الخاص به كمفتاح في query condition cache. #78671 (Robert Schulze).
  • أصبح بالإمكان الآن إنشاء vector similarity indexes على أعمدة BFloat16. #78850 (Robert Schulze).
  • تمت إضافة دعم للطوابع الزمنية unix ذات الجزء الكسري في parsing من نوع DateTime64 بأسلوب best effort. #78908 (Pavel Kruglov).
  • في تنفيذ delta-kernel لتخزين DeltaLake، تم إصلاح وضع column mapping، وإضافة اختبارات لـ schema evolution. #78921 (Kseniia Sumarokova).
  • تم تحسين عملية insert إلى عمود Variant في تنسيق Values عبر تحسين تحويل القيم. #78923 (Pavel Kruglov).
  • تم توسيع الدالة tokens لقبول argument إضافي هو “tokenizer”، إلى جانب arguments أخرى خاصة بكل tokenizer. #79001 (Elmi Ahmadov).
  • أصبح statement ‏SHOW CLUSTER الآن يوسّع وحدات macro (إن وُجدت) في argument الخاص به. #79006 (arf42).
  • أصبحت دوال hash الآن تدعم قيم NULL داخل arrays و tuples و maps. (المسألتان #48365 و #48623). #79008 (Michael Kolupaev).
  • تحديث cctz إلى 2025a. #79043 (Raúl Marín).
  • تغيير المعالجة الافتراضية لـ stderr في UDFs إلى “log_last”. فهذا أفضل من ناحية سهولة الاستخدام. #79066 (Alexey Milovidov).
  • جعل التراجع عن علامات التبويب ممكنًا في واجهة الويب. هذا يُغلق #71284. #79084 (Alexey Milovidov).
  • إزالة الإعدادات أثناء recoverLostReplica كما جرى في: https://github.com/ClickHouse/ClickHouse/pull/78637. #79113 (Nikita Mikhaylov).
  • إضافة profile events: ParquetReadRowGroups و ParquetPrunedRowGroups لتتبّع تشذيب فهرس Parquet. #79180 (flynn).
  • دعم تنفيذ ALTER على database ضمن cluster. #79242 (Tuan Pham Anh).
  • تخطّي مرات التشغيل الفائتة لجمع الإحصاءات الخاصة بـ QueryMetricLog صراحةً، وإلا فسيستغرق السجل وقتًا طويلًا للحاق بالوقت الحالي. #79257 (Mikhail Artemenko).
  • بعض التحسينات الصغيرة على قراءة التنسيقات المعتمدة على Arrow. #79308 (Bharat Nallan).
  • وُسِم الإعداد allow_archive_path_syntax بأنه تجريبي بالخطأ. وتمت إضافة اختبار لمنع تفعيل الإعدادات التجريبية افتراضيًا. #79320 (Alexey Milovidov).
  • أصبحت إعدادات page cache قابلة للتعديل لكل query على حدة. وهذا مطلوب لتسريع التجارب، ولإتاحة الضبط الدقيق للاستعلامات ذات الإنتاجية العالية وزمن الاستجابة المنخفض. #79337 (Alexey Milovidov).
  • عدم طباعة تلميحات الأرقام في تنسيقات Pretty للأرقام التي تبدو مثل معظم قيم 64-bit hash. هذا يُغلق #79334. #79338 (Alexey Milovidov).
  • ستُحتسب ألوان الرسوم البيانية في لوحات المعلومات المتقدمة من hash الخاص بالـ query المقابل. وهذا يسهّل تذكّر الرسم البياني والعثور عليه أثناء التمرير في لوحة المعلومات. #79341 (Alexey Milovidov).
  • إضافة metric غير متزامن، FilesystemCacheCapacity - السعة الإجمالية في cache virtual filesystem. وهذا مفيد لمراقبة البنية التحتية ككل. #79348 (Alexey Milovidov).
  • تحسين الوصول إلى system.parts (قراءة أحجام columns/indexes فقط عند الطلب). #79352 (Azat Khuzhin).
  • حساب الحقول ذات الصلة فقط للاستعلام 'SHOW CLUSTER <name>' بدلًا من جميع الحقول. #79368 (Tuan Pham Anh).
  • السماح بتحديد إعدادات التخزين لـ DatabaseCatalog. #79407 (Kseniia Sumarokova).
  • دعم التخزين المحلي في DeltaLake. #79416 (Kseniia Sumarokova).
  • إضافة إعداد على مستوى الاستعلام لتمكين delta-kernel-rs: allow_experimental_delta_kernel_rs. #79418 (Kseniia Sumarokova).
  • إصلاح احتمال حدوث حلقة لا نهائية عند سرد blobs من blob storage على Azure/S3. #79425 (Alexander Gololobov).
  • إضافة إعداد لـ filesystem cache: max_size_ratio_to_total_space. #79460 (Kseniia Sumarokova).
  • بالنسبة إلى clickhouse-benchmark، أُعيدت تهيئة خيار reconnect ليقبل القيم 0 أو 1 أو N لإعادة الاتصال وفقًا لذلك. #79465 (Sachin Kumar Singh).
  • السماح باستخدام ALTER TABLE ... MOVE|REPLACE PARTITION للجداول الموجودة على disks plain_rewritable مختلفة. #79566 (Julia Kartseva).
  • أصبح vector similarity index يُستخدم الآن أيضًا إذا كان Reference vector من النوع Array(BFloat16). #79745 (Shankar Iyer).
  • إضافة last_error_message وlast_error_trace وquery_id إلى جدول النظام system.error_log. التذكرة ذات الصلة #75816. #79836 (Andrei Tinikov).
  • تمكين إرسال تقارير الأعطال افتراضيًا. ويمكن إيقاف ذلك من خلال configuration file الخاص بالخادم. #79838 (Alexey Milovidov).
  • يعرض جدول النظام system.functions الآن إصدار ClickHouse الذي Introduced in أُضيفت فيه الدوال لأول مرة. #79839 (Robert Schulze).
  • تمت إضافة الإعداد access_control_improvements.enable_user_name_access_type. يتيح هذا الإعداد تمكين/تعطيل grants الدقيقة للمستخدمين/الأدوار، والتي قُدمت في https://github.com/ClickHouse/ClickHouse/pull/72246. قد ترغب في إيقاف هذا الإعداد إذا كانت لديك cluster تحتوي على replicas أقدم من 25.1. #79842 (pufit).
  • أصبح التنفيذ الصحيح للأسلوب ASTSelectWithUnionQuery::clone() يأخذ الحقل is_normalized في الحسبان أيضًا. وقد يساعد ذلك في #77569. #79909 (Nikita Mikhaylov).
  • إصلاح التنسيق غير المتسق لبعض queries التي تستخدم العامل EXCEPT. فإذا كان الطرف الأيسر من العامل EXCEPT ينتهي بـ *، فإن formatted query يفقد الأقواس، ثم يُحلَّل على أنه * مع modifier EXCEPT. وقد عثر fuzzer على هذه queries، ومن غير المرجح ظهورها عمليًا. هذا يغلق #79950. #79952 (Alexey Milovidov).
  • تحسين طفيف في parsing النوع JSON باستخدام cache لترتيب deserialization الخاص بالـ variants. #79984 (Pavel Kruglov).
  • تمت إضافة الإعداد s3_slow_all_threads_after_network_error. #80035 (Vitaly Baranov).
  • كان مستوى التسجيل المتعلق بالأجزاء المحددة للدمج غير صحيح (Information). يُغلق #80061. #80062 (Alexey Milovidov).
  • trace-visualizer: تمت إضافة runtime/share إلى التلميحات ورسائل الحالة. #79040 (Sergei Trifonov).
  • trace-visualizer: تحميل البيانات من ClickHouse server. #79042 (Sergei Trifonov).
  • تمت إضافة مقاييس لعمليات الدمج الفاشلة. #79228 (Miсhael Stetsyuk).
  • سيعرض clickhouse-benchmark النسبة المئوية استنادًا إلى الحد الأقصى لعدد التكرارات إذا كان محددًا. #79346 (Alexey Milovidov).
  • تمت إضافة أداة تصوّر لجدول system.parts. #79437 (Sergei Trifonov).
  • تمت إضافة أداة لتحليل زمن استجابة الاستعلامات. #79978 (Sergei Trifonov).

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

  • إصلاح حالات عدم إعادة تسمية الأعمدة في الجزء. #76346 (Anton Popov).
  • قد يبدأ العرض المادي متأخرًا أكثر من اللازم، مثلًا بعد جدول Kafka الذي يبث البيانات إليه. #72123 (Ilya Golshtein).
  • إصلاح إعادة كتابة استعلام SELECT أثناء إنشاء VIEW عند تمكين المحلل. يُغلق #75956. #76356 (Dmitry Novik).
  • إصلاح تطبيق async_insert من الخادم (عبر apply_settings_from_server) (إذ كان يؤدي سابقًا إلى أخطاء Unknown packet 11 from server على العميل). #77578 (Azat Khuzhin).
  • إصلاح عدم عمل العرض المادي القابل للتحديث في قاعدة بيانات Replicated على النسخ المتماثلة المضافة حديثًا. #77774 (Michael Kolupaev).
  • إصلاح تسبب العروض المادية القابلة للتحديث في تعطيل النسخ الاحتياطية. #77893 (Michael Kolupaev).
  • إصلاح الخطأ المنطقي القديم الذي كان يظهر مع transform. #78247 (Yarik Briukhovetskyi).
  • إصلاح بعض الحالات التي لم يكن فيها الفهرس الثانوي يُطبَّق مع المحلل. إصلاح #65607، وإصلاح #69373. #78485 (Nikolai Kochetov).
  • إصلاح تفريغ أحداث profile (NetworkSendElapsedMicroseconds/NetworkSendBytes) لبروتوكول HTTP عند تمكين الضغط (يجب ألا يزيد الخطأ على حجم المخزن المؤقت، ويكون عادةً نحو 1MiB). #78516 (Azat Khuzhin).
  • إصلاح توليد المحلل للخطأ LOGICAL_ERROR عندما يتضمن JOIN … USING عمود ALIAS — إذ ينبغي أن يُنتج الخطأ المناسب. #78618 (Yakov Olkhovskiy).
  • إصلاح في المحلل: يفشل CREATE VIEW … ON CLUSTER إذا كان SELECT يحتوي على وسائط موضعية. #78663 (Yakov Olkhovskiy).
  • إصلاح الخطأ Block structure mismatch في حالة INSERT SELECT إلى دالة جدول مع استنتاج المخطط إذا كان SELECT يحتوي على استعلامات فرعية قيمية. #78677 (Pervakov Grigorii).
  • إصلاح في المحلل: عند استخدام prefer_global_in_and_join=1 لجدول Distributed في استعلام SELECT، يجب استبدال الدالة in بـ globalIn. #78749 (Yakov Olkhovskiy).
  • إصلاح عدة أنواع من استعلامات SELECT التي تقرأ من جداول بمحرك MongoDB أو من دالة الجدول mongodb: الاستعلامات التي تتضمن تحويلًا ضمنيًا لقيمة ثابتة في عبارة WHERE (مثلًا WHERE datetime = '2025-03-10 00:00:00')؛ والاستعلامات التي تحتوي على LIMIT وGROUP BY. كان من الممكن سابقًا أن تُرجع نتائج غير صحيحة. #78777 (Anton Popov).
  • إصلاح التحويل بين أنواع JSON المختلفة. يُنفَّذ ذلك الآن عبر cast بسيط من/إلى String. وهو أقل كفاءة، لكنه دقيق بنسبة 100%. #78807 (Pavel Kruglov).
  • إصلاح خطأ منطقي أثناء تحويل النوع Dynamic إلى Interval. #78813 (Pavel Kruglov).
  • إصلاح التراجع عن العمود عند حدوث خطأ في تحليل JSON. #78836 (Pavel Kruglov).
  • إصلاح الخطأ bad cast عند استخدام join مع عمود alias ثابت. #78848 (Vladimir Cherkasov).
  • عدم السماح باستخدام prewhere في materialized view على أعمدة ذات أنواع مختلفة بين العرض والجدول الهدف. #78889 (Pavel Kruglov).
  • إصلاح خطأ منطقي أثناء تحليل بيانات binary تالفة لعمود Variant. #78982 (Pavel Kruglov).
  • طرح استثناء عند ضبط حجم دفعة Parquet على 0. سابقًا، عندما كانت قيمة output_format_parquet_batch_size = 0 كان ClickHouse يتوقف عن الاستجابة. وقد أُصلح هذا السلوك الآن. #78991 (daryawessely).
  • إصلاح إلغاء التسلسل لمميّزات Variant ذات التنسيق basic في compact parts. وقد أُدخل ذلك في https://github.com/ClickHouse/ClickHouse/pull/55518. #79000 (Pavel Kruglov).
  • أصبحت Dictionaries من النوع complex_key_ssd_cache ترفض الآن المَعلمَين block_size وwrite_buffer_size إذا كانت قيمتهما صفرًا أو سالبة (issue #78314). #79028 (Elmi Ahmadov).
  • تجنّب استخدام Field للأعمدة غير المجمّعة في SummingMergeTree. إذ كان ذلك قد يؤدي إلى أخطاء غير متوقعة مع أنواع Dynamic/Variant المستخدمة في SummingMergeTree. #79051 (Pavel Kruglov).
  • إصلاح القراءة من Materialized View مع جدول وجهة Distributed وترويسة مختلفة في analyzer. #79059 (Pavel Kruglov).
  • إصلاح خطأ كان يتسبب في أن arrayUnion() يعيد قيمًا إضافية (غير صحيحة) في الجداول التي كانت تحتوي على Batch inserts. إصلاح #75057. #79079 (Peter Nguyen).
  • إصلاح segfault في OpenSSLInitializer. إغلاق #79092. #79097 (Konstantin Bogdanov).
  • تعيين prefix دائمًا لـ S3 ListObject. #79114 (Azat Khuzhin).
  • إصلاح خطأ كان يتسبب في أن arrayUnion() يعيد قيمًا إضافية (غير صحيحة) في الجداول التي كانت تحتوي على Batch inserts. إصلاح #79157. #79158 (Peter Nguyen).
  • إصلاح خطأ منطقي بعد filter pushdown. #79164 (Pervakov Grigorii).
  • إصلاح محرك الجدول DeltaLake عند استخدام تنفيذ delta-kernel مع endpoints قائمة على http، وإصلاح NOSIGN. يغلق #78124. #79203 (Kseniia Sumarokova).
  • إصلاح في Keeper: تجنّب تشغيل watches عند فشل الطلبات المتعددة. #79247 (Antonio Andelic).
  • منع النوعين Dynamic وJSON في IN. مع التنفيذ الحالي لـ IN، قد يؤدي ذلك إلى نتائج غير صحيحة. الدعم الصحيح لهذه الأنواع في IN معقّد ويمكن إضافته مستقبلًا. #79282 (Pavel Kruglov).
  • إصلاح التحقق من المسارات المكررة أثناء تحليل نوع JSON. #79317 (Pavel Kruglov).
  • إصلاح مشكلات الاتصال في SecureStreamSocket. #79383 (Konstantin Bogdanov).
  • إصلاح تحميل أقراص plain_rewritable التي تحتوي على بيانات. #79439 (Julia Kartseva).
  • إصلاح تعطل في اكتشاف subcolumns الديناميكية في Wide parts ضمن MergeTree. #79466 (Pavel Kruglov).
  • التحقق من طول اسم الجدول فقط في استعلامات CREATE الأولية. وعدم التحقق من ذلك في عمليات CREATE الثانوية لتجنّب مشكلات backward compatibility. #79488 (Miсhael Stetsyuk).
  • إصلاح الخطأ Block structure mismatch في عدة حالات تتعلق بالجداول التي تحتوي على أعمدة sparse. #79491 (Anton Popov).
  • إصلاح حالتين من الخطأ “Logical Error: Can’t set alias of * of Asterisk on alias”. #79505 (Raúl Marín).
  • إصلاح استخدام مسارات غير صحيحة عند إعادة تسمية قاعدة بيانات Atomic. #79569 (Tuan Pham Anh).
  • إصلاح ORDER BY على عمود JSON مع أعمدة أخرى. #79591 (Pavel Kruglov).
  • إصلاح تكرار النتائج عند القراءة من remote مع تعطيل كلٍّ من use_hedged_requests وallow_experimental_parallel_reading_from_replicas. #79599 (Eduard Karacharov).
  • إصلاح تعطل في تنفيذ delta-kernel عند استخدام Unity Catalog. #79677 (Kseniia Sumarokova).
  • توسيع وحدات الماكرو لعناقيد الاكتشاف التلقائي. #79696 (Anton Ivashkin).
  • التعامل بالشكل المناسب مع page_cache_limits المُعدّ بشكل غير صحيح. #79805 (Bharat Nallan).
  • إصلاح ناتج دالة SQL ‏formatDateTime إذا تبِع مُنسِّقٌ متغيّر الحجم (مثل %W، أي اسم يوم الأسبوع Monday وTuesday وما إلى ذلك) مُنسِّقًا مركبًا (أي مُنسِّق يطبع عدة مكوّنات دفعة واحدة، مثل %D، أي التاريخ الأمريكي 05/04/25). #79835 (Robert Schulze).
  • يدعم IcebergS3 تحسين count، لكن IcebergS3Cluster لا يدعمه. ونتيجة لذلك، قد تكون نتيجة count() المُعادة في وضع العنقود مضاعفةً بعدد النسخ المتماثلة. #79844 (wxybear).
  • يُصلح الخطأ AMBIGUOUS_COLUMN_NAME مع lazy materialization عندما لا تُستخدم أي أعمدة في تنفيذ الاستعلام حتى الوصول إلى projection. مثال: SELECT * FROM t ORDER BY rand() LIMIT 5. #79926 (Igor Nikonov).
  • إخفاء password في الاستعلام CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\'). #79941 (Han Fei).
  • السماح بتحديد alias في JOIN USING. حدِّد هذا alias إذا أُعيدت تسمية العمود (على سبيل المثال بسبب ARRAY JOIN). يُصلح #73707. #79942 (Nikolai Kochetov).
  • السماح لـ materialized views بالعمل بشكل صحيح مع UNIONs على النسخ المتماثلة الجديدة. #80037 (Samay Sharma).
  • يتعرّف محدِّد التنسيق %e في دالة SQL parseDateTime الآن على الأيام أحادية الرقم (مثل 3)، بينما كان يتطلب سابقًا حشوًا بمسافة (مثل 3). وهذا يجعل سلوكه متوافقًا مع MySQL. للاحتفاظ بالسلوك السابق، اضبط setting parsedatetime_e_requires_space_padding = 1. (issue #78243). #80057 (Robert Schulze).
  • يُصلح التحذيرات Cannot find 'kernel' in '[...]/memory.stat' في سجل ClickHouse (issue #77410). #80129 (Robert Schulze).
  • التحقق من حجم stack في FunctionComparison لتجنب تعطل بسبب stack overflow. #78208 (Julia Kartseva).
  • يُصلح حالة تسابق أثناء تنفيذ SELECT من system.workloads. #78743 (Sergei Trifonov).
  • إصلاح: lazy materialization في distributed queries. #78815 (Igor Nikonov).
  • إصلاح التحويل من Array(Bool) إلى Array(FixedString). #78863 (Nikita Taranov).
  • جعل اختيار إصدار Parquet أقل إرباكًا. #78818 (Michael Kolupaev).
  • إصلاح الدمج الذاتي لـ ReservoirSampler. #79031 (Nikita Taranov).
  • إصلاح تخزين insertion table في context الخاص بالـ client. #79046 (Pervakov Grigorii).
  • إصلاح ترتيب إتلاف أعضاء البيانات في AggregatingSortedAlgorithm و SummingSortedAlgorithm. #79056 (Nikita Taranov).
  • يجب ألا يؤثر enable_user_name_access_type على نوع الوصول DEFINER. #80026 (pufit).
  • قد يتوقف الاستعلام على قاعدة بيانات system عن الاستجابة إذا كانت البيانات الوصفية لقاعدة بيانات system موجودة في Keeper. #79304 (Mikhail Artemenko).

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

إصدار ClickHouse 25.4 بتاريخ 2025-04-22

تغيير غير متوافق مع الإصدارات السابقة

  • التحقّق من تطابق جميع الأعمدة في العرض المادي مع الجدول الهدف عندما تكون القيمة allow_materialized_view_with_bad_select هي false. #74481 (Christoph Wurm).
  • إصلاح الحالات التي يُستخدَم فيها dateTrunc مع معاملات Date/DateTime سالبة. #77622 (Yarik Briukhovetskyi).
  • أُزيل تكامل MongoDB القديم. وأصبح إعداد الخادم use_legacy_mongodb_integration متقادمًا ولم يعد يؤدي أي وظيفة. #77895 (Robert Schulze).
  • تحسين التحقّق في SummingMergeTree لتخطي التجميع للأعمدة المستخدمة في مفاتيح التقسيم أو الفرز. #78022 (Pervakov Grigorii).

ميزة جديدة

  • أُضيفت جدولة CPU slot لأعباء العمل، راجع الوثائق لمزيد من التفاصيل. #77595 (Sergei Trifonov).
  • سيحتفظ clickhouse-local بقواعد بياناته بعد إعادة التشغيل إذا حدّدت وسيطة سطر الأوامر --path. ويغلق هذا #50647. ويغلق أيضًا #49947. #71722 (Alexey Milovidov).
  • رفض الاستعلامات عندما يكون الخادم محمّلًا فوق طاقته. ويُتخذ القرار بناءً على نسبة وقت الانتظار (OSCPUWaitMicroseconds) إلى وقت الانشغال (OSCPUVirtualTimeMicroseconds). ويُسقَط الاستعلام باحتمال معيّن عندما تكون هذه النسبة بين min_os_cpu_wait_time_ratio_to_throw و max_os_cpu_wait_time_ratio_to_throw (وهما إعدادان على مستوى الاستعلام). #63206 (Alexey Katsman).
  • السفر عبر الزمن في Iceberg: إضافة إعداد للاستعلام عن جداول Iceberg عند طابع زمني محدد. #71072 (Brett Hoerner). #77439 (Daniil Ivanik).
  • ذاكرة تخزين مؤقت داخل الذاكرة لبيانات Iceberg الوصفية، تخزّن ملفات manifest وقائمتها وmetadata.json لتسريع الاستعلامات. #77156 (Han Fei).
  • دعم محرك الجداول DeltaLake لـ Azure Blob Storage. يُصلح #68043. #74541 (Smita Kulkarni).
  • أُضيفت ذاكرة تخزين مؤقت داخل الذاكرة لفهارس تشابه المتجهات بعد إلغاء تسلسلها. ومن المتوقع أن يؤدي ذلك إلى تسريع استعلامات البحث التقريبي المتكرر عن أقرب جار (ANN). ويُتحكَّم في حجم ذاكرة التخزين المؤقت الجديدة عبر إعدادات الخادم vector_similarity_index_cache_size و vector_similarity_index_cache_max_entries. وتحل هذه الميزة محل ميزة ذاكرة التخزين المؤقت لفهرس التخطي في الإصدارات السابقة. #77905 (Shankar Iyer).
  • دعم استبعاد الأقسام غير اللازمة في DeltaLake. #78486 (Kseniia Sumarokova).
  • دعم التحديث في الخلفية في جداول MergeTree للقراءة فقط، ما يتيح الاستعلام عن الجداول القابلة للتحديث من عدد غير محدود من القرّاء الموزعين (بحيرة بيانات أصلية في ClickHouse). #76467 (Alexey Milovidov).
  • دعم استخدام أقراص مخصصة لتخزين ملفات البيانات الوصفية لقواعد البيانات. ويمكن حاليًا ضبط ذلك على مستوى الخادم العام فقط. #77365 (Tuan Pham Anh).
  • دعم ALTER TABLE … ATTACH|DETACH|MOVE|REPLACE PARTITION للقرص plain_rewritable. #77406 (Julia Kartseva).
  • إضافة إعدادات جدول لتهيئة SASL وبيانات الاعتماد إلى محرك الجداول Kafka. ويتيح ذلك تهيئة المصادقة المستندة إلى SASL مع Kafka والأنظمة المتوافقة معه مباشرةً داخل عبارة CREATE TABLE، بدلًا من الاضطرار إلى استخدام ملفات التهيئة أو المجموعات المسماة. #78810 (Christoph Wurm).
  • السماح بتعيين default_compression_codec لجداول MergeTree: ويُستخدم هذا الإعداد عندما لا يحدّد استعلام CREATE واحدًا صراحةً للأعمدة المعنية. وهذا يعالج #42005. #66394 (gvoelfin).
  • إضافة الإعداد bind_host في تهيئة clusters لكي يتمكن ClickHouse من استخدام شبكة محددة للاتصالات الموزعة. #74741 (Todd Yocum).
  • تقديم عمود جديد، parametrized_view_parameters، في system.tables. يعالج https://github.com/clickhouse/clickhouse/issues/66756. #75112 (NamNguyenHoai).
  • السماح بتغيير تعليق قاعدة البيانات. يعالج #73351 ### إضافة توثيقية للتغييرات الموجهة للمستخدم. #75622 (NamNguyenHoai).
  • دعم المصادقة SCRAM-SHA-256 في compatibility protocol الخاص بـ PostgreSQL. #76839 (scanhex12).
  • إضافة الدوال arrayLevenshteinDistance وarrayLevenshteinDistanceWeighted وarraySimilarity. #77187 (Mikhail f. Shiryaev).
  • أصبح الإعداد parallel_distributed_insert_select ساري المفعول مع INSERT SELECT إلى ReplicatedMergeTree (وكان يتطلب سابقًا جداول Distributed). #78041 (Igor Nikonov).
  • تقديم الدالة toInterval. تقبل هذه الدالة وسيطتين (القيمة والوحدة)، وتحوّل القيمة إلى نوع Interval محدد. #78723 (Andrew Davis).
  • إضافة عدة طرق ملائمة لتحديد ملف metadata.json الجذر في Iceberg table function والمحرك. يعالج #78455. #78475 (Daniil Ivanik).
  • دعم المصادقة المعتمدة على كلمة المرور في بروتوكول SSH في ClickHouse. #78586 (Nikita Mikhaylov).

ميزة تجريبية

  • دعم الاستعلامات الفرعية المترابطة كمعامل لتعبير EXISTS في جملة WHERE. يُغلق #72459. #76078 (Dmitry Novik).
  • أُضيفت الدالتان sparseGrams و sparseGramsHashes بنسختَي ASCII و UTF8. المؤلف: scanhex12. #78176 (Pervakov Grigorii). لا تستخدمهما: سيتغير التنفيذ في الإصدارات القادمة.

تحسين الأداء

  • تحسين الأداء باستخدام الأعمدة الكسولة التي تقرأ البيانات بعد ORDER BY وLIMIT. #55518 (Xiaozhe Yu).
  • تم تفعيل ذاكرة التخزين المؤقت لشروط الاستعلام افتراضيًا. #79080 (Alexey Milovidov).
  • تسريع إنشاء نتيجة JOIN من خلال إلغاء الافتراضية في استدعاءات col->insertFrom(). #77350 (Alexander Gololobov).
  • دمج شروط المساواة من خطوة filter في مخطط الاستعلام ضمن شرط JOIN عند الإمكان، بما يتيح استخدامها كمفاتيح في جدول hash. #78877 (Dmitry Novik).
  • استخدام sharding ديناميكيًا في JOIN إذا كان مفتاح JOIN بادئةً لـ PK في كلا الجزأين. يُفعَّل هذا التحسين عبر الإعداد query_plan_join_shard_by_pk_ranges (وهو معطّل افتراضيًا). #74733 (Nikolai Kochetov).
  • دعم تقليم البيانات في Iceberg استنادًا إلى قيم الحدين الأدنى والأعلى للأعمدة. يُصلح #77638. #78242 (alesapin).
  • تنفيذ تحسين بسيط لعملية العدّ في Iceberg. وأصبحت الآن الاستعلامات التي تتضمن count() ومن دون أي مرشحات أسرع. يُغلق #77639. #78090 (alesapin).
  • إضافة إمكانية ضبط عدد الأعمدة التي يمكن لعمليات الدمج تفريغها بالتوازي باستخدام max_merge_delayed_streams_for_parallel_write (من المفترض أن يقلل ذلك استهلاك الذاكرة في عمليات الدمج العمودية إلى S3 بنحو 25 مرة). #77922 (Azat Khuzhin).
  • تعطيل filesystem_cache_prefer_bigger_buffer_size عندما تُستخدم الذاكرة المؤقتة بشكل غير مباشر، مثل عمليات الدمج. وهذا يقلل استهلاك الذاكرة أثناء عمليات الدمج. #77898 (Kseniia Sumarokova).
  • نستخدم الآن عدد النسخ المتماثلة لتحديد حجم المهمة عند القراءة مع تفعيل parallel replicas. ويوفّر ذلك توزيعًا أفضل للعمل بين النسخ المتماثلة عندما لا تكون كمية البيانات المطلوب قراءتها كبيرة فعليًا. #78695 (Nikita Taranov).
  • دعم IO prefetch غير المتزامن لتنسيق ORC، مما يحسّن الأداء العام عبر إخفاء كمون IO البعيد. #70534 (李扬).
  • الحجز المسبق للذاكرة المستخدمة في عمليات الإدراج غير المتزامنة لتحسين الأداء. #74945 (Ilya Golshtein).
  • تقليل عدد طلبات Keeper عبر الاستغناء عن طلبات get المفردة، التي كان من الممكن أن تتسبب في حمل كبير على Keeper مع زيادة عدد النسخ المتماثلة، في المواضع التي يتوفر فيها multiRead. #56862 (Nikolay Degterinsky).
  • تحسين طفيف لتشغيل الدوال على الوسائط من النوع Nullable. #76489 (李扬).
  • تحسين arraySort. #76850 (李扬).
  • دمج marks الخاصة بالجزء نفسه وكتابتها في ذاكرة التخزين المؤقت لشروط الاستعلام دفعةً واحدة لتقليل الاعتماد على الأقفال. #77377 (zhongyuankai).
  • تحسين أداء s3Cluster للاستعلامات التي تتضمن توسعًا واحدًا بين الأقواس. #77686 (Tomáš Hromada).
  • تحسين ORDER BY عند استخدام عمود واحد من نوع Nullable أو LowCardinality. #77789 (李扬).
  • تحسين استهلاك الذاكرة في التنسيق Native. #78442 (Azat Khuzhin).
  • تحسين طفيف: لا تُعاد كتابة count(if(...)) إلى countIf إذا كان CAST مطلوبًا. إغلاق #78564. #78565 (李扬).
  • يمكن الآن للدالة hasAll الاستفادة من فهارس التخطي للنص الكامل tokenbf_v1 وngrambf_v1. #77662 (UnamedRus).
  • كان فهرس تشابه المتجهات قد يخصص من الذاكرة الرئيسية ما يصل إلى ضعف المطلوب. تعيد هذه المعالجة تصميم استراتيجية تخصيص الذاكرة، مما يقلل استهلاك الذاكرة ويحسن فعالية ذاكرة التخزين المؤقت لفهرس تشابه المتجهات. (المشكلة #78056). #78394 (Shankar Iyer).
  • تقديم الإعداد schema_type لجدول system.metric_log لتحديد نوع المخطط. هناك ثلاثة مخططات مسموح بها: wide — وهو المخطط الحالي، حيث يكون كل metric/event في عمود منفصل (وهو الأكثر فعالية عند قراءة أعمدة منفصلة)، وtransposed — وهو مشابه لـ system.asynchronous_metric_log، حيث تُخزَّن metrics/events كصفوف، وtransposed_with_wide_view — وهو الخيار الأكثر إثارة للاهتمام، إذ يُنشئ جدولًا أساسيًا بمخطط transposed، مع إضافة view بمخطط wide يترجم الاستعلامات إلى الجدول الأساسي. في transposed_with_wide_view، لا تكون الدقة دون الثانية في الـ view مدعومة، ويكون event_time_microseconds مجرد alias لأغراض backward compatibility. #78412 (alesapin).

تحسينات

  • تسلسل خطة الاستعلام لاستعلامات Distributed. تمت إضافة إعداد جديد هو serialize_query_plan. عند التمكين، ستستخدم الاستعلامات من جدول Distributed خطة استعلام متسلسلة لتنفيذ الاستعلامات البعيدة. ويضيف هذا نوع حزمة جديدًا إلى بروتوكول TCP، ويجب إضافة <process_query_plan_packet>true</process_query_plan_packet> إلى إعدادات الخادم للسماح بمعالجة هذه الحزمة. #69652 (Nikolai Kochetov).
  • دعم النوع JSON وقراءة الأعمدة الفرعية من الـ views. #76903 (Pavel Kruglov).
  • دعم ALTER DATABASE … ON CLUSTER. #79242 (Tuan Pham Anh).
  • تظهر الآن عمليات التحديث الخاصة بـ refreshable materialized views في system.query_log. #71333 (Michael Kolupaev).
  • يمكن الآن تمييز User-defined functions (UDFs) على أنها حتمية عبر إعداد جديد في الـ configuration الخاصة بها. كذلك، تتحقق query cache الآن مما إذا كانت UDFs المستدعاة داخل الاستعلام حتمية. وإذا كان الأمر كذلك، فإنها تخزّن نتيجة الاستعلام مؤقتًا. (المسألة #59988). #77769 (Jimmy Aguilar Mena).
  • تم تفعيل آلية backoff لجميع أنواع المهام المتماثلة. يتيح ذلك تقليل CPU usage وmemory usage وأحجام log file. كما أُضيفت الإعدادات الجديدة max_postpone_time_for_failed_replicated_fetches_ms وmax_postpone_time_for_failed_replicated_merges_ms وmax_postpone_time_for_failed_replicated_tasks_ms، وهي مشابهة لـ max_postpone_time_for_failed_mutations_ms. #74576 (MikhailBurdukov).
  • إضافة query_id إلى system.errors. يغلق #75815. #76581 (Vladimir Baikov).
  • إضافة دعم لتحويل UInt128 إلى IPv6. يتيح ذلك استخدام العملية bitAnd وإجراء العمليات الحسابية على IPv6 ثم التحويل مرة أخرى إلى IPv6. يغلق #76752. كما يتيح أيضًا تحويل نتيجة العملية bitAnd على IPv6 مرة أخرى إلى IPv6. انظر أيضًا #57707. #76928 (Muzammil Abdul Rehman).
  • لا تُحلَّل قيم Bool الخاصة في text formats داخل النوع Variant افتراضيًا. ويمكن تمكين ذلك باستخدام الإعداد allow_special_bool_values_inside_variant. #76974 (Pavel Kruglov).
  • دعم وقت انتظار قابل للتهيئة لكل task للاستعلامات منخفضة priority على مستوى session وعلى مستوى server. #77013 (VicoWu).
  • تنفيذ دعم مقارنة قيم نوع بيانات JSON. يمكن الآن مقارنة JSON objects بطريقة مماثلة لـ Maps. #77397 (Pavel Kruglov).
  • تحسين دعم permission في system.kafka_consumers. وتمرير أخطاء librdkafka الداخلية (وجدير بالذكر أن هذه المكتبة رديئة). #77700 (Ilya Golshtein).
  • تمت إضافة التحقق من صحة إعدادات محرك الجداول Buffer. #77840 (Pervakov Grigorii).
  • تمت إضافة الإعداد enable_hdfs_pread لتمكين أو تعطيل pread في HDFS. #77885 (kevinyhzou).
  • تمت إضافة profile events لعدد طلبات القراءة والكتابة multi في ZooKeeper. #77888 (JackyWoo).
  • أصبح مسموحًا بإنشاء temporary tables وإجراء insert فيها عندما يكون disable_insertion_and_mutation مفعّلًا. #77901 (Xu Jia).
  • خُفِّضت قيمة max_insert_delayed_streams_for_parallel_write إلى 100. #77919 (Azat Khuzhin).
  • إصلاح parsing السنة في Joda syntax (وهذا من عالم Java إن كنت تتساءل)، مثل yyy. #77973 (李扬).
  • سيُنفَّذ Attach لأجزاء جداول MergeTree وفق ترتيب block الخاص بها، وهو أمر مهم لخوارزميات الدمج الخاصة مثل ReplacingMergeTree. هذا يُغلق #71009. #77976 (Alexey Milovidov).
  • أصبحت Query masking rules قادرة الآن على إطلاق الخطأ LOGICAL_ERROR عند حدوث تطابق. سيساعد ذلك في التحقق مما إذا كانت password مُعرَّفة مسبقًا تتسرّب في أي موضع داخل logs. #78094 (Nikita Mikhaylov).
  • تمت إضافة العمود index_length_column إلى information_schema.tables لتحسين التوافق مع MySQL. #78119 (Paweł Zakrzewski).
  • أُضيف مقياسان جديدان: TotalMergeFailures وNonAbortedMergeFailures. هذه metrics مطلوبة لاكتشاف الحالات التي يفشل فيها عدد كبير جدًا من merges خلال فترة قصيرة. #78150 (Miсhael Stetsyuk).
  • إصلاح parsing غير الصحيح لعنوان URL الخاص بـ S3 عندما لا يكون key محددًا في نمط path style. #78185 (Arthur Passos).
  • إصلاح values غير الصحيحة للمقاييس غير المتزامنة BlockActiveTime وBlockDiscardTime وBlockWriteTime وBlockQueueTime وBlockReadTime (قبل هذا التغيير، كان يُبلَّغ عن ثانية واحدة بشكل غير صحيح على أنها 0.001). #78211 (filimonov).
  • أصبحت أخطاء push إلى materialized view في StorageS3(Azure)Queue تراعي حد loading_retries. قبل ذلك، كانت إعادة المحاولة لهذه الأخطاء تستمر إلى أجل غير مسمى. #78313 (Kseniia Sumarokova).
  • في DeltaLake مع تنفيذ delta-kernel-rs، تم إصلاح الأداء وشريط التقدم. #78368 (Kseniia Sumarokova).
  • دعم include وfrom_env وfrom_zk لأقراص runtime. يُغلق #78177. #78470 (Kseniia Sumarokova).
  • إضافة تحذير ديناميكي إلى الجدول system.warnings لعمليات mutation طويلة التشغيل. #78658 (Bharat Nallan).
  • تمت إضافة الحقل condition إلى جدول النظام system.query_condition_cache. وهو يخزّن الشرط بالنص الصريح الذي تُستخدم قيمة التجزئة الخاصة به كمفتاح في query condition cache. #78671 (Robert Schulze).
  • السماح بقيمة فارغة لتقسيم Hive إلى أقسام. #78816 (Arthur Passos).
  • إصلاح تحويل النوع في العبارة IN لـ BFloat16 (أي إن SELECT toBFloat16(1) IN [1, 2, 3]; تُرجع الآن 1). يُغلق #78754. #78839 (Raufs Dunamalijevs).
  • عدم التحقق من الأجزاء الموجودة على الأقراص الأخرى لـ MergeTree إذا كان disk = ... مضبوطًا. #78855 (Azat Khuzhin).
  • جعل أنواع البيانات في used_data_type_families ضمن system.query_log تُسجَّل بأسماء قياسية. #78972 (Kseniia Sumarokova).
  • تنظيف الإعدادات أثناء recoverLostReplica كما حدث في: #78637. #79113 (Nikita Mikhaylov).
  • استخدام أعمدة الإدراج لاستنتاج المخطط في INFILE. #78490 (Pervakov Grigorii).

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

  • إصلاح التحليل غير الصحيح للإسقاطات عند استخدام count(Nullable) في الإسقاطات التجميعية. يُصلح هذا #74495. ويضيف طلب السحب هذا أيضًا بعض السجلات حول تحليل الإسقاطات لتوضيح سبب استخدام إسقاط معيّن أو عدم استخدامه. #74498 (Amos Bird).
  • إصلاح الخطأ Part <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED) أثناء DETACH PART. #76039 (Aleksei Filatov).
  • إصلاح عدم عمل فهارس التخطي مع expression تتضمن literals في analyzer، وإزالة التحويلات البسيطة أثناء تحليل الفهارس. #77229 (Pavel Kruglov).
  • إصلاح خلل كان فيه query parameter close_session بلا أي تأثير، مما كان يؤدي إلى إغلاق الجلسات المسماة فقط بعد session_timeout. #77336 (Alexey Katsman).
  • إصلاح استقبال الرسائل من خادم NATS من دون عروض مادية مرفقة. #77392 (Dmitry Novikov).
  • إصلاح خطأ منطقي أثناء القراءة من FileLog فارغ عبر table function merge، مع إغلاق #75575. #77441 (Vladimir Cherkasov).
  • استخدام إعدادات التنسيق الافتراضية في serialization الخاصة بـ Dynamic من المتغير المشترك. #77572 (Pavel Kruglov).
  • إصلاح التحقق من وجود مسار بيانات الجدول على القرص المحلي. #77608 (Tuan Pham Anh).
  • إصلاح إرسال القيم الثابتة إلى العقدة البعيدة لبعض الأنواع. #77634 (Pavel Kruglov).
  • إصلاح تعطل ناتج عن انتهاء صلاحية السياق في S3/AzureQueue. #77720 (Kseniia Sumarokova).
  • إخفاء بيانات الاعتماد في محركات الجداول RabbitMQ وNATS وRedis وAzureQueue. #77755 (Kseniia Sumarokova).
  • إصلاح سلوك غير معرّف عند مقارنة NaN في argMin/argMax. #77756 (Raúl Marín).
  • التحقق بانتظام مما إذا كانت merges وmutations قد أُلغيت، حتى في الحالات التي لا تنتج فيها العملية أي blocks للكتابة. #77766 (János Benjamin Antal).
  • إصلاح عدم عمل refreshable materialized view في قاعدة بيانات Replicated على النسخ المتماثلة المضافة حديثًا. #77774 (Michael Kolupaev).
  • إصلاح تعطل محتمل عند حدوث الخطأ NOT_FOUND_COLUMN_IN_BLOCK. #77854 (Vladimir Cherkasov).
  • إصلاح تعطل يحدث في S3/AzureQueue أثناء ملء البيانات. #77878 (Bharat Nallan).
  • تعطيل البحث الضبابي في السجل على خادم SSH (لأنه يتطلب مكتبة skim). #78002 (Azat Khuzhin).
  • يُصلح خللًا كان يتسبب في أن يُرجع استعلام بحث متجهي على عمود غير مفهرس نتائج غير صحيحة إذا كان في الجدول عمود متجهي آخر مُعرَّف له فهرس تشابه متجهي. (المشكلة #77978). #78069 (Shankar Iyer).
  • إصلاح خطأ بسيط جدًا في رسالة “تنسيق الإخراج المطلوب ثنائي… هل تريد إخراجه رغم ذلك؟ [y/N]”. #78095 (Azat Khuzhin).
  • إصلاح خطأ في حالة toStartOfInterval عند استخدام وسيطة origin بقيمة صفر. #78096 (Yarik Briukhovetskyi).
  • منع تحديد معلَمة الاستعلام session_id فارغة في واجهة HTTP. #78098 (Alexey Katsman).
  • إصلاح تجاوز البيانات الوصفية في قاعدة البيانات Replicated، والذي كان يمكن أن يحدث بسبب تنفيذ استعلام RENAME مباشرةً بعد استعلام ALTER. #78107 (Nikolay Degterinsky).
  • إصلاح انهيار في المحرك NATS. #78108 (Dmitry Novikov).
  • عدم محاولة إنشاء history_file في العميل المضمّن لـ SSH (في الإصدارات السابقة، كانت عملية الإنشاء تفشل دائمًا، لكن كانت تتم محاولة إجرائها). #78112 (Azat Khuzhin).
  • إصلاح عرض system.detached_tables لمعلومات غير صحيحة بعد استعلامي RENAME DATABASE أو DROP TABLE. #78126 (Nikolay Degterinsky).
  • إصلاح فحوصات العدد الكبير جدًا من الجداول مع قاعدة البيانات Replicated بعد #77274. كذلك، يُجرى التحقق قبل إنشاء التخزين لتجنّب إنشاء عُقد غير محسوبة في Keeper في حالة ReplicatedMergeTree أو KeeperMap. #78127 (Nikolay Degterinsky).
  • إصلاح انهيار محتمل بسبب التهيئة المتزامنة للبيانات الوصفية لـ S3Queue. #78131 (Azat Khuzhin).
  • تُرجع الدوال groupArray* الآن الخطأ BAD_ARGUMENTS عند تمرير القيمة 0 من النوع Int للوسيطة max_size، كما هو الحال بالفعل مع UInt، بدلًا من محاولة التنفيذ بها. #78140 (Eduard Karacharov).
  • منع حدوث انهيار عند استعادة نسخة متماثلة مفقودة إذا أُزيل الجدول المحلي قبل فصله. #78173 (Raúl Marín).
  • إصلاح مشكلة أن العمود “alterable” في system.s3_queue_settings كان يعيد دائمًا false. #78187 (Kseniia Sumarokova).
  • إخفاء توقيع وصول Azure بحيث لا يكون مرئيًا للمستخدم أو في السجلات. #78189 (Kseniia Sumarokova).
  • إصلاح الجلب المسبق للتدفقات الفرعية ذات البادئات في Wide parts. #78205 (Pavel Kruglov).
  • إصلاح حالات الانهيار / النتائج غير الصحيحة للدالة mapFromArrays في حالة نوع LowCardinality(Nullable) لمصفوفة المفاتيح. #78240 (Eduard Karacharov).
  • إصلاح خيارات المصادقة في delta-kernel-rs. #78255 (Kseniia Sumarokova).
  • عدم جدولة مهمة Refreshable Materialized Views إذا كانت قيمة disable_insertion_and_mutation للنسخة المتماثلة هي true، لأن هذه المهمة تُعدّ نوعًا من insertion، وستفشل إذا كانت disable_insertion_and_mutation تساوي true. #78277 (Xu Jia).
  • التحقق من صلاحية الوصول إلى الجداول الأساسية لمحرك Merge. #78339 (Pervakov Grigorii).
  • يمكن تجاهل المُعدِّل FINAL عند الاستعلام عن جدول Distributed. #78428 (Yakov Olkhovskiy).
  • تُرجِع bitmapMin القيمة uint32_max عندما تكون الـ bitmap فارغة (وuint64_max عندما يكون نوع الإدخال أكبر)، وهو ما يطابق سلوك الحد الأدنى في roaring_bitmap الفارغ. #78444 (wxybear).
  • تعطيل التنفيذ المتوازي لمعالجة الاستعلام مباشرةً بعد القراءة من FROM عندما يكون distributed_aggregation_memory_efficient مُمكّنًا، إذ قد يؤدي ذلك إلى خطأ منطقي. يغلق #76934. #78500 (flynn).
  • تعيين stream واحدة على الأقل للقراءة في حال لم تكن هناك أي streams مخططة بعد تطبيق الإعداد max_streams_to_max_threads_ratio. #78505 (Eduard Karacharov).
  • في وحدة التخزين S3Queue، تم إصلاح الخطأ المنطقي “Cannot unregister: table uuid is not registered”. يغلق #78285. #78541 (Kseniia Sumarokova).
  • أصبح ClickHouse الآن قادرًا على اكتشاف cgroup v2 الخاص به على الأنظمة التي يكون فيها كلٌّ من cgroups v1 وv2 مُمكّنَين. #78566 (Grigory Korolev).
  • كانت Table functions ‏-Cluster تفشل عند استخدامها مع Settings على مستوى الجدول. #78587 (Daniil Ivanik).
  • تحسين عمليات التحقق عندما لا تكون المعاملات مدعومة في ReplicatedMergeTree عند INSERT. #78633 (Azat Khuzhin).
  • تنظيف إعدادات الاستعلام أثناء attach. #78637 (Raúl Marín).
  • إصلاح تعطل عند تحديد path غير صالح في iceberg_metadata_file_path. #78688 (alesapin).
  • في محرك الجداول DeltaLake مع تنفيذ delta-kernel-s، تم إصلاح الحالة التي يختلف فيها schema القراءة عن schema الجدول مع وجود partition columns في الوقت نفسه، ما يؤدي إلى ظهور خطأ “not found column”. #78690 (Kseniia Sumarokova).
  • إصلاح مشكلة كان فيها، بعد جدولة إغلاق session مُسمّاة (ولكن قبل انتهاء المهلة)، يؤدي إنشاء session مُسمّاة جديدة بالاسم نفسه إلى إغلاقها عند الوقت المحدد لإغلاق الـ session الأولى. #78698 (Alexey Katsman).
  • تم إصلاح عدة أنواع من استعلامات SELECT التي تقرأ من جداول تستخدم محرك MongoDB أو table function ‏mongodb: الاستعلامات التي تتضمن تحويلًا ضمنيًا لقيمة ثابتة في clause ‏WHERE (مثل WHERE datetime = '2025-03-10 00:00:00')؛ والاستعلامات التي تحتوي على LIMIT وGROUP BY. في السابق، كان يمكن أن تُرجع نتائج غير صحيحة. #78777 (Anton Popov).
  • لا تمنع إيقاف الجدول أثناء تشغيل CHECK TABLE. #78782 (Raúl Marín).
  • إصلاح في Keeper: تصحيح عدد العناصر ephemeral في جميع الحالات. #78799 (Antonio Andelic).
  • إصلاح تحويل نوع غير صحيح في StorageDistributed عند استخدام دوال الجداول بخلاف view. يُغلق #78464. #78828 (Konstantin Bogdanov).
  • إصلاح اتساق التنسيق في tupleElement(*, 1). يُغلق #78639. #78832 (Konstantin Bogdanov).
  • أصبحت Dictionaries من النوع ssd_cache ترفض الآن مَعلمات block_size وwrite_buffer_size إذا كانت قيمها صفرًا أو سالبة (issue #78314). #78854 (Elmi Ahmadov).
  • إصلاح تعطل في Refreshable MATERIALIZED VIEW في حالة تنفيذ ALTER بعد إيقاف تشغيل غير سليم. #78858 (Azat Khuzhin).
  • إصلاح تحليل قيم DateTime غير الصالحة في format CSV. #78919 (Pavel Kruglov).
  • إصلاح في Keeper: تجنب تفعيل watches عند فشل الطلبات المتعددة. #79247 (Antonio Andelic).
  • إصلاح فشل قراءة جدول Iceberg عند تحديد قيمة min-max صراحةً لكنها كانت NULL. ولوحظ أن مكتبة Go الخاصة بـ Iceberg تُنشئ مثل هذه الملفات الرديئة. يُغلق #78740. #78764 (flynn).

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

  • مراعاة ميزات CPU المستهدفة في Rust وتمكين LTO في جميع الحزم البرمجية. #78590 (Raúl Marín).

إصدار ClickHouse 25.3 LTS، 2025-03-20

تغيير غير متوافق مع الإصدارات السابقة

  • منع تنفيذ TRUNCATE على قواعد البيانات من نوع Replicated. #76651 (Bharat Nallan).
  • تم التراجع عن ذاكرة التخزين المؤقت لفهرس تخطّي البيانات. #77447 (Nikita Mikhaylov).

ميزة جديدة

  • أصبح نوع البيانات JSON جاهزًا لبيئة الإنتاج. انظر https://jsonbench.com/. كما أصبح نوعا البيانات Dynamic وVariant جاهزين لبيئة الإنتاج. #77785 (Alexey Milovidov).
  • أُضيف بروتوكول SSH إلى clickhouse-server. وأصبح من الممكن الآن الاتصال بـ ClickHouse باستخدام أي عميل SSH. يُغلق هذا: #74340. #74989 (George Gamezardashvili).
  • استبدال وظائف الجداول ببدائلها من نوع -Cluster إذا كانت النسخ المتماثلة المتوازية مُمكّنة. يُصلح هذا #65024. #70659 (Konstantin Bogdanov).
  • تنفيذ جديد لذاكرة Userspace Page Cache يتيح تخزين البيانات مؤقتًا في الذاكرة داخل العملية بدلًا من الاعتماد على OS page cache، وهو مفيد عندما تكون البيانات مخزنة على virtual filesystem بعيد من دون الاستناد إلى local filesystem cache. #70509 (Michael Kolupaev).
  • أُضيف إعداد الخادم concurrent_threads_scheduler الذي يتحكم في كيفية توزيع CPU slots بين الاستعلامات المتزامنة. ويمكن ضبطه على round_robin (السلوك السابق) أو fair_round_robin لمعالجة مشكلة التوزيع غير العادل لموارد CPU بين عمليات INSERT وSELECT. #75949 (Sergei Trifonov).
  • أُضيفت الدالة التجميعية estimateCompressionRatio #70801. #76661 (Tariq Almawash).
  • أُضيفت الدالة arraySymmetricDifference. وهي تُرجع جميع العناصر من وسائط Array المتعددة التي لا تظهر في جميع الوسائط. مثال: SELECT arraySymmetricDifference([1, 2], [2, 3]) تُرجع [1, 3]. (issue #61673). #76231 (Filipp Abapolov).
  • أصبح من الممكن تحديد ملف metadata المطلوب قراءته صراحةً لـ Iceberg باستخدام إعداد التخزين/دالة الجدول iceberg_metadata_file_path . يُصلح هذا #47412. #77318 (alesapin).
  • أُضيفت دالة hash function باسم keccak256، وتُستخدم عادةً في تطبيقات البلوك تشين، وخاصةً في الأنظمة المعتمدة على EVM. #76669 (Arnaud Briche).
  • أُضيفت ثلاث دوال جديدة: icebergTruncate وفقًا للمواصفات https://iceberg.apache.org/spec/#truncate-transform-details، وtoYearNumSinceEpoch وtoMonthNumSinceEpoch. كما أُضيف دعم لتحويل truncate في partition pruning لمحرك Iceberg. #77403 (alesapin).
  • دعم نوع البيانات LowCardinality(Decimal) #72256. #72833 (zhanglistar).
  • سيُظهر حدثا profile events FilterTransformPassedRows وFilterTransformPassedBytes عدد الصفوف وعدد البايتات التي تمت تصفيتها أثناء تنفيذ الاستعلام. #76662 (Onkar Deshpande).
  • دعم نوع مقياس histogram. الواجهة مماثلة إلى حد كبير لعميل Prometheus، إذ يكفي استدعاء observe(value) لزيادة العداد في الفئة المقابلة للقيمة. وتُعرَض مقاييس histogram عبر system.histogram_metrics. #75736 (Miсhael Stetsyuk).
  • دعم CASE غير الثابت للتبديل بناءً على قيم صريحة. #77399 (Yarik Briukhovetskyi).

ميزة تجريبية

  • إضافة دعم Unity Catalog لجداول DeltaLake على AWS S3 ونظام الملفات المحلي. #76988 (alesapin).
  • تقديم تكامل تجريبي مع كتالوج خدمة AWS Glue لجداول Iceberg. #77257 (alesapin).
  • أُضيف دعم للاكتشاف التلقائي الديناميكي للعناقيد. ويُوسّع هذا ميزة الاكتشاف التلقائي الحالية الخاصة بـ العُقد. ويمكن لـ ClickHouse الآن اكتشاف العناقيد الجديدة وتسجيلها تلقائيًا ضمن مسار ZooKeeper مشترك باستخدام <multicluster_root_path>. #76001 (Anton Ivashkin).
  • إتاحة عمليات دمج تنظيف تلقائية لأقسام كاملة بعد مهلة قابلة للتهيئة، باستخدام الإعداد الجديد enable_replacing_merge_with_cleanup_for_min_age_to_force_merge. #76440 (Christoph Wurm).

تحسين الأداء

  • تنفيذ query condition cache لتحسين أداء الاستعلامات عند تكرار الشروط. ويُحفَظ نطاق الجزء من البيانات الذي لا يستوفي الشرط كفهرس مؤقت في الذاكرة، ثم تستخدمه الاستعلامات اللاحقة. أُغلقت #67768 #69236 (zhongyuankai).
  • إخلاء البيانات من cache بشكل نشط عند إزالة الأجزاء. وعدم السماح لـ cache بالنمو إلى الحد الأقصى إذا كانت كمية البيانات أقل من ذلك. #76641 (Alexey Milovidov).
  • استبدال Int256 وUInt256 بـ clang builtin i256 في العمليات الحسابية، مما يحقق تحسنًا في الأداء #70502. #73658 (李扬).
  • في بعض الحالات (مثل array column فارغ)، قد تحتوي data parts على ملفات فارغة. ويمكن تخطي كتابة blobs الفارغة إلى ObjectStorage والاكتفاء بتخزين metadata لهذه الملفات عندما يكون الجدول موجودًا على disk مع فصل metadata عن object storage. #75860 (Alexander Gololobov).
  • تحسين أداء min/max لـ Decimal32/Decimal64/DateTime64. #76570 (李扬).
  • أصبح تجميع الاستعلامات (الإعداد compile_expressions) يراعي الآن نوع الجهاز، مما يسرّع هذه الاستعلامات بشكل ملحوظ. #76753 (ZhangLiStar).
  • تحسين arraySort. #76850 (李扬).
  • تعطيل filesystem_cache_prefer_bigger_buffer_size عندما يُستخدم cache بشكل غير مباشر، مثل عمليات الدمج. #77898 (Kseniia Sumarokova).
  • تطبيق السمة preserve_most في بعض مواضع الشيفرة، مما يتيح توليد شيفرة أفضل قليلًا. #67778 (Nikita Taranov).
  • تسريع إيقاف خوادم ClickHouse (بإزالة تأخير قدره 2.5 ثانية). #76550 (Azat Khuzhin).
  • تجنب التخصيص الزائد في ReadBufferFromS3 ومخازن القراءة المؤقتة البعيدة الأخرى، مع خفض استهلاكها للذاكرة إلى النصف. #76692 (Sema Checherinda).
  • تحديث zstd من 1.5.5 إلى 1.5.7، ما قد يؤدي إلى بعض تحسينات الأداء. #77137 (Pradeep Chhetri).
  • تقليل استخدام الذاكرة أثناء prefetches الخاصة بـ JSON column في Wide parts. ويظهر ذلك عند استخدام ClickHouse فوق تخزين مشترك، كما في ClickHouse Cloud. #77640 (Pavel Kruglov).

تحسينات

  • دعم إعادة التسمية الذرّية عند استخدام TRUNCATE مع INTO OUTFILE. يعالج #70323. #77181 (Onkar Deshpande).
  • لم يعد من الممكن استخدام NaN أو inf كإعدادات لقيم الفاصلة العائمة. ولم يكن لذلك أي معنى أصلًا من قبل. #77546 (Yarik Briukhovetskyi).
  • تعطيل النسخ المتماثلة المتوازية افتراضيًا عند تعطيل المحلّل، بغض النظر عن إعداد compatibility. ولا يزال من الممكن تغيير هذا السلوك عبر ضبط parallel_replicas_only_with_analyzer صراحةً إلى false. #77115 (Igor Nikonov).
  • إضافة إمكانية تحديد قائمة بالترويسات التي يُعاد توجيهها من ترويسات طلب العميل إلى موثّق HTTP الخارجي. #77054 (inv2004).
  • مراعاة مطابقة الأعمدة غير الحساسة لحالة الأحرف للحقول داخل أعمدة Tuple. إغلاق https://github.com/apache/incubator-gluten/issues/8324. #73780 (李扬).
  • ستُحفَظ معلمات codec ‏Gorilla الآن دائمًا في البيانات الوصفية للجدول داخل ملف ‎.sql. وهذا يغلق: #70072. #74814 (Nikita Mikhaylov).
  • تنفيذ تحسينات على التحليل لبعض بحيرات البيانات (تحليل معرّفات Sequence ID: أُضيفت وظيفة لتحليل معرّفات التسلسل في ملفات manifest، وتحليل بيانات Avro الوصفية: أُعيد تصميم محلّل بيانات Avro الوصفية ليكون سهل التوسعة للتحسينات المستقبلية). #75010 (Daniil Ivanik).
  • إزالة trace_id من ORDER BY الافتراضي لـ system.opentelemetry_span_log. #75907 (Azat Khuzhin).
  • يمكن الآن تطبيق التشفير (السمة encrypted_by) على أي ملف إعدادات (config.xml و users.xml وملفات الإعدادات المتداخلة). سابقًا، كان ذلك يعمل فقط مع ملف config.xml ذي المستوى الأعلى. #75911 (Mikhail Gorshkov).
  • تحسين table ‏system.warnings وإضافة بعض رسائل التحذير الديناميكية التي يمكن إضافتها أو تحديثها أو إزالتها. #76029 (Bharat Nallan).
  • يجعل هذا الـ PR تشغيل query مثل ALTER USER user1 ADD PROFILES a, DROP ALL PROFILES غير ممكن، لأن جميع عمليات DROP يجب أن تأتي أولًا في الترتيب. #76242 (pufit).
  • تحسينات متنوعة لـ SYNC REPLICA (رسائل خطأ أفضل، واختبارات أفضل، وفحوصات سلامة). #76307 (Azat Khuzhin).
  • استخدام آلية بديلة صحيحة عند فشل النسخ متعدد الأجزاء إلى S3 أثناء النسخ الاحتياطي بسبب Access Denied. قد يؤدي النسخ متعدد الأجزاء إلى ظهور خطأ Access Denied عند إجراء النسخ الاحتياطي بين حاويات لها بيانات اعتماد مختلفة. #76515 (Antonio Andelic).
  • تمت ترقية librdkafka (وهي سيئة للغاية) إلى الإصدار 2.8.0 (ولم تتحسن كثيرًا)، كما جرى تحسين تسلسل الإيقاف لجداول Kafka، مما يقلل التأخير عند حذف الجداول وإعادة تشغيل الخادم. لم يعد engine=Kafka يغادر مجموعة المستهلكين صراحةً عند حذف جدول. وبدلًا من ذلك، يبقى المستهلك ضمن المجموعة إلى أن يُزال تلقائيًا بعد session_timeout_ms (الافتراضي: 45 ثانية) من عدم النشاط. #76621 (filimonov).
  • إصلاح التحقق من صحة إعدادات طلبات S3. #76658 (Vitaly Baranov).
  • تحتوي جداول النظام مثل server_settings وsettings على عمود للقيمة default، وهو مفيد. تمت إضافته أيضًا إلى merge_tree_settings وreplicated_merge_tree_settings. #76942 (Diego Nieto).
  • تمت إضافة ProfileEvents::QueryPreempted، وله منطق مماثل لـ CurrentMetrics::QueryPreempted. #77015 (VicoWu).
  • سابقًا، كان يمكن لقاعدة بيانات Replicated طباعة بيانات الاعتماد المحددة في query ضمن السجلات. تم إصلاح هذا السلوك. وهذا يُغلق: #77123. #77133 (Nikita Mikhaylov).
  • السماح باستخدام ALTER TABLE DROP PARTITION مع plain_rewritable disk. #77138 (Julia Kartseva).
  • يدعم إعداد النسخ الاحتياطي/الاستعادة allow_s3_native_copy الآن ثلاث قيم ممكنة: - False - لن يُستخدم النسخ الأصلي في S3؛ - True (الافتراضي السابق) - سيحاول ClickHouse أولًا استخدام النسخ الأصلي في S3، وإذا فشل فسيلجأ إلى أسلوب القراءة+الكتابة؛ - 'auto' (الافتراضي الجديد) - سيقارن ClickHouse أولًا بيانات اعتماد المصدر والوجهة. وإذا كانت متطابقة، فسيحاول ClickHouse استخدام النسخ الأصلي في S3، ثم قد يلجأ إلى أسلوب القراءة+الكتابة. وإذا كانت مختلفة، فسينتقل ClickHouse مباشرةً إلى أسلوب القراءة+الكتابة. #77401 (Vitaly Baranov).
  • دعم aws session token واستخدام بيانات اعتماد البيئة في delta kernel لمحرك الجداول DeltaLake. #77661 (Kseniia Sumarokova).

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

  • إصلاح التعطل أثناء معالجة الدفعة المعلّقة لـ async distributed INSERT (بسبب مثلًا No such file or directory). #72939 (Azat Khuzhin).
  • تحسين تحويل datetime أثناء تحليل الفهرس من خلال فرض سلوك التشبّع في التحويلات الضمنية من Date إلى DateTime. يعالج هذا حالات عدم الدقة المحتملة في تحليل الفهرس الناتجة عن حدود نطاق datetime. ويُصلح ذلك #73307. كما يُصلح أيضًا التحويل الصريح toDateTime عندما تكون date_time_overflow_behavior = 'ignore'، وهي القيمة الافتراضية. #73326 (Amos Bird).
  • إصلاح شتى أنواع الأخطاء الناتجة عن حالة تسابق بين UUID وأسماء الجداول (على سبيل المثال، سيُصلح هذا حالة التسابق بين RENAME و RESTART REPLICA؛ ففي حال تنفيذ RENAME بالتزامن مع SYSTEM RESTART REPLICA قد ينتهي بك الأمر إلى إعادة تشغيل replica خاطئة، أو/و ترك أحد الجداول في حالة Table X is being restarted). #76308 (Azat Khuzhin).
  • إصلاح فقدان البيانات عند تفعيل async insert وتنفيذ insert into … from file … مع أحجام block غير متساوية؛ فإذا كان حجم block الأول < async_max_size لكن block الثاني > async_max_size، فلن يتم إدراج block الثاني. وتبقى هذه البيانات في squashing. #76343 (Han Fei).
  • إعادة تسمية الحقل ‘marks’ إلى ‘marks_bytes’ في system.data_skipping_indices. #76374 (Robert Schulze).
  • إصلاح التعامل مع الأخطاء غير المتوقعة أثناء تغيير الحجم الديناميكي لـ filesystem cache خلال eviction. #76466 (Kseniia Sumarokova).
  • إصلاح تهيئة used_flag في parallel hash. وقد كان ذلك قد يؤدي إلى crash في الخادم. #76580 (Nikita Taranov).
  • إصلاح logical error عند استدعاء الدالة defaultProfiles داخل projection. #76627 (pufit).
  • عدم طلب المصادقة الأساسية التفاعلية في المتصفح ضمن Web UI. يُغلق #76319. #76637 (Alexey Milovidov).
  • إصلاح استثناء THERE_IS_NO_COLUMN عند تحديد قيمة Boolean حرفية من distributed tables. #76656 (Yakov Olkhovskiy).
  • أصبح اختيار المسار الفرعي داخل directory الجدول يتم بطريقة أدق. #76681 (Daniil Ivanik).
  • إصلاح الخطأ Not found column in block بعد تعديل جدول يحتوي على subcolumn في PK. بعد https://github.com/ClickHouse/ClickHouse/pull/72644، يتطلب ذلك https://github.com/ClickHouse/ClickHouse/pull/74403. #76686 (Nikolai Kochetov).
  • إضافة اختبارات أداء لـ null shortcircuit وإصلاح أخطاء. #76708 (李扬).
  • تفريغ مخازن الكتابة المؤقتة الخاصة بالمخرجات قبل إنهائها. وإصلاح LOGICAL_ERROR الذي كان يتولّد أثناء إنهاء بعض تنسيقات المخرجات، مثل JSONEachRowWithProgressRowOutputFormat. #76726 (Antonio Andelic).
  • أُضيف دعم UUID الثنائي في MongoDB (#74452) - وأُصلح pushdown لعبارة WHERE إلى MongoDB عند استخدام table function (#72210) - وتغيّر type mapping بين MongoDB وClickHouse بحيث لا يمكن parse لـ UUID الثنائي في MongoDB إلا إلى UUID في ClickHouse. من شأن ذلك تجنّب حالات الالتباس والمفاجآت مستقبلًا. - كما أُصلح تعيين OID مع الحفاظ على backward compatibility. #76762 (Kirill Nikiforov).
  • إصلاح معالجة الاستثناءات في deserialization المتوازي للبادئات في JSON subcolumns. #76809 (Pavel Kruglov).
  • إصلاح سلوك الدالة lgamma مع الأعداد الصحيحة السالبة. #76840 (Ilya Kataev).
  • إصلاح تحليل المفتاح العكسي لمفاتيح primary key المعرّفة صراحةً. وهو مشابه لـ #76654. #76846 (Amos Bird).
  • إصلاح الطباعة المنسقة لقيم Bool في تنسيق JSON. #76905 (Pavel Kruglov).
  • إصلاح احتمال حدوث crash بسبب rollback غير صحيح لـ JSON column عند وقوع خطأ أثناء async inserts. #76908 (Pavel Kruglov).
  • سابقًا، كان multiIf قد يعيد أنواعًا مختلفة من columns أثناء مرحلة التخطيط والتنفيذ الرئيسي. وقد أدى ذلك إلى أن تنتج الشيفرة سلوكًا غير معرّف من منظور C++. #76914 (Nikita Taranov).
  • أُصلح serialization غير الصحيح للمفاتيح الثابتة من نوع Nullable في MergeTree. ويعالج هذا #76939. #76985 (Amos Bird).
  • إصلاح فرز قيم BFloat16. هذا يغلق #75487. وهذا يغلق #75669. #77000 (Alexey Milovidov).
  • إصلاح خلل في JSON مع Variant subcolumn عبر إضافة check لتخطي subcolumns المؤقتة في فحص اتساق part. #72187. #77034 (Smita Kulkarni).
  • إصلاح crash في Template parsing ضمن Values format عند عدم تطابق types. #77071 (Pavel Kruglov).
  • عدم السماح بإنشاء table من نوع EmbeddedRocksDB تحتوي على subcolumn ضمن primary key. سابقًا كان يمكن إنشاء مثل هذا الجدول، لكن استعلامات select كانت تفشل. #77074 (Pavel Kruglov).
  • إصلاح المقارنة غير الصالحة في distributed queries لأن pushdown لـ predicates إلى الجهة البعيدة لا يراعي أنواع القيم الحرفية. #77093 (Duc Canh Le).
  • إصلاح التعطل أثناء إنشاء جدول Kafka عند حدوث استثناء. #77121 (Pavel Kruglov).
  • دعم JSON والأعمدة الفرعية في محركي Kafka وRabbitMQ. #77122 (Pavel Kruglov).
  • إصلاح فكّ تكدس الاستثناءات على MacOS. #77126 (Eduard Karacharov).
  • إصلاح قراءة العمود الفرعي ‘null’ في الدالة getSubcolumn. #77163 (Pavel Kruglov).
  • إصلاح فهرس bloom filter مع Array والدوال غير المدعومة. #77271 (Pavel Kruglov).
  • يجب التحقق من القيد المفروض على عدد الجداول فقط أثناء استعلام CREATE الأولي. #77274 (Nikolay Degterinsky).
  • ليس خطأً: أصبح SELECT toBFloat16(-0.0) == toBFloat16(0.0) يعيد الآن true بشكل صحيح (بدلاً من false سابقًا). وهذا يجعل السلوك متسقًا مع Float32 وFloat64. #77290 (Shankar Iyer).
  • إصلاح مرجع قد يكون غير صحيح إلى المتغير key_index غير المهيأ، ما قد يؤدي إلى تعطل في بنيات Debug (لن يتسبب هذا المرجع غير المهيأ في مشكلات في بنيات الإصدار لأن الشيفرة اللاحقة يُرجح أن تُطلق أخطاء.) ### إدخال توثيقي للتغييرات الظاهرة للمستخدم. #77305 (wxybear).
  • إصلاح اسم partition لقيمة Bool. كان هذا معطلاً في https://github.com/ClickHouse/ClickHouse/pull/74533. #77319 (Pavel Kruglov).
  • إصلاح المقارنة بين Tuples التي تحتوي على عناصر Nullable وStrings. على سبيل المثال، قبل هذا التغيير كانت المقارنة بين Tuple (1, null) وString '(1,null)' تؤدي إلى خطأ. ومثال آخر هو المقارنة بين Tuple (1, a)، حيث إن a هو عمود من النوع Nullable، وString '(1, 2)'. يعالج هذا التغيير هذه المشكلات. #77323 (Alexey Katsman).
  • إصلاح تعطل في ObjectStorageQueueSource. وقد أُدخل هذا الخلل في https://github.com/ClickHouse/ClickHouse/pull/76358. #77325 (Pavel Kruglov).
  • إصلاح async_insert مع input. #77340 (Azat Khuzhin).
  • إصلاح: قد يفشل WITH FILL مع NOT_FOUND_COLUMN_IN_BLOCK عندما يزيل المُخطِّط عمود الفرز. وهناك مشكلة مشابهة مرتبطة بعدم اتساق DAG المحسوب لتعبير INTERPOLATE. #77343 (Yakov Olkhovskiy).
  • إصلاح عدة أخطاء LOGICAL_ERROR تتعلق بتعيين alias لعُقد AST غير الصالحة. #77445 (Raúl Marín).
  • في تنفيذ filesystem cache، تم إصلاح معالجة الأخطاء أثناء كتابة file segment. #77471 (Kseniia Sumarokova).
  • اجعل DatabaseIceberg يستخدم ملف البيانات الوصفية الصحيح الذي يوفّره الكتالوج. يُغلق #75187. #77486 (Kseniia Sumarokova).
  • تفترض ذاكرة التخزين المؤقت للاستعلامات الآن أن UDFs غير حتمية. وبناءً على ذلك، لم تعد نتائج الاستعلامات التي تتضمن UDFs تُخزَّن مؤقتًا. في السابق، كان بإمكان المستخدمين تعريف UDFs غير حتمية، وكانت نتائجها تُخزَّن مؤقتًا بالخطأ (issue #77553). #77633 (Jimmy Aguilar Mena).
  • إصلاح مشكلة اقتصار عمل system.filesystem_cache_log على حالة تفعيل الإعداد enable_filesystem_cache_log. #77650 (Kseniia Sumarokova).
  • إصلاح خطأ منطقي عند استدعاء الدالة defaultRoles داخل إسقاط. متابعة لـ #76627. #77667 (pufit).
  • لم يعد مسموحًا الآن بوسيط ثانٍ من النوع Nullable للدالة arrayResize. سابقًا، كان استخدام Nullable كوسيط ثانٍ قد يؤدي إلى أي شيء، من أخطاء إلى نتائج غير صحيحة. (issue #48398). #77724 (Manish Gill).
  • التحقّق بانتظام مما إذا كانت عمليات الدمج وعمليات mutations قد أُلغيت، حتى في الحالات التي لا تُنتج فيها العملية أي كتل بيانات للكتابة. #77766 (János Benjamin Antal).

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

إصدار ClickHouse 25.2، 2025-02-27

تغيير غير متوافق مع الإصدارات السابقة

  • تفعيل async_load_databases بالكامل بشكل افتراضي (حتى في عمليات التثبيت التي لا تُحدِّث config.xml). #74772 (Azat Khuzhin).
  • إضافة تنسيقات JSONCompactEachRowWithProgress وJSONCompactStringsEachRowWithProgress. استكمال لـ #69989. لم تعد تنسيقات JSONCompactWithNames وJSONCompactWithNamesAndTypes تُخرج “totals” — ويبدو أن ذلك كان خطأً في التنفيذ. #75037 (Alexey Milovidov).
  • تغيير القيمة الافتراضية لـ format_alter_operations_with_parentheses إلى true لإزالة اللبس من قائمة أوامر ALTER (انظر https://github.com/ClickHouse/ClickHouse/pull/59532). يؤدي هذا إلى تعطيل النسخ المتماثل مع العناقيد الأقدم من 24.3. إذا كنت تُرقّي عنقودًا يستخدم إصدارات أقدم، فعطّل هذا الإعداد في إعدادات الخادم أو رقِّ أولًا إلى 24.3. #75302 (Raúl Marín).
  • إزالة إمكانية ترشيح رسائل السجل باستخدام التعبيرات النمطية. فقد تسبب هذا التنفيذ في حدوث سباق بيانات، لذلك كان لا بد من إزالته. #75577 (János Benjamin Antal).
  • لم يعد من الممكن أن تكون قيمة الإعداد min_chunk_bytes_for_parallel_parsing صفرًا. هذا يُصلح: #71110. #75239 (Nikita Mikhaylov).
  • التحقق من صحة الإعدادات في تهيئة cache. كانت الإعدادات غير الموجودة تُتجاهل سابقًا، أما الآن فستؤدي إلى ظهور خطأ ويجب إزالتها. #75452 (Kseniia Sumarokova).

ميزة جديدة

  • دعم النوع Nullable(JSON). #73556 (Pavel Kruglov).
  • دعم الأعمدة الفرعية في تعبيري DEFAULT وMATERIALIZED. #74403 (Pavel Kruglov).
  • دعم كتابة مرشحات bloom في Parquet باستخدام الإعداد output_format_parquet_write_bloom_filter (مُمكَّن افتراضيًا). #71681 (Michael Kolupaev).
  • أصبحت واجهة الويب تتضمن الآن تنقّلًا تفاعليًا داخل قاعدة البيانات. #75777 (Alexey Milovidov).
  • السماح بدمج الأقراص للقراءة فقط وللقراءة والكتابة ضمن سياسة التخزين (كأحجام متعددة أو أقراص متعددة). يتيح ذلك قراءة البيانات من الحجم بالكامل، بينما ستفضّل عمليات الإدراج القرص القابل للكتابة (أي سياسة تخزين Copy-on-Write). #75862 (Azat Khuzhin).
  • إضافة محرك قاعدة بيانات جديد، DatabaseBackup, يتيح إرفاق جدول/قاعدة بيانات فورًا من نسخة احتياطية. #75725 (Maksim Kita).
  • دعم العبارات المُحضَّرة في بروتوكول Postgres wire. #75035 (scanhex12).
  • إضافة إمكانية ATTACH الجداول من دون طبقة قاعدة بيانات، وهو ما يفيد مع جداول MergeTree الموجودة على Web وS3 وأنظمة الملفات الافتراضية الخارجية المشابهة. #75788 (Azat Khuzhin).
  • إضافة دالة جديدة لمقارنة السلاسل النصية، compareSubstrings، لمقارنة أجزاء من سلسلتين نصيتين. مثال: SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result تعني “مقارنة 6 بايتات من السلسلتين النصيتين ‘Saxon’ و’Anglo-Saxon’ ترتيبًا معجميًا، بدءًا من الإزاحة 0 في السلسلة الأولى، والإزاحة 5 في السلسلة الثانية”. #74070 (lgbo).
  • تمت إضافة دالة جديدة، initialQueryStartTime. وهي تُرجع وقت بدء الاستعلام الحالي. وتكون القيمة نفسها عبر جميع الشظايا أثناء الاستعلام الموزّع. #75087 (Roman Lomonosov).
  • إضافة دعم مصادقة SSL باستخدام named collections لـ MySQL. يُغلق #59111. #59452 (Nikolay Degterinsky).

الميزات التجريبية

  • أُضيف إعداد جديد، enable_adaptive_memory_spill_scheduler، يتيح لعدة عمليات Grace JOIN ضمن الاستعلام نفسه مراقبة استهلاكها الإجمالي للذاكرة وتفعيل التفريغ إلى التخزين الخارجي بشكل تكيّفي لمنع حدوث MEMORY_LIMIT_EXCEEDED. #72728 (lgbo).
  • جُعل محرك جدول Kafka الجديد والتجريبي يلتزم بالكامل بأعلام الميزات الخاصة بـ Keeper. #76004 (János Benjamin Antal).
  • أُعيدت خوارزمية الترميز QPL ‏(Intel)، التي أُزيلت في v24.10 بسبب مشكلات في الترخيص. #76021 (Konstantin Bogdanov).
  • أُضيف دعم لخيار الإعداد dfs.client.use.datanode.hostname ضمن التكامل مع HDFS. #74635 (Mikhail Tiukavkin).

تحسين الأداء

  • تحسين أداء قراءة عمود JSON بالكامل في أجزاء Wide من S3. وقد تحقق ذلك عبر إضافة عمليات جلب مسبق لفك تسلسل بادئات الأعمدة الفرعية، وذاكرة تخزين مؤقت للبادئات بعد فك تسلسلها، وفك تسلسل متوازٍ لبادئات الأعمدة الفرعية. ويحسّن ذلك قراءة عمود JSON من S3 بمقدار 4 أضعاف في استعلامات مثل SELECT data FROM table وبنحو 10 أضعاف في استعلامات مثل SELECT data FROM table LIMIT 10. #74827 (Pavel Kruglov).
  • إصلاح التنافس غير الضروري في parallel_hash عندما تكون max_rows_in_join = max_bytes_in_join = 0. #75155 (Nikita Taranov).
  • إصلاح التخصيص المسبق المزدوج في ConcurrentHashJoin عندما يبدّل المُحسِّن طرفي join. #75149 (Nikita Taranov).
  • تحسين طفيف في بعض سيناريوهات join: احتساب عدد صفوف المخرجات مسبقًا وحجز الذاكرة لها. #75376 (Alexander Gololobov).
  • بالنسبة إلى استعلامات مثل WHERE a < b AND b < c AND c < 5، يمكن استنتاج شروط مقارنة جديدة (a < 5 AND b < 5) لتحسين فعالية التصفية. #73164 (Shichao Jin).
  • تحسين في Keeper: تعطيل حساب digest عند الالتزام بالتخزين داخل الذاكرة لتحسين الأداء. ويمكن تمكينه عبر الإعداد keeper_server.digest_enabled_on_commit. ولا يزال digest يُحتسب عند المعالجة المسبقة للطلبات. #75490 (Antonio Andelic).
  • دفع تعبير التصفية من شرط JOIN ON عند الإمكان. #75536 (Vladimir Cherkasov).
  • احتساب أحجام الأعمدة والفهارس عند الحاجة في MergeTree. #75938 (Pavel Kruglov).
  • إعادة تفعيل مراعاة ttl_only_drop_parts عند MATERIALIZE TTL؛ بحيث لا تُقرأ إلا الأعمدة اللازمة لإعادة احتساب TTL، مع حذف الأجزاء عبر استبدالها بأجزاء فارغة. #72751 (Andrey Zvonov).
  • تقليل حجم مخزن الكتابة المؤقت لملفات البيانات الوصفية plain_rewritable. #75758 (Julia Kartseva).
  • تقليل استخدام الذاكرة لبعض window functions. #65647 (lgbo).
  • تقييم مرشحات bloom filter في Parquet وفهارس الحد الأدنى/الحد الأقصى معًا. وهذا ضروري لدعم صحيح لحالات مثل: x = 3 or x > 5 عندما تكون البيانات = [1, 2, 4, 5]. #71383 (Arthur Passos).
  • لم تعد الاستعلامات الممرَّرة إلى التخزين Executable مقتصرة على تنفيذ أحادي الخيط. #70084 (yawnt).
  • جلب الأجزاء بالتوازي في ALTER TABLE FETCH PARTITION (يُتحكَّم في حجم thread pool بواسطة max_fetch_partition_thread_pool_size). #74978 (Azat Khuzhin).
  • السماح بنقل predicates التي تستخدم الدالة indexHint إلى PREWHERE. #74987 (Anton Popov).

تحسينات

  • تم إصلاح احتساب الحجم في الذاكرة لأعمدة LowCardinality. #74688 (Nikita Taranov).
  • أصبح الجدول processors_profile_log يملك الآن إعدادًا افتراضيًا مع TTL لمدة 30 يومًا. #66139 (Ilya Yatsishin).
  • السماح بتسمية الأجزاء في إعدادات العنقود. #72276 (MikhailBurdukov).
  • تغيير حالة نجاح استجابة Prometheus remote write من 200/OK إلى 204/NoContent. #74170 (Michael Dempsey).
  • إضافة إمكانية إعادة تحميل max_remote_read_network_bandwidth_for_serve و max_remote_write_network_bandwidth_for_server أثناء التشغيل دون إعادة تشغيل الخادم. #74206 (Kai Zhu).
  • السماح باستخدام مسارات blob لحساب قيم التحقق أثناء إنشاء نسخة احتياطية. #74729 (Vitaly Baranov).
  • تمت إضافة عمود معرّف الاستعلام إلى system.query_cache (يغلق #68205). #74982 (NamHoaiNguyen).
  • أصبح من الممكن إلغاء استعلامات ALTER TABLE ... FREEZE ... باستخدام KILL QUERY وكذلك تلقائيًا عند انتهاء المهلة (max_execution_time). #75016 (Kirill).
  • إضافة دعم groupUniqArrayArrayMap بوصفه SimpleAggregateFunction. #75034 (Miel Donkers).
  • إخفاء إعدادات بيانات اعتماد الكتالوج في محرك قاعدة البيانات Iceberg. يغلق #74559. #75080 (Kseniia Sumarokova).
  • intExp2 / intExp10: تحديد السلوك غير المعرّف: إرجاع 0 إذا كانت قيمة argument صغيرة جدًا، و18446744073709551615 إذا كانت كبيرة جدًا، وإطلاق استثناء إذا كانت nan. #75312 (Vitaly Baranov).
  • دعم s3.endpoint بشكل أصيل من config الكتالوج في DatabaseIceberg. يغلق #74558. #75375 (Kseniia Sumarokova).
  • عدم الإخفاق بصمت إذا لم تكن لدى المستخدم الذي ينفّذ SYSTEM DROP REPLICA الأذونات الكافية. #75377 (Bharat Nallan).
  • إضافة ProfileEvent عن عدد المرات التي فشل فيها أي من سجلات النظام في التفريغ. #75466 (Alexey Milovidov).
  • إضافة check وlogging إضافيين لفك التشفير وإزالة الضغط. #75471 (Vitaly Baranov).
  • أُضيف دعم لعلامة الميكرو (U+00B5) في الدالة parseTimeDelta. وأصبح الآن التعرّف على كلٍّ من علامة الميكرو (U+00B5) والحرف اليوناني مو (U+03BC) بوصفهما تمثيلين صالحين للميكروثانية، بما يوافق سلوك ClickHouse مع تنفيذ Go (انظر time.go وtime/format.go). #75472 (Vitaly Orlov).
  • استُبدل إعداد الخادم (send_settings_to_client) بإعداد العميل (apply_settings_from_server) الذي يتحكم في ما إذا كان ينبغي للشيفرة من جهة العميل (مثل تحليل بيانات INSERT وتنسيق مخرجات الاستعلام) استخدام الإعدادات من users.xml وprofile المستخدم على الخادم. بخلاف ذلك، لا تُستخدم إلا الإعدادات القادمة من سطر أوامر العميل والجلسة والاستعلام. لاحظ أن هذا ينطبق فقط على native client (وليس مثلًا HTTP)، ولا ينطبق على معظم معالجة الاستعلامات (التي تحدث على الخادم). #75478 (Michael Kolupaev).
  • تحسين رسائل error الخاصة بأخطاء الصياغة. في السابق، إذا كان الاستعلام كبيرًا جدًا، وكان الـ token الذي يتجاوز طوله الحد عبارة عن string literal كبيرة جدًا، فإن الرسالة التي توضّح السبب كانت تضيع وسط مثالين لهذا الـ token الطويل جدًا. كما أُصلحت المشكلة التي كان فيها استعلام يحتوي على UTF-8 يُقتطع بشكل غير صحيح في رسالة الخطأ. وأُصلح أيضًا الإفراط في وضع علامات الاقتباس حول أجزاء من الاستعلام. يُغلق هذا #75473. #75561 (Alexey Milovidov).
  • إضافة profile events إلى storage S3(Azure)Queue. #75618 (Kseniia Sumarokova).
  • تعطيل إرسال الإعدادات من الخادم إلى العميل (send_settings_to_client=false) لأغراض التوافقية (ستُعاد لاحقًا إعادة تنفيذ هذه الميزة كإعداد على جهة العميل لتحسين سهولة الاستخدام). #75648 (Michael Kolupaev).
  • إضافة config باسم memory_worker_correct_memory_tracker لتمكين تصحيح memory tracker الداخلي باستخدام معلومات من مصادر مختلفة تُقرأ دوريًا في background thread. #75714 (Antonio Andelic).
  • إضافة العمود normalized_query_hash إلى system.processes. ملاحظة: رغم أنه يمكن حسابه بسهولة أثناء التنفيذ باستخدام الدالة normalizedQueryHash، فإن هذا مطلوب للتحضير للتغييرات اللاحقة. #75756 (Alexey Milovidov).
  • الاستعلام عن system.tables لن يؤدي إلى استثناء حتى إذا كان هناك جدول Merge أُنشئ فوق قاعدة بيانات لم تعد موجودة. كما أُزيلت method getTotalRows من جداول Hive لأننا لا نسمح لها بتنفيذ عمل معقد. #75772 (Alexey Milovidov).
  • تخزين start_time/end_time للنسخ الاحتياطية بدقة الميكروثانية. #75929 (Aleksandr Musorin).
  • إضافة المقياس MemoryTrackingUncorrected الذي يعرض قيمة memory tracker العالمي الداخلي غير المصححة بواسطة RSS. #75935 (Antonio Andelic).
  • السماح بتحليل نقاط النهاية مثل localhost:1234/handle في دوال الجداول PostgreSQL أو MySQL. يُصلح هذا تراجعًا أُدخل في https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov).
  • أُضيف إعداد على مستوى الخادم throw_on_unknown_workload يتيح اختيار السلوك عند تنفيذ استعلام مع ضبط workload على قيمة غير معروفة: إما السماح بوصول غير محدود (الافتراضي)، أو إطلاق خطأ RESOURCE_ACCESS_DENIED. وهذا مفيد لفرض استخدام جدولة أحمال العمل في جميع الاستعلامات. #75999 (Sergei Trifonov).
  • لا تُعِد كتابة الأعمدة الفرعية إلى getSubcolumn في ARRAY JOIN إذا لم يكن ذلك ضروريًا. #76018 (Pavel Kruglov).
  • أعد المحاولة عند حدوث أخطاء coordination أثناء تحميل الجداول. #76020 (Alexander Tokmakov).
  • دعم تفريغ السجلات الفردية في SYSTEM FLUSH LOGS. #76132 (Raúl Marín).
  • جرى تحسين صفحة الخادم /binary. باستخدام منحنى Hilbert بدلًا من منحنى Morton. وعرض نطاق عناوين بحجم 512 MB داخل المربع، مما يملأه بصورة أفضل (في الإصدارات السابقة، كانت العناوين تملأ نصف المربع فقط). وتلوين العناوين بحسب قربها من اسم المكتبة بدلًا من اسم الدالة. والسماح بالتمرير لمسافة أكبر قليلًا خارج المنطقة. #76192 (Alexey Milovidov).
  • إعادة محاولة استعلامات ON CLUSTER في حال حدوث TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
  • إضافة المقياس غير المتزامن CPUOverload، الذي يحسب العجز النسبي في CPU على الخادم. #76404 (Alexey Milovidov).
  • تغيير القيمة الافتراضية لـ output_format_pretty_max_rows من 10000 إلى 1000. أرى أن ذلك أفضل من ناحية سهولة الاستخدام. #76407 (Alexey Milovidov).

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

  • إصلاح تنسيق الاستثناءات باستخدام تنسيق مخصص إذا ظهرت أثناء تفسير الاستعلام. في الإصدارات السابقة، كانت الاستثناءات تُنسَّق باستخدام التنسيق الافتراضي بدلًا من التنسيق المحدد في الاستعلام. يُصلح هذا #55422. #74994 (Alexey Milovidov).
  • إصلاح تعيين الأنواع في SQLite (الأنواع الصحيحة إلى int64، والأعداد العائمة إلى float64). #73853 (Joanna Hulboj).
  • إصلاح تحليل المعرّفات من النطاقات الأصلية. والسماح باستخدام الأسماء المستعارة للتعبيرات في عبارة WITH. يُصلح #58994. يُصلح #62946. يُصلح #63239. يُصلح #65233. يُصلح #71659. يُصلح #71828. يُصلح #68749. #66143 (Dmitry Novik).
  • إصلاح الرتابة في الدالة negate. في الإصدارات السابقة، كان الاستعلام select * from a where -x = -42;، حيث إن x هو المفتاح الأساسي، قد يُرجع نتيجة غير صحيحة. #71440 (Michael Kolupaev).
  • إصلاح التعامل مع Tuple فارغ في arrayIntersect. يُصلح هذا #72578. #72581 (Amos Bird).
  • إصلاح قراءة الأعمدة الفرعية للكائنات الفرعية في JSON عند وجود بادئة غير صحيحة. #73182 (Pavel Kruglov).
  • تمرير إعدادات تنسيق Native بشكل صحيح في اتصال العميل بالخادم. #73924 (Pavel Kruglov).
  • التحقق من الأنواع غير المدعومة لبعض أنظمة التخزين. #74218 (Pavel Kruglov).
  • إصلاح تعطل عند تنفيذ الاستعلام INSERT INTO SELECT عبر واجهة PostgreSQL على macOS (المشكلة #72938). #74231 (Artem Yurov).
  • إصلاح المتغير max_log_ptr غير المهيأ في قاعدة البيانات Replicated. #74336 (Konstantin Morozov).
  • إصلاح تعطل عند إدراج interval (المشكلة #74299). #74478 (NamHoaiNguyen).
  • إصلاح تنسيق ثوابت JSON النصية. في السابق، كان ذلك قد يؤدي إلى أخطاء في البنية أثناء إرسال الاستعلام إلى خادم آخر. #74533 (Pavel Kruglov).
  • إصلاح استعلام CREATE المعطوب عند استخدام تعبيرات partition ثابتة مع تمكين projections الضمنية. يُصلح هذا #74596. #74634 (Amos Bird).
  • تجنّب ترك الاتصال في حالة معطّلة بعد انتهاء عملية INSERT بحدوث استثناء. #74740 (Azat Khuzhin).
  • تجنّب إعادة استخدام الاتصالات التي تُركت في حالة انتقالية. #74749 (Azat Khuzhin).
  • إصلاح تعطل أثناء تحليل تعريف نوع JSON عندما لا يكون اسم النوع بأحرف كبيرة. #74784 (Pavel Kruglov).
  • Keeper: إصلاح logical_error عندما يكون الاتصال قد أُنهي قبل إنشائه. #74844 (Michael Kolupaev).
  • إصلاح سلوك كان يمنع الخادم من بدء التشغيل عند وجود جدول يستخدم AzureBlobStorage. تُحمَّل الجداول من دون إرسال أي طلبات إلى Azure. #74880 (Alexey Katsman).
  • إصلاح غياب الحقلين used_privileges وmissing_privileges في query_log لعمليات BACKUP وRESTORE. #74887 (Alexey Katsman).
  • تحديث تذكرة krb في HDFS عند حدوث خطأ sasl أثناء طلب select إلى HDFS. #74930 (inv2004).
  • إصلاح الاستعلامات على قاعدة البيانات Replicated في startup_scripts. #74942 (Azat Khuzhin).
  • إصلاح المشكلات المتعلقة بالتعبيرات ذات الأنواع المستعارة في عبارة JOIN ON عند استخدام مقارنة null-safe. #74970 (Vladimir Cherkasov).
  • إعادة حالة الجزء من deleting إلى outdated عند فشل عملية الإزالة. #74985 (Sema Checherinda).
  • في الإصدارات السابقة، عندما كان هناك استعلام فرعي scalar، بدأنا في كتابة التقدّم (المتراكم من معالجة الاستعلام الفرعي) أثناء تهيئة تنسيق البيانات، أي قبل كتابة رؤوس HTTP. أدى ذلك إلى فقدان رؤوس HTTP، مثل X-ClickHouse-QueryId وX-ClickHouse-Format، وكذلك Content-Type. #74991 (Alexey Milovidov).
  • إصلاح استعلامات CREATE TABLE AS... عندما تكون database_replicated_allow_replicated_engine_arguments=0. #75000 (Bharat Nallan).
  • إصلاح ترك الاتصال في حالة سيئة في العميل بعد استثناءات INSERT. #75030 (Azat Khuzhin).
  • إصلاح تعطل بسبب استثناء غير ملتقط في تكرار PSQL. #75062 (Azat Khuzhin).
  • قد يفشل Sasl في أي استدعاء RPC، ويساعد هذا الإصلاح على إعادة المحاولة إذا كانت تذكرة krb5 منتهية الصلاحية. #75063 (inv2004).
  • إصلاح استخدام الفهارس (الأساسية والثانوية) لأعمدة Array وMap وNullable(..) مع الإعداد المفعّل optimize_function_to_subcolumns. سابقًا، كان يمكن تجاهل الفهارس الخاصة بهذه الأعمدة. #75081 (Anton Popov).
  • عطّل flatten_nested عند إنشاء العروض المادية مع الجداول الداخلية، إذ لن يكون من الممكن استخدام هذه الأعمدة المُسطَّحة. #75085 (Christoph Wurm).
  • إصلاح لبعض عناوين IPv6 (مثل ::ffff:1.1.1.1) في الحقل forwarded_for، إذ كان يجري تفسيرها بشكل خاطئ، مما يؤدي إلى قطع اتصال العميل مع ظهور استثناء. #75133 (Yakov Olkhovskiy).
  • إصلاح معالجة JOIN الآمنة مع NULL لنوع البيانات Nullable في LowCardinality. سابقًا، لم يكن JOIN ON مع المقارنة الآمنة مع NULL، مثل IS NOT DISTINCT FROM و<=> وa IS NULL AND b IS NULL OR a == b، يعمل بشكل صحيح مع أعمدة LowCardinality. #75143 (Vladimir Cherkasov).
  • التحقق من عدم تحديد key_condition عند حساب total_number_of_rows من أجل NumRowsCache. #75164 (Daniil Ivanik).
  • إصلاح الاستعلامات التي تحتوي على interpolation غير مستخدم مع المحلل الجديد. #75173 (János Benjamin Antal).
  • إصلاح خطأ التعطل في CTE مع Insert. #75188 (Shichao Jin).
  • إصلاح في Keeper: تجنّب الكتابة إلى سجلات changelog تالفة عند التراجع عن السجلات. #75197 (Antonio Andelic).
  • استخدام BFloat16 كنوع فائق حيثما كان ذلك مناسبًا. هذا يغلق: #74404. #75236 (Nikita Mikhaylov).
  • إصلاح القيم الافتراضية غير المتوقعة في نتيجة JOIN مع any_join_distinct_right_table_keys و OR في JOIN ON. #75262 (Vladimir Cherkasov).
  • إخفاء بيانات اعتماد محرك الجدول azureblobstorage. #75319 (Garrett Thomas).
  • إصلاح السلوك الذي قد يجعل ClickHouse ينفّذ filter pushdown إلى قاعدة بيانات خارجية مثل PostgreSQL أو MySQL أو SQLite عن طريق الخطأ. هذا يغلق: #71423. #75320 (Nikita Mikhaylov).
  • إصلاح تعطل في cache مخطط Protobuf قد يحدث أثناء الإخراج بتنسيق Protobuf ومع الاستعلام المتوازي SYSTEM DROP FORMAT SCHEMA CACHE. #75357 (Pavel Kruglov).
  • إصلاح خطأ منطقي محتمل أو مشكلة ذاكرة غير مهيأة عندما يُدفَع عامل تصفية من HAVING إلى الأسفل مع parallel replicas. #75363 (Vladimir Cherkasov).
  • إخفاء المعلومات الحساسة في دوال الجدول icebergS3 وicebergAzure وفي محركات الجداول. #75378 (Kseniia Sumarokova).
  • أصبحت الدالة TRIM تتعامل الآن بشكل صحيح مع محارف الاقتصاص الفارغة المحسوبة. مثال: SELECT TRIM(LEADING concat('') FROM 'foo') (المشكلة #69922). #75399 (Manish Gill).
  • إصلاح سباق بيانات في IOutputFormat. #75448 (Pavel Kruglov).
  • إصلاح الخطأ المحتمل Elements ... and ... of Nested data structure ... (Array columns) have different array sizes عند استخدام أعمدة JSON الفرعية من النوع Array في JOIN على distributed tables. #75512 (Pavel Kruglov).
  • إصلاح تلف البيانات مع CODEC(ZSTD, DoubleDelta). يُغلق #70031. #75548 (Konstantin Bogdanov).
  • إصلاح التفاعل بين allow_feature_tier وإعداد توافق MergeTree. #75635 (Raúl Marín).
  • إصلاح القيمة غير الصحيحة لـ processed_rows في system.s3queue_log في حال أُعيدت محاولة معالجة الملف. #75666 (Kseniia Sumarokova).
  • مراعاة materialized_views_ignore_errors عندما يكتب عرض مادي إلى URL engine وتحدث مشكلة في الاتصال. #75679 (Christoph Wurm).
  • إصلاح حالات تعطل نادرة أثناء القراءة من جدول MergeTree بعد عدة استعلامات RENAME غير متزامنة (مع alter_sync = 0) بين أعمدة ذات أنواع مختلفة. #75693 (Anton Popov).
  • إصلاح الخطأ Block structure mismatch in QueryPipeline stream في بعض الاستعلامات التي تستخدم UNION ALL. #75715 (Nikolai Kochetov).
  • إعادة بناء projection عند alter modify لعمود PK الخاص بها. وكان هذا قد يؤدي سابقًا إلى أخطاء CANNOT_READ_ALL_DATA أثناء selects بعد alter modify للعمود المستخدم في projection PK. #75720 (Pavel Kruglov).
  • إصلاح النتيجة غير الصحيحة لـ ARRAY JOIN في الاستعلامات الفرعية scalar (باستخدام analyzer). #75732 (Nikolai Kochetov).
  • إصلاح إلغاء مرجعية مؤشر NULL في DistinctSortedStreamTransform. #75734 (Nikita Taranov).
  • إصلاح سلوك allow_suspicious_ttl_expressions. #75771 (Aleksei Filatov).
  • إصلاح قراءة ذاكرة غير مهيأة في الدالة translate. يُغلق هذا #75592. #75794 (Alexey Milovidov).
  • تمرير إعدادات format إلى تنسيق JSON على هيئة سلسلة في Native format. #75832 (Pavel Kruglov).
  • تسجيل التمكين الافتراضي لـ parallel hash بوصفه join algorithm في الإصدار v24.12 ضمن سجل تغييرات الإعدادات. وهذا يعني أن ClickHouse سيواصل تنفيذ join باستخدام non-parallel hash إذا كان مستوى توافق أقدم من v24.12 مضبوطًا. #75870 (Robert Schulze).
  • أُصلح خطأ كان يمنع نسخ الجداول التي أُضيفت إليها فهارس min-max ضمنيًا إلى جدول جديد (المشكلة #75677). #75877 (Smita Kulkarni).
  • يتيح clickhouse-library-bridge فتح مكتبات عشوائية من نظام الملفات، لذلك لا يكون تشغيله آمنًا إلا داخل بيئة معزولة. ولمنع ثغرة أمنية عند تشغيله بالقرب من clickhouse-server، سنقيّد مسارات المكتبات بموقع يُحدَّد في التكوين. وقد اكتُشفت هذه الثغرة عبر ClickHouse Bug Bounty Program بواسطة Arseniy Dugin. #75954 (Alexey Milovidov).
  • تبيّن أننا استخدمنا تسلسل JSON لبعض البيانات الوصفية، وكان ذلك خطأً، لأن JSON لا يدعم البيانات الثنائية داخل قيم السلاسل النصية، بما في ذلك البايتات الصفرية. يمكن أن تحتوي استعلامات SQL على بيانات ثنائية وUTF-8 غير صالح، لذا يجب أن ندعم ذلك أيضًا في ملفات البيانات الوصفية. وفي الوقت نفسه، تتحايل تنسيقات ClickHouse مثل JSONEachRow وما شابهها على هذه المشكلة بالخروج عن معيار JSON لضمان تحويلٍ ذهابًا وإيابًا للبيانات الثنائية دون فقدان. راجع الدافع هنا: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. ويتمثل الحل في جعل مكتبة Poco::JSON متسقة مع تسلسل تنسيق JSON في ClickHouse. هذا يُغلق #73668. #75963 (Alexey Milovidov).
  • أُصلح التحقق من حدود commit في وحدة التخزين S3Queue. #76104 (Kseniia Sumarokova).
  • أُصلح إرفاق جداول MergeTree التي تحتوي على فهارس تلقائية (add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns). #76139 (Azat Khuzhin).
  • أُصلحت مشكلة عدم طباعة stack traces الخاصة بالخيوط الأب لمهمة ما (إعداد enable_job_stack_trace). وأُصلحت أيضًا مشكلة عدم تمرير إعداد enable_job_stack_trace بشكل صحيح إلى الخيوط، مما كان يؤدي إلى أن محتوى stack trace لا يلتزم دائمًا بهذا الإعداد. #76191 (Yakov Olkhovskiy).
  • أُصلح تحقق صلاحيات غير صحيح كان يجعل ALTER RENAME يتطلب منحة CREATE USER. يُغلق #74372. #76241 (pufit).
  • أُصلح reinterpretAs مع FixedString على معمارية big-endian. #76253 (Azat Khuzhin).
  • إصلاح الخطأ المنطقي في S3Queue “Expected current processor to be equal to for bucket ”. #76358 (Kseniia Sumarokova).
  • إصلاح حالة تعطل متبادل في ALTER مع قاعدة بيانات Memory. #76359 (Azat Khuzhin).
  • إصلاح خطأ منطقي في تحليل الفهرس إذا كان الشرط في WHERE يتضمن الدالة pointInPolygon. #76360 (Anton Popov).
  • إصلاح استدعاء قد يكون غير آمن في معالج الإشارات. #76549 (Yakov Olkhovskiy).
  • إصلاح دعم المفتاح العكسي في PartsSplitter. ويعالج هذا #73400. #73418 (Amos Bird).

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

  • دعم بناء HDFS على أجهزة Mac المزودة بمعالجات ARM وIntel. #74244 (Yan Xin).
  • تمكين ICU وGRPC عند البناء العابر لـ Darwin. #75922 (Raúl Marín).
  • التحديث إلى LLVM 19 المضمَّن. #75148 (Konstantin Bogdanov).
  • تعطيل الوصول إلى الشبكة للمستخدم default في صورة Docker. #75259 (Mikhail f. Shiryaev). تحويل جميع الإجراءات المتعلقة بـ clickhouse-server إلى دالة، وتنفيذها فقط عند تشغيل الملف التنفيذي الافتراضي في entrypoint.sh. وكان هذا تحسينًا طال انتظاره، وقد اقتُرح في #50724. أُضيف المفتاح --users إلى clickhouse-extract-from-config للحصول على القيم من users.xml. #75643 (Mikhail f. Shiryaev).
  • إزالة نحو 20 ميغابايت من الشيفرة الميتة من الملف التنفيذي. #76226 (Alexey Milovidov).

إصدار ClickHouse 25.1، 2025-01-28

تغيير غير متوافق مع الإصدارات السابقة

  • سيكتب JSONEachRowWithProgress التقدم كلما حدث. في الإصدارات السابقة، كان التقدم يُعرَض فقط بعد كل block من النتيجة، مما جعله غير مفيد. كما تغيّرت طريقة عرض التقدم: فلن يعرض القيم الصفرية. هذا يُغلق #70800. #73834 (Alexey Milovidov).
  • ستوحّد جداول Merge بنية الجداول الأساسية باستخدام union لأعمدتها واشتقاق الأنواع المشتركة. هذا يُغلق #64864. في بعض الحالات، قد يكون هذا التغيير غير متوافق مع الإصدارات السابقة. ومن الأمثلة على ذلك حالة عدم وجود نوع مشترك بين الجداول، مع بقاء التحويل إلى نوع الجدول الأول ممكنًا، كما في حالة UInt64 و Int64 أو أي نوع رقمي و String. إذا كنت تريد العودة إلى السلوك القديم، فاضبط merge_table_max_tables_to_look_for_schema_inference على 1 أو اضبط compatibility على 24.12 أو إصدار أقدم. #73956 (Alexey Milovidov).
  • يحوّل تنسيق الإخراج Parquet الأعمدة من النوعين Date و DateTime إلى أنواع التاريخ/الوقت التي يدعمها Parquet، بدلًا من كتابتها كأرقام خام. يصبح DateTime هو DateTime64(3) (كان: UInt32)؛ ويعيد الإعداد output_format_parquet_datetime_as_uint32 السلوك القديم. ويصبح Date هو Date32 (كان: UInt16). #70950 (Michael Kolupaev).
  • لم يعد مسموحًا افتراضيًا باستخدام الأنواع غير القابلة للمقارنة (مثل JSON/Object/AggregateFunction) في ORDER BY ودوال المقارنة less/greater/equal/etc. #73276 (Pavel Kruglov).
  • أُزيل محرك قاعدة البيانات القديم MaterializedMySQL ولم يعد متاحًا. #73879 (Alexey Milovidov).
  • لم يعد مصدر القاموس mysql ينفّذ الاستعلام SHOW TABLE STATUS، لأنه لا يقدّم أي فائدة لجداول InnoDB، وكذلك في أي إصدار حديث من MySQL. هذا يُغلق #72636. هذا التغيير متوافق مع الإصدارات السابقة، لكنه وُضع ضمن هذه الفئة حتى تتاح لك فرصة ملاحظته. #73914 (Alexey Milovidov).
  • تتطلب استعلامات CHECK TABLE الآن صلاحية CHECK منفصلة. في الإصدارات السابقة، كان يكفي امتلاك صلاحية SHOW TABLES لتشغيل هذه الاستعلامات. لكن استعلام CHECK TABLE قد يكون مكلفًا، كما أن حدود تعقيد الاستعلام المعتادة الخاصة باستعلامات SELECT لا تنطبق عليه. وقد أدى ذلك إلى احتمال حدوث DoS. #74471 (Alexey Milovidov).
  • تُرجِع الدالة h3ToGeo() الآن النتائج بالترتيب (lat, lon) (وهو الترتيب القياسي للدوال الهندسية). ويمكن للمستخدمين الذين يرغبون في الاحتفاظ بترتيب النتائج القديم (lon, lat) ضبط الإعداد h3togeo_lon_lat_result_order = true. #74719 (Manish Gill).
  • أصبح برنامج تشغيل MongoDB الجديد هو الافتراضي الآن. ويمكن للمستخدمين الذين يفضلون الاستمرار في استخدام برنامج التشغيل القديم ضبط إعداد الخادم use_legacy_mongodb_integration على true. #73359 (Robert Schulze).

ميزة جديدة

  • أُضيفت إمكانية تطبيق عمليات mutation غير المكتملة (غير المطبَّقة فعليًا بواسطة العملية الخلفية) أثناء تنفيذ استعلامات SELECT مباشرةً بعد إرسالها. ويمكن تمكين ذلك عبر الإعداد apply_mutations_on_fly. #74877 (Anton Popov).
  • تنفيذ ميزة partition pruning في جداول Iceberg لعمليات تحويل الأقسام المرتبطة بالوقت في Iceberg. #72044 (Daniil Ivanik).
  • دعم الأعمدة الفرعية في sorting key الخاص بـ MergeTree وفي skip indexes. #72644 (Pavel Kruglov).
  • دعم قراءة قيم HALF_FLOAT من Apache Arrow/Parquet/ORC (وتُقرأ إلى Float32). يُغلق هذا #72960. يُرجى ملاحظة أن IEEE-754 half float ليس مماثلًا لـ BFloat16. يُغلق هذا #73835. #73836 (Alexey Milovidov).
  • سيحتوي جدول system.trace_log على عمودين جديدين، symbols وlines، يحتويان على stack trace محلول الرموز. ويتيح ذلك جمع معلومات profiling وتصديرها بسهولة. ويتحكم في ذلك قيمة إعداد الخادم symbolize داخل trace_log، وهي مفعّلة افتراضيًا. #73896 (Alexey Milovidov).
  • إضافة دالة جديدة، generateSerialID، يمكن استخدامها لتوليد أرقام تزايدية تلقائيًا في الجداول. وهي استكمال لـ #64310 من kazalika. يُغلق هذا #62485. #73950 (Alexey Milovidov).
  • إضافة الصياغة query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN لاستعلامات DDL. وهذا يعني أنه يُسمح بتشغيل الاستعلامات الفرعية {query1, query2, ... queryN} بالتوازي مع بعضها البعض (وهو الخيار المفضّل). #73983 (Vitaly Baranov).
  • أُضيفت ذاكرة تخزين مؤقت داخل الذاكرة للحبيبات المفككة التسلسل من skipping indexes. ومن المفترض أن يجعل ذلك الاستعلامات المتكررة التي تستخدم skipping indexes أسرع. ويُتحكم في حجم ذاكرة التخزين المؤقت الجديدة عبر إعدادات الخادم skipping_index_cache_size وskipping_index_cache_max_entries. وكان الدافع الأصلي لهذه الذاكرة المؤقتة هو vector similarity indexes التي أصبحت الآن أسرع بكثير. #70102 (Robert Schulze).
  • تحتوي واجهة الويب المضمّنة الآن على شريط تقدّم أثناء تشغيل الاستعلام. كما تتيح إلغاء الاستعلامات. وتعرض العدد الإجمالي للسجلات ومعلومات موسّعة عن السرعة. ويمكن عرض الجدول تدريجيًا بمجرد وصول البيانات. وتم تفعيل ضغط HTTP. وأصبح عرض الجدول أسرع. كما أصبح رأس الجدول ثابتًا. وتتيح الواجهة تحديد الخلايا والتنقل بينها باستخدام مفاتيح الأسهم. وتم إصلاح المشكلة التي كان فيها إطار الخلية المحددة يجعلها أصغر. ولم تعد الخلايا تتمدّد عند تمرير المؤشر فوقها، بل عند تحديدها فقط. وأصبح قرار التوقف عن عرض البيانات الواردة يُتخذ من جهة العميل بدلًا من جهة الخادم. كما أُضيف تمييز مجموعات الأرقام في القيم العددية. وتم تحديث التصميم العام ليصبح أكثر وضوحًا. وتتحقق الواجهة أيضًا من إمكانية الوصول إلى الخادم وصحة بيانات الاعتماد، وتعرض إصدار الخادم ومدة تشغيله. وأصبحت أيقونة السحابة محددة الحواف في جميع الخطوط، حتى في Safari. كما سيجري عرض الأعداد الصحيحة الكبيرة داخل أنواع البيانات المتداخلة بشكل أفضل. وسيتم عرض inf/nan بشكل صحيح. وستُعرض أنواع البيانات عند تمرير المؤشر فوق رأس العمود. #74204 (Alexey Milovidov).
  • إضافة إمكانية إنشاء فهارس min-max (للتخطي) افتراضيًا للأعمدة التي تستخدم MergeTree، باستخدام الإعدادين add_minmax_index_for_numeric_columns (للأعمدة الرقمية) وadd_minmax_index_for_string_columns (للأعمدة النصية). وحتى الآن، كلا الإعدادين معطّل، لذلك لا يوجد أي تغيير في السلوك بعد. #74266 (Smita Kulkarni).
  • إضافة الحقلين script_query_number وscript_line_number إلى system.query_log، وإلى ClientInfo في البروتوكول الأصلي، وإلى سجلات الخادم. وبذلك يُغلِق هذا #67542. ويُنسب الفضل إلى pinsvin00 في طرح هذه الميزة مبكرًا في #68133. #74477 (Alexey Milovidov).
  • أُضيفت دالة التجميع sequenceMatchEvents التي تُرجع الطوابع الزمنية للأحداث المطابقة في أطول سلسلة أحداث ضمن النمط. #72349 (UnamedRus).
  • أُضيفت الدالة arrayNormalizedGini. #72823 (flynn).
  • إضافة دعم عامل الطرح لـ DateTime64، بما يتيح الطرح بين قيم DateTime64، وكذلك بين قيم DateTime. #74482 (Li Yin).

الميزات التجريبية

تحسين الأداء

  • جرى تحسين الدالة indexHint. الآن، لن تُقرأ من الجدول الأعمدة المستخدمة فقط كوسيطات للدالة indexHint. #74314 (Anton Popov). إذا كانت الدالة indexHint جزءًا أساسيًا من معمارية بيانات Enterprise لديك، فهذا التحسين سينقذ حياتك.
  • تحسين احتساب الإعداد max_joined_block_size_rows بدقة أكبر لخوارزمية JOIN parallel_hash. يساعد ذلك على تجنب زيادة استهلاك الذاكرة مقارنةً بخوارزمية hash. #74630 (Nikita Taranov).
  • دعم تحسين push down للشروط على مستوى خطة تنفيذ الاستعلام للخطوة MergingAggregated. يحسّن ذلك الأداء لبعض الاستعلامات مع analyzer. #74073 (Nikolai Kochetov).
  • أُزيل تقسيم blocks الخاصة بالجدول الأيسر حسب hash من مرحلة probe في خوارزمية JOIN parallel_hash. #73089 (Nikita Taranov).
  • تحسين input format ‏RowBinary. يُغلق #63805. #65059 (Pavel Kruglov).
  • كتابة parts بالمستوى 1 إذا كان optimize_on_insert مفعّلًا. يتيح ذلك استخدام عدة تحسينات للاستعلامات التي تتضمن FINAL على الأجزاء المكتوبة حديثًا. #73132 (Anton Popov).
  • تسريع deserialization للسلاسل النصية عبر بعض التحسينات منخفضة المستوى. #65948 (Nikita Taranov).
  • عند إجراء مقارنة مساواة بين السجلات، مثلما يحدث أثناء merges، تبدأ المقارنة بالأعمدة الأرجح اختلافًا أولًا. #63780 (UnamedRus).
  • تحسين أداء grace hash join عبر إعادة ترتيب جدول الربط الأيمن حسب المفاتيح. #72237 (kevinyhzou).
  • السماح للدالتين arrayROCAUC وarrayAUCPR بحساب مساحة جزئية من المنحنى بالكامل، بحيث يمكن تنفيذ هذا الحساب بالتوازي على datasets ضخمة. #72904 (Emmanuel).
  • تجنّب إنشاء عدد كبير جدًا من idle threads. #72920 (Guo Wangyang).
  • عدم سرد keys الخاصة بـ blob storage إذا كان لدينا فقط توسيع الأقواس المعقوفة في table function. يُغلق #73333. #73518 (Konstantin Bogdanov).
  • تحسين short circuit للدوال المنفّذة على argumentات من النوع Nullable. #73820 (李扬).
  • عدم تطبيق maskedExecute على الأعمدة غير الدالية، مع تحسين أداء تنفيذ short circuit. #73965 (lgbo).
  • تعطيل الاكتشاف التلقائي للـ headers في input formats الخاصة بـ Kafka/NATS/RabbitMQ/FileLog لتحسين الأداء. #74006 (Azat Khuzhin).
  • تنفيذ pipeline بدرجة أعلى من parallelism بعد aggregation باستخدام grouping sets. #74082 (Nikita Taranov).
  • تقليل المقطع الحرج في MergeTreeReadPool. #74202 (Guo Wangyang).
  • تحسين أداء parallel replicas. أصبحت عملية deserialization للحزم على query initiator، بالنسبة إلى الحزم غير المرتبطة ببروتوكول parallel replicas، تتم الآن دائمًا في thread الخاصة بالـ pipeline. في السابق، كان يمكن أن تتم في thread مسؤولة عن scheduling الخاصة بالـ pipeline، مما قد يجعل initiator أقل استجابة ويؤخر تنفيذ الـ pipeline. #74398 (Igor Nikonov).
  • تحسين أداء الطلبات المتعددة الكبيرة في Keeper. #74849 (Antonio Andelic).
  • استخدام log wrappers بالقيمة بدلًا من تخصيصها على heap. #74034 (Mikhail Artemenko).
  • إعادة إنشاء connection إلى replicas الخاصة بـ Dictionary في MySQL وPostgres في الخلفية، بحيث لا يؤدي ذلك إلى تأخير الطلبات إلى Dictionaries المقابلة. #71101 (Yakov Olkhovskiy).
  • استخدمت parallel replicas معلوماتٍ تاريخية عن مدى توفر replica لتحسين اختيار replica، لكنها لم تُحدِّث عدد error الخاص بـ replica عندما تكون connection غير متاحة. يحدّث هذا PR عدد error الخاص بـ replica عند عدم التوفر. #72666 (zoomxi).
  • تمت إضافة setting في merge tree باسم materialize_skip_indexes_on_merge تمنع إنشاء skip indexes أثناء merge. يتيح لك ذلك التحكم صراحةً (عبر ALTER TABLE [..] MATERIALIZE INDEX [...]) في توقيت إنشاء skip indexes. وقد يكون هذا مفيدًا إذا كانت skip indexes مكلفة من حيث build (مثلًا، vector similarity indexes). #74401 (Robert Schulze).
  • تحسين طلبات Keeper في Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
  • استخدام ما يصل إلى 1000 parallel replicas افتراضيًا. #74504 (Konstantin Bogdanov).
  • تحسين إعادة استخدام session الخاصة بـ HTTP عند القراءة من S3 disk (#72401). #74548 (Julian Maicher).

تحسينات

  • دعم SETTINGS في استعلام CREATE TABLE مع ENGINE ضمني، ودعم المزج بين إعدادات المحرك وإعدادات الاستعلام. #73120 (Raúl Marín).
  • تفعيل use_hive_partitioning افتراضيًا. #71636 (Yarik Briukhovetskyi).
  • دعم CAST وALTER بين أنواع JSON ذات المعلمات المختلفة. #72303 (Pavel Kruglov).
  • دعم المقارنة بالمساواة لقيم عمود JSON. #72991 (Pavel Kruglov).
  • تحسين تنسيق المعرّفات التي تتضمن أعمدة JSON الفرعية لتجنّب علامات الاقتباس الخلفية غير الضرورية. #73085 (Pavel Kruglov).
  • تحسينات على المقاييس التفاعلية. إصلاح مشكلة عدم عرض المقاييس الصادرة من النسخ المتماثلة المتوازية بالكامل. عرض المقاييس وفقًا لأحدث تحديث أولًا، ثم بترتيب معجمي حسب الاسم. عدم عرض المقاييس المتقادمة. #71631 (Julia Kartseva).
  • جعل JSON output format بتنسيق pretty افتراضيًا. إضافة الإعداد الجديد output_format_json_pretty_print للتحكم في ذلك، مع تفعيله افتراضيًا. #72148 (Pavel Kruglov).
  • السماح بـ LowCardinality(UUID) افتراضيًا. وقد ثبتت جدواه عمليًا لدى عملاء ClickHouse Cloud. #73826 (Alexey Milovidov).
  • رسالة أفضل أثناء التثبيت. #73827 (Alexey Milovidov).
  • رسالة أفضل بشأن إعادة تعيين كلمة المرور في ClickHouse Cloud. #73831 (Alexey Milovidov).
  • تحسين رسالة الخطأ الخاصة بجدول File الذي لا يمكنه الإلحاق بملف. #73832 (Alexey Milovidov).
  • طلب التأكيد عندما يطلب المستخدم بالخطأ إخراجًا بتنسيق ثنائي (مثل Native وParquet وAvro) في الطرفية. هذا يُغلق #59524. #73833 (Alexey Milovidov).
  • تمييز المسافات اللاحقة في تنسيقات Pretty وVertical في الطرفية لمزيد من الوضوح. يتم التحكم في ذلك عبر الإعداد output_format_pretty_highlight_trailing_spaces. تنفيذ أولي من Braden Burns من #72996. يُغلق #71590. #73847 (Alexey Milovidov).
  • سيكتشف clickhouse-client وclickhouse-local ضغط stdin تلقائيًا عند إعادة توجيهه من ملف. هذا يُغلق #70865. #73848 (Alexey Milovidov).
  • اقتطاع أسماء الأعمدة الطويلة جدًا في تنسيقات Pretty افتراضيًا. يتحكم في ذلك الإعدادان output_format_pretty_max_column_name_width_cut_to وoutput_format_pretty_max_column_name_width_min_chars_to_cut. وهذا استكمال لعمل tanmaydatta في #66502. ويغلق هذا #65968. #73851 (Alexey Milovidov).
  • جعل تنسيقات Pretty أكثر جمالًا: دمج blocks إذا لم يمضِ وقت طويل منذ إخراج block السابقة. يتحكم في ذلك الإعدادان الجديدان output_format_pretty_squash_consecutive_ms (50 مللي ثانية افتراضيًا) وoutput_format_pretty_squash_max_wait_ms (1000 مللي ثانية افتراضيًا). استكمال لـ #49537. ويغلق هذا #49153. #73852 (Alexey Milovidov).
  • إضافة Metric لعدد source parts التي يجري دمجها حاليًا. ويغلق هذا #70809. #73868 (Alexey Milovidov).
  • تمييز الأعمدة في تنسيق Vertical إذا كان الإخراج موجّهًا إلى الطرفية. يمكن تعطيل ذلك باستخدام الإعداد output_format_pretty_color. #73898 (Alexey Milovidov).
  • تحسين التوافق مع MySQL إلى مستوى أصبح معه mysqlsh (واجهة CLI غنية لـ MySQL من Oracle) قادرًا الآن على الاتصال بـ ClickHouse. وهذا مطلوب لتسهيل الاختبار. #73912 (Alexey Milovidov).
  • يمكن لتنسيقات Pretty عرض الحقول متعددة الأسطر داخل cell في table، مما يحسّن سهولة القراءة. وهذا مفعّل افتراضيًا ويمكن التحكم فيه عبر الإعداد output_format_pretty_multiline_fields. استكمال لعمل Volodyachan في #64094. ويغلق هذا #56912. #74032 (Alexey Milovidov).
  • إتاحة X-ClickHouse HTTP headers لـ JavaScript في المتصفح. وهذا يجعل كتابة التطبيقات أكثر سهولة. #74180 (Alexey Milovidov).
  • سيتضمن تنسيق JSONEachRowWithProgress أحداثًا تحتوي على metadata، بالإضافة إلى totals وExtremes. كما يتضمن rows_before_limit_at_least وrows_before_aggregation. ويطبع التنسيق الـ Exception بصورة صحيحة إذا وصل بعد نتائج جزئية. ويتضمن التقدم الآن الزمن المنقضي بالنانوثانية. ويُصدر حدث Progress نهائيًا واحدًا في النهاية. ولن يُطبع التقدم أثناء runtime الخاص بالاستعلام بوتيرة أعلى من قيمة الإعداد interactive_delay. #74181 (Alexey Milovidov).
  • ستدور الساعة الرملية بسلاسة في واجهة Play UI. #74182 (Alexey Milovidov).
  • حتى إذا كانت استجابة HTTP مضغوطة، أرسل الحزم فور وصولها. يتيح ذلك للمتصفح تلقّي حزم التقدم والبيانات المضغوطة. #74201 (Alexey Milovidov).
  • إذا كان عدد السجلات الناتجة أكبر من N = output_format_pretty_max_rows، فبدلًا من عرض أول N صفوف فقط، سيُقتطع جدول الإخراج من المنتصف، مع عرض أول N/2 من الصفوف وآخر N/2 منها. استكمالًا لـ #64200. هذا يُغلق #59502. #73929 (Alexey Milovidov).
  • السماح باستخدام خوارزمية أكثر عمومية لتخطيط join عند تفعيل خوارزمية hash join. #71926 (János Benjamin Antal).
  • السماح بإنشاء فهرس bloom_filter على الأعمدة ذات نوع البيانات DateTime64. #66416 (Yutong Xiao).
  • عند تفعيل كلٍّ من min_age_to_force_merge_seconds وmin_age_to_force_merge_on_partition_only، ستتجاهل عملية دمج الأجزاء حدّ الحد الأقصى للبايتات. #73656 (Kai Zhu).
  • أُضيفت HTTP headers إلى جدول سجلات span في OpenTelemetry لتحسين قابلية التتبّع. #70516 (jonymohajanGmail).
  • دعم كتابة ملف orc باستخدام time zone مخصّصة، بدلًا من استخدام المنطقة الزمنية GMT دائمًا. #70615 (kevinyhzou).
  • مراعاة إعدادات IO scheduling عند كتابة النسخ الاحتياطية عبر السحب. #71093 (János Benjamin Antal).
  • إضافة alias name للعمود metric إلى system.asynchronous_metrics. #71164 (megao).
  • تاريخيًا ولسبب ما، كان الاستعلام ALTER TABLE MOVE PARTITION TO TABLE يتحقق من صلاحيات SELECT وALTER DELETE بدلًا من الصلاحية المخصّصة ALTER_MOVE_PARTITION. يتيح طلب السحب هذا استخدام نوع الوصول هذا. ولأغراض التوافق، ستُمنح هذه الصلاحية أيضًا ضمنيًا إذا مُنحت صلاحيتا SELECT وALTER DELETE، لكن هذا السلوك سيُزال في الإصدارات المستقبلية. يُغلق #16403. #71632 (pufit).
  • طرح استثناء عند محاولة materialize عمود ضمن مفتاح الفرز بدلًا من السماح له بكسر ترتيب الفرز. #71891 (Peter Nguyen).
  • إخفاء secrets في EXPLAIN QUERY TREE. #72025 (Yakov Olkhovskiy).
  • دعم الأنواع المنطقية الصحيحة في Parquet في القارئ “native”. #72105 (Arthur Passos).
  • طلب بيانات الاعتماد تفاعليًا في المتصفح إذا كان المستخدم default يتطلب كلمة مرور. في الإصدارات السابقة، كان الخادم يعيد HTTP 403؛ أما الآن، فيعيد HTTP 401. #72198 (Alexey Milovidov).
  • تحويل أنواع الوصول CREATE_USER وALTER_USER وDROP_USER وCREATE_ROLE وALTER_ROLE وDROP_ROLE من عامة إلى مُعلَّمة. وهذا يعني أنه يمكنك الآن منح grants لإدارة الوصول بدرجة أعلى من الدقة. #72246 (pufit).
  • أضِف العمود latest_fail_error_code_name إلى system.mutations. نحتاج إلى هذا العمود لتقديم metric جديد لعمليات mutations العالقة، واستخدامه لبناء رسوم بيانية للأخطاء التي تتم مواجهتها في السحابة، وكذلك — اختياريًا — إضافة alert جديد أقل ضجيجًا. #72398 (Miсhael Stetsyuk).
  • قلّل حجم التخصيصات في استعلام ATTACH PARTITION. #72583 (Konstantin Morozov).
  • اجعل الحد max_bytes_before_external_sort يعتمد على إجمالي استهلاك الذاكرة في query (سابقًا كان يمثل عدد البايتات في block الفرز لخيط فرز واحد، أما الآن فأصبح يحمل المعنى نفسه كما في max_bytes_before_external_group_by — أي إنه حد إجمالي لذاكرة query بالكامل عبر جميع الخيوط). كما أُضيف إعداد آخر للتحكم في حجم block على القرص — min_external_sort_block_bytes. #72598 (Azat Khuzhin).
  • تجاهل قيود الذاكرة من جانب trace collector. #72606 (Azat Khuzhin).
  • أضِف إعدادات الخادم dictionaries_lazy_load و wait_dictionaries_load_at_startup إلى system.server_settings. #72664 (Christoph Wurm).
  • أضِف الإعداد max_backup_bandwidth إلى قائمة الإعدادات التي يمكن تحديدها ضمن استعلامات BACKUP/RESTORE. #72665 (Christoph Wurm).
  • خفّض log level لظهور الأجزاء replicated في محرك ReplicatedMergeTree للمساعدة في تقليل حجم logs الناتجة في cluster replicated. #72876 (mor-akamai).
  • حسّن استخراج expression المشتركة في حالات الفصل المنطقي. واسمح بتبسيط filter expression الناتجة حتى إذا لم توجد عبارة فرعية مشتركة بين جميع حالات الفصل. استكمال لـ #71537. #73271 (Dmitry Novik).
  • في Storage S3Queue/AzureQueue، اسمح بإضافة settings عندما يكون table قد أُنشئ من دون settings. #73283 (Kseniia Sumarokova).
  • قدّم الإعداد least_greatest_legacy_null_behavior (القيمة الافتراضية: false) الذي يتحكم في ما إذا كانت الدالتان least و greatest تتعاملان مع معاملات NULL بإرجاع NULL دائمًا (إذا كانت القيمة true) أو بتجاهلها (إذا كانت false). #73344 (Robert Schulze).
  • استخدم طلبات Keeper المتعددة في خيط التنظيف الخاص بـ ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
  • عندما يعمل ClickHouse ضمن cgroup، سنستمر في جمع المقاييس Asynchronous على مستوى النظام والمتعلقة بحمل النظام، وجدولة العمليات، والذاكرة، وغير ذلك. وقد توفر هذه المقاييس إشارات مفيدة عندما يكون ClickHouse هو العملية الوحيدة على المضيف ذات الاستهلاك المرتفع للموارد. #73369 (Nikita Taranov).
  • في storage S3Queue، اسمح بترحيل الجداول ordered القديمة المُنشأة قبل 24.6 إلى البنية الجديدة التي تتضمن buckets. #73467 (Kseniia Sumarokova).
  • أضِف system.azure_queue على غرار system.s3queue الموجود. #73477 (Kseniia Sumarokova).
  • تُنتج الدالة parseDateTime64 (ومتغيراتها) الآن نتائج صحيحة لتواريخ الإدخال السابقة لعام 1970 أو اللاحقة لعام 2106. مثال: SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS'). #73594 (zhanglistar).
  • معالجة بعض مشكلات سهولة الاستخدام في clickhouse-disks التي أبلغ عنها المستخدمون. يُغلق #67136. #73616 (Daniil Ivanik).
  • السماح بتعديل إعدادات commit في التخزين S3(Azure)Queue. (إعدادات commit هي: max_processed_files_before_commit, max_processed_rows_before_commit, max_processed_bytes_before_commit, max_processing_time_sec_before_commit). #73635 (Kseniia Sumarokova).
  • في التخزين S3(Azure)Queue، تجميع Progress عبر المصادر للمقارنة مع إعدادات حدود commit. #73641 (Kseniia Sumarokova).
  • دعم الإعدادات الأساسية في استعلام BACKUP/RESTORE. #73650 (Vitaly Baranov).
  • مراعاة output_format_compression_level عند إخراج Parquet. #73651 (Arthur Passos).
  • إضافة دعم قراءة fixed_size_list في Apache Arrow على أنه Array بدلًا من التعامل معه كنوع غير مدعوم. #73654 (Julian Meyers).
  • إضافة محركَي نسخ احتياطي: Memory (يحتفظ بالنسخ الاحتياطية ضمن جلسة المستخدم الحالية)، وNull (لا يحتفظ بالنسخ الاحتياطية في أي مكان)، وذلك لأغراض الاختبار. #73690 (Vitaly Baranov).
  • أصبح من الممكن تغيير concurrent_threads_soft_limit_num وconcurrent_threads_soft_limit_num_ratio_to_cores من دون إعادة تشغيل الخادم. #73713 (Sergei Trifonov).
  • إضافة دعم الأنواع الرقمية الموسعة (Decimal والأعداد الصحيحة الكبيرة) في دوال formatReadable. #73765 (Raúl Marín).
  • دعم TLS للتوافق مع Postgres wire protocol. #73812 (scanhex12).
  • كانت الدالة isIPv4String تُرجع true إذا كان عنوان IPv4 الصحيح متبوعًا ببايت صفري، بينما كان ينبغي أن تُرجع false في هذه الحالة. استكمالًا لـ #65387. #73946 (Alexey Milovidov).
  • جعل رمز الخطأ في MySQL wire protocol متوافقًا مع MySQL. استكمالًا لـ #56831. يُغلق #50957. #73948 (Alexey Milovidov).
  • إضافة الإعداد validate_enum_literals_in_opearators للتحقق من القيم الحرفية لـ enum في عوامل التشغيل مثل IN وNOT IN مقابل نوع enum، مع إطلاق استثناء إذا لم تكن القيمة الحرفية قيمة enum صالحة. #73985 (Vladimir Cherkasov).
  • في Storage S3(Azure)Queue، نَفِّذ commit لجميع الملفات (ضمن دفعة واحدة يحددها إعدادات commit) في معاملة Keeper واحدة. #73991 (Kseniia Sumarokova).
  • عطّل اكتشاف header في executable UDFs وDictionaries (إذ قد يؤدي ذلك إلى ظهور الخطأ Function ‘X’: wrong result, expected Y row(s), actual Y-1). #73992 (Azat Khuzhin).
  • أضِف الخيار distributed إلى EXPLAIN PLAN. والآن، فإن EXPLAIN distributed=1 ... يُلحق الخطة البعيدة بخطوات ReadFromParallelRemote*. #73994 (Nikolai Kochetov).
  • استخدم نوع الإرجاع الصحيح لـ not/xor مع معاملات Dynamic. #74013 (Pavel Kruglov).
  • اسمح بتغيير add_implicit_sign_column_constraint_for_collapsing_engine بعد إنشاء الجدول. #74014 (Christoph Wurm).
  • ادعم subcolumns في query ‏SELECT الخاصة بـ materialized view. #74030 (Pavel Kruglov).
  • توجد الآن ثلاث طرق بسيطة لتعيين prompt مخصص في clickhouse-client: 1. عبر معامل سطر الأوامر --prompt، 2. في configuration file عبر الإعداد <prompt>[...]</prompt>، و3. أيضًا في configuration file عبر إعدادات كل connection على حدة <connections_credentials><prompt>[...]</prompt></connection_credentials>. #74168 (Christoph Wurm).
  • اكتشاف الاتصال الآمن تلقائيًا استنادًا إلى الاتصال بالمنفذ 9440 في ClickHouse Client. #74212 (Christoph Wurm).
  • مصادقة المستخدمين باستخدام username فقط في http_handlers (في السابق، كان ذلك يتطلب من المستخدم إدخال password أيضًا). #74221 (Azat Khuzhin).
  • تم تصنيف دعم query languages البديلة PRQL وKQL على أنه Experimental. لاستخدامهما، حدّد الإعدادات allow_experimental_prql_dialect = 1 و allow_experimental_kusto_dialect = 1. #74224 (Robert Schulze).
  • دعم إرجاع نوع Enum الافتراضي في المزيد من aggregate functions. #74272 (Raúl Marín).
  • في OPTIMIZE TABLE، أصبح من الممكن الآن تحديد keyword ‏FORCE كبديل عن keyword الحالية FINAL. #74342 (Robert Schulze).
  • أضِف المقياس IsServerShuttingDown، وهو مطلوب لتشغيل alert عندما يستغرق إيقاف تشغيل server وقتًا طويلًا جدًا. #74429 (Miсhael Stetsyuk).
  • أُضيفت أسماء Iceberg tables إلى EXPLAIN. #74485 (alekseev-maksim).
  • قدّم رسالة error أفضل عند استخدام RECURSIVE CTE مع analyzer القديم. #74523 (Raúl Marín).
  • اعرض رسائل error الموسعة في system.errors. #74574 (Vitaly Baranov).
  • السماح باستخدام كلمة مرور لاتصال العميل مع clickhouse-keeper. هذه الميزة ليست مفيدة جدًا إذا حدّدت إعدادات SSL مناسبة لكل من الخادم والعميل، لكنها قد تظل مفيدة في بعض الحالات. لا يمكن أن يزيد طول كلمة المرور عن 16 حرفًا. وهي غير مرتبطة بنموذج توثيق Keeper. #74673 (alesapin).
  • إضافة رمز خطأ لمُعيد تحميل الإعدادات. #74746 (Garrett Thomas).
  • أُضيف دعم عناوين IPv6 في دوال الجداول ومحركات MySQL وPostgreSQL. #74796 (Mikhail Koviazin).
  • تنفيذ تحسين short-circuit لـ divideDecimal. يُصلح #74280. #74843 (Kevin Mingtarja).
  • يمكن الآن تحديد المستخدمين داخل نصوص بدء التشغيل. #74894 (pufit).
  • إضافة دعم لـ Azure SAS Tokens. #72959 (Azat Khuzhin).

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

  • اضبط مستوى ضغط Parquet فقط إذا كانت خوارزمية الضغط تدعم ذلك. #74659 (Arthur Passos).
  • أُصلِح تراجع كان يتسبب في ظهور خطأ عند استخدام إعدادات locale الخاصة بـ collation مع المعدِّلات. على سبيل المثال، أصبح SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted يعمل الآن. #73544 (Robert Schulze).
  • إصلاح تعذّر إنشاء عقدة SEQUENTIAL باستخدام keeper-client. #64177 (Duc Canh Le).
  • إصلاح العدّ غير الصحيح للمحارف في دوال position. #71003 (思维).
  • كانت عمليات RESTORE الخاصة بكيانات الوصول تتطلب أذونات أكثر من اللازم بسبب حالات revoke الجزئية غير المعالَجة. يُصلح طلب السحب هذا المشكلة. يغلق #71853. #71958 (pufit).
  • تجنّب التوقف المؤقت بعد ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE. واسترجاع الإعدادات الصحيحة لجدولة المهام في الخلفية. #72024 (Aleksei Filatov).
  • إصلاح التعامل مع Tuples الفارغة في بعض تنسيقات الإدخال والإخراج (مثل Parquet وArrow). #72616 (Michael Kolupaev).
  • أصبحت عبارات GRANT SELECT/INSERT على مستوى العمود في قواعد البيانات/الجداول ذات wildcard تُطلق خطأً الآن. #72646 (Johann Gan).
  • إصلاح الحالة التي يتعذّر فيها على المستخدم تشغيل REVOKE ALL ON *.* بسبب grants الضمنية في كيان الوصول المستهدف. #72872 (pufit).
  • إصلاح تنسيق timezone الموجب للدالة scalar formatDateTime. #73091 (ollidraese).
  • إصلاح إظهار منفذ المصدر بشكل صحيح عند إنشاء connection عبر PROXYv1 وتعيين auth_use_forwarded_address، إذ كان منفذ proxy يُستخدم سابقًا بشكل غير صحيح. وإضافة الدالة currentQueryID(). #73095 (Yakov Olkhovskiy).
  • تمرير إعدادات format إلى NativeWriter في TCPHandler، بحيث تُطبَّق الإعدادات مثل output_format_native_write_json_as_string بشكل صحيح. #73179 (Pavel Kruglov).
  • إصلاح crash في StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
  • إصلاح crash نادر في refreshable materialized view أثناء إيقاف الخادم. #73323 (Michael Kolupaev).
  • أصبح العنصر النائب %f في الدالة formatDateTime يولّد دائمًا ستة أرقام (لأجزاء الثانية). وهذا يجعل السلوك متوافقًا مع الدالة DATE_FORMAT في MySQL. ويمكن استعادة السلوك السابق باستخدام الإعداد formatdatetime_f_prints_scale_number_of_digits = 1. #73324 (ollidraese).
  • تم إصلاح التصفية بحسب العمود _etag أثناء القراءة من تخزين s3 ومن table function. #73353 (Anton Popov).
  • تم إصلاح الخطأ Not-ready Set is passed as the second argument for function 'in' عند استخدام IN (subquery) في تعبير JOIN ON مع المحلل القديم. #73382 (Nikolai Kochetov).
  • إصلاح التحضير لعملية squashin لأعمدة Dynamic وJSON. سابقًا، كان من الممكن في بعض الحالات إدراج أنواع جديدة في shared variant/shared data حتى عند عدم الوصول إلى الحد الأقصى للأنواع/المسارات. #73388 (Pavel Kruglov).
  • التحقق من الأحجام التالفة أثناء فك ترميز types binary لتجنب تخصيصات كبيرة جدًا. #73390 (Pavel Kruglov).
  • تم إصلاح خطأ منطقي عند القراءة من cluster أحادي replica مع تمكين parallel replicas. #73403 (Michael Kolupaev).
  • إصلاح ObjectStorageQueue مع ZooKeeper وإصدارات Keeper الأقدم. #73420 (Antonio Andelic).
  • تنفيذ إصلاح مطلوب لتمكين hive partitioning افتراضيًا. #73479 (Yarik Briukhovetskyi).
  • إصلاح data race عند إنشاء vector similarity index. #73517 (Antonio Andelic).
  • إصلاح segfault عندما يحتوي source الخاص بـ dictionary على دالة ببيانات غير صحيحة. #73535 (Yarik Briukhovetskyi).
  • إصلاح retries عند فشل insert في S3(Azure)Queue storage. يغلق #70951. #73546 (Kseniia Sumarokova).
  • تم إصلاح خطأ في الدالة tupleElement قد يظهر في بعض الحالات مع tuples التي تحتوي على عناصر LowCardinality ومع الإعداد المُمكَّن optimize_functions_to_subcolumns. #73548 (Anton Popov).
  • إصلاح parsing لـ enum glob عندما يتبعه range. يصلح #73473. #73569 (Konstantin Bogdanov).
  • تم إصلاح تجاهل parallel_replicas_for_non_replicated_merge_tree في subqueries الخاصة بالجداول غير المنسوخة متماثلًا. #73584 (Igor Nikonov).
  • إصلاح لحالة طرح std::logical_error عندما يتعذر schedule المهمة. تم العثور على ذلك في اختبارات stress. #73629 (Alexander Gololobov).
  • عدم تفسير queries في EXPLAIN SYNTAX لتجنب الأخطاء المنطقية الناتجة عن processing stage غير صحيحة للاستعلامات الموزعة. يصلح #65205. #73634 (Dmitry Novik).
  • إصلاح احتمال عدم اتساق البيانات في عمود Dynamic. ويعالج أيضًا احتمال ظهور الخطأ المنطقي Nested columns sizes are inconsistent with local_discriminators column size. #73644 (Pavel Kruglov).
  • تم إصلاح NOT_FOUND_COLUMN_IN_BLOCK في الاستعلامات التي تحتوي على FINAL وSAMPLE. كما تم إصلاح النتائج غير الصحيحة في عمليات SELECT التي تستخدم FINAL على CollapsingMergeTree، مع تفعيل تحسينات FINAL. #73682 (Anton Popov).
  • إصلاح تعطل في LIMIT BY COLUMNS. #73686 (Raúl Marín).
  • إصلاح خلل يحدث عند فرض استخدام الإسقاط العادي، حين يكون الاستعلام مطابقًا تمامًا للإسقاط المعرّف، لكن لا يتم اختيار الإسقاط، مما يؤدي إلى ظهور خطأ. #73700 (Shichao Jin).
  • إصلاح إلغاء التسلسل لبنية Dynamic/Object. وكان ذلك قد يؤدي إلى استثناءات CANNOT_READ_ALL_DATA. #73767 (Pavel Kruglov).
  • تخطي metadata_version.txt أثناء استعادة الأجزاء من نسخة احتياطية. #73768 (Vitaly Baranov).
  • إصلاح تعطل عند التحويل إلى Enum باستخدام LIKE. #73775 (zhanglistar).
  • إصلاح مشكلة عدم عمل bucket من نوع S3 Express بوصفه disk. #73777 (Sameer Tamsekar).
  • السماح بدمج الصفوف ذات القيم غير الصالحة في sign column في جداول CollapsingMergeTree. #73864 (Christoph Wurm).
  • إصلاح ظهور خطأ عند الاستعلام عن ddl في وجود replica غير متصلة. #73876 (Tuan Pham Anh).
  • إصلاح الإخفاق العرضي في مقارنة أنواع map() بسبب إمكانية إنشاء Map يفتقر إلى التسمية الصريحة (keys,values) لـ tuple المتداخلة الخاصة به. #73878 (Yakov Olkhovskiy).
  • تجاهل window functions أثناء تحليل العبارة GROUP BY ALL. إصلاح #73501. #73916 (Dmitry Novik).
  • إصلاح الامتيازات الضمنية (إذ كانت تعمل سابقًا كمحرف بدل شامل). #73932 (Azat Khuzhin).
  • إصلاح الارتفاع الكبير في memory usage أثناء إنشاء Maps متداخلة. #73982 (Pavel Kruglov).
  • إصلاح parsing لـ JSON المتداخل ذي المفاتيح الفارغة. #73993 (Pavel Kruglov).
  • إصلاح: قد لا تتم إضافة alias إلى الإسقاط إذا كان alias آخر يشير إليه وتم اختياره بترتيب عكسي. #74033 (Yakov Olkhovskiy).
  • تجاهل أخطاء عدم العثور على object في Azure أثناء تهيئة plain_rewritable disk. #74059 (Julia Kartseva).
  • إصلاح سلوك any وanyLast مع أنواع enum ومع table فارغ. #74061 (Joanna Hulboj).
  • يُصلح الحالة التي يحدّد فيها المستخدم وسيطات مُسمّاة في محرك جدول Kafka. #74064 (Yarik Briukhovetskyi).
  • يُصلح تعديل إعدادات Storage S3Queue ذات البادئة “s3queue_” إلى إعدادات بلا بادئة، والعكس صحيح. #74075 (Kseniia Sumarokova).
  • يضيف الإعداد allow_push_predicate_ast_for_distributed_subqueries. يضيف هذا تمريرًا لشرط التصفية إلى الأسفل بالاعتماد على AST للاستعلامات الموزعة مع analyzer. هذا حل مؤقت نستخدمه إلى أن يصبح دعم الاستعلامات الموزعة مع تسلسل query plan متاحًا. يغلق #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov).
  • يُصلح مشكلة أنه بعد #73095 قد يظهر port في الحقل forwarded_for، مما يؤدي إلى تعذّر حل host name عند تضمين المنفذ. #74116 (Yakov Olkhovskiy).
  • يُصلح التنسيق غير الصحيح لـ ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...). #74126 (Han Fei).
  • إصلاح للمشكلة #66112. #74128 (Anton Ivashkin).
  • لم يعد من الممكن استخدام Loop كمحرك جدول في CREATE TABLE. كان هذا الدمج يتسبب سابقًا في حدوث أخطاء segfault. #74137 (Yarik Briukhovetskyi).
  • يُصلح مشكلة أمنية لمنع SQL injection في table functions الخاصة بـ PostgreSQL و SQLite. #74144 (Pablo Marcos).
  • يُصلح تعطلًا عند قراءة subcolumn من جدول Memory engine المضغوط. ويُصلح #74009. #74161 (Nikita Taranov).
  • يُصلح حلقة لا نهائية كانت تحدث مع queries إلى system.detached_tables. #74190 (Konstantin Morozov).
  • يُصلح خطأً منطقيًا في s3queue أثناء تعيين الملف على أنه failed. #74216 (Kseniia Sumarokova).
  • يُصلح إعدادات النسخ native (allow_s3_native_copy/allow_azure_native_copy) لعملية RESTORE من base backup. #74286 (Azat Khuzhin).
  • يُصلح المشكلة التي تظهر عندما يكون عدد الجداول detached في قاعدة البيانات مضاعفًا لـ max_block_size. #74289 (Konstantin Morozov).
  • يُصلح النسخ عبر ObjectStorage (أي S3) عندما تختلف credentials بين المصدر والوجهة. #74331 (Azat Khuzhin).
  • إصلاح اكتشاف الرسالة “use the Rewrite method in the JSON API” عند النسخ الأصلي على GCS. #74338 (Azat Khuzhin).
  • إصلاح الحساب الخاطئ لـ BackgroundMergesAndMutationsPoolSize (كانت القيمة تساوي ضعف القيمة الفعلية). #74509 (alesapin).
  • إصلاح خطأ تسرّب مراقبات Keeper عند تمكين Cluster Discovery. #74521 (RinChanNOW).
  • إصلاح مشكلة محاذاة الذاكرة التي أبلغ عنها UBSan #74512. #74534 (Arthur Passos).
  • إصلاح التنظيف المتزامن في KeeperMap أثناء إنشاء الجدول. #74568 (Antonio Andelic).
  • عدم إزالة أعمدة الإسقاط غير المستخدمة في الاستعلامات الفرعية عند وجود EXCEPT أو INTERSECT، للحفاظ على صحة نتيجة الاستعلام. يُصلح #73930. يُصلح #66465. #74577 (Dmitry Novik).
  • إصلاح استعلامات INSERT SELECT بين الجداول التي تحتوي على أعمدة Tuple مع تمكين التسلسل المتناثر. #74698 (Anton Popov).
  • تعمل الدالة right بشكل غير صحيح مع إزاحة سالبة ثابتة. #74701 (Daniil Ivanik).
  • إصلاح فشل إدراج البيانات المضغوطة بـ gzip أحيانًا بسبب خلل في فك الضغط من جهة العميل. #74707 (siyuan).
  • كانت عمليات REVOKE الجزئية مع منح wildcard قد تزيل امتيازات أكثر من المتوقع. يُغلق #74263. #74751 (pufit).
  • إصلاح في Keeper: إصلاح قراءة إدخالات السجل من القرص. #74785 (Antonio Andelic).
  • إصلاح التحقق من الامتيازات الخاصة بـ SYSTEM REFRESH/START/STOP VIEW؛ ولم يعد مطلوبًا الآن امتلاك هذا الامتياز على *.* لتنفيذ استعلام لعرض محدد، بل يكفي فقط امتياز هذا العرض. #74789 (Alexander Tokmakov).
  • لا تأخذ الدالة hasColumnInTable أعمدة alias في الحسبان. تم إصلاحها لكي تعمل أيضًا مع أعمدة alias. #74841 (Bharat Nallan).
  • إصلاح خطأ FILE_DOESNT_EXIST الذي يحدث أثناء دمج أجزاء البيانات لجدول يحتوي على عمود فارغ في Azure Blob Storage. #74892 (Julia Kartseva).
  • إصلاح اسم عمود الإسقاط عند إجراء join بين الجداول المؤقتة، إغلاق #68872. #74897 (Vladimir Cherkasov).

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

  • سيقترح سكربت التثبيت الشامل التثبيت حتى على MacOS. #74339 (Alexey Milovidov).
آخر تعديل في ٢٩ يونيو ٢٠٢٦