جدول المحتويات
إصدار 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 functionwindowFunnel. عند تفعيله مع 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 لعمليات
ANTIJOIN. كما أُعيدت هيكلة تنفيذ 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_granularity_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 functionremoteمع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لأعمدةNestedLowCardinality. #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_of_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).
تحسينات البناء/الاختبار/التغليف
- استخدام
clang-21في CI. #87074 (Konstantin Bogdanov). - تجنّب التنزيل من cmake عند البناء المتقاطع. #90506 (Raúl Marín).
إصدار 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 محددة تحتوي على\). ويمكن تعطيل هذا التهريب بتغيير إعداد MergeTreeescape_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وFULLJOIN الآن 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معsparseGramstokenizer. يحل المشكلة #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، التي تقبل الحدود العليا والقيم التراكمية لسلال المدرج التكراري كوسائط، وتُجري استيفاءً خطيًا بين الحدين الأعلى والأدنى للسلة التي يقع فيها موضع الكوانتايل. وتتصرف بشكل مشابه لدالة PromQLhistogram_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الآن تُعرَض بتنسيق مُنسّق عند استخدام formatVertical. يُغلق #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 على
looptable 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: تم تغيير تحليل العمود الموحَّد من clauseOUTER 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/ANTIJOIN إذا كان شرط التصفية دائمًا false بالنسبة إلى الصفوف المتطابقة أو غير المتطابقة. يتم التحكم في هذا التحسين عبر الإعداد الجديدquery_plan_convert_any_join_to_semi_or_anti_join. 2. تحويلFULL ALL JOINإلىLEFT ALLأوRIGHT ALLJOIN إذا كان شرط التصفية دائمًا false بالنسبة إلى الصفوف غير المتطابقة من أحد الجانبين. #86028 (Dmitry Novik). - تحسين أداء عمليات الدمج العمودي بعد تنفيذ lightweight delete. #86169 (Anton Popov).
- تحسين أداء
HashJoinبشكل طفيف في حالةLEFT/RIGHTjoin الذي يحتوي على عدد كبير من الصفوف غير المتطابقة. #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).
-
- 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).
تحسينات البناء/الاختبار/التغليف
- إصلاح التوافق مع abseil-cpp 20250814.0، https://github.com/abseil/abseil-cpp/issues/1923. #85970 (Yuriy Chernyshov).
- جعل بناء محلل WASM المستقل خاضعًا لخيار flag. #86505 (Konstantin Bogdanov).
- إصلاح بناء crc32c على وحدات CPU الأقدم من ARM التي لا تدعم التعليمة
vmull_p64. #86521 (Pablo Marcos). - استخدام
openldap2.6.10. #86623 (Konstantin Bogdanov). - عدم محاولة اعتراض
memalignعلى darwin. #86769 (Konstantin Bogdanov). - استخدام
krb51.22.1-final. #86836 (Konstantin Bogdanov). - إصلاح فكّ أسماء حزم crate الخاصة بـ Rust في
list-licenses.sh. #87305 (Konstantin Bogdanov).
إصدار 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 engineDeltaLake. #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_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 من نوع
ALLLEFT/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: إذ لم تكن تتعرّف على بداية الكلمة في أول السلسلة إذا كانت السلسلة السابقة في كتلة قد انتهت بمحرف كلمة. كما تم إصلاح ثغرة أمنية في تنسيق ApacheORC، كان من الممكن أن تؤدي إلى كشف ذاكرة غير مهيأة. وتغيّر سلوك الدالة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_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 settingallow_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_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). - تحسين بسيط لمُعدِّل
-Ifcombinator. #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 واجهةExpressionVisitorAPI، وقد نُفِّذت في طلب السحب هذا وطُبِّقت على تحويل تعبيرات أعمدة 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كأعداد صحيحة فيJSONinput 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. ملاحظة: لا يُطبَّق هذا الإصلاح على الجداول المُنشأة حديثًا أو الاستعلامات التي تستخدمmongotable function، وكذلك على dictionary sources وnamed collections. #81942 (Vladimir Cherkasov). - إصلاح تعطل محتمل في
Aggregatorعند حدوث استثناء أثناء الدمج. #82022 (Nikita Taranov). - إصلاح تحليل عامل التصفية عند استخدام عمود alias ثابت فقط في الاستعلام. يُصلح #79448. #82037 (Dmitry Novik).
- إصلاح
LOGICAL_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_storageobject 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 يستخدم engineURL. يُغلق هذا #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).
تحسينات في البناء/الاختبار/التحزيم
- استخدم
postgres16.9. #81437 (Konstantin Bogdanov). - استخدم
openssl3.2.4. #81438 (Konstantin Bogdanov). - استخدم
abseil-cpp2025-01-27. #81440 (Konstantin Bogdanov). - استخدم
mongo-c-driver1.30.4. #81449 (Konstantin Bogdanov). - استخدم
krb51.21.3-final. #81453 (Konstantin Bogdanov). - استخدم
orc2.1.2. #81455 (Konstantin Bogdanov). - استخدم
grpc1.73.0. #81629 (Konstantin Bogdanov). - استخدم
delta-kernel-rsv0.12.1. #81707 (Konstantin Bogdanov). - حدّث
c-aresإلىv1.34.5. #81159 (Konstantin Bogdanov). - رقِّ
curlإلى 8.14 لمعالجة CVE-2025-5025 وCVE-2025-4947. #81171 (larryluogit). - رقِّ
libarchiveإلى 3.7.9 لمعالجة: CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615. #81174 (larryluogit). - رقِّ
libxml2إلى 2.14.3. #81187 (larryluogit). - تجنّب نسخ شيفرات مصدر Rust المضمّنة إلى
CARGO_HOME. #79560 (Konstantin Bogdanov). - أزل التبعية لمكتبة Sentry عبر استبدالها بنقطة النهاية الخاصة بنا. #80236 (Alexey Milovidov).
- حدّث تبعيات بايثون في صور CI لمعالجة تنبيهات Dependabot. #80658 (Raúl Marín).
- أعد محاولة قراءة علامة إيقاف DDL المكرّر من Keeper عند بدء التشغيل لجعل الاختبارات أكثر متانة عند تمكين حقن الأعطال لـ Keeper. #80964 (Alexander Gololobov).
- استخدم https لرابط أرشيف ubuntu. #81016 (Raúl Marín).
- حدّث تبعيات بايثون في صور الاختبار. #81042 (dependabot[bot]).
- إضافة
flake.nixلإصدارات Nix. #81463 (Konstantin Bogdanov). - إصلاح
delta-kernel-rsالذي كان يتطلب الوصول إلى الشبكة أثناء البناء. إغلاق #80609. #81602 (Konstantin Bogdanov). اقرأ المقال A Year of Rust in ClickHouse.
إصدار 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 للبيانات بالتوازي (يمكن تمكين ذلك باستخدام إعداد queueparallel_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- السعة الإجمالية فيcachevirtual 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للجداول الموجودة على disksplain_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 يفقد الأقواس، ثم يُحلَّل على أنه*مع modifierEXCEPT. وقد عثر 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في دالة SQLparseDateTimeالآن على الأيام أحادية الرقم (مثل3)، بينما كان يتطلب سابقًا حشوًا بمسافة (مثل3). وهذا يجعل سلوكه متوافقًا مع MySQL. للاحتفاظ بالسلوك السابق، اضبط settingparsedatetime_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).
تحسينات في البناء/الاختبار/التحزيم
- إتاحة إعادة استخدام الملف التنفيذي
chcacheالمبني بدلًا من إعادة بنائه في كل مرة. #78851 (János Benjamin Antal). - إضافة انتظار لحالة الإيقاف المؤقت في NATS. #78987 (Dmitry Novikov).
- إصلاح مشكلة نشر بنية ARM بالخطأ على أنها amd64compat. #79122 (Alexander Gololobov).
- استخدام كود تجميعي مُولَّد مسبقًا لـ OpenSSL. #79386 (Konstantin Bogdanov).
- إصلاحات للسماح بالبناء باستخدام
clang20. #79588 (Konstantin Bogdanov). chcache: دعم التخزين المؤقت في Rust. #78691 (Konstantin Bogdanov).- إضافة معلومات فكّ التكدس لملفات الكود التجميعي الخاصة بـ
zstd. #79288 (Michael Kolupaev).
إصدار 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 functionmerge، مع إغلاق #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غير الصالحة في formatCSV. #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-odbc-bridgeوclickhouse-library-bridgeإلى مستودع منفصل: https://github.com/ClickHouse/odbc-bridge/. #76225 (Alexey Milovidov). - إصلاح الترجمة العابرة للمنصات في Rust مع إتاحة تعطيل Rust بالكامل. #76921 (Raúl Marín).
إصدار 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أُنشئ فوق قاعدة بيانات لم تعد موجودة. كما أُزيلت methodgetTotalRowsمن جداول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).
الميزات التجريبية
- أصبح نوع البيانات
BFloat16جاهزًا للإنتاج. #73840 (Alexey Milovidov).
تحسين الأداء
- جرى تحسين الدالة
indexHint. الآن، لن تُقرأ من الجدول الأعمدة المستخدمة فقط كوسيطات للدالةindexHint. #74314 (Anton Popov). إذا كانت الدالةindexHintجزءًا أساسيًا من معمارية بيانات Enterprise لديك، فهذا التحسين سينقذ حياتك. - تحسين احتساب الإعداد
max_joined_block_size_rowsبدقة أكبر لخوارزمية JOINparallel_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).
- استخدام ما يصل إلى
1000parallel 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).