التغييرات غير المتوافقة مع الإصدارات السابقة
تغييرات في الاستعلامات والبنية
- يستخدم العامل
INالآن دلالات المطابقة الدقيقة للقيم مع النوعBool: إذ لا تطابق قيمBoolإلا0و1داخل المجموعة. سابقًا، كانت القيم الرقمية الأكبر من255في مجموعةINتُحوَّل خطأً إلى true، لذا كانSELECT CAST(1, 'Bool') IN (256)يُرجع1. أما الآن، فيُرجع0بشكل صحيح. #93115 (Ashrith Bandla). - تم إصلاح أسبقية العامل
NOTلتتوافق مع معيار SQL: إذ أصبحNOTالآن أقل ارتباطًا منIS NULLوBETWEENوLIKEوالعوامل الحسابية. على سبيل المثال، أصبحNOT (x) IS NULLيُحلَّل الآن على أنهNOT (x IS NULL)بدلًا من(NOT x) IS NULL. وقد يغيّر هذا نتائج الاستعلامات التي كانت تعتمد على السلوك السابق (غير المعياري). #97680 (Alexey Milovidov). - لم يعد مسموحًا باستخدام
SELECTكمُعرّف نصي مجرد ضمن عنصر في قائمة تعبيراتWITH. #101059 (Aruj Bansal). - يرفض العامل
INالآن تحويلاتDecimalالفاقدة للدقة داخل الأنواع المركبة (TupleوArrayوMap)، مما يجعل سلوكه متسقًا مع المقارنات ذات القيم القياسية على المستوى الأعلى. سابقًا، كانت فحوصات الدقة تُطبَّق فقط على القيم القياسية في المستوى الأعلى: فعلى سبيل المثال، كانCAST('33.3', 'Decimal64(1)') IN (33.33)يُرجع0بشكل صحيح، لكنCAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])كان يُرجع1خطأً. أما الآن، فتُرجع كلتا الحالتين0بشكل صحيح. #101812 (Nihal Z. Miaji).
تغييرات نوع البيانات
- أصبحت إصدارات التسلسل لأنواع البيانات تُمرَّر الآن إلى أنواع البيانات المتداخلة. على سبيل المثال، كان إصدار التسلسل
with_size_streamالخاص بالنوع String يُطبَّق سابقًا فقط على أعمدة String ذات المستوى الأعلى وعناصر Tuple؛ أما الآن فأصبح يُطبَّق على أي نوع String داخل أي نوع متداخل مثل Array أو Map أو Variant أو JSON. يتحكم في ذلك إعداد MergeTree propagate_types_serialization_versions_to_nested_types، وهو الآن مفعّل افتراضيًا. بعد هذا التغيير، لن تتمكن الإصدارات الأقدم من قراءة أجزاء البيانات المُنشأة حديثًا، لكن الإصدار الجديد يمكنه قراءة الأجزاء القديمة. الترقية آمنة، لكن الرجوع إلى إصدار أقدم ليس آمنًا. #94859 (Pavel Kruglov). - تم إصلاح ترتيب البايتات في التسلسل الثنائي لـ
QBitلاستخدام تنسيق little-endian. #101378 (Raufs Dunamalijevs).
تغييرات التخزين والفهارس
- جرى تصحيح البيانات الوصفية للإسقاطات العادية، بحيث يُتعرَّف بشكل صحيح على الإسقاطات التي تستخدم مفاتيح فرز متعددة الأعمدة. #91352 (Amos Bird).
- أُصلحت مشكلة عدم التزام ملفات فهرس التخطي بالإعداد
replace_long_file_name_to_hash، والتي كانت تتسبب في ظهور أخطاء “اسم الملف طويل جدًا” وتعطُّل قراءات الفهرس للفهارس ذات الأسماء الطويلة. وأصبحت أسماء ملفات فهرس التخطي الآن تُحوَّل إلى hash عند تجاوزهاmax_file_name_length، على غرار ملفات الأعمدة. وهذا متوافق مع الإصدارات السابقة (يمكن للخوادم الجديدة قراءة الأجزاء القديمة)، لكن الرجوع إلى إصدار أقدم (أو استخدام خوادم قديمة أثناء ترقية متدرجة) قد يؤدي إلى تجاهل الفهارس ذات الأسماء الطويلة. #97128 (Raúl Marín).
الميزات التي أُزيلت
- أُزيل نوع فهرس التخطي
hypothesis. وكانت هذه ميزة تجريبية غير شائعة ذات فائدة عملية محدودة. ويؤدي إنشاء الجداول باستخدامINDEX ... TYPE hypothesisالآن إلى حدوث خطأ. #96874 (Alexey Milovidov). - أُزيلت الدالة التجريبية
detectProgrammingLanguage. #99567 (Alexey Milovidov).
تغييرات الإعدادات والتهيئة
- تم تغيير القيمة الافتراضية لـ
mysql_datatypes_support_levelمن فارغة إلىdecimal,datetime64,date2Date32، مما يتيح التعيين الصحيح لنوع MySQLDATEإلىDate32، وDECIMAL/NUMERICإلىDecimal، وDATETIME/TIMESTAMPمع دقة محددة إلىDateTime64افتراضيًا. في السابق، كانت أعمدة MySQL من النوعDATEتُعيَّن إلىDate، وهو ما لا يمكنه تمثيل التواريخ السابقة لـ 1970-01-01، مما كان يؤدي إلى تلف البيانات. #97716 (Alexey Milovidov).
تغييرات الإدراج وإزالة التكرار
- أصبح
async insertمُمكّنًا افتراضيًا الآن — إذ يجمّع ClickHouse افتراضيًا جميع عمليات الإدراج الصغيرة في دفعات. ويخضع ذلك للإعدادcompatibility: فضبطcompatibilityعلى إصدار أقل من 26.2 يعيد القيمة الافتراضية السابقةfalse. ويمكن تشغيلasync insertsأو إيقافها على عدة مستويات: في profiles مستخدمي config، أو على مستوى الجلسة، أو للاستعلام، أو لجدول MergeTree. #97590 (Sema Checherinda).
تغييرات جدول النظام
- أُعيد العمود
skip_indexesفيsystem.query_log. #101018 (Alexey Milovidov).
تغييرات غير متوافقة أخرى
- يقبل
mergeTreeAnalyzeIndexes{,UUID}الآن Array من أسماء الأجزاء بدلًا من تعبير نمطي، لأن تعابير Regex بطيئة (ميزة تجريبية). #98474 (Azat Khuzhin). - جرى تحديث مكتبة H3 إلى v4، ما يحسّن دقة حسابات الطول والمساحة وغير ذلك من المقاييس. هذا التغيير غير متوافق مع الإصدارات السابقة لأن النتائج الجديدة تختلف عن النتائج السابقة. #100348 (Alexey Milovidov).
- تغيّرت طريقة تعامل جدول
Mergeمع الأعمدة الافتراضية. إذا كان الجدول الأساسي يحتوي على_tableأو_database، فتُقرأ هذه الأعمدة من التخزين؛ وإلا فتُستكمَل بعد خطوة القراءة باستخدام خطوة التعبير. #101742 (Mikhail Artemenko).
الميزات الجديدة
الدوال
- أُضيفت الدالة
naturalSortKey(s)لمفاتيح الفرز الطبيعي. #90322 (Nazarii Piontko). - أُضيفت الدالة
arrayAutocorrelation(arr [, max_lag])، التي تحسب الارتباط الذاتي المُطبَّع لمصفوفة رقمية عند كل قيمة lag. وهي تدعم أنواع المصفوفات الصحيحة والعائمة والعشرية. #94776 (Wenyu Chen). - أصبحت الدالة
has()مدعومة الآن مع نوع JSON للتحقق من وجود المسار، على غرارMap. #96927 (DQ). - أُضيفت دالة الجدول
mergeTreeTextIndex(database, table, index)، التي تقرأ البيانات مباشرةً من فهرس نصي. ويمكن استخدامها للاستبطان أو لإجراء عمليات تجميع على بيانات الفهرس النصي. #97003 (Anton Popov). - أُضيفت دالة SQL
obfuscateQuery. #98305 (Xuewei Wang). - أُضيفت الدالتان
caseFoldUTF8وremoveDiacriticsUTF8لطيّ حالة Unicode وإزالة العلامات التشكيلية. #98973 (George Larionov). - تدعم الدالة
printfالآن سلاسل تنسيق غير ثابتة، مما يتيح استخدام نمط تنسيق مختلف لكل صف استنادًا إلى قيم الأعمدة. #98991 (Yash). - أُضيفت الدالة
highlight()، التي تُغلّف مواضع ظهور مصطلحات البحث داخل سلسلة نصية بعلامات HTML (الافتراضي<em>/</em>). وهي تدعم المطابقة غير الحساسة لحالة الأحرف في ASCII، والدمج التلقائي للتطابقات المتداخلة، وعلامات الفتح/الإغلاق المخصّصة. #99131 (Peng). - أُضيفت دالة السلاسل
normalizeUTF8NFKCCasefoldلتطبيع Unicode وفق NFKC_Casefold، والتي تجمع بين تطبيع NFKC وطيّ الحالة. #99276 (George Larionov). - أُضيف
tokenizerunicode_wordإلى الفهارس النصية الكاملة وكذلك الدالةtokens. وهو يقسّم النص باستخدام قواعد حدود الكلمات في Unicode: تتكوّن كلمات ASCII باستخدام أحرف الوصل (الشرطة السفلية، والنقطتان، والنقطة، وعلامة الاقتباس المفردة)، بينما تصبح أحرف Unicode غير ASCII رموزًا من حرف واحد. وتكون كلمات الإيقاف القابلة للتهيئة افتراضيًا هي علامات ترقيم CJK الشائعة. #99357 (Amos Bird). - أُضيفت الدالة
arrayTranspose، التي تأخذ مصفوفة ثنائية الأبعاد (matrix) وتُجري عليها عملية النقل. #101214 (Vitaly Baranov). - أُضيفت الدالة
hasPhrase(الاسم البديلmatchPhrase) للبحث عن العبارات (تسلسلات متصلة من الرموز). البحث هنا brute-force وغير مدعوم بعد في الفهرس النصي. #101997 (Elmi Ahmadov). - أُضيف
dotProductبوصفه دالة مسافة مدعومة لـ vector similarity indexes. ويجري الآن التحقق من اتجاه الفرز في جميع دوال المسافة لمنع ظهور نتائج غير صحيحة من دون تنبيه. #102254 (Renzo). - يمكن للدالة
stemالآن اشتقاق جميع الكلمات/الرموز في أعمدةStringوFixedStringوArray([Fixed]String)وNullableوLowCardinalityوConst. #99137 (Jimmy Aguilar Mena). - أصبحت الدالة
stemالآن غير تجريبية (إذ كان يتعيّن سابقًا تمكينallow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). - أُضيفت الدالة
JSONAllValues، التي تُرجع جميع القيم من عمودJSONبصيغةArray(String)، مع تسلسل القيم بتمثيل نصي وترتيبها بحسب أسماء مساراتها. كما أُضيف دعم الفهرس النصي للتعبيرJSONAllValuesعلى أعمدةJSON: فعند إنشاء فهرس نصي علىJSONAllValues(json_column)، يُستخدم تلقائيًا لتصفية الاستعلامات على الأعمدة الفرعية ضمنJSON(مثلjson_column.key1 = 'value'). #100730 (Anton Popov). - أُضيفت وحدات متوافقة مع PostgreSQL إلى المعامل
EXTRACT:EPOCHوDOWوDOYوISODOWوISOYEARوWEEKوCENTURYوDECADEوMILLENNIUM. كما تم إصلاحEXTRACT(WEEK FROM date)، الذي كان يتسبب سابقًا في ظهور خطأ. #100274 (Alexey Milovidov). - أُضيف دعم الدالة
toDaysInMonth()عبر اختصار نحوي في المحلل اللغوي لصياغة الدالةOVERLAYالقياسية في SQL. كانت الدالةoverlayموجودة بالفعل؛ ويضيف هذا دعمًا للصيغة المعتمدة على الكلمات المفتاحية باستخدامPLACINGوFROMوFORكفواصل. #101681 (Desel72). - يمكن الآن إضافة القيم
DateوDate32إلى القيمTimeوTime64باستخدام المعامل+، ما ينتج عنه قيمةDateTimeأوDateTime64. على سبيل المثال، يُرجعSELECT toDate('2024-01-15') + toTime('14:30:25')القيمة2024-01-15 14:30:25. تُحتسب النتيجة وفق المنطقة الزمنية للجلسة، وتُعالَج النتائج الخارجة عن النطاق وفقًا للإعدادdate_time_overflow_behavior. #102421 (Nihal Z. Miaji).
ميزات SQL والاستعلامات
- عندما تكون المعلَمة من النوع
Nullableولا يتم تحديدها، تُعتبر قيمتها الآنNULL. #93869 (Vikash Kumar). - يمكن لـ ClickHouse الآن استبعاد أجزاء البيانات كاملة في استعلامات
SELECTاستنادًا إلى إحصاءات الحد الأدنى/الحد الأقصى. #94140 (zoomxi). - أُضيف دعم Materialized CTEs، التي تُقيَّم مرة واحدة فقط أثناء تنفيذ الاستعلام وتُخزَّن نتائجها في جداول مؤقتة. #94849 (Dmitry Novik).
- يمكن الآن استخدام بعض الدوال في SQL بدون أقواس. #95949 (Aly Kafoury).
- أُضيفت صياغة subcolumn المدمجة
json.@pathللنوعJSON. وتُرجع القيمة الحرفية باعتبارهاDynamicإذا كان المسار يحتوي على scalar، أو sub-object باعتبارهDynamicإذا كان المسار يحتوي على كائن متداخل، أوNULLإذا كان المسار غير موجود. #98788 (Pavel Kruglov). - أُضيفت الكلمة المفتاحية
SOMEلتعبيرات subquery. وهي تعمل تمامًا مثلANY. #99842 (Artem Kytkin). - أُضيف دعم
SET TIME ZONE 'tz'كـ Alias forSET session_timezone. #99883 (phulv94). - أُضيف دعم clause
VALUESالقياسي في SQL كتعبير table ضمنFROM، مثلSELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72). - أُضيف دعم القيم الحرفية المركبة لـ interval وفق معيار SQL مع محددات النطاق
TO، مثلINTERVAL '1:30' HOUR TO MINUTE، وتُفكَّك داخليًا إلى مجموع intervals. #100453 (Desel72). - أُضيف الأمر
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'للوضعين ordered وunordered. #100709 (Bharat Nallan).
محركات الجداول والتخزين
- أُضيف دعم القراءة التزايدية لمحرك الجدول
Paimonمع تتبّع تقدّم اللقطات المستند إلى Keeper، بما في ذلك قراءة فروق اللقطات المستهدفة عبرpaimon_target_snapshot_id. #93655 (XiaoBinMu). - أُضيف دعم ZooKeeper الإضافي في
DatabaseReplicated. #95590 (RinChanNOW). - أُضيف دعم قراءة أنواع الطوابع الزمنية بالنانوثانية في Iceberg v3 (
timestamp_nsوtimestamptz_ns) مع تعيينها إلىDateTime64(9)وDateTime64(9, 'UTC'). ويتيح ذلك لـ ClickHouse قراءة بيانات Iceberg التي تتضمن هذه الأنواع في المخطط؛ لكنه لا يُعد دعمًا كاملًا لـ Iceberg v3، ولا يشمل الكتابة إلى Iceberg v3 بهذه الأنواع. #97132 (Dmitry Kovalev). - أُضيف
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')لجداول Iceberg. #97904 (murphy-4o). - أُضيفت ذاكرة تخزين مؤقت SLRU جديدة لبيانات Parquet الوصفية لتحسين أداء القراءة، من خلال إزالة الحاجة إلى إعادة تنزيل الملفات لمجرد قراءة البيانات الوصفية. #98140 (Grant Holly).
- أُضيف دعم فهارس التخطي في MergeTree لأعمدة JSON باستخدام
JSONAllPathsمع أنواع الفهارسbloom_filterوtokenbf_v1وngrambf_v1وtext(المعكوس)، مما يتيح تخطي الحبيبات استنادًا إلى مجموعة مسارات JSON الموجودة في كل حبيبة. #98886 (Pavel Kruglov). - أُضيف فهرس الإسقاط
commit_order، الذي يعيد تنظيم البيانات وفق ترتيب الإدراج. #99004 (Mikhail Artemenko). - أُضيف bucketed serialization لأعمدة
Mapفي MergeTree (map_serialization_version = 'with_buckets'). تُقسَّم المفاتيح إلى buckets قائمة على hash، بحيث إن قراءة مفتاح واحد (m['key']) لا تتطلب سوى قراءة bucket واحدة بدلًا من العمود بأكمله، مما يوفّر تسريعًا بمقدار 2–49 مرة لعمليات البحث عن مفتاح واحد بحسب حجم الـ map. ويمكن التحكم في عدد الـ buckets واستراتيجية التقسيم إليها عبر إعدادات MergeTree الجديدةmap_serialization_versionوmax_buckets_in_mapوmap_buckets_strategyوmap_buckets_coefficientوmap_buckets_min_avg_size. ويحافظ الإعدادmap_serialization_version_for_zero_level_partsعلى التسلسل الأساسي لعمليات insert لتجنّب عبء الكتابة الإضافي، بينما تستخدم الأجزاء المدمجة buckets. كما تُدعَم فهارس التخطي علىmapKeys/mapValuesمع bucketed serialization، ويعيدoptimize_functions_to_subcolumnsكتابةm['key']إلى قراءة عمود فرعي لكل مفتاح عند توفر الـ buckets. #99200 (Pavel Kruglov).
الإدراج وإزالة التكرار
- تم تنفيذ سلوك جديد لكل من
max_insert_block_size_rowsوmax_insert_block_size_bytesوmin_insert_block_size_rowsوmin_insert_block_size_bytesضمن عملية تجميع الكتل، وذلك وفقًا لإعداد التوافقuse_strict_insert_block_limits. #94207 (Kirill Kopnev).
الإعدادات والتهيئة
- تمت إضافة إعداد MergeTree
table_readonlyلتمييز الجداول على أنها للقراءة فقط، مما يمنع عمليات الإدراج والتعديل. #97652 (Alexey Milovidov). - تمت إضافة الإعداد
use_partition_pruning(والاسم البديلuse_partition_key). اضبطه علىfalseلتعطيل استبعاد الأقسام استنادًا إلى مفتاح التقسيم. #97888 (Nihal Z. Miaji). - يمكن الآن لكل مُدخل
type=httpفي<protocols>تحديد مفتاح<handlers>مخصص يشير إلى قسم تهيئة منفصل<http_handlers_*>، مما يتيح قواعد توجيه HTTP مختلفة لكل منفذ. #98414 (Amos Bird). - تمت إضافة إعدادَي MergeTree
replicated_fetches_min_part_levelوreplicated_fetches_min_part_level_timeout_seconds، اللذين يتيحان للنسخ المتماثلة تجاوز جلب الأجزاء المُدرجة حديثًا (غير المدمجة) من النظائر، مما يقلل الحمل الإضافي للنسخ المتماثل أثناء استيعاب البيانات بكثافة. #98625 (tanner-bruce). - تمت إضافة إعداد الخادم
restore_access_entities_with_current_grants. عند تفعيله، تقتصر الامتيازات الخاصة بالمستخدمين/الأدوار المستعادة على ما يُسمح للمستخدم الذي يجري الاستعادة بمنحه (بنفس دلالاتGRANT CURRENT GRANTS)، بدلًا من الفشل معACCESS_DENIED. #98795 (pufit). - تمت إضافة الإعدادين
max_skip_unavailable_shards_numوmax_skip_unavailable_shards_ratioلتقييد عدد الأجزاء الموزعة التي يمكن تخطيها بصمت عند تفعيلskip_unavailable_shards. وإذا تجاوز عدد الأجزاء الموزعة غير المتاحة أو نسبتها العتبة المُعدّة، فسيتم طرح استثناء بدلًا من إرجاع نتائج غير مكتملة بصمت. #99369 (Alexey Milovidov). - تم تنفيذ الحصص باستخدام تجزئة الاستعلام المُطبَّع لحماية خدمات ClickHouse العامة من إساءة الاستخدام. ويُدعَم
NORMALIZED_QUERY_HASHكنوع لمفتاح الحصة — مع حصة منفصلة لكل استعلام مُطبَّع فريد، بحيث يتتبعCREATE QUOTA q KEYED BY normalized_query_hashكل استعلام مميز على حدة. كما يُدعَمQUERIES_PER_NORMALIZED_HASHكنوع مورد للحصة — لتقييد الحد الأقصى لعدد مرات تنفيذ أي استعلام مُطبَّع واحد ضمن فترة زمنية، بحيث يمنعMAX queries_per_normalized_hash = 100تشغيل أي نمط استعلام واحد أكثر من 100 مرة. #99586 (Alexey Milovidov). - أصبحت القيمة الافتراضية لإعداد MergeTree
auto_statistics_typesالآنminmax, uniq، بحيث يتم إنشاء إحصاءات minmax وuniq تلقائيًا لجميع الأعمدة المناسبة في الجداول الجديدة. كما أصبحت القيمة الافتراضية لـmaterialize_statistics_on_insertالآنfalse، بحيث تُنشأ الإحصاءات أثناء عمليات الدمج بدلًا من وقت الإدراج، مما يقلل الحمل الإضافي لعمليات الإدراج. اضبطmaterialize_statistics_on_insert = 1لاستعادة السلوك القديم. #101275 (Han Fei). - تمت إضافة إعداد التحديث
prefer_dependency_replicaلسلاسل تبعية العرض المادي للحد من البيانات المفقودة الناتجة عن تأخر النسخ المتماثل بين النسخ المتماثلة. #101591 (Seva Potapov).
المصادقة
- تمت إضافة خيار إعداد LDAP لكل خادم وهو
<follow_referrals>(القيمة الافتراضيةfalse) للتحكم في ما إذا كان عميل LDAP يتبع الإحالات المرجعية. ويؤدي تعطيل تتبّع الإحالات المرجعية إلى تجنّب حالات تجاوز المهلة والتعليق عند البحث انطلاقًا من base DN لجذر نطاق Active Directory، كما يقلّل من الضوضاء في السجلات. #96765 (paf91).
جداول النظام
- تمت إضافة
system.histogram_metric_log، وهو جدول نظام جديد ينشئ لقطات دورية لجميع مقاييس المدرج التكراري (مثل أزمنة الاستجابة لـ S3/Azure ومدد مراحل معالجة طلبات Keeper). وأصبح عمودvalueفيsystem.histogram_metricsالآن من النوعFloat64لمزيد من المرونة والتوافق مع نموذج بيانات Prometheus. #103046 (Miсhael Stetsyuk).
الميزات التجريبية
- تمت إضافة برنامج ترميز الضغط ALP للأعداد ذات الفاصلة العائمة (من دون آلية fallback
ALP_rdللقيم المزدوجة غير القابلة للضغط). #91362 (Nazarii Piontko). - تمت إضافة تلميحات الأنواع الكسولة التجريبية لأعمدة JSON. عند تفعيلها عبر
allow_experimental_json_lazy_type_hints، فإنALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)الذي يضيف تلميحات الأنواع فقط أو يعدّلها يكتمل فورًا كعملية تقتصر على البيانات الوصفية، من دون إعادة كتابة البيانات التاريخية. تُطبَّق تلميحات الأنواع وقت الاستعلام على الأجزاء القديمة، وتُحوَّل إلى صيغة مادية أثناء عمليات INSERT وعمليات الدمج في الخلفية. #97412 (tanner-bruce). - تمت إضافة دعم لهجات SQL الخارجية باستخدام مكتبة
polyglot. #99496 (Alexey Milovidov). - تمت إضافة الإعداد
query_plan_optimize_join_order_randomize، الذي يضيف طابعًا عشوائيًا إلى الإحصاءات المستخدمة في إعادة ترتيب عمليات join، وهو مفيد لأغراض الاختبار. #100643 (Vladimir Cherkasov). - تمت إضافة دعم AI function إلى ClickHouse، ما يتيح للمستخدمين استدعاء نقاط نهاية OpenAI وAnthropic باستخدام SQL. وتُعد
aiGenerateأول دالة من هذا النوع. #100831 (George Larionov). - تمت إضافة دوال AI
aiClassifyوaiExtractوaiTranslateللاستفادة من واجهات برمجة تطبيقات LLM في ClickHouse. #100832 (George Larionov). - تمت إضافة دعم بحيرات البيانات على Azure باستخدام Delta Kernel. #102202 (Smita Kulkarni).
تحسينات الأداء
أداء JOIN
- مجموعة صغيرة من التحسينات على
HashJoinوConcurrentHashJoin. #96663 (Yarik Briukhovetskyi). - أُضيف دعم لتبديل طرفَي عمليات JOIN من النوع
ANTIوSEMIوFULLاستنادًا إلى إحصاءات المُحسِّن. #97498 (Hechem Selmi). - جرى تقليل التزاحم على ذاكرة التخزين المؤقت في عمليات JOIN من النوع
RIGHTوFULLعبر التحقق من تعيينJoinUsedFlagsقبل الكتابة. #99274 (Hechem Selmi). - جرى تسريع عمليات hash joins على المفاتيح
Int32وInt64ذات النطاق الصغير باستخدام hash table بفهرسة مباشرة. #99275 (Hechem Selmi).
تحسين الاستعلامات
- جرى تحسين تخطي الحبيبات في
pointInPolygonللمضلعات الكبيرة، وإصلاح مشكلة كان فيها تحليل فهرسpointInPolygonيطرح استثناءً أثناء تشذيب المفتاح الأساسي. #91633 (Nihal Z. Miaji). - أصبح
optimize_read_in_orderيُراعى الآن عند قراءة الإسقاطات. #95885 (Andrey Zvonov). - جرى تحسين القراءة من قاموس الفهرس النصي قليلًا، مما حسّن الأداء العام لتحليل الفهرس النصي. #97519 (Anton Popov).
- جرى تحسين أداء تحليل الفهرس النصي للاستعلامات التي تتضمن شروطًا مركبة تشمل أعمدة مفهرسة وغير مفهرسة معًا. في السابق، كان تحسين الإنهاء المبكر أثناء تحليل الفهرس يُعطَّل خطأً في مثل هذه الحالات. #98096 (Anton Popov).
- جرى تحسين أداء الاستعلامات ذات التعبيرات الثابتة التي تُنشئ مصفوفات أو خرائط طويلة جدًا. #98287 (Alexey Milovidov).
- جرى إصلاح تحليل شرط المفتاح لمفاتيح
DateTime64الأساسية عند مقارنتها بثوابت عددية صحيحة، وهو ما كان يؤدي سابقًا إلى عدم إجراء أي تشذيب للحبيبات. #98410 (Amos Bird). - أصبح الإعداد
optimize_syntax_fuse_functionsمفعّلًا افتراضيًا الآن. #98424 (Alexey Milovidov). - أصبح تشذيب الأقسام مسموحًا الآن عندما يحتوي الشرط على أي عامل مقارنة (
=,<,>,!=) ويكون مفتاح القسم ملفوفًا داخل سلسلة دوال حتمية (فعلى سبيل المثال، معPARTITION BY x، ستستخدم الشروط مثلcityHash64(x) % 5 > 2وtoYYYYMM(x) < 2026وtoYYYYMM(x) = 2026أوtoYYYYMM(x) != 2026مفتاح القسم في التشذيب). #98432 (Nihal Z. Miaji). - أصبح تحسين القراءة بالترتيب وتشذيب المفتاح الأساسي مسموحَين الآن عندما يكون النوع الهدف في
CASTهوNullableويكون التحويل رتيبًا؛ فعلى سبيل المثال، معPRIMARY KEY x، يمكن لـ ClickHouse استخدام تحسين القراءة بالترتيب معORDER BY x::Nullable(UInt64)وتشذيب المفتاح الأساسي مع شروط مثلWHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji). - أصبح تشذيب الفهرس ودفع عامل التصفية إلى المصدر مسموحَين الآن عندما يُقارَن عمود صحيح بقيمة حرفية من نوع float؛ فعلى سبيل المثال، يمكن الآن لشروط مثل
WHERE x < 10.5استخدام المفتاح الأساسي في التشذيب، كما أصبحت عوامل التصفية مثلprime < 1e9أوnumber < 1e5تُدفَع إلىprimes()وnumbers()من دوال الجداول بدلًا من التسبب في تنفيذ غير محدود. #98516 (Nihal Z. Miaji). - يمكن الآن للاستعلامات التي تُصفّي على أعمدة المفتاح الأساسي في MergeTree باستخدام بدائل في تعبير نمطي على سلاسل حرفية، مثل
^(abc-1|abc-2)، أن تستفيد من تشذيب المفتاح الأساسي عندما تشترك البدائل في بادئة واحدة. #98988 (Yash). - جرى تحسين
INTERSECT ALLوEXCEPT ALL. #99097 (Raufs Dunamalijevs). - أُضيف دعم لتحسين
read_in_order_use_virtual_rowلعمليات القراءة بالترتيب العكسي. #99198 (Vladimir Cherkasov). - استعلامات أسرع غير متسلسلة لأعمدة
LowCardinalityذات القاموس الواحد. #99285 (Ivan Babrou). - تم إصلاح التوسع السلبي للاستعلامات القصيرة التي تتضمن التجميع على الأجهزة ذات العدد الكبير من الأنوية. فعندما يقرأ الاستعلام عددًا قليلًا من marks، لم يعد الـ pipeline يتوسع إلى
max_threadsبعد التجميع، مما يتجنب الـ overhead الناتج عن streams شبه الفارغة. #99493 (Alexey Milovidov). - تم تحسين أداء الاستعلامات التي تستخدم parallel replicas من خلال الاختيار الصحيح لـ task size الخاصة بالقراءة. #99801 (Nikita Taranov).
- أُزيلت عناصر
ORDER BYالزائدة في النهاية بمجرد أن أصبحت جميع مفاتيحGROUP BYمغطاة ضمن prefix الخاص بـORDER BY. #100157 (Alexey Milovidov). - جرى تحسين الاستعلامات عبر دفع clause
LIMITإلى داخلUNION ALL. #100364 (Alexey Milovidov). - أُضيف دعم الترجمة الفورية JIT لمقارنات أعمدة
StringوFixedStringفيORDER BY، مما يحسن أداء الفرز في مرحلة merge بنسبة تتراوح بين 6% و17% لمفاتيح الفرز التي يغلب عليها النص. #100577 (Raúl Marín). - عند تمكين
read_in_order_use_virtual_rowمع setting الجديدةread_in_order_use_virtual_row_per_block، تُرسَل الآن معلومات حدود الصفوف الافتراضية بعد كل block تتم قراءته من MergeTree، مما يتيح لعملية merge إعادة ترتيب أولويات sources أثناء stream للأجزاء التي تُصفّى بياناتها بالكامل بواسطةWHERE/PREWHERE/JOIN. #100603 (Vladimir Cherkasov). - تحسين التوازي في الاستعلامات ذات views البسيطة (فوق table أساسي من نوع MergeTree) التي تُنفَّذ باستخدام parallel replicas. #100815 (Igor Nikonov).
- أُضيف دعم parallel replicas فوق views البسيطة (بما في ذلك views المؤهلة من
UNION ALLفوق جداولMergeTree) عند تعيينparallel_replicas_allow_view_over_mergetree=1. ويؤدي ذلك إلى موازاة query الخارجي للـ view بدلًا من الداخلي، مما يزيد من توازي الاستعلامات عبر العقد. #100958 (Igor Nikonov). - جرى تحسين القراءة وفق ترتيب primary key في
full_sorting_mergeعند وجود filters تحتوي علىINفي query plan. #101261 (Nikita Taranov). - تم تحسين أداء
INSERT VALUESلأعمدةMapوArrayوTupleعندما تُمرَّر values كسلاسل نصية مهربة (مثل'{\'key\':1}')، مع تجنب fallback غير الضروري إلى parser تعبيرات SQL. #102119 (Joanna Hulboj).
أداء الدوال وعمليات التجميع
- تحسين أداء الدالة
levenshteinDistance. #94543 (Joanna Hulboj). - تحسين تحويلات النوع Decimal على مستوى الدُفعات عبر تجنّب استدعاء الدوال لكل عنصر. #95923 (Konstantin Bogdanov).
- تحسين أداء استعلامات
LIKE. #98149 (Elmi Ahmadov). - تحسين الدالة التجميعية
avgWeightedباستخدام مُجمِّعات محلية بدلًا من التخزين والتمرير لكل صف عبر aggregate state، مما رفع الأداء بنسبة تصل إلى 27% لمدخلاتNullable. #98793 (Antonio Andelic). - تسريع دوال
var*Stableوstddev*StableلأعمدةFloat64عبر إزالة الافتراضية من الحلقة الداخلية. يتيح ذلك تحسينات من المصرّف (FMA/registers) تغيّر نتائج الفاصلة العائمة على مستوى ULP. #99460 (Riyane El Qoqui). - استخدام ترميز Firedancer base58 المحسّن للمدخلات بحجم 32/64 بايت (تلقائيًا مع
base58Encode)، مع إتاحة استخدام فك ترميز base58 المحسّن إذا كانت النتيجة بعد فك الترميز 32/64 بايت (صراحةً معbase58Decode('...', 32)). #99461 (Joanna Hulboj). - تحسين الدالة
cutURLParameterعبر إزالة إزاحات الذاكرة غير الضرورية. #100218 (Nikita Semenov). - تسريع تحويل float إلى string للقيم الصحيحة الكبيرة عبر توسيع المسار السريع
itoaباستخدام rounding متوافق مع dragonbox. #100649 (Raúl Marín). - استبدال dragonbox بـ zmij لتحقيق تحويل float إلى string أسرع بمقدار 1.5x–3x. #100650 (Raúl Marín).
- تسريع تحويل
Int128/UInt128إلى string عبر استبدال القسمة البرمجية بـ Barrett reduction وفك الحلقة الخاصة بالتحويل. #100671 (Raúl Marín). - تجنّب إنشاء threads زائدة في عملية merge المتوازية لـ
UniqExactSet. #100686 (Jiebin Sun). - إضافة merge متوازية على مستوى الدُفعات لـ
UniqExactSet. #100687 (Jiebin Sun).
أداء التخزين وعمليات I/O
- تقليل التنازع على الأقفال أثناء عمليات القراءة فقط على جداول ReplicatedMergeTree التي انتهت فيها عمليات mutation. #95771 (Eduard Karacharov).
- أصبح Iceberg الآن قادرًا على تعبئة البيانات الوصفية مسبقًا في ذاكرة التخزين المؤقت بشكل غير متزامن، ويُفعَّل ذلك بضبط
iceberg_metadata_async_prefetch_period_msعند إنشاء الجدول. ويمكن الآن لاستعلاماتSELECTعلى جداول Iceberg تحديد المعلَمةiceberg_metadata_staleness_ms، ما يتيح لـ ClickHouse الاعتماد على النسخة المخزنة مؤقتًا من البيانات الوصفية إذا كانت أحدث من حد التقادم المحدد؛ وإلا فستُستعلَم خدمة Iceberg catalog البعيدة للحصول على أحدث البيانات الوصفية. ويمكن أن يلغي ذلك الاستعلامات الموجَّهة إلى Iceberg catalog أثناء معالجة الطلبات، مما يحقق تحسنًا ملحوظًا في الأداء. #96191 (Arsen Muk). - يستخدم الوضع ordered في S3Queue الآن S3
ListObjectsV2StartAfterلتجنّب إعادة سرد السجل الكامل للبادئة، مما يقلل من استدعاءاتListObjects. #96370 (Venkata Vineel). - تم تمكين القراءات المتوازية من محرك جدول YTsaurus. #97343 (MikhailBurdukov).
- تحسين أداء بحيرات البيانات. ففي الإصدارات السابقة، لم تكن القراءة من تخزين الكائنات تعيد تحجيم pipeline ليتوافق مع عدد خيوط المعالجة. #99548 (Alexey Milovidov).
- السماح بالجلب المسبق عند قراءة ملف بعيد عبر userspace page cache. #99919 (Alexey Milovidov).
- إصلاح تراجع كبير في أداء INSERT عند استخدام
deduplicate_insert=enable(وهو الإعداد الافتراضي منذ 26.2)، وذلك عبر تأجيل حساب hash البيانات من مرحلة squashing إلى sink، واستخدام hash الأعمدة على دفعات عبرupdateHashWithValueRange، مما خفّض الحمل الإضافي من ~2.5s إلى ~0.5s لعدد 5M صف مع 22 عمودًا. #101494 (Sema Checherinda).
تحسين استخدام الذاكرة
- بالنسبة إلى عمليات insert المتزامنة، أصبح بالإمكان الآن حذف الكتلة الأصلية (اللازمة لإزالة التكرار) لتوفير الذاكرة. #96661 (Sema Checherinda).
- تم تحسين الأداء وتقليل استخدام الذاكرة للدوال النافذة المتوازية في بعض السيناريوهات، وكذلك لأحمال
arrayFoldالتي تتضمن مصفوفات كبيرة. ويمكن أن يسهم هذا أيضًا في تقليل ضغط أخطاء الصفحات وتحسين الاستقرار عند وجود حدود صارمة للذاكرة في الاستعلامات المتأثرة. #98892 (filimonov).
تحسينات
الاستعلامات وSQL
- أصبحت الإسقاطات التجميعية مدعومة الآن بشكل صحيح في العروض. #88798 (Amos Bird).
- أصبح
optimize_aggregators_of_group_by_keysيُحسّن الآن الدوال التجميعية بشكل صحيح في استعلاماتGROUPING SETS. #93935 (Xiaozhe Yu). - أُضيف دعم لتحسين تحويل
OUTERإلىINNERفي عملياتjoinعند استخدامjoin_use_nulls. #95968 (Vladimir Cherkasov). - جرى توسيع
cast_keep_nullableليعمل مع النوعينDynamicوJSON. عند تعيينه، فإن تحويلNULLمن الأنواع التي يمكن أن تكونNullableيعيدNULL؛ وإلا فإنNULLيُطلق الخطأCANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov). - أُضيف بند
ROLEإلىCREATE USER. #97074 (Vitaly Baranov). - أُضيفت معلومات عن المرشحات المؤجلة كعنصر منفصل في خرج الاستعلام
EXPLAIN(عند استخدام سياسات الصفوف/PREWHERE مع FINAL). #97374 (Yarik Briukhovetskyi). - أُضيف دعم لتعابير
joinبين الجداول الموضوعة بين قوسين في بندFROM، مثلSELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov). - تطبيق فهارس تخطي البيانات أثناء تحليل الفهارس الموزّع. #97767 (Azat Khuzhin).
- يمكن الآن أن يكون مفتاح الفرز للجدول تعبيرًا مثل
toDate(time)، وتُتخذ قرارات عدم تأجيل مثل هذه التعابير عندما تكون جزءًا من عوامل التصفية. #98237 (Yarik Briukhovetskyi). - أصبح محسّن ترتيب عمليات
joinيستنتج الآن شروط مساواة انتقالية لعملياتjoinمن شروطjoinالحالية. على سبيل المثال، عند وجودA.x = B.x AND B.x = C.x، يجري التعرّف على التكافؤA.x = C.x، مما يتيح للمُحسِّن النظر في عمليات ربط مباشرة بين الجداول المرتبطة انتقاليًا. ويمكن أن يؤدي ذلك إلى تحسين جودة الخطة في المخططات النجمية ومخططات snowflake. وتتحكم في هذه الميزة الإعدادات الجديدةenable_join_transitive_predicates(وهي معطّلة افتراضيًا). #98479 (Alexander Gololobov). - عند تمكين
apply_row_policy_after_finalأوapply_prewhere_after_final، أصبحت شروطANDالمركبة في سياسات الصفوف وPREWHEREتُفكَّك الآن لاستخراج عناصر مفتاح الفرز من أجل تحليل فهرس المفتاح الأساسي. سابقًا، إذا احتوى مرشح مؤجل على مزيج من الشروط الخاصة بمفتاح الفرز وغير الخاصة به (مثلx > 1 AND y != 'foo')، كان التعبير بالكامل يُستبعد من تحليل الفهارس. #98513 (Yarik Briukhovetskyi). - لم تعد تشارك في تحليل الفهارس الموزّع إلا النسخ المتماثلة “الحية” (القابلة للاتصال). #98521 (Azat Khuzhin).
- جرى تقييد عدد العقد المستخدمة في آلية parallel replicas الاستدلالية التلقائية ليطابق العدد الفعلي للعقد في المجموعة، بدلًا من الاعتماد فقط على الإعداد
max_parallel_replicas. #98668 (Nikita Taranov). - جرى تنفيذ الطلبات المحوّطة والقراءة غير المتزامنة من أجل تحليل الفهارس الموزّع. #98724 (Azat Khuzhin).
- تمت إضافة دعم لعبارة
SAMPLEفي تحليل الفهارس الموزّع. #98931 (Azat Khuzhin). - تمت إضافة دعم الرتابة لعملية الضرب، مما يتيح استبعادًا على مستوى المفتاح الأساسي لتعبيرات
key * constant. #98983 (Amos Bird). - لم تعد رسائل الخطأ الخاصة بالمحلّل تُفرغ جميع أعمدة الجدول (مما قد يؤدي إلى استثناءات يزيد حجمها عن 150KB). وأصبحت قوائم الأعمدة الآن مقتصرة على 10 عناصر. #99002 (Yash).
- أصبحت إحصاءات الأعمدة من الاستعلامات الفرعية التي تتضمن عمليات join تُعاد الآن بشكل صحيح، بحيث يمكن للاستعلام الأصل استخدامها لإعادة ترتيب join. #99096 (Alexander Gololobov).
- أصبح
ALTER TABLE MODIFY COLUMN x TTL ...مسموحًا الآن دون تحديد نوع العمود. #99208 (Nikolay Degterinsky). - تم تحسين مخرجات
EXPLAIN PLAN pretty=1: إذ تُطبع أعمدة مخرجات الاستعلام من المستوى الأعلى، وتُعرض تسميات/رموز علاقات join مع عدد الصفوف المقدّر في النتيجة والمحلية، وتُدرج أعمدة المخرجات لكل خطوة من خطوات join/source. #99462 (Kirill Kopnev). - تم إصلاح فشل الدالة الجدولية
merge()مع الخطأUNKNOWN_IDENTIFIERعند الاستعلام عن أعمدة غير موجودة في جميع الجداول الأساسية من نوع distributed/remote. #99833 (Alexey Milovidov). - لم يعد
ConditionSelectivityEstimatorيُستخدم في المُحسِّن عندما لا يكون الشرط بصيغة CNF (على سبيل المثالwhere a = 0، وهو شرط واحد لا يمكن أن تفيد فيه الإحصاءات). #100110 (Han Fei). - تم تطبيق
distributed_index_analysis_min_indexes_bytes_to_activateبعد استبعاد الأقسام. #100477 (Azat Khuzhin). - يدعم
EXPLAIN PIPELINEالآن الإعدادdistributed=1لتضمين أجزاء pipeline البعيدة. #100513 (Nikita Taranov). - أصبح
use_partition_pruning = 0الآن يعطّل أيضًا استبعاد فهرسMinMaxوتحسين العد على أعمدة مفتاح التقسيم، بالإضافة إلى تعطيل الاستبعاد استنادًا إلى مفاتيح التقسيم. #100904 (Nihal Z. Miaji). - أصبح
EXPLAIN [PLAN] pretty=1الآن يطبع التعبيرات بصيغة مقروءة للبشر. #100927 (Kirill Kopnev). - أصبح
accurateCastOrNullوaccurateCastOrDefaultيدعمان الآن أنواع الهدفTuple، بما في ذلكTuplesالمتداخلة ذات العناصرNullable. في السابق، كانت هذه الدوال ترفض أهدافTupleلأنTupleلم يكن ممكنًا داخلNullable. #100942 (Nihal Z. Miaji). - يمكنك الآن استخدام فاصلة ختامية في عبارة
WITHقبل استعلامSELECT. #101093 (Aruj Bansal). - تم تنفيذ تجسيد كسول للأعمدة في ReplacingMergeTree مع FINAL عندما يكون predicate انتقائيًا بما يكفي. #101647 (Nikolai Kochetov).
- تحسين تقديرات الانتقائية الافتراضية للشروط التي لا تتوفر لها إحصاءات، بما يتوافق مع الإرشادات القياسية المتبعة في المجال: 0.1 لانتقائية الشرط
LIKE، و0.33 لانتقائية الشرط غير المعروف. #101653 (Alexander Gololobov). - تضمين الاستعلام الفرعي VIEW مباشرةً في شجرة الاستعلام لإتاحة تطبيق المزيد من التحسينات على VIEW. #100830 (Dmitry Novik).
الدوال
- يمكنك الآن استخدام إدخال JSON/Object الأصلي مع دوال
JSONExtract. #96711 (Fisnik Kastrati). - أُضيفت دالة SQL
tokensForLikePattern، التي تُجزِّئ أنماطLIKEمع مراعاة دلالات أحرف البدل: إذ يُعامَل%و_كأحرف بدل، وتُعامَل أحرف البدل المُهرَّبة (\%,\_) كمحارف حرفية، وتُهمَل الـ tokens المجاورة لأحرف البدل غير المُهرَّبة. #97872 (Amos Bird). - نُفِّذت الدالة
toDaysInMonth()، التي تُرجِع عدد الأيام في شهر التاريخ المحدد. #99227 (Vitaly Baranov). - أُعيدت تسمية الـ tokenizer
unicodeWordإلىasciiCJK. #100956 (George Larionov). - أُضيف تبسيط نحوي على مستوى الـ parser لصياغة دالة
OVERLAYالقياسية في SQL. الدالةoverlayموجودة بالفعل؛ ويضيف ذلك دعمًا للصيغة المعتمدة على الكلمات المفتاحية باستخدامPLACINGوFROMوFORكفواصل. #101681 (Desel72). - أصبحت الدالة
ngramsترفض الآن أطوال ngram غير الصالحة. على سبيل المثال، تُرجِعSELECT ngrams('abc', 0)الآن خطأ. #101922 (Robert Schulze). - أُضيف دعم للـ tokenizer
arrayفي تحسينLIKE. #102880 (Elmi Ahmadov).
محركات الجداول والتخزين
- تمت إضافة خيط تنظيف مخصص لـ MergeTree لمنع تأخر التنظيف عند وجود حمل كثيف من عمليات الدمج. #91574 (Amos Bird).
- يمكن للجداول التي تتضمن قواعد
DELETE TTLالآن استخدام خوارزمية الدمج العمودي. #97332 (murphy-4o). - أصبحت علامات الفهارس الثانوية تُحمَّل مسبقًا إلى cache عند تمكين الإعداد
prewarm_mark_cache(إذ تُحمَّل إلى index mark cache أثناء جلب أجزاء البيانات وعند بدء تشغيل الجدول). #97772 (Anton Popov). - يمكن الآن إنشاء الفهارس النصية على أعمدة
Nullable([Fixed]String)وArray(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena). - إلغاء عمليات الدمج في الخلفية مبكرًا في
DROP DATABASEلـ ordinary shared merge tree. #98161 (Shaohua Wang). - تمت إضافة الإعداد
finalize_projection_parts_synchronouslyللسماح بإنهاء أجزاء الإسقاط بشكل متزامن أثناء INSERT، ما يقلل ذروة استخدام الذاكرة في الجداول التي تحتوي على عدد كبير من projections مع الإبقاء على السلوك غير المتزامن الحالي كخيار افتراضي. #98228 (Amos Bird). - تمت إضافة إعداد MergeTree
share_nested_offsets(القيمة الافتراضيةtrue). عند ضبطه علىfalse، تُعامَل أعمدة Array ذات الأسماء المنقوطة (مثلn.aوn.b) كأعمدة مستقلة بدلًا من مشاركة ملفات الإزاحة والتحقق من تساوي أحجام المصفوفات ضمن دلالات Nested القديمة. #98416 (Amos Bird). - تم تحسين
TRUNCATE DATABASE TABLES LIKEعبر الإلغاء المسبق لعمليات الدمج بالتوازي. #98597 (Shaohua Wang). - تم تقليل التنافس على القفل في
MergeTreeBackgroundExecutorمن خلال تحرير موارد المهمة من دون الاستحواذ على القفل. #98604 (Dmitry Novik). - أصبح
TRUNCATE DATABASEالآن يستجيب لإلغاء query. #98828 (Shaohua Wang). - أُعيد تشغيل cache الإحصاءات بعد تغيير أحد إعدادات merge tree. #98520 (Han Fei).
- تمت إضافة إعداد MergeTree
compress_per_column_in_compact_partsللتحكم في كيفية تنظيم الكتل المضغوطة داخل أجزاء Compact. عندما تكون قيمتهtrue(وهي القيمة الافتراضية، مع الحفاظ على السلوك الحالي)، يبدأ كل عمود كتلة مضغوطة جديدة، ما يتيح فك الضغط بشكل انتقائي. وعندما تكون قيمتهfalse، تُحزم جميع الأعمدة داخل granule واحدة في الكتلة المضغوطة نفسها، ما يحسن نسبة الضغط وأداء القراءة لأحمال العمل التي تقرأ جميع الأعمدة دائمًا. #101114 (Amos Bird). - أصبح الفهرس النصي الآن في مرحلة GA ويظل مُمكّنًا بغض النظر عن إعداد
compatibility، ما يمنع تعطيله بشكل غير متوقع أثناء استعادة النسخ الاحتياطية أو عند التشغيل في وضع التوافق. #101518 (Nikita Fomichev). - تمت إضافة دعم للفهرس النصي المُنشأ على
mapValues(map)مع العاملIN. #99286 (Anton Popov). - تم تحسين تحليل الفهارس النصية المتعددة المستخدمة بالتزامن ضمن query واحدة. ولم يعد الإعداد
use_skip_indexes_on_data_readمطلوبًا لتحسين القراءة المباشرة الخاص بالفهارس النصية. #102255 (Anton Popov). - تمت إضافة دعم تحليل الفهرس النصي للدالة
hasPhraseعبر وضعHINT. #102438 (Elmi Ahmadov). - أصبحت إحصاءات أعمدة MinMax تخزّن القيم الصغرى والكبرى الآن على هيئة
Field(مُحدَّد النوع) بدلًا منFloat64. ويتضمن التنسيق التسلسلي اسم نوع العمود إلى جانب القيم. كما رُفع إصدار ملف الإحصاءات إلى V2؛ وتستلزم الملفات المكتوبة بالإصدارات الأقدم إعادة التجسيد (ALTER TABLE ... MATERIALIZE STATISTICS ALL). #100605 (Han Fei).
بحيرات البيانات
- أُضيف query جديد للتحقق من سلامة
DataLakeCatalog. #94690 (Smita Kulkarni). - جرى تحسين عمليات الكتابة إلى Iceberg في Unity Catalog. #98162 (Konstantin Vedernikov).
- أُعيد بناء الكيانات في
IcebergManifestFileلتقليل احتمالات وقوع أخطاء أثناء صيانة الشيفرة (ويعالج أيضًا بعض مشكلات التخزين المؤقت لملف manifest). #98231 (Daniil Ivanik). - جرى تحسين Iceberg
ALTER TABLE ... EXECUTE expire_snapshots(...)عبر دعم أوسع للوسائط. #99130 (murphy-4o). - تغيّرت الواجهة الخاصة بعمليات الإدراج في Iceberg مع catalog. وأُعلن إهمال الإعدادات
storage_catalog_typeوstorage_aws_access_key_idوما شابهها. #100334 (Konstantin Vedernikov). - أُصلحت المعالجة غير المتسقة للمسارات في Iceberg الناتجة عن الاستخدام المختلط لمسارات التخزين ومسارات البيانات الوصفية؛ وفُرض أن تكتب جداول Iceberg موقع الجدول إما كعنوان URL أو كمسار مطلق؛ وأُضيف fallback لاحتساب أحجام الملفات في Azure؛ وعولج
version-hint.txtبطريقة متوافقة مع Spark؛ وأُضيفت تجريدات على مستوى النوع لتقليل الالتباس بين أنواع المسارات؛ وأُصلح استخدام عمليات الحذف الموضعية. #100420 (Daniil Ivanik). - تجنّب فحص catalog بحيرة البيانات البعيد بالكامل بحثًا عن تلميحات الجداول من نوع “Maybe you meant …” عندما يكون
show_data_lake_catalogs_in_system_tablesمعطّلًا. #100452 (Alsu Giliazova). - أصبحت معلومات object المستخدمة في تحليل ملفات بيانات Iceberg تتضمن الآن عدد صفوف الملف وحجم الملف بالبايت كما جرى استخلاصهما من ملف manifest. #100645 (Daniil Ivanik).
- أُضيفت آلية تقليم لـ Delta Lake مع الأعمدة الافتراضية. #101634 (Konstantin Vedernikov).
S3 وتخزين الكائنات
- أُضيف عنصر نائب
{_schema_hash}إلى محرك جدول S3، بحيث يُدرج قيمة تجزئة لتعريفات أعمدة الجدول في مسار S3. #98265 (Miсhael Stetsyuk). - أُضيف خيار جديد لفرض نمط الاستضافة الافتراضية/نمط المسار لنقاط نهاية S3. #102378 (Konstantin Vedernikov).
الإعدادات والتكوين
- يمكن للمستخدمين الآن تحديد عدة authentication methods في إعداد
users_xml. #91998 (Flip-Liquid). - يمكنك الآن تعيين إعدادات
internal_replicationلعنقود أُنشئ بواسطة قاعدة بيانات Replicated. #97228 (Pervakov Grigorii). - أُضيف الإعداد
allow_nullable_tuple_in_extracted_subcolumns، الذي يتحكم في ما إذا كانت subcolumns المستخرجة منTuple(...)منTupleوVariantوDynamicوJSONتُعاد بصيغةNullable(Tuple(...))(مع القيمةNULLللصفوف المفقودة) أو بصيغةTuple(...)(مع قيم tuple الافتراضية للصفوف المفقودة). وهو معطّل افتراضيًا، ولا يمكن تغييره إلا بإعادة تشغيل الخادم. #97299 (Nihal Z. Miaji). - أصبح
type_json_allow_duplicated_key_with_literal_and_nested_objectمفعّلًا افتراضيًا، ما يتجنب أخطاء المفاتيح المكررة عند parsing JSON مثل{"a" : 42, "a" : {"b" : 42}}، والذي قد ينتجه ClickHouse من البيانات الأصلية{"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov). - أصبحت column statistics الآن في مرحلة GA. وأصبح الإعداد
allow_experimental_statistics(القيمة الافتراضيةfalse) متقادمًا لصالحallow_statistics(القيمة الافتراضيةtrue)؛ كما تمت ترقيةallow_statistics_optimizeمن beta إلى GA؛ وينشئ ClickHouse إحصاءاتminmaxوuniqللأعمدة الجديدة (إعداد MergeTree auto_statistics_types)؛ ولتجنّب إبطاء عمليات INSERT، أصبحmaterialize_statistics_on_insertمعطّلًا افتراضيًا. #97487 (Han Fei). - وُضّحت العلاقة بين
enable_parallel_replicasوautomatic_parallel_replicas_mode: لا يمكن للاستعلام استخدام parallel replicas إلا إذا كانت قيمةenable_parallel_replicas > 0. عندautomatic_parallel_replicas_mode=1، يُتخذ القرار أثناء التخطيط استنادًا إلى الإحصاءات المجمّعة؛ وعندautomatic_parallel_replicas_mode=0، تُستخدم parallel replicas لجميع الاستعلامات المدعومة بغض النظر عن الإحصاءات. أما Distributed insert-select مع parallel replicas فيتصرف دائمًا كما لو أنautomatic_parallel_replicas_mode=0. #97517 (Nikita Taranov). - فُعّلت ميزة impersonate (EXECUTE AS target_user) افتراضيًا. #97870 (Vitaly Baranov).
- أُضيف الإعداد
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users(مسموح به افتراضيًا)، والذي يمنع استخدام settings profiles المعرّفة في config (باستثناء profile default) للمستخدمين المعرّفين عبر SQL. #98662 (Alexander Tokmakov). - أُضيف إعداد للتحكم في سلوك عدم تطابق النوع لـ
VariantوDynamic(throwأو إرجاعNULL). #99085 (Bharat Nallan). - تغيّرت القيمة الافتراضية لـ
stderr_reactionمنthrowإلىlog_lastبالنسبة إلى Executable UDFs. ولم تعد UDFs التي تكتب تحذيرات إلى stderr تفشل عندما يكون رمز الخروج 0، كما أصبحت استثناءات رمز الخروج تتضمن الآن محتوى stderr. #99232 (Xu Jia). - أُضيف الإعداد
input_format_column_name_matching_mode، الذي يتيح درجات مختلفة من حساسية حالة الأحرف في input formats. #99346 (manerone). - لم تعد الإحصاءات التلقائية مفعّلة في system tables، لأنها نادرًا ما تستفيد منها. #102862 (Han Fei).
جداول النظام والمراقبة
- باتت فهارس تخطي البيانات المستخدمة أثناء تنفيذ الاستعلامات تُسجَّل الآن في
system.query_logضمن عمود جديد باسمskip_indices. #99793 (Grant Holly). - أُضيف العمود
projections_duration_msإلىsystem.part_log، وهو يسجّل مدة دمج/إعادة بناء كل إسقاط على حدة بالمللي ثانية. #98292 (Amos Bird). - أُضيف الاسم المستعار للعمود
INDEX_LENGTHإلىinformation_schema.tables. #101705 (Robert Schulze). - يتجاهل
information_schema.tablesالآن أجزاء الجدول غير النشطة، مما يجعل قيم أحجام الجداول المعروضة أكثر واقعية. #101706 (Robert Schulze).
ClickHouse Keeper
- لم تعد
find_super_nodesتعلق أثناء اجتياز العقد الفرعية لأول عقدة فائقة، مما يتيح العثور على أكثر من عقدة واحدة. #97819 (pufit). - تُعلَّم جلسة ZooKeeper فورًا على أنها منتهية الصلاحية عند بدء الإنهاء، بدلًا من انتظار انتهاء خيط الإرسال. ويتيح ذلك للخيوط الأخرى إنشاء جلسة جديدة دون تأخير. #99102 (Raúl Marín).
- تُتخطى طلبات Keeper المتقادمة للجلسات التي انقطعت بالفعل، لتجنب جولات Raft غير الضرورية ذهابًا وإيابًا. ويُقيَّد عدد الجلسات المكتملة المتتبَّعة بإعداد coordination
max_finished_sessions_cache_size. #99246 (Antonio Andelic). - مُنع أمر Keeper
mntrمن التعليق بسبب التنافس على الأقفال. #99472 (Antonio Andelic). - خُفِّض التنافس على الأقفال في dispatcher الخاص بـ Keeper عبر استدعاء callbacks وتمرير read requests خارج نطاق mutex، كما أُضيفت حواجز أقفال مُقاسة لأغراض observability. #99751 (Antonio Andelic).
إدارة الذاكرة
- أُضيفت معلَمة الضبط
use_separate_cache_arenaللتحكم في فصل منطقة ذاكرة التخزين المؤقت. #100664 (Seva Potapov).
تنسيقات البيانات
- أُضيف الإعداد
output_format_trim_fixed_stringلإزالة وحدات البايت الصفرية اللاحقة من قيمFixedStringفي تنسيقات الإخراج النصية. #97558 (NeedmeFordev). - أصبح من الممكن الآن تحليل ملفات GeoParquet التي تحتوي على أنواع Geo مختلفة ضمن العمود نفسه. #97851 (Mark Needham).
- تتطلب عملية إلغاء التسلسل لحالات
AggregateFunctionالثنائية الآن استهلاك الإدخال بالكامل. وإذا وُجدت وحدات بايت زائدة وغير لازمة في النهاية، فإن ClickHouse يطرح استثناءً بدلًا من قبول بيانات حالة غير سليمة. #98786 (Nihal Z. Miaji). - يمكن للمستخدمين الآن كتابة أنواع بيانات interval في ClickHouse إلى تنسيق Arrow. #99519 (Peter Nguyen).
- أُضيف دعم أصلي لاستيراد أنواع بيانات UUID وتصديرها في تنسيقات Arrow وParquet، مع استدلال منطقي تلقائي لـ UUIDs ذات المستوى الأعلى ودعم تلميحات مخطط صريحة لـ UUIDs المتداخلة. #99521 (Ivan).
- أصبح النظام يتسامح مع غياب الحشو في نهاية آخر كتلة من ملفات Parquet. #99857 (Seva Potapov).
- يتضمن الآن تصدير UUIDs إلى Parquet عبر مُرمّز Arrow توصيف نوع UUID الصحيح، مما يلغي الحاجة إلى تحويل بيانات
FixedString(16)يدويًا عند قراءة الملفات مرة أخرى. #100150 (Ivan). - أُضيف دعم أصلي لاستيراد نوعي البيانات
StringViewوBinaryViewمن Apache Arrow إلى أعمدةStringفي ClickHouse، مما يحسّن التوافق مع إدخال البيانات المعتمد على Arrow. #100762 (Ivan). - أُضيف دعم
Nullable(Tuple)في تنسيقاتArrowوArrowStreamوORCوParquetالقديمة. #101272 (Nihal Z. Miaji).
المجموعات المُسمّاة والقواميس
- أُضيف
sslmodeإلى المفاتيح المسموح بها لمصادر قواميس PostgreSQL، مما يتيح تهيئة وضع SSL لاتصالات قواميس PostgreSQL (على سبيل المثال في AWS RDS، الذي يفرض SSL افتراضيًا). #98014 (mcalfin). - تجنُّب حذف المجموعات المُسمّاة التي تُعدّ تبعيات لمصادر القواميس. #98127 (Pablo Marcos).
- أُضيف دعم لأنواع
MapوJSON/Objectبوصفها سمات للقواميس. ويمكن للقواميس الآن تخزين الأنواع المعقّدة واسترجاعها، بما في ذلكMap(String, String)وMap(String, Array(String))وJSONوNullable(JSON)، في كلٍّ من تخطيطي FLAT وHASHED. #98627 (yanglongwei). - أصبح
SYSTEM RELOAD DICTIONARIESالآن يعيد تحميل القواميس وفق ترتيب طوبولوجي، بحيث ترى القواميس التي تستمد بياناتها من قواميس أخرى بيانات جديدة بعد إعادة التحميل. #98356 (Alexey Milovidov). - لم تعد قواميس
cacheتأخذ قفلًا حصريًا فيhasKeys، مما يقلّل التنافس على الأقفال باستخدام قفل مشترك لقراءاتcache. #100796 (liuguangliang).
تحسينات أخرى
- لم تعد تلميحات
ACCESS_DENIEDتكشف أسماء الأعمدة ما لم يكن المستخدم مخولًا بعرض جميع الأعمدة المطلوبة؛ بينما تبقى أسماء قاعدة البيانات/الجدول ظاهرة في التلميح. #91067 (filimonov). - أعد تحميل config الخاصة بالـ عنقود إذا تغيّرت عناوين IP المرتبطة باسم مضيف الخادم المحلي، بدلًا من تغيّر عناوين IP لأي مضيف. #93726 (Zhigao Hong).
- تفريغ المخازن المؤقتة لـ logging غير المتزامن في حال حدوث تعطل. #97836 (Azat Khuzhin).
- تقليل عمليات القفل أثناء التحكم في الوصول. #97894 (Nikita Taranov).
- تحديث ClickStack إلى الإصدار 2.20.0. #98252 (Aaron Knudtson).
- تعطيل AI SQL generation (الأمر
??) في client المضمّن (بروتوكولا SSH وWebSocket) لمنع الوصول إلى متغيرات البيئة الخاصة بالخادم. #100290 (Alexey Milovidov). - إرسال NACK للرسائل المعطوبة عند استخدام تخزين RabbitMQ. #102157 (Seva Potapov).
إصلاحات الأخطاء
كل إصلاحات الأخطاء (انقر للتوسيع)
كل إصلاحات الأخطاء (انقر للتوسيع)
إصلاحات JOIN
- تم إصلاح مشكلة عمود مفقود عند استخدام اسم مستعار لمعرّف غير قياسي في
JOINمع المحلل القديم. #95679 (Zhigao Hong). - تم إصلاح نتيجة غير صحيحة عند استخدام خوارزمية
grace_hashمع عمليات join غير المتساوية، عندما تعذّرت معالجة الـ block الأيسر بالكامل بسبب قيود الحجم على نتيجة الـ join. #97866 (János Benjamin Antal). - تم إصلاح استثناء خطأ منطقي مرتبط بـ
analyzer_compatibility_join_using_top_level_identifierوARRAY JOIN. #98179 (Vladimir Cherkasov). - تم إصلاح استثناء
LOGICAL_ERRORعندما جرى تبديلRIGHT JOINالمغلّف داخلCROSS JOINبواسطة تحسينquery_plan_join_swap_tableفي مسار شيفرة خطوة join القديمة. #98279 (Alexey Milovidov). - تم إصلاح استثناء “Pipeline stuck” في عمليات join من نوع
full_sorting_merge، وكان سببه توقف متبادل فيPingPongProcessorعندما أنشأ تحسينFilterBySetOnTheFlyتبعية دائرية معMergeJoinTransform. #98454 (Alexey Milovidov). - تم إصلاح استثناء خطأ منطقي عند استخدام
CROSS JOINمعINNER JOIN USINGمعًا. #98459 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERRORعند استخدامarrayJoinفي تعبير تصفية معOUTER JOINمع تفعيلjoin_use_nulls. #98464 (Alexey Milovidov). - تم إصلاح استثناء
BAD_GETونتائج query غير صحيحة عند استخدام expression غير Boolean (مثلsin(col)) في كلٍّ منWHEREوSELECTمعJOIN، بسبب إفساد تحسين دفع التصفية إلى الأسفل لعُقد DAG المشتركة. #98681 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERRORبعنوان “Replica decided to read in Default mode, not in WithOrder” عند استخدامread_in_order_through_joinمع parallel replicas. #98685 (Alexey Milovidov). - كان
LEFT ANTI JOINمع عدة أعمدة مفاتيح join يُرجع نتائج خاطئة عندما تكونenable_join_runtime_filters=1(وهو الإعداد الافتراضي). #98871 (Alexander Gololobov). - تم إصلاح خطأ في تحسين
query_plan_convert_any_join_to_semi_or_anti_joinكان يُرجع نتيجة غير صحيحة للصفوف غير المطابقة. #99112 (Yarik Briukhovetskyi). - تم إصلاح استثناء في الدوال التي تعمل على
ColumnReplicatedمع الصفوف غير المُشار إليها الناتجة عنJOIN. #99564 (Hechem Selmi). - تم إصلاح حالة نادرة كان يمكن أن تنتج فيها عملية join مع إعادة الترتيب نتيجة خاطئة. #100790 (Yarik Briukhovetskyi).
- تم إصلاح نتائج خاطئة عندما كانت عملية
JOINمع تحسين shard-by-PK تستخدم query condition cache، وكانت بعض الأجزاء تُستبعد بواسطة conditions مخزنة مؤقتًا. #100926 (Groene AI). - تم إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند استخدامARRAY JOINمعJOIN USINGعندما يكونanalyzer_compatibility_join_using_top_level_identifierمُمكّنًا. #101507 (Vladimir Cherkasov). - تم إصلاح الترتيب غير الصحيح للصفوف في الاستعلامات التي تستخدم
ORDER BYمع خوارزمية join grace_hash، والذي كان قد ينتج عنه مخرجات غير صحيحة بصمت. #102036 (János Benjamin Antal). - تم إصلاح الخطأ
LOGICAL_ERROR(Unexpected size of index type) الذي كان يمكن أن يحدث في استعلاماتRIGHT JOINوFULL JOINعند تهيئةmax_bytes_in_join. #102042 (Jimmy Aguilar Mena).
إصلاحات الاستعلام والمحلِّل
- تم إصلاح طريقة حفظ هدف جدول Alias كتبعية DDL عندما لا يكون مؤهّلًا بالكامل: إذ يُحفَظ الآن مع قاعدة بيانات جدول Alias بدلًا من قاعدة بيانات الجلسة. #95175 (Enric Calabuig).
- تم إصلاح الخطأ
Block structure mismatch in streamالناتج عن إرجاع أعمدة غير ضرورية من Lazy materialization. #96682 (Nikolai Kochetov). - تم إصلاح استثناء في مقارنة
Tupleيتضمن عناصر من النوعNothing(مثل المقارنة مع عناصرTupleمنNULL) عند استخدامه معGROUPING SETSوORDER BY. #97509 (Alexey Milovidov). - تم إصلاح الاستثناء “Context has expired” في الاستعلامات الفرعية المترابطة التي تحتوي على دوال الجداول مثل
url(). #97544 (Alexey Milovidov). - تم إصلاح الاستثناءات والسلوك غير الصحيح في
optimize_syntax_fuse_functionsمع الإسقاطات المجمّعة، وأنواعDate، والحفاظ على أسماء الأعمدة. #97545 (Alexey Milovidov). - أُزيلت عملية إعادة كتابة استعلام غير صحيحة من
replaceRegexpOneإلىextractكانت تؤدي إلى نتائج خاطئة عندما لا يحدث تطابق مع regexp؛ كما تم إصلاح استثناء عند استخدامreplaceRegexpOneمعGROUP BY ... WITH CUBEوgroup_by_use_nulls=1. #97546 (Alexey Milovidov). - تم إصلاح استثناءات
LOGICAL_ERRORالناتجة عنLowCardinalityداخل الأنواع المركبة (VariantوDynamicوTuple) فيconcatWithSeparatorوformatوالاستعلامات الفرعيةINوGLOBAL INوعمليات الربط مع مرشحات وقت التشغيل. #97831 (Raúl Marín). - تم إصلاح استثناء
LOGICAL_ERROR“لم يتم تعيين معلومات chunk للـ chunk في MergingAggregatedTransform” عند استخدامARRAY JOINمع دالة الجدولmerge()على عدة جداول Distributed مدمجة معGROUP BY. #97838 (Raúl Marín). - تم إصلاح خلل كان يمنع استخدام CTEs مع عمليات insert-select الموزعة. #97889 (Yarik Briukhovetskyi).
- تم إصلاح عدم تطابق في الأعمدة. #97921 (Kai Zhu).
- تم إصلاح segfault في تحسين خطة الاستعلام عند تحويل
OUTER JOINإلىINNER JOINباستخدامarrayJoinفي تعبير تصفية. #98147 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERROR“Trying to execute PLACEHOLDER action” عند الإشارة إلى الأعمدة المترابطة من الاستعلامات الخارجية داخل دوال لامبدا مثلarrayMap. #98285 (Alexey Milovidov). - تم إصلاح استثناء logical error في
caseWithExpressionعندما كان تعبيرCASEيتضمنmaterialize(NULL)أو وسيطات أخرى منNullable(Nothing). #98290 (Alexey Milovidov). - تم إصلاح استثناء cast غير صالح عند تصفية العمود الافتراضي
_tableفي دالة الجدولmerge. #98291 (Alexey Milovidov). - تم إصلاح استثناء كان يحدث عند استخدام
ORDER BY ... WITH FILLمعLIMIT BYمعًا. #98361 (Alexey Milovidov). - تم إصلاح الاستثناء “Column … query tree node does not have valid source node” عند ربط جدول
Merge(الذي يغلّف جدولDistributed) بجدول آخر. #98376 (Alexey Milovidov). - تم إصلاح الاستثناء “Column identifier is already registered” عند استخدام
count_distinct_optimizationمع عبارةQUALIFY. #98433 (Alexey Milovidov). - تم إصلاح الاستثناء “cannot be inside Nullable type” عند استخدام
IN/NOT INمع معاملات أعمدةLowCardinality(مثلa NOT IN (b)عندما تكونaمن النوعLowCardinality(String)). #98443 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERROR“Projection cannot increase the number of rows in a block” عند دمج الأجزاء مع TTL يحذف جميع الصفوف، ومع projection تجميعي ذي مفتاحGROUP BYثابت. #98458 (Alexey Milovidov). - تم إصلاح استثناء في استعلامات
DISTINCTعند استخدام projections تجميعية، وكانmaterializeيتسبب في اختلافات في نوعLowCardinalityبين الاستعلام والـ projection. #98462 (Alexey Milovidov). - تم إصلاح استثناء خطأ منطقي “Replica decided to read in WithOrder mode, not in ReverseOrder” عند استخدام parallel replicas مع
optimize_aggregation_in_order. #98467 (Alexey Milovidov). - تم إصلاح نتيجة غير متوقعة عند استخدام
read_in_order_use_virtual_rowمع الدوال الرتيبة. #98514 (Vladimir Cherkasov). - تم إصلاح
LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'عند استخدامPREWHEREمع استعلام فرعيINعلى جداول MergeTree. #98522 (Alexey Milovidov). - تم إصلاح الاستثناء “Sorting column wasn’t found in the ActionsDAG’s outputs” عندما يكون
query_plan_convert_join_to_inمفعّلًا معquery_plan_merge_expressions = 0. #98526 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERRORعندما يكونIdentifierفارغًا بعد substitution للمعاملات. #98530 (Pervakov Grigorii). - تم إصلاح distributed index analysis مع expressions (وليس الأعمدة فقط) في المفتاح الأساسي، وهو ما أدى إلى عدم تصفية granules الزائدة على replicas البعيدة. #98561 (Azat Khuzhin).
- تم إصلاح خطأ منطقي “TABLE_FUNCTION is not allowed in expression context” عندما ظهرت table function مع alias عدة مرات ضمن نطاق الاستعلام نفسه (مثلًا في عبارتي
PREWHEREوQUALIFY). #98557 (Alexey Milovidov). - تم إصلاح الاستثناء “Bad cast from type
DB::TableFunctionNodetoDB::QueryNode” عند استخدام table function inputكـ argument للدالةremote. #98694 (Alexey Milovidov). - تم إصلاح استثناء في
LogicalExpressionOptimizerPassعندما كانت دالةBooleanفي مقارنةequalsتُرجع نوعVariant. #98712 (Alexey Milovidov). - تم إصلاح استثناء
UNKNOWN_IDENTIFIERعند الاستعلام عن table function merge()أو محركMergeعلى جداول تحتوي على JSON columns ذات parameters مختلفة، وأعمدة ALIAS تشير إلى مسارات فرعية في JSON، مع تمكين analyzer الجديد. #98753 (Pavel Kruglov). - تم إصلاح تحسين
optimize_skip_unused_shardsمع analyzer عندما كانت وحدة التخزينDistributedمستخدمة فيView. #98754 (Nikolai Kochetov). - تم إصلاح استثناء
LOGICAL_ERROR(عدم تطابق بنية block فيremoveUnusedColumns) الذي قد يحدث معFINAL+PREWHERE+ expression ثابت فيWHERE+ دوال aggregate لا تعتمد على الأعمدة مثلcount(). #98778 (Alexey Milovidov). - تم إصلاح الاستثناء “Inconsistent table names” عند استخدام table function
view()التي تحتوي على JOINs داخل JOIN آخر (فقط مع analyzer القديم). #98809 (Alexey Milovidov). - تم إصلاح استثناء عند تركيب
loopمع cluster table functions. #98860 (Konstantin Bogdanov). - تم إصلاح
LOGICAL_ERRORبالنص “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin). - تم إصلاح الاستثناء “Scalar doesn’t exist” عند الاستعلام عن shard بعيد مع ضبط
optimize_const_name_sizeوتعيينenable_scalar_subquery_optimization = 0. #98979 (andriibeee). - تم إصلاح
NOT_FOUND_COLUMN_IN_BLOCKفي بعض queries التي تتضمنGROUP BYوexpressions تشمل lookup عكسيًا في dictionary، ومقارنات تحويلDate/DateTime، ومقارنات tuple. #98980 (Nihal Z. Miaji). - تم إصلاح خطأ كانت فيه
EXISTSتتجاهل clauses LIMITوOFFSETفي subqueries، مما يؤدي إلى نتائج غير صحيحة عندما لا يُرجع subquery أي rows بسبب offset أو limit يساوي صفرًا. #99005 (andriibeee). - تم إصلاح استثناء “Block structure mismatch” عندما واجه تحسين filter push-down expression من نوع
ANDاختُزلت إلى ثابت معGROUPING SETS. #99010 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERRORعند الاستعلام عن جدول يحتوي على كل من ROW POLICY وعمود ALIAS يستخدمdictGet، وكان السبب الوصول المبكر إلى expression الجدول أثناء حل عمود ALIAS في analyzer الجديد. #99065 (Peng). - أُصلح عطل segfault في
CTEتكراري معremote()+view(). #99081 (Konstantin Bogdanov). - تخطّي تحليل الفهرس الإضافي غير الضروري عند تطبيق تحسين القراءة بالترتيب. #99084 (Vladimir Cherkasov).
- أُصلحت عمليات التحقق من الوصول أثناء
InverseDictionaryLookupPassمن خلال التحقق من الوصول مرة واحدة فقط قبل تشغيل مرحلة التحسين. #99210 (Mikhail Artemenko). - أُصلح
optimize_skip_unused_shardsمع المحلّل الجديد عند استخدام جدولDistributedداخل استعلام فرعيIN. #99436 (Nikolai Kochetov). - أُصلح خطأ heap-use-after-free في
INTERSECT/EXCEPTعندما كان الاستعلام ينتج أسماء أعمدة مكررة. #99471 (Alexey Milovidov). - أُصلح خطأ منطقي في
ALTER TABLE ... DROP PARTعند استخدام query parameter مقيّد النوع لاسم الجزء. #99489 (Alexey Milovidov). - أُصلح استثناء
std::length_errorعند الاستعلام عن جداول النظام الفارغة باستخدام Pretty format عبر واجهة HTTP. #99541 (Alexey Milovidov). - أُصلح تراجع الأداء في المحلّل من خلال استبعاد الأعمدة غير المستخدمة من
ARRAY JOIN. #99587 (Dmitry Novik). - أُصلح استثناء (
Bad get: has Tuple, actual type String) فيConditionSelectivityEstimatorعندما كان الاستعلام يستخدمINمع query parameter قياسي واحد (مثلWHERE col IN ({p:String})) على جدول يحتوي على إحصاءات الأعمدة وكانuse_statisticsمفعّلًا. #99614 (Ilya Yatsishin). - أُصلح استثناء “Block structure mismatch” في الاستعلامات التي تتضمن clause
HAVINGحيث كان تعبير التصفية يحتوي على كلٍّ من دالة تجميعية مغلّفة داخل دالة تُنتج NULL وmaterialize(0). #99915 (Alexey Milovidov). - أُصلح خطأ منطقي يتعلق باستعلام فرعي مترابط داخل argument لـ
untuple. #99917 (Vladimir Cherkasov). - أُصلح استثناء “Inconsistent AST formatting” في
ALTER TABLE ... MODIFY QUERYمع استعلامات فرعية متداخلة تحتوي علىSETTINGSعندما كانALTERنفسه يحتوي أيضًا علىSETTINGS. #99938 (Nikita Mikhaylov). - أُصلح استثناء
LOGICAL_ERRORوهو “Not-ready Set” في الدالةINأثناء تحسين خطة الاستعلام باستخدامconvertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov). - أُصلح استثناء
LOGICAL_ERRORوهو “Unexpected node type for table expression … Actual IDENTIFIER” عند استخدام استعلام فرعي scalar داخل argument غير محلول لـ table function. #100014 (Alexey Milovidov). - أُصلح العدد التربيعي للاستعلامات المنفّذة عند استخدام
distributed_index_analysisمع predicates تحتوي على استعلامات فرعيةIN. #100287 (Anton Popov). - تم إصلاح استثناء “عدم تطابق بنية الكتلة” عند استخدام
GROUP BY ... WITH TOTALS HAVINGمعUNION DISTINCTوتعبيرات Nullable. #100293 (Alexey Milovidov). - تم إصلاح استثناء “عدم اتساق تنسيق AST” في بنيات التصحيح عند استخدام
GROUP BY CUBE(...) WITH ROLLUPأو تراكيب مشابهة. #100376 (Alexey Milovidov). - تم إصلاح استثناء عند إنشاء view باستخدام الأسماء المستعارة للأعمدة واستعلامات
SELECT *أوEXCEPT/INTERSECT. #100386 (Alexey Milovidov). - تم إصلاح استثناء
TOO_MANY_ROWSفي استعلاماتSELECT count()معmax_rows_to_read/force_primary_keyعندما كانت البيانات موزعة على عدة parts بحدود granule غير متطابقة. #100408 (Alexey Milovidov). - تم إصلاح حالات
NOT_FOUND_COLUMN_IN_BLOCKحيث كان جزءSELECTفي projection يحتوي على أعمدة غير موجودة في جزءSELECTالأصلي من الاستعلام. #100623 (Yarik Briukhovetskyi). - أصبح من الممكن تمرير sharding key إلى table functions
cluster()وclusterAllReplicas()عند استخدام table function كمصدر (مثلcluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy). - تم إصلاح أنواع argument غير الصحيحة في
AggregateFunctionضمن العدّ البسيط المُحسَّن، والتي كانت تتسبب في استثناءNUMBER_OF_ARGUMENTS_DOESNT_MATCHعند الاستعلام عن تعبيرات مثلcount(v0 + v1)على Distributed tables. #100794 (YjyJeff). - تم إصلاح logical error بعنوان “عقدة query tree غير صالحة للإجراء” عند استخدام
INTERSECT ALL/UNION ALLمع التعبيرات المطوية إلى ثوابت. #100977 (Alexey Milovidov). - تم إصلاح الإبلاغ غير الصحيح عن الخطأ
UNKNOWN_IDENTIFIERعندما كان نفس alias مستخدمًا لعدة تعبيرات فيSELECT؛ ويُبلَّغ الآن عن الخطأ الصحيحMULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov). - تم إصلاح استثناء في
DirectJoinMergeTreeEntityعندما كانت blocks في pipeline تحتوي على أعمدةColumnConstمدمجة مع أعمدة عادية. #101046 (Alexey Milovidov). - تم إصلاح وجود مسافة زائدة في formatting للأسماء المستعارة لأعمدة CTE (
WITH t (a, b)→WITH t(a, b)). #101049 (Alexey Milovidov). - تم إصلاح فشل table functions
remote/clusterمع table functions المتداخلة مثلmergeعندما يكون analyzer مفعّلًا. #101055 (Alexey Milovidov). - تم إصلاح تطبيق
OFFSETمرتين في distributed queries عندprefer_localhost_replica=1، ما كان يؤدي إلى إرجاع عدد rows أقل من المتوقع. #101071 (Nihal Z. Miaji). - تم إصلاح الخطأ “Illegal type Decimal64 of start parameter” في دوال التجميع للسلاسل الزمنية عند استخدام
serialize_query_plan=1مع parallel replicas. #101083 (Groene AI). - تم إصلاح نتائج استعلام غير صحيحة عند استخدام ثابت عددي صحيح كبير (مثل 256 و2147483648) كمسند منطقي في عبارة
WHEREمعANDعلى جداول MergeTree. #101287 (Groene AI). - تم إصلاح تعطل مصحوب بالرسالة “Logical error: Reading from materialized CTE before materialization” عندما كان استعلام فرعي scalar يشير إلى سلسلة من Materialized CTEs التابعة. #101305 (Groene AI).
- تم إصلاح استثناء عند تحويل سلسلة نصية تحتوي على بيانات زائدة في نهايتها إلى النوع الفارغ
Tuple(). #102011 (Alexey Milovidov). - تم إصلاح خطأ منطقي عند تحليل سلسلة tuple فارغة وغير صحيحة. #102289 (Nihal Z. Miaji).
- تم إصلاح نتائج تجميع غير صحيحة (صفوف مكررة) عند استخدام
optimize_aggregation_in_order=1مع أعمدةGROUP BYالمرتبة بشكل مختلف عن sorting key للجدول. #102299 (Groene AI). - تم إصلاح استثناء في
getStructureOfRemoteTableعندما أعاد الجزء المحلي أعمدة فارغة بسبب تنفيذ DDL متزامن. #102604 (Alexey Milovidov). - تم تحسين سلاسل OR في سياسة الصفوف إلى
INفي المحلل الجديد. #102915 (Azat Khuzhin). - تم إصلاح النتائج غير الصحيحة التي تُرجعها
WHERE x AND toNullable(N)على جداولMergeTreeعندما تكونNقيمة صحيحة أوسع منUInt8(مثل256أو65535أو2147483648أو أي عدد صحيح سالب). #103077 (Groene AI).
إصلاحات MergeTree والتخزين
- تم إصلاح خطأ منطقي عند Attach لجزء في MergeTree إذا وُجدت عدة عمليات إعادة تسمية متسلسلة بين الفصل والإرفاق. #96351 (Alexey Milovidov).
- تم إصلاح احتساب
uncompressed_hashغير الحتمي لأجزاء Compact في MergeTree عند استخدام عدة compression codecs، مما قد يؤدي إلى سلوك deduplication غير صحيح. #97522 (Alexey Milovidov). - تم إصلاح الإبلاغ الخاطئ عن استثناءات
MEMORY_LIMIT_EXCEEDEDعلى أنهاCORRUPTED_DATAأثناء عمليات الدمج في SummingMergeTree وCoalescingMergeTree. #97537 (János Benjamin Antal). - تُرجع
hasPartitionIdالآن القيمة false إذا كان هناك partition آخر ذو معرّف أعلى ضمن مجموعة data parts. #97748 (Mikhail Artemenko). - تم إصلاح mutation بعد lightweight update مع secondary indices. #98044 (Raúl Marín).
- تم إصلاح النتائج غير الصحيحة لاستعلامات FINAL عند الجمع بين skip indexes لمفتاح أساسي وأخرى ليست للمفتاح الأساسي. #98097 (Raúl Marín).
- إذا لم تكن أعمدة partition key مشمولة ضمن sorting key، فقد يقوم partition pruning بتخطي partitions تحتوي على صفوف كان ينبغي أن “تفوز” أثناء deduplication في FINAL بشكل غير صحيح. #98242 (Yarik Briukhovetskyi).
- تم إصلاح احتمال حدوث deadlock عندما تعمل عمليتا
MOVE PARTITIONconcurrent على الزوج نفسه من الجداول ولكن في اتجاهين متعاكسين. #98264 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERRORبعنوان “Invalid binary search result inMergeTreeSetIndex” الذي قد يُطلقه تحويلtoDateعلى key columns عندما تتجاوز البيانات الحد 65535. #98276 (Alexey Milovidov). - تم إصلاح فشل متقطع في deduplication، إذ كانت عمليات إعادة الإدراج تُعامل خطأً على أنها deduplicated بسبب عدم اتساق ترتيب التنظيف بين دليلي ZooKeeper
blocks/وdeduplication_hashes/. #98293 (Alexey Milovidov). - تم إصلاح تعلّق mutations الخاصة بـ
MATERIALIZE INDEXوMATERIALIZE PROJECTIONعندما يُحذف index أو projection قبل اكتمال mutation. #98369 (Alexey Milovidov). - تم إصلاح نتائج partition pruning غير الصحيحة بعد merging للأجزاء التي تحتوي على أعمدة partition key من النوع
Nullable، وذلك بسبب حدود min-max index غير صحيحة. #98405 (Amos Bird). - تم إصلاح استثناء
LOGICAL_ERRORفيrenameAndCommitEmptyPartsكان يمكن أن يحدث عند تشغيلTRUNCATE TABLEبشكل concurrent معOPTIMIZE TABLEباستخدام Transactions في MergeTree. #98508 (Alexey Milovidov). - تم إصلاح overflow عشري أثناء partition pruning باستخدام
DateTime64. #98628 (Yarik Briukhovetskyi). - تم إصلاح إعادة إحياء outdated data parts الناتجة عن تنظيف غير صحيح للأجزاء الفارغة المغطية. #98698 (Shaohua Wang).
- تم إصلاح اكتشاف مدى فائدة فهرس التخطي من نوع set مع مسند
ORمقترن بالقيمة false (أيor(x, 0)). #98776 (Azat Khuzhin). - تم إصلاح عدم تطبيق فهارس التخطي (وشروط المفتاح الأساسي) على أعمدة
ALIASعند تعطيل دمج التعبيرات في خطة الاستعلام (query_plan_merge_expressions = 0أوquery_plan_enable_optimizations = 0). #98960 (Peng). - تم إصلاح التقليم غير الصحيح أو غير الكافي عند استخدام
startsWithأوLIKEأوNOT LIKEمع عمودFixedString. بالإضافة إلى ذلك، يمكن الآن لدالة التحويل منFixedStringإلىStringتقليم الحبيبات عند تطبيقها على عمود مفتاح. #99001 (Nihal Z. Miaji). - تم إصلاح استثناء عند قراءة patch parts (lightweight updates) من دون العمود
_part_offsetفي خطة الاستعلام. #99023 (Alexey Milovidov). - أصبح استعلام مثل
SELECT * FROM table WHERE pk_id = ''، حيث يكونpk_idمفتاحًا أساسيًا من نوعString، يستخدم الآن فهرس المفتاح الأساسي بشكل صحيح لتصفية الحبيبات. #99027 (Shankar Iyer). - تم إصلاح استثناء عند إنشاء جدول يحتوي على عمود
EPHEMERALيحمل الاسم نفسه لعمود افتراضي (مثل_part_offset). #99031 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERRORالناتج عن عدم تطابق ترتيب الأعمدة في patch parts. #99164 (Pablo Marcos). - تم إصلاح فشل
ALTER TABLE UPDATE/DELETEمع الخطأMissing columnsعندما يحتوي الجدول على عمودMATERIALIZEDيعتمد تعبيره على عمودEPHEMERAL. #99281 (Yash). - تم إصلاح التوافق عند ترقية الجداول المكررة ذات فهارس minmax الضمنية من الإصدار 25.10 إلى الإصدارات الأحدث. #99392 (Raúl Marín).
- تم إصلاح حالة نادرة كان فيها data part يُعلَّم خطأً على أنه تالف ثم يُفصل بعد استعلام
DETACH/ATTACH TABLE. #99529 (Anton Popov). - تم إصلاح فشل assertion في
rows_sourcesأثناء vertical merge عند التبديل السريع لـSYSTEM STOP/START MERGESخلال merge لجدول يحتوي على أعمدةDynamic. #99532 (Alexey Milovidov). - تم إصلاح التقليم غير الصحيح للأقسام مع
toWeek()، والذي كان يتسبب في أن تُرجع الاستعلامات التي تحتوي علىWHERE toWeek(date, mode) = Nنتائج فارغة للأسابيع 49–52 في الجداول المُقسَّمة باستخدامtoYYYYMM(date). #99542 (Takumi Hara). - تم إصلاح
LOGICAL_ERRORعند استخدامALTER TABLE ADD COLUMNلإنشاء عمودEPHEMERALيحمل الاسم نفسه لعمود افتراضي (مثل_part_offset). #99549 (Alexey Milovidov). - تم إصلاح عدم قيام
CLEAR COLUMNبإعادة بناء projections وعدم إعادة تقييم materialized columns التي تعتمد على العمود الذي تمت إزالته، مما قد يتسبب في استثناءات أو تلف البيانات أثناء عمليات merge اللاحقة. #99565 (Desel72). - لم يعد يتم تمييز الجزء الذي يحتوي على إسقاطات غير معروفة على أنه مفقود نهائيًا. #99623 (Sema Checherinda).
- تم إصلاح مرجع معلّق في
injectRequiredColumnsكان يتسبب في تعطل أثناء الدمج. #99679 (Tuan Pham Anh). - تم إصلاح خطأ منطقي أثناء دمج أجزاء الإسقاط بعد
CLEAR COLUMNفي جدول يحتوي على إسقاطات وأجزاء مضغوطة. #100068 (Pavel Kruglov). - تم إصلاح
LOGICAL_ERROR“Stream … not found” عند الإدراج في جدول يحتوي على أعمدةArray(JSON)متداخلة داخل الأجزاء العريضة معoptimize_on_insert=0. #100475 (Pavel Kruglov). - يتم الآن تقييم وسائط المحرك لـ
StorageAliasقبل تخزين التعريف، بحيث تُحوَّل تعبيرات مثلcurrentDatabase()إلى قيم حرفية قبل حفظها في قاعدة البيانات. #100902 (Nikolay Degterinsky). - تم إصلاح
divideوintDivاللذين كانا يعيدانILLEGAL_DIVISIONعند استخدامهما في تعبيرات التصفية أثناء تحليل الفهرس في بعض الحالات. #100928 (Nihal Z. Miaji). - تم إصلاح تعطيل تحسين
minmax_count_projectionوتحسينCOUNT(*)البسيط بشكل دائم بعد lightweight delete، حتى بعد دمج جميع الأجزاء التي تحتوي على قناع lightweight delete. #101212 (Anton Popov). - تم إصلاح سباق بيانات على
storage_idفيIStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky). - تم إصلاح عدم قيام
materialize_skip_indexes_on_merge=falseبتعطيل فهارس النصوص (النص الكامل) أثناء الدمج. سابقًا، كان يتم تعطيل فهارس التخطي غير النصية فقط (minmax و set و bloom_filter). #101932 (Groene AI). - تتم الآن إزالة إدخالات ذاكرة التخزين المؤقت لفهرس تشابه المتجهات بعد إزالة الجزء (مثلًا أثناء الدمج)، ما يعالج مشكلة عدم طرد الإدخالات مطلقًا بسبب عدم تطابق مفاتيح ذاكرة التخزين المؤقت. #99575 (Seva Potapov).
- تم إصلاح استثناء
LOGICAL_ERRORخاطئ أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات بسبب حالة سباق في ترقية الطابور الفرعي SLRU. #99850 (Alexey Milovidov). - تم إصلاح خطأ منطقي محتمل أثناء قراءة الأعمدة الفرعية من
Map. #101641 (Pavel Kruglov). - تم إصلاح أولوية المطابقة التامة للعمود الفرعي على مطابقة البادئة في
getSubcolumnDataلتجنب تعطل محتمل. #101645 (Pavel Kruglov). - تم إصلاح استخدام قيم Extremes غير صحيحة في فهرس min-max تم إنشاؤه على عمود JSON، مما كان يؤدي إلى نتائج query غير صحيحة. #101918 (Pavel Kruglov).
- تم إصلاح خلل سباق في SLRU ضمن ذاكرة التخزين المؤقت لنظام الملفات (26.1+) كان يمكن أن يؤدي إلى خطأ منطقي في حجز المساحة. #101991 (Kseniia Sumarokova).
- تم إصلاح الخطأ المنطقي
Having zero bytesفي ذاكرة التخزين المؤقت، والذي كان ينشأ عند استبدال كائن بعيد بينlistوread، ما كان يؤدي سابقًا إلى بيانات وصفية متقادمة للكائن. #101219 (Kseniia Sumarokova). - تم إصلاح فشل التحقق
file_offset_of_buffer_end <= getFileSize()عند القراءة من جداولLogأوStripeLogعلى تخزين كائنات S3 مع وجود كتابات متزامنة. #100763 (Alexey Milovidov). - تم إصلاح فرض حد أقصى لحجم ذاكرة التخزين المؤقت عند إعادة تحميل الـ config. #100659 (Aleksei Filatov).
- تم إصلاح إيقاف
LOGICAL_ERRORأثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات SLRU، وكان سببه مشاركة إحصاءات الإخلاء بين الطوابير الفرعية، إلى جانب مسار recovery غير صحيح للمرشحين الفاشلين. #102396 (Antonio Andelic). - تم إصلاح تعطيل تحسين
minmax_count_projectionوتحسينCOUNT(*)البسيط بشكل دائم بعد حذف خفيف الوزن. #102900 (Anton Popov).
إصلاحات نوع البيانات والتسلسل
- تم إصلاح ظهور نتيجة خاطئة أو استثناء أثناء قراءة الأعمدة الفرعية لأعمدة
ALIAS. #95408 (Pavel Kruglov). - تم إصلاح تعذّر الدالة التجميعية
sumCountعلى قراءة الحالات المُسلسلة الأقدم بعد إدخالNullable(Tuple). #97502 (Nihal Z. Miaji). - تم إصلاح خطأ منطقي يتعلق بتدفق مفقود أثناء
INSERT SELECTمع JSON وbuckets في البيانات المشتركة. #97523 (Pavel Kruglov). - تم إصلاح أعطال محتملة أثناء قراءة granules الفارغة في البيانات المشتركة المتقدمة في JSON. #97778 (Pavel Kruglov).
- تم إصلاح توليد برمجي خاطئ في JIT للدالة
signلأنواع الأعداد الصحيحة الأعرض منInt8— إذ كان يمكن للقيم خارج النطاق -128..127 أن تنتج إشارة غير صحيحة. #98012 (Alexey Milovidov). - تم إصلاح عدم عمل التنسيق
ProtobufListمع محرك Kafka بسبب عدم إعادة تعيين حالة القراءة بين الرسائل. #98151 (Alexey Milovidov). - تم إصلاح تلف البيانات الصامت عند إدراج عمود
Dateمن Parquet/Arrow في عمودEnum— إذ أصبح الآن رفض تحويل النوع غير المتوافق بشكل صحيح بدلًا من تخزين قيم enum غير صالحة. #98364 (Alexey Milovidov). - تم إصلاح استثناء عند قراءة ملف Arrow يحتوي على عمود
Arrayإلى جدول يحتوي على عمودNested. #98365 (Alexey Milovidov). - تم إصلاح استثناء عند القراءة من
Nullable(Tuple(...))عندما يتعارض اسم عنصر في Tuple مع العمود الفرعيnullالخاص بـ Nullable. #98372 (Alexey Milovidov). - تم إصلاح التحويل غير الصحيح من Parquet
BoolإلىFixedStringفي قارئ V3 الأصلي، الذي كان يُنتج بايتات خام بدلًا من تمثيل نصي. #98378 (Alexey Milovidov). - تم إصلاح
tryGetColumnDescriptionلكي يرشّح الأعمدة الفرعية بحسب فئة العمود الأصل، بما يتوافق مع أساليب البحث الأخرى عن الأعمدة. #98391 (Alexey Milovidov). - تم إصلاح التراجع عن تغييرات العمود في محرك Buffer عند التعامل مع استثناء أثناء إلحاق كتلة جديدة. وكان المنطق السابق قد يؤدي إلى تلف حالة العمود داخل الذاكرة. #98551 (Pavel Kruglov).
- تم إصلاح الاستثناء
Bad cast from type ColumnConst to ColumnDynamicفي المقارنة الآمنة مع NULL (<=>/IS NOT DISTINCT FROM) مع أعمدةDynamicأوVariantالثابتة وNULL. كما تم إصلاحIS DISTINCT FROMمعDynamic/VariantمقابلNULL، والتي كانت تُرجع دائمًا 0 بشكل غير صحيح. #98553 (Alexey Milovidov). - تم إصلاح قيام
parseDateTimeBestEffortبتحليل الكلمات التي تبدأ ببادئات الأشهر أو أيام الأسبوع بشكل غير صحيح. #98742 (Pavel Kruglov). - تم إصلاح استثناء
reverseUTF8عند إدخال UTF-8 غير صالح (مبتور). #98770 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERRORفي الدوال المالية (financialNetPresentValue,financialInternalRateOfReturn, إلخ) عند تمرير وسيطات من النوعBFloat16. #98958 (Alexey Milovidov). - لم يعد SummingMergeTree يجمع أعمدة
Bool(وأعمدة أنواع domain الأخرى)؛ إذ تُحفَظ قيمBoolكما هي بدلًا من جمعها حسابيًا. #98976 (Yash). - تم إصلاح سلوك غير معرّف (إلغاء مرجعية مؤشر فارغ) عند تعديل عمود version/sign/is_deleted إلى
EPHEMERALأوALIASفي محركات MergeTree. وأصبحت هذه التعديلات تُرفَض الآن بشكل صحيح. #98985 (Alexey Milovidov). - تم إصلاح قيام
parseDateTimeBestEffortبتحليل كلمات تبدأ ببادئات الأشهر على نحو غير صحيح في تنسيق DD-month-YYYY. #99350 (Pavel Kruglov). - تم إصلاح
CHECK TABLEعند وجود serialization sparse داخلTupleمعDynamic. #99351 (Pavel Kruglov). - تم إصلاح خطأ منطقي
unordered_map::at: key not foundفي تنسيق إخراج Avro عند إجراء التسلسل لأعمدةEnum8/Enum16التي تحتوي على قيم غير موجودة في تعريف enum. #99332 (Desel72). - تم إصلاح خلل كان يجعل المقارنة بين النوعين
Time[64]وDateTime[64]مربكة؛ إذ تُرقّى قيمTime[64]الآن إلىDateTime[64]بإضافة1970-01-01كجزء التاريخ. #99267 (Yarik Briukhovetskyi). - تم إصلاح فك تسلسل
\N(NULL) للنوعVariantفي تنسيقات النص Escaped/Raw. #99648 (Pavel Kruglov). - تم إصلاح سلوك غير معرّف في قارئ تنسيق Avro عند قراءة قيم رقمية تتجاوز سعة نوع العمود الهدف. أصبحت الاستعلامات الآن تفشل عند حدوث overflow بدلًا من إنتاج قيم غير صحيحة بصمت. #99697 (asyablue22).
- تم إصلاح إنهاء خاطئ في
NativeReaderعند فك تسلسل stream بتنسيق Native مع عدم تطابق في عدد الصفوف: تم تغييره منLOGICAL_ERRORإلىINCORRECT_DATA. #99822 (Rahul Nair). - تم إصلاح إنهاء العملية أثناء فك تسلسل عمود
Tupleعندما يكون نوع التسلسل في الـ binary stream هوDETACHED. #99823 (Rahul Nair). - تم إصلاح الإعداد
aggregate_functions_null_for_emptyليعمل مع الدوال التجميعية التي تُرجع أنواعًا غيرNullableمثلArrayأوMap(مثلgroupArrayوsumMap). #99839 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERRORفي الدالةmidpointعند استدعائها باستخدام أنواع أعداد صحيحة موقعة وغير موقعة مختلطة. #99867 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERRORفي الاستعلامات التي تتضمن أعمدةDynamicمع عمليات cross join وفلاتر وقت التشغيل، وكان السبب أنColumnVariant::filterكان يشارك مؤشرات أعمدةVariantبدلًا من استنساخها في مسار تحسينhasOnlyNulls. #100234 (Pavel Kruglov). - تم إصلاح خطأ في مصفوفة من نوع
Variantكان يمكن أن يعيد تفسير نوع البيانات عند استدعاءarrayFirst/arrayLast. فعلى سبيل المثال، كانArray(Variant(Date, Bool))يتحول إلىBoolعندما يكون نوع الـ variant الأساسي الفعلي هوDate. #100255 (timothygk). - تم إصلاح مشكلة عدم قدرة التنسيقين
CSVوMsgPackعلى تحليلNullable(Tuple)بشكل صحيح. #100038 (Nihal Z. Miaji). - تم إصلاح دالتي
accurateCastOrDefaultوto*OrDefaultاللتين لم تكونا تحافظان على نوع العمود Const للمدخلات الثابتة. #100132 (Alexey Milovidov). - أصبحت معاملات الاستعلام المحذوفة من النوع
LowCardinality(Nullable(T))تأخذ القيمة الافتراضيةNULLبشكل صحيح، تمامًا مثلNullable(T). #100144 (Denys Melnyk). - تم إصلاح تجاوز سعة الأعداد الصحيحة الموقعة (سلوك غير معرّف) في
toStartOfIntervalعند استدعائها بقيم interval كبيرة جدًا بالمللي ثانية/الميكروثانية علىDateTime64عالي الدقة. #100156 (Alexey Milovidov). - تم إصلاح runtime filters الخاصة بعمليات join فوق نوع البيانات
Variant. #100182 (Dmitry Novik). - تم إصلاح عملية cast من
Time64إلىUInt64كانت قد تحصر القيم في 24 ساعة. #100025 (Yarik Briukhovetskyi). - تم إصلاح استثناء عند حساب common supertype للـ tuples الفارغة وغير الفارغة مع تفعيل
use_variant_as_common_type. #100699 (Antonio Andelic). - تم إصلاح سلوك غير معرّف في
positiveModuloعندما لا يلائم المقسوم عليه غير الموقّع نوع النتيجة الموقّع. #100705 (Raúl Marín). - تم إصلاح سلوك غير معرّف (تجاوز سعة الأعداد الصحيحة الموقعة) في
toStartOfIntervalعند استخدام intervals من نوع Week أو Quarter أو Year مع argument للأصل وقيم interval متطرفة. #100817 (Raúl Marín). - تم إصلاح combinators الخاصة بـ aggregate function، وهي
IfوDistinctوDistinctIfوIfState، ذات return type منTupleومع وجود argument واحدة أو أكثر من نوعNullable، إذ لم تكن قادرة على قراءة الحالات المتسلسلة الأقدم بعد إدخالNullable(Tuple). #100826 (Nihal Z. Miaji). - لم يعد
cast_keep_nullable، عند تفعيله، يطرح استثناءً عند تنفيذ cast لقيمة null من نوعDynamicإلىVariant. #100864 (Seva Potapov). - تم إصلاح استثناء في
intDiv/intDivOrZeroعلى arrays من tuples قابلة لأن تكون null. #100895 (Raúl Marín). - تم إصلاح سلوك غير معرّف (تجاوز سعة الأعداد الصحيحة الموقعة) في
parseDateTimeBestEffortعند تحليل سلاسل datetime التي تحتوي على أكثر من 18 رقمًا في الأجزاء الكسرية من الثانية. #100948 (Vasily Chekalkin). - تم إصلاح مشكلة في الدالة التجميعية
sumCountOrDefaultكانت تمنعها، عند وجود وسيط واحد أو أكثر من نوعNullable، من قراءة الحالات المُسلسلة الأقدم بعد إدخالNullable(Tuple). #101021 (Nihal Z. Miaji). - تم إصلاح أعمدة
ALIASذات النوعينDateTime/DateTime64التي لم تكن تطبّق تحويل المنطقة الزمنية عندما كانت المنطقة الزمنية المُعلنة تختلف عن المنطقة الزمنية في التعبير. #101043 (Alexey Milovidov). - أُزيل
Nullableمن عمود النتيجة فيarrayIntersectوالدوال ذات الصلة لتجنّب عدم التطابق بين التسلسل وإلغاء التسلسل. #101569 (George Larionov). - تم إصلاح
positiveModulo(tuple, number)الذي كان يُوجَّه خطأً إلى القسمة بدلًا من عملية modulo. #101709 (ClickGap AI Bot). - تم إصلاح المخرجات غير الصحيحة في
formatDateTimeمع الـ formatter%Wضمن بعض إعدادات التنسيق غير الافتراضية. #101847 (Robert Schulze). - تم إصلاح استثناء عدم تطابق الأنواع في
transformعندما يكون العمود الافتراضي const في بعض blocks. #100616 (Pavel Kruglov). - أصبح مسموحًا بوجود row groups فارغة في Parquet. #100653 (Vitaly Baranov).
- أصبحت
min/max/argMin/argMaxالآن تتعامل مع NaN بشكل متسق معORDER BY: إذ يتم دائمًا تخطي NaN (ولا تُعاد إلا إذا كانت جميع القيم NaN). سابقًا، كانت النتائج تعتمد على موضع NaN في البيانات بسبب دلالات المقارنة غير المرتبة في IEEE 754. #100448 (Raúl Marín). - تم إصلاح الاستدلال الخاطئ على نوع بيانات التاريخ في حالة overflow بعد ضبط المنطقة الزمنية. #102674 (Pavel Kruglov).
- تم إصلاح
CASEمع تعبيرDynamicكان يعيدELSEلجميع الصفوف. #102684 (Pavel Kruglov). - تم إصلاح تسلسل النوع
Dynamicالمُسطّح مع أنواع البيانات المُرمَّزة ثنائيًا. #102692 (Pavel Kruglov). - تم إصلاح تجاهل
cast_string_to_date_time_modeعند استخدامCASTإلىNullable(DateTime). #103035 (Pavel Kruglov). - أصبح تمثيل null في تسلسل الأعمدة replicated وsparse يراعي الإعدادات (مثل
format_tsv_null_representation). #102888 (Hechem Selmi).
إصلاحات فهرس النص وفهرس التخطي
- تم إصلاح استخدام فهرس النص مع فهارس التخطي الأخرى. سابقًا، كان يمكن أن تظهر أخطاء منطقية مثل “Trying to get non-existing mark” عندما يستخدم مرشح الاستعلام فهرس نص مع فهارس تخطٍ عادية أخرى في الوقت نفسه. #98555 (Anton Popov).
- تم إصلاح إعادة بناء فهارس النص أثناء عمليات الدمج مع TTL. #99107 (Anton Popov).
- تم إصلاح التحقق المفرط في الصرامة من المعالج المسبق لفهرس النص. #99359 (Anton Popov).
- أُزيل دعم الدوال المنفية (
notEquals,notLike,notIn) في تحليل فهرس النص. إذ لم يكن بإمكان هذه الدوال تخطي أي حبيبات مطلقًا، لذا فإن تحليل الفهرس لها لم يكن يضيف سوى حمل إضافي. #99393 (Anton Popov). - تم إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند الإشارة إلى شرط لفهرس نص (مثلhasAllTokens) في كلٍّ من بنديSELECTوWHEREعبر اسم مستعار. #99504 (Anton Popov). - تم إصلاح النتائج غير الصحيحة عند استخدام
hasAllTokensمعORعبر أعمدة لها فهارس نص منفصلة. #99505 (Anton Popov). - تم إصلاح قراءة فهرس النص في جدول يحتوي على lightweight deletes وسياسات صفوف موجودة مسبقًا. #99661 (Anton Popov).
- تم إصلاح تحليل الشروط التي تستخدم الدالة
INبواسطة فهرس النص مع المعالج المسبق، كما تم إصلاح تعارض في الـ tokens التي يجري البحث عنها كان يمكن أن يؤدي إلى نتائج غير صحيحة. #99755 (Anton Popov). - تم إصلاح الاستخدام غير الصحيح لفهرس النص مع الدالتين
startsWithوendsWithبالنسبة إلى الـ tokenizers التي لا تدعم مطابقة substring (array,splitByString). سابقًا، كان يمكن لهذه الـ tokenizers أن تنتج نتائج خاطئة بصمت. #100151 (Anton Popov). - تم إصلاح crash نادر عندما كان يُطرَح استثناء “Memory Limit” أثناء بناء فهرس النص. #100213 (Anton Popov).
- تم إصلاح أخطاء “Not-ready Set is passed as the second argument” أثناء تحليل فهرس نص مبني فوق
mapValuesلشروط تحتوي على clauseIN. #100224 (Anton Popov). - تم إصلاح crash عند استخدام فهرس بحث نصي مع clause
INتحتوي على استعلام فرعي من نوع Tuple، مثلWHERE (id, str) IN (SELECT (id, str) FROM ...)، أو عندما لا يتطابق عدد الأعمدة في الاستعلام الفرعي مع الـ Tuple الموجودة في الجهة اليسرى منIN. #100959 (Anton Popov). - أصبح
splitByStringtokenizer يرفض الآن سلاسل الفاصل الفارغة. #101928 (Robert Schulze). - كان
sparseGramstokenizer يُنشئ tokens أطول من الحد الأقصى المحدد للطول (بسبب وجود+2مُضمَّنة مباشرة في التنفيذ). #101934 (Elmi Ahmadov). - تم إصلاح استثناء عند الاستعلام عن جداول
MergeأوDistributedباستخدام فهرس نص كامل مع شروط تصفية مركبة تجمع بينhas*TokensوLIKE، عندما يكونquery_plan_direct_read_from_text_indexمُمكّنًا. #101939 (Jimmy Aguilar Mena). - تم إصلاح
hasToken/hasTokenOrNullعند استخدام أنماط بحث تتكون فقط من فواصل (مثل'()'و'!!!') على الأعمدة التي تحتوي على فهرس نصي: إذ كان الفهرس سابقًا يتخطى جميع الحبيبات بصمت بدلًا من رفعBAD_ARGUMENTS(فيhasToken) أو إرجاعNULL(فيhasTokenOrNull). #102544 (Jimmy Aguilar Mena). - لم تعد إعدادات فهرس النص الكامل (
enable_full_text_index,allow_experimental_full_text_index,use_skip_indexes_on_data_read) تُعطَّل عندما يشير الإعدادcompatibilityإلى إصدار أقدم من 26.1. #102422 (Nikita Fomichev). - أُضيف دعم لأعمدة
ALIASفي تحسين القراءة المباشرة من فهرس النص. #103037 (Anton Popov).
إصلاحات مستودع البيانات
- تم إصلاح حالة تسابق منطقية عند تغيير
snapshot versionفي محرك الجدولDeltaLake، كما أزيلت عمليات إعادة تحميل اللقطات الثقيلة الزائدة عن الحاجة. #96226 (Kseniia Sumarokova). - تم إصلاح استثناء
DUPLICATE_COLUMNوظهور قيم NULL من دون أي تنبيه عند قراءة جداول Delta Lake التي تستخدم وضع ربط الأعمدة “name” مع حقول struct التي تحتوي أسماؤها على نقاط. #98013 (Caio Ishizaka Costa). - تم إصلاح خطأ عند استخدام Unity Catalog مع GCS. #98456 (Melvyn Peignon).
- أصبح
DataLakeCatalogالآن يراعي إعدادhttp_forbid_headersالخاص بالخادم عند التحقق من إعدادauth_header. #98827 (Michael Anastasakis). - أصبح الآن إنشاء جداول بحيرة البيانات المحلية وإرفاقها وتحديثها خارج مسارات المستخدم محظورًا، ويُتحقق من ذلك عند إنشاء
IDataLakeMetadataوتحديثه. #98936 (Daniil Ivanik). - تم إصلاح عمليات قراءة Iceberg BigLake: إذ تُمرَّر الآن بيانات اعتماد ADC إلى عميل GCS S3 (مما يعالج أخطاء 403)، وتُرمَّز بيانات اعتماد OAuth2 بترميز URL قبل إرسالها، ولم يعد اجتياز مساحة الأسماء يتوقف عند استجابات BigLake HTTP 400. #98998 (Nikita Fomichev).
- تم إصلاح خطأ تجاوز الحدود عند الاستعلام عن الأعمدة الافتراضية فقط من جدول Iceberg يحتوي على بيانات Avro. #99080 (alesapin).
- تم إصلاح تعطل في
ALTER TABLE ... REMOVE SETTINGSلمحرك جدول Iceberg. #99108 (alesapin). - تم إصلاح تعطل نادر جدًا عندما يحتوي جدول Iceberg على ملفات بتنسيقات مختلطة (ORC وParquet). #99168 (alesapin).
- تم إصلاح تعطل (إلغاء مرجعية مؤشر فارغ) عند تنفيذ
ALTER TABLE ... MODIFY COLUMN ... COMMENTعلى جداول Iceberg. #99838 (Desel72). - أصبح ClickHouse الآن يتعامل بشكل صحيح مع الجداول بأسلوب Spark (بمسار مطلق كامل لكل ملف، أو بمسار نسبي إلى مسار الجدول المشترك). #99935 (alesapin).
- تم إصلاح استثناء يحدث عندما يحتوي إعداد مسار ملف البيانات الوصفية في Iceberg على بايت صفري. #100283 (Alexey Milovidov).
- تم إصلاح خطأ نسخ ولصق كان يؤدي إلى تجاهل
delta_lake_snapshot_end_versionالمضبوط من دونdelta_lake_snapshot_start_versionبصمت بدلًا من إصدار خطأBAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar). - تم إصلاح خطأ منطقي في جداول Iceberg المرتبة أثناء عمليات التعديل. #100499 (alesapin).
- تم إصلاح Polaris catalog مع Azure، إذ كان catalog، منذ الإصدار 25.12، يضيف الحاوية في بداية المسار. #100583 (Konstantin Vedernikov).
- تم إصلاح استثناء
Logical error: 'partitions_count > 0'عند تنفيذ عملياتALTER TABLE UPDATEمتتالية على جدول Iceberg مُقسَّم. #101278 (Desel72). - أُصلِح تنفيذ insert-select من عنقود Delta Lake مع ReplicatedMergeTree. #101299 (Konstantin Vedernikov).
- يُطرَح خطأ عند استخدام إعدادات
delta_lake_snapshot_versionأو إصدار CDF من دون تمكين DeltaKernel، بدلاً من إرجاع بيانات غير صحيحة بصمت. #101489 (Desel72). - أُصلِحت مشكلة فشل حلقة retry لعملية INSERT في Iceberg عندما كان الجدول مُنشأً باستخدام
iceberg_metadata_file_pathوكانت نسخة metadata المستهدفة موجودة مسبقًا. #101548 (Groene AI). - أُصلِح تعطل في الخادم (
LOGICAL_ERROR) عند إجراء select من materialized view تستند إلى table engine IcebergLocal. #101577 (Groene AI). - أُصلِح تعطل في IcebergLocal مع
ALTER TABLE ... UPDATEعند استخدام Avro format، وكان السبب عدم فك أنواع wrapper LowCardinality/Nullableقبل serialization. #102337 (Desel72). - أُضيف العمود
hostnameالمفقود إلىsystem.delta_lake_metadata_logوsystem.iceberg_metadata_log. #102162 (Michael Russell). - إصلاح في CoalescingMergeTree لنوع Array. #102384 (Konstantin Vedernikov).
إصلاحات S3/Azure/تخزين الكائنات
- تم إصلاح استثناء صادر من
CachedOnDiskReadBufferFromFile::readBigAt. #97890 (Kseniia Sumarokova). - تم إصلاح تعطل كان يحدث عند الاستعلام عن الملفات باستخدام glob pattern (مثل
file('dir/**', 'LineAsString'))، إذ كان يُطلق استثناء غير مُعالَج من filesystem إذا كان الدليل يحتوي على رابط رمزي معلّق. وأصبح الآن يتم تجاهل الروابط الرمزية المعلّقة بصمت. #98143 (Mark Andreev). - تم إصلاح الاستخدام المفرط للذاكرة (~514 MiB) أثناء الاكتشاف التلقائي لـ format عند قراءة بيانات غير Arrow (مثل JSON من
url()أوfile()بدون format صريح)، وكان السبب أن قارئ ArrowStream كان يفسّر البايتات الأولى خطأً على أنها طول metadata ضخم. #98893 (Konstantin Bogdanov). - تم إصلاح race condition كان يمكن أن يتسبب في ظهور الاستثناء “ReadBuffer is canceled” في queries التي تستخدم
urlClusterأو cluster table functions مشابهة. #98955 (Alexey Milovidov). - تم إصلاح الرسالة المضللة “inflate failed: buffer error” عند قراءة ملفات مضغوطة غير موجودة عبر
url()table function مع glob patterns. #99034 (Alexey Milovidov). - تم إصلاح استدعاءات
HeadObjectمن نوع N+1 في globs الخاصة بتوسيع الأقواس في S3. #99219 (Konstantin Bogdanov). - تم إصلاح الحالات التي كانت تتسبب فيها الأرقام ذات الأصفار البادئة في path الخاص بـ hive partitioning في حدوث errors. #99458 (Yarik Briukhovetskyi).
- تم إصلاح seek غير الصحيح في
AsynchronousReadBufferFromFileDescriptorمعO_DIRECT. #99678 (Pavel Kruglov). - تم إصلاح خلل كان قد يؤدي إلى تخطي ClickHouse لبعض الملفات إذا كانت ترويسة
Content-Lengthمفقودة من استجابة طلب HEAD الخاص بها (على سبيل المثال، بسبب transcoding لفك الضغط في GCS). #99971 (Yarik Briukhovetskyi). - لم يعد server يفشل في بدء التشغيل عند تهيئة disk من Azure blob storage بينما تكون endpoint غير قابلة للوصول مؤقتًا (مثل فشل DNS). #100701 (Raúl Marín).
- تم إصلاح segfault في
s3Clusterوdistributed queries بسبب استخدام connection pool بعد تحريره. #100837 (Konstantin Bogdanov). - تم إصلاح استثناء كان يتسرّب من destructor S3
Client::~Clientمتسببًا في إنهاء server. #101798 (Gagan Dhakrey). - تم إصلاح عدم تسجيل المضيف والمنفذ بشكل صحيح أثناء إعادة الاتصال. #102280 (Grant Holly).
- تم إصلاح استثناء في server داخل ClusterDiscovery عندما لا يكون لدى cluster ثابتة (مُعرَّفة في config) أي عقد حية مؤقتًا. #102661 (Kseniia Sumarokova).
إصلاحات S3Queue
- S3Queue: تم إصلاح فشل في
assertبعد انقطاع اتصال ZooKeeper رغم نجاح عمليةcommit. #100210 (Kseniia Sumarokova). - تم إصلاح نص الوصف المعكوس للعمود
alterableفيsystem.s3_queue_settingsوsystem.azure_queue_settings— إذ جرى تبديل دلالتي0و1لتتطابقا مع السلوك الفعلي للكود. #101703 (ClickGap AI Bot).
إصلاحات الأمان والتحكم في الوصول
- كانت table function
loopتستدعيinner_storage->read()مباشرةً، متجاوزةً طبقة المفسِّر التي تُطبَّق فيها سياسات الصفوف وامتيازات الأعمدة وغيرها من عمليات التحقق الأمنية. وقد أتاح ذلك لمستخدم مقيَّد بسياسات الصفوف قراءة جميع الصفوف عبرloop(table). #97682 (pufit). - فرض عمليات التحقق
READ ON FILEعلىfile()scalar وDESCRIBE TABLE file(). #98115 (Nikolay Degterinsky). - قبول بيانات اعتماد base64 بدون padding في HTTP Basic Auth. يحذف بعض عملاء HTTP padding اللاحق
=في الترويسةAuthorization: Basic، وكان هذا يتسبب سابقًا في فشل authentication. #98392 (Amos Bird). - إصلاح تجاوز في RBAC كان يسمح للمستخدمين بتنفيذ
DESCRIBEلأي جدول عبرremote()أوremoteSecure()أوcluster()أوclusterAllReplicas()عند توجيهها إلى localhost، دون الحاجة إلى امتيازSHOW_COLUMNS. #98669 (pufit). - إصلاح مشكلة كانت فيها
system.grantsتُسقِط معلمات regular expression الخاصة بمنحURLوS3في العمودaccess_object. #98987 (DQ). - إصلاح تجاوز في RBAC كان يسمح للمستخدمين بالحصول على بنية الجدول عبر
DESCRIBE TABLEأوCREATE TABLE ASعلى table functions (mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc(), إلخ) دون امتيازات الوصول المطلوبة إلى المصدر. وبالنسبة إلى الدوال التي تستنتج schema من خوادم بعيدة، أتاح ذلك أيضًا تشغيل اتصالات Outbound (SSRF) دون تفويض. #99122 (pufit). - تقييد constraints الخاصة بالإعدادات في DDL worker لاستعلامات DDL الموزعة. #99317 (Pablo Marcos).
- إصلاح مشكلات طفيفة في authentication عبر TOTP: خيار CLI
--one-time-passwordمع كلمة مرور فارغة، والتحقق من قيم الإعداد<digits>و<period>. #99322 (Vladimir Cherkasov). - أصبحت بيانات الاعتماد في connection strings الخاصة بـ JDBC وODBC وNATS الآن مخفية في query logs ومخرجات
SHOW CREATE. وبالنسبة إلى connection strings بأسلوب URI، لا يُخفى إلا جزء كلمة المرور. كما أصبحت قيمة الإعدادnats_tokenمخفية أيضًا. #99344 (János Benjamin Antal). - منع قراءة بيانات اعتماد Google من ملف محلي، لأن ذلك غير آمن إذ كان يتيح قراءة بيانات اعتماد أخرى إذا كان file path معروفًا. #99584 (Konstantin Vedernikov).
- إصلاح تجاوز MySQL dictionary source لمرشح
RemoteHostFilterفي معلمات DDL المضمنة. #99720 (Shaohua Wang). - إصلاح
system.completionsلكي يرشّح databases وtables وcolumns بشكل صحيح حسب access rights في جميع تركيبات المنح: على مستوى الجدول، وعلى مستوى قاعدة البيانات، ومعrevokeعلى مستوى العمود. #100432 (Shaohua Wang). - تنقية
query_idفي HTTP handler لمنع حقن CRLF في headers الخاصة بالاستجابة عبر الترويسةX-ClickHouse-Query-Id. #100500 (Pablo Marcos). - كان بإمكان بعض الكتالوجات إظهار بيانات سرية في قسم
SETTINGSضمنSELECT * FROM system.databases. وقد مُنع ذلك الآن. #100800 (Konstantin Vedernikov). - لم تكن سياسات الصفوف تُمرَّر من المخططات الفرعية إلى المخطط الرئيسي لأغراض التسجيل، لذلك كانت تغيب عن
query_logفي العروض والاستعلامات الفرعية وعمليات insert-select. وهي الآن محفوظة ضمنQueryAccessInfoلأغراض التسجيل. #101044 (Narasimha Pakeer).
إصلاحات النسخ الاحتياطي والاستعادة
- تم إصلاح عدم تطبيق
max_execution_timeعلى عمليات النسخ الاحتياطي/الاستعادة. #99205 (Kseniia Sumarokova). - تم إصلاح استثناء
ReadBuffer is canceled. Can't read from it.في عمليات النسخ الاحتياطي/الاستعادة التي تستخدم أرشيفات zip. #100400 (Alexey Milovidov). - تمت إضافة التحقق من مسارات إدخالات الملفات في البيانات الوصفية للنسخ الاحتياطي لرفض اجتياز المسارات، والمسارات المطلقة، والأسماء الفارغة أثناء
RESTORE. #100483 (Pablo Marcos). - تم إصلاح تنسيق AST واستنساخه في
BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
إصلاحات ClickHouse Keeper
- تم إصلاح حالة data race في عميل ZooKeeper بين خيط الإرسال وخيط الاستقبال. #97887 (Pablo Marcos).
- تم إصلاح فقدان بيانات Keeper بعد إعادة التشغيل عند استخدام Azure Blob Storage مع بيانات
s3_plainالوصفية لتخزين السجل. #97987 (Antonio Andelic). - تم تعيين المكوّن
Watchلاستجابات watch فيaggregated_zookeeper_logبدلًا من تركه فارغًا. #98202 (Antonio Andelic). - تم إصلاح مشكلة قيام ClickHouse Keeper بقطع اتصال عملاء Java ZooKeeper بعد طلب
addWatch. يتوقع Java client متنErrorResponseبحجم 4 بايت، لكن Keeper أرسل متنًا فارغًا، مما تسبب فيEOFExceptionوانقطاع الجلسة. #98499 (Antonio Andelic). - تم إصلاح عدم انخفاض مقاييس Keeper
zk_followersوzk_synced_followersعند توقف أحد الـ followers. كما أُضيفت المقاييس الجديدةzk_learnersوzk_synced_non_voting_followersإلى الأمرmntr. #98504 (Antonio Andelic). - تم إصلاح تجاهل منفذ raft الآمن في Keeper للقيمتَين
cipherListوdhParamsFileمن إعداداتopenSSL. #98509 (Antonio Andelic). - تم إصلاح رسائل سجل Keeper المضللة مثل “استغرق تلقي طلب الجلسة X مدة 9963 مللي ثانية”، إذ كان الوقت المُبلّغ عنه في الواقع يُقضى في انتظار idle داخل
poll()بين نبضات القلب. #98510 (Antonio Andelic). - تم إصلاح مشكلة كانت تمنع اتصالات TCP في Keeper إيقاف تشغيل server بسلاسة بسبب عدم استجابتها لإشارة الإيقاف. #98525 (Alexey Milovidov).
- تم إصلاح تأكيد Debug في
DDLWorkerناتج عنfirst_failed_task_nameقديم بعد حذف entry في ZooKeeper أثناء استرداد إعادة التهيئة. #99099 (Antonio Andelic). - تم إصلاح إحدى حالات تعطل Keeper. #99133 (JIaQi Tang).
- تم إصلاح خطأ في Keeper كان قد يؤدي إلى تعليق read request (مما يسبب timeout للجلسة) إذا أُغلقت جلسة أخرى غير مرتبطة على server نفسه في توقيت غير مناسب تمامًا. #99484 (Michael Kolupaev).
- تم إصلاح SEGFAULT في NuRaft بسبب race condition. #100444 (Pablo Marcos).
- تم إصلاح فشل
KeeperMapCREATE TABLEمع الرسالة “Cannot create metadata for table” عندما كانت عُقد ZooKeeper المتبقية من عملية drop جزئية قبل الإصدار 25.1 تفتقد إلى العقدةdrop_lock_version. #101623 (Antonio Andelic). - تم إصلاح فقدان registry الخاصة بـ UDF عند انتهاء صلاحية جلسة ZooKeeper أثناء التحديث الدوري — إذ كان يمكن أن تصبح جميع User-Defined Functions غير متاحة إلى أن ينجح full refresh. #101891 (Nikita Fomichev).
- تم إصلاح تعطل في تحديث UDF بسبب قيام
ZooKeeperRetriesControlبإعادة المحاولة على جلسة ZooKeeper قديمة (منتهية الصلاحية) دون تجديدها. #102059 (Nikita Fomichev).
إصلاحات الأعطال والاستقرار
- تم إصلاح تعطل في دوال لهجة Kusto
bin()وbin_at()وextract()وindexof()عند تمرير وسيطات فارغة. #95736 (NeedmeFordev). - تم إصلاح تعطل/إخفاق تأكيدي في الخادم في
mapContainsKey/mapContainsKeyLikeمع skip index من نوعtokenbf_v1. #97826 (Shankar Iyer). - تم إصلاح تعطل في الخادم (
std::terminate) ناتج عن استثناء غير ملتقط في المدمّر الخاص بـ HTTP connection pool عند بلوغ الحد الصلب لمجموعة الاتصالات في ظل درجة Concurrency عالية. #97850 (Antonio Andelic). - تم إصلاح وصول خارج الحدود في
ColumnConst::getExtremesكان يمكن أن يسبب تعطلًا عند تمكينextremes = 1. #98263 (Alexey Milovidov). - أُضيف التحقق من البيانات التالفة أثناء deserialization لـ
DDSketchلمنع أخطاء segfault والاستثناءات والحلقات اللانهائية ونفاد الذاكرة عند قراءة aggregate function states التالفة الخاصة بـquantilesDD. #98284 (Alexey Milovidov). - تم إصلاح استثناء نادر في executor الخاص بـ pipeline، كان يمكن أن يظهر على شكل
Received signal 6(في إصدارات build الخاصة بالتصحيح)، عندما يتزامن توسيع pipeline مع إلغاء query. #98428 (Alexey Milovidov). - تم إصلاح إلغاء مرجعية مؤشر فارغ في
dictGetOrDefaultعندما تكون وسيطة المفتاح من النوعNullable. #98460 (Alexey Milovidov). - تم إصلاح حالة توقف تام في pipeline عند استخدام
sort_overflow_mode = 'break'مع window functions. #98543 (Alexey Milovidov). - تم إصلاح تعطل ناتج عن إلغاء مرجعية مؤشر فارغ في system tables أُنشئت بين أخذ snapshot للجداول في
IDatabaseTablesIterator::table()وبين تغيّر الجداول في thread أخرى أثناء التكرار اللاحق. #98792 (Grant Holly). - تم إصلاح انحراف في تتبع الذاكرة ناتج عن عدم التراجع عن allocations الفاشلة، والسلوك غير المعرّف لـ
nallocx(0)، وخطأ بمقدار واحد في تتبع الذروة العامة. كما وُسِّع التتبع ليشمل مخازن ring المؤقتة الخاصة بـio_uring. #98915 (Antonio Andelic). - تم إصلاح تعطل في الخادم (
std::terminate) عند تنفيذALTER TABLE ... DROP PARTعلى patch part بعد تغيير في schema (مثل ADD COLUMN). #99036 (Peng). - تم إصلاح تعطل في الخادم كان يمكن أن يحدث إذا طُرح استثناء تجاوز memory limit أثناء قراءة قرص cached. #99042 (Shankar Iyer).
- تم إصلاح تعطل ناتج عن استثناء memory limit طُرح أثناء تطبيق patch part. #99086 (Anton Popov).
- تم إصلاح تعطل عند استخدام Buffer table مع
SAMPLEعندما لا تكون destination تدعمه. #99141 (Kseniia Sumarokova). - تم إصلاح حالة heap-use-after-free عند drop جدول بالتزامن مع query قراءة قيد التشغيل. #99483 (Alexey Milovidov).
- تم إصلاح تجاوز سعة مخزن مؤقت على الكومة في
CompressionCodecT64وإيقافٍ للعملية فيCompressionCodecMultipleعند فك ضغط بيانات مضغوطة تالفة. وأصبحت برامج الترميز الآن تُطلق استثناءً بدلاً من التعطل. #99680 (Rahul Nair). - تم إصلاح حلقة لا نهائية عند قراءة ملفات بتنسيق
Npyذات أبعاد شكل سالبة. #99812 (Desel72). - تم إصلاح تجاوز سعة مخزن مؤقت عام في الدالة
CRC32على الوسائطFixedStringعند تقييمها على صفر صفوف أثناء حساب ترويسة خطة الاستعلام. #99835 (Alexey Milovidov). - تم إصلاح فشل تحقق في
sipHash128Keyed(ودوال التجزئة ذات المفاتيح المشابهة) عندما تكون وسيطة البيانات من نوع Map بمفاتيح مصفوفية أو بأنواع مصفوفات متداخلة أخرى. #99921 (Alexey Milovidov). - تم إصلاح فشل تحقق عند ضرب حالات التجميع
NumericIndexedVectorفي ثابت صحيح زوجي، وكان السبب عملية XOR ذاتية على صور Roaring النقطية ذات الأسماء المستعارة فيpointwiseAddInplace. #99976 (Desel72). - تم إصلاح إلغاء مرجعية
nullptrفي قارئ Parquet عندما يواجه مسار filter-in-decoder صفحات تمت تصفيتها. #99677 (Alexey Milovidov). - تم إصلاح تعطل خادم محلي عندما يحتوي
CREATE DICTIONARYعلى تعريف ذي قيمة قائمة تتضمن دالة غير موجودة. #100036 (Yakov Olkhovskiy). - تم إصلاح
SIGSEGVعند قراءة أجزاء التصحيح بعدALTER MODIFY COLUMN. #100107 (Nikolay Degterinsky). - تم إصلاح استخدام قيمة غير مهيأة في
StringSearcher.h. #100225 (Konstantin Bogdanov). - تم إصلاح تعطل الخادم (فشل تحقق) عند استخدام الدوال التجميعية المعلمية مع المركّب Array ووسائط NULL، مثل
quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot). - تم إصلاح تجاوز سعة مخزن مؤقت على الكومة في usearch
sorted_buffer_gt::insert()كان يمكن أن يؤدي إلى تعطل أو إفساد الذاكرة بصمت أثناء بحث تشابه المتجهات. #100537 (Dustin Healy). - تم إصلاح تعطل الخادم (الخطأ المنطقي “Unexpected return type from __topKFilter”) عندما يكون
use_top_k_dynamic_filteringمُمكّناً ويكون عمودORDER BYمن النوعDynamicأوVariant. #100742 (Groene AI). - تم إصلاح تعطل الخادم عند استخدام الدالة
has()مع PREWHERE/WHERE على مفتاح Tuple يحتوي على عناصر LowCardinality. #100760 (Groene AI). - تم إصلاح segfault ناتج عن إلغاء مرجعية مؤشر فارغ عند تحميل Dictionaries أثناء إيقاف تشغيل الخادم. #100839 (Miсhael Stetsyuk).
- تم إصلاح تجاوز سعة مخزن مؤقت في
ULIDStringToDateTimeعندما يحتوي الإدخال على بايتات غير ASCII. #100843 (Konstantin Bogdanov). - تم إصلاح تعطل (
LOGICAL_ERROR) عند الاستعلام عن جدولMerge(أو الدالة الجدوليةmerge()) التي تغلّف عدة جداول، بما في ذلك جدولDistributed، مع تفعيلdistributed_group_by_no_merge=1. #100859 (Groene AI). - تم إصلاح تعطل عند إنشاء قاموس Polygon من جدول
MergeTreeيستخدم تسلسل الأعمدة sparse. #100964 (Anton Popov). - تم إصلاح تعطل (
Logical error: isConst/isSparse/isReplicated assertTypeEquality) في خوارزميات الدمج عندما يؤدي النسخ الكسول للأعمدة (enable_lazy_columns_replication) إلى إنتاج أعمدةColumnReplicatedتتدفق إلى pipelines للفرز والدمج مع مدخلات تصل متأخرة. #101036 (Groene AI). - تم إصلاح تعطل في الخادم (
SIGABRT) عند استخدام aggregate functions مع المبدّلNullالمخصص للاستخدام الداخلي فقط (مثلsumNullوavgNull) ومعaggregate_functions_null_for_empty = 1. #101147 (Groene AI). - تم إصلاح حالة استخدام للذاكرة بعد تحريرها في مسار الكتابة لذاكرة التخزين المؤقت لنظام الملفات، وكان يمكن أن تتسبب في reads من ذاكرة محررة عند تسجيل file segments المكتملة. #101161 (Groene AI).
- تم إصلاح تعطل في الخادم مع الرسالة “Trying to attach external table to a ready set without explicit elements” عندما يواجه distributed index analysis شرط
GLOBAL INجرى إنشاء مجموعته بدون عناصر صريحة. #101178 (Groene AI). - تم إصلاح aggregate functions
MAX/MINعلى أعمدةDecimalالتي كانت تُرجع نتائج غير صحيحة عند تفعيل ترجمة JIT البرمجية. #101203 (Raúl Marín). - تم إصلاح تعطل في الخادم (
LOGICAL_ERROR: Bad cast fromColumnVectortoColumnLowCardinality) عند الاستعلام عن جدولMergeTreeيتضمنORDER BY CAST(lc_column, 'Type')حيث يكونlc_columnمن النوعLowCardinality. #101220 (Groene AI). - تم إصلاح سلوك غير معرّف في
mergeTreeAnalyzeIndexes()في حال كانت وسيطة optimizations غير صالحة. #101253 (Azat Khuzhin). - تم إصلاح تعطل في الخادم (Logical error: “Variant … is empty”) عندما يقرأ query في الوقت نفسه كلاً من عمود
Tupleيحتوي على نوعDynamic Mapوsubcolumn الخاص به. #101448 (Groene AI). - تم إصلاح تعطل
LOGICAL_ERRORمع الرسالة “Current component is empty” عند الاستعلام عنsystem.part_moves_between_shardsمع تفعيلenforce_keeper_component_tracking. #101462 (Groene AI). - تم إصلاح خطأ segmentation fault في
DataTypeDynamic::create()عندما يولّد الـ fuzzer شجرة AST غير سليمة للنوعDynamic. #101464 (Groene AI). - تم إصلاح تعطل (
LOGICAL_ERROR: “ColumnUnique can’t contain null values”) عند مقارنة عمودLowCardinalityبثابتNULLمن نوعVariantبينما يكونuse_variant_default_implementation_for_comparisonsمعطلاً. #101690 (Groene AI). - أُضيفت حماية للتدفقات الفارغة إلى
Bzip2ReadBufferبحيث يعيد EOF بدلاً من إطلاقUNEXPECTED_END_OF_FILEعندما يكون التدفق الداخلي فارغًا. #101691 (ClickGap AI Bot). - تم إصلاح تعطل من نوع use-after-free في مُجدول تأجير CPU عندما يستمر مؤقت الانتظار بعد انتهاء worker thread الذي تشير إليه
ProfileEvents::Counters. #101761 (Antonio Andelic). - تم إصلاح خطأ use-after-scope في إلغاء التسلسل المتوازي للمسارات الديناميكية من النوع
Object، والذي كان قد يتسبب في أعطال عند قراءة الجداول التي تحتوي على عدد كبير من المسارات الديناميكية. #101823 (Antonio Andelic). - تم إصلاح خطأ SIGSEGV في
MergeTreeDataPartWriterWide::cancelعندما يطلق مُنشئ stream استثناءً أثناءaddStreams، مما يترك إدخالًا null فيcolumn_streams. #101936 (Antonio Andelic). - تم إصلاح خطأ segmentation fault في mutations على materialized columns من دون expression. #102342 (zoomxi).
- تم إصلاح segfault (أو
LOGICAL_ERRORفي builds الخاصة بالتصحيح) عند قراءة Parquet files مع تفعيل bloom filter push-down وشروط المساواة/عدم المساواة في clauseWHERE، وكان السبب وصولًا إلى الذاكرة خارج الحدود في Parquet prefetcher. #102385 (Groene AI). - تم إصلاح قراءة خارج الحدود في string search functions (
countSubstrings,positionوغيرها) عند البحث عن needle مكوّن بالكامل من null bytes. #102401 (Raúl Marín). - تم إصلاح قراءة خارج الحدود في
printfعند وجود%في النهاية. #102472 (Raúl Marín). - تم إصلاح تعطل
LOGICAL_ERRORبرسالة “Unexpected number of rows in column subchunk” في قارئ Parquet V3 الأصلي عند قراءة nullable columns مع filter فيWHERE. #102628 (Groene AI). - تم إصلاح تعطل server (SIGSEGV) عند قراءة ملفات Avro ذات schemas recursive التي تحتوي على مراجع دورية لأنواع رمزية. ويجري الآن اكتشاف مثل هذه schemas ورفضها برسالة خطأ واضحة. #102853 (Groene AI).
- تم إصلاح تعطل server (
LOGICAL_ERRORassertion) عندما تصطدم دالة على column من النوعVariantبحد الذاكرة أو بأي Exception آخر غير متعلق بتحويل النوع أثناء تحويل النتيجة فيFunctionVariantAdaptor. #102855 (Groene AI). - تم إصلاح تعطل في server في builds الخاصة بالتصحيح/sanitizer عند إطلاق
std::length_errorأثناء schema inference. #102859 (Groene AI). - تم إصلاح تعطل عند استخدام view مع clause
WHEREحيث يُنتج الاستعلام الداخلي columns بأنواع تختلف عن metadata الخاصة بالـ view (مثلNullableالناتج منLEFT JOINمعjoin_use_nulls). #102085 (Miсhael Stetsyuk).
إصلاحات أخرى للأخطاء
- تم إصلاح خطأ كان قد يؤدي إلى تجاهل الإعدادات الصريحة المُرسلة إلى جانب
compatibilityفي الطلب نفسه بصمت عندما كانت قيمتها تطابق القيمة الافتراضية للخادم. #97078 (Raufs Dunamalijevs). - تم إصلاح مشكلة كان فيها العميل يُبلغ عن
NETWORK_ERRORبدلًا من parsing error الفعلي (مع رقم الصف الصحيح) عندما تصادف عمليةINSERTمع parsing متوازٍ بيانات غير صالحة. #97339 (Alexey Milovidov). - تم إصلاح مشكلة تعليق
DROP DATABASEمعdatabase_atomic_wait_for_drop_and_detach_synchronouslyإلى أجل غير مسمى عند kill للـ query. #97586 (Alexey Milovidov). - تم إصلاح عدم قدرة
KILL QUERYعلى إنهاء queries العالقة في توليدWITH FILL، أو loading القاموس عبرdictGet، أوALTER DELETEمعmutations_sync=1علىReplicatedMergeTree. #97589 (Alexey Milovidov). - تم إصلاح logical error في query لسياسة إخفاء البيانات مع
ON CLUSTER. #97594 (Bharat Nallan). - تم إصلاح partition pruning غير الصحيح عند استخدام
DateTime64سابق لعصر يونكس مع الدالةtoDate(). #97746 (Yarik Briukhovetskyi). - تم إصلاح الخطأ
Cannot schedule a fileLOGICAL_ERRORعندINSERTفيDistributedبسبب حالة تسابق بينDROPوINSERT. #97822 (Azat Khuzhin). - تم إصلاح logical error وهو “Bad cast from type DB::ColumnConst to DB::ColumnArray” في
kql_array_sort_asc/kql_array_sort_descعند استدعائهما باستخدام argument لمصفوفات ثابتة. #98251 (Alexey Milovidov). - يعيد خادم HTTP الآن رسالة خطأ في body الاستجابة لردود 400 Bad Request الناتجة عن headers غير صحيحة التكوين، بدلًا من body فارغ. #98268 (Alexey Milovidov).
- تم إصلاح نتائج غير صحيحة عند استخدام distributed index analysis (ميزة تجريبية) وquery condition cache. #98269 (Azat Khuzhin).
- تم إصلاح فشل dictionary source لـ
MongoDBمع named collections. #98528 (Pablo Marcos). - لم يعد مسموحًا بـ dropping عمود عندما تكون subcolumns التابعة له مستخدمة في تعبيرات default/alias لأعمدة أخرى، كما استُخدم analyzer لتعبيرات default في
ALTER DROP COLUMN. #98569 (Nikita Mikhaylov). - أصبحت جميع
DB::ExceptionمنPocoHTTPClient::makeRequestInternalImplالآن غير قابلة لإعادة المحاولة، بما في ذلكHTTP_CONNECTION_LIMIT_REACHED. #98598 (Sema Checherinda). - تم إصلاح خطأين في ترجمة expression باستخدام JIT: خطأ نسخ ولصق في type checking لـ
nativeCastجعل فروع cast من عدد صحيح إلى عدد صحيح ومن عدد عشري إلى عدد عشري غير قابلة للوصول، وتمريرnullptrTargetMachine غير صحيح إلى LLVMPassBuilder. #98660 (Alexey Milovidov). - تم إصلاح الاستثناء “Inconsistent KeyCondition behavior” في إصدارات debug عندما يحتوي المفتاح الأساسي على قيم NaN من النوع float، وذلك بجعل
accurateLessوaccurateEqualsيتعاملان مع NaN بما يتوافق مع ترتيب الفرز في ClickHouse. #98964 (Alexey Milovidov). - تم إصلاح
windowFunnelمعstrict_deduplication، إذ كان يعيد مستوى غير صحيح عند مصادفة حدث مكرر. #99003 (Yash). - أصبحت إدخالات
system.trace_logالخاصة بإعادة التحميل التلقائي لقواميس ClickHouse تحتوي على معرّفات استعلام غير فارغة. #98784 (Miсhael Stetsyuk). - تم إصلاح مشكلة عدم إيقاظ
SYSTEM START REPLICATED VIEWلمهمة التحديث. #98797 (Pablo Marcos). - تم إصلاح
WITH FILL STALENESSالذي كان ينتج صفوفًا مُعبّأة إضافية عند قراءة البيانات على عدة دفعات (مثلًا عند استخدامindex_granularityصغير). #98895 (Alexey Milovidov). - تم إصلاح تعطّل في إخفاء هوية الاستعلامات للمعرّفات التي تبدأ بحرف كبير، مثل
Ab. #101450 (Xuewei Wang). - تم إصلاح تجاهل
TABLE_UUID_MISMATCHفي مسار الشيفرة غير الخاص بالمحلل. #99380 (Azat Khuzhin). - تم إصلاح
clickhouse format --obfuscateالذي كان ينتج SQL غير صالح بسبب إخفاء أنواع skip index، وأسماء compression codec، وأسماء database engine، وتعريفات dictionary layout/source. #99260 (Raúl Marín). - التحقق من setting changes في استعلامات الإنشاء عندما يكون الـ engine نفسه يدعم settings أيضًا. #99279 (János Benjamin Antal).
- تم إصلاح تجاهل
insert_deduplication_tokenبصمت في استعلاماتINSERT SELECTمن دونORDER BY ALL. وأصبح توفيرinsert_deduplication_tokenالآن كافيًا لتمكين deduplication بغض النظر عنORDER BY ALL. #99206 (Desel72). - تأخير المعالجة إلى أن ينتهي الخادم من تحميل جميع الجداول. #99700 (Seva Potapov).
- تم إصلاح parsing لعلامات الاقتباس بأسلوب shell في arguments الخاصة بـ
executabletable function. #99794 (Nikita Semenov). - تم إصلاح استعلامات async insert التي كانت تُظهر القيمة صفرًا لكل من
written_rowsوread_rowsوresult_rowsفيquery_logومخرجات client. #99879 (Sema Checherinda). - تم إصلاح فشل
INSERTمعVALUESعندما كانت البيانات متبوعة بتعليق SQL لاحق (--أو/* */) في السطر التالي. ويُتخطى التعليق الآن بدلًا من تحليله كصف آخر. #100016 (Pratima Patel). - تم إصلاح استثناء في
arrayRemoveعند مقارنة tuples تحتوي على components بقيمة NULL. #100017 (Alexey Milovidov). - معالجة القيم السالبة داخل
NumericIndexedVectorDataBSIبشكل صحيح. #100086 (Daniil Ivanik). - تم إصلاح مشكلة عدم التزام دالة الجدول
primesبالإعدادmax_rows_to_readبشكل صحيح في بعض الحالات، خصوصًا عند وجودoffsetوstep. #100199 (Nihal Z. Miaji). - لم يعد المستخدمون يرون
NATURAL CROSS JOINعند الاستعلام عن AST لاستعلامnatural joinيُعاد Rewrite له إلىCROSS JOIN. #100223 (Peter Nguyen). - بعض التغييرات الطفيفة على الدوال: أصبحت دوال
h3تتحقق من الحدود بشكل أفضل؛ وأصبحتreadWKBتتحقق من حدود الحجم (مع إعداد جديد هوmax_wkb_geometry_elements)؛ كما أصبحت دوال توليد الأرقام العشوائية تقيّد الحد الأقصى لعدد التكرارات. #100270 (Alexey Milovidov). - تم إصلاح مشكلة كان فيها
cutURLParameterقد يتخطى parameters بشكل غير صحيح عندما تظهر كسلاسل فرعية ضمن parameters أخرى. #100280 (Nikita Semenov). - تم إصلاح استثناء
LOGICAL_ERRORفيestimateCompressionRatioعندما تكون parameter block_size_bytesكبيرة جدًا. #100298 (Alexey Milovidov). - تم إصلاح تعليق
DROP TABLEإلى أجل غير مسمى على جداول Kafka engine عندما يكون الـ consumers عالقين في rebalance بعد خطأ heartbeat. #100388 (Alexey Milovidov). - تمت مطابقة dimensions الخاصة بـ shape في تنسيق
Npyمع حجم الملف وحدود overflow لمنع هجمات حجب الخدمة عبر ملفات.npyمُعدّة خصيصًا. كما رُفضت الأشكال الفارغة، وفُرض حد أقصى للذاكرة لكل row يبلغ 2 GiB. #100625 (Raúl Marín). - تم إصلاح تجاهل
session_timezoneعند parsing قيمDateTimeأثناء async inserts (TCP) وجميع عمليات insert عبر HTTP. #100647 (Sema Checherinda). - أصبح
StorageRabbitMQ::shutdownالآن idempotent، مع إضافة فحوصاتnullوقائية، لأنه بات يُستدعى مرتين (فيStreamingStorageRegistryوDatabaseCatalog). #100455 (Miсhael Stetsyuk). - تم إصلاح استثناء
LOGICAL_ERRORعند استخدامaccurateCastOrNullمع النوع الهدفQBit. #100470 (Raufs Dunamalijevs). - تم إصلاح عدم عمل صياغة
LIMIT m OFFSET n WITH TIES(وهي مكافئة لـLIMIT n, m WITH TIES، التي كانت تعمل بالفعل). #100491 (Nihal Z. Miaji). - تم إصلاح segfault حيث كانت
SerializationInfoTuple::addتُجريassert_castعلى مرجعSerializationInfoعادي أثناء merging للأجزاء بعد أن غيّرALTER MODIFY COLUMNعمودًا من نوع غيرTupleإلىTuple. #100509 (Miсhael Stetsyuk). - تم إصلاح الاستثناء “No set is registered for key” عند استخدام
INمع columns من نوعNullable(Tuple)تحتوي على fields مسماة وعناصرLowCardinality. #100523 (Alexey Milovidov). - تم إصلاح تجاهل
EXECUTE ASللبندينFORMATوINTO OUTFILEالمحددين في query. #100538 (pufit). - تم إصلاح عدم اتساق تنسيق AST لـ
SAMPLEمعOFFSETعلى مستوى الاستعلام. #100579 (Pavel Kruglov). - تم إصلاح أخطاء “الجدول الهدف غير موجود” في العروض المادية ذات الجداول الداخلية أثناء بدء التشغيل غير المتزامن، والناجمة عن ترتيب غير صحيح لاعتماديات بدء التشغيل. #100946 (Nikolay Degterinsky).
- تم إصلاح استثناء في
optimizeLazyMaterializationعند استخدام projection مع PREWHERE إلى جانبORDER BY ... LIMIT. #101115 (Anton Popov). - تم إصلاح رسالة خطأ غير صحيحة عند استدعاء
intExp10باستخدام وسيط NaN — إذ كانت تعرضintExp2بدلًا منintExp10. #101582 (Krishna Chaitanya). - تم إصلاح مشكلة عدم قيام
allow_statistics=0بحظرALTER TABLE ADD STATISTICSوALTER TABLE DROP STATISTICS. #101585 (Krishna Chaitanya). - تم إصلاح مشكلة تجاهل
CREATE TABLE ... AS merge()لقائمة الأعمدة المحددة صراحةً، والاعتماد بدلًا من ذلك على الاستدلال التلقائي على الأعمدة من الجداول المصدر، مما تسبب في أخطاءNOT_FOUND_COLUMN_IN_BLOCKعندما كانت قيمةmerge_table_max_tables_to_look_for_schema_inferenceمنخفضة بما يكفي وكانت الجداول المصدر ذات مخططات مختلفة. #101663 (Miсhael Stetsyuk). - تم إصلاح قبول إنشاء Dictionary من النوع
RANGE_HASHEDبصمت لسمة نطاقMAXغير موجودة، واستخدام إعداد Type غير صحيح عندما كانت سمتا النطاق min و max من نوعين مختلفين. #101732 (Yakov Olkhovskiy). - تم إصلاح أخطاء في الدالتين
arrayLevenshteinDistanceWeightedوarraySimilarity. #101767 (Mikhail f. Shiryaev). - تم إصلاح تجاهل Prometheus Query API لهيئات نماذج POST. #101794 (James Cunningham).
- تم إصلاح حالة سلبية كاذبة في
shouldPatchFunctionضمنSYSTEM INSTRUMENT ADDعندما يظهر نص البحث لأول مرة داخل وسيط Template في اسم الرمز بعد فكّ التشابك. #101885 (Pablo Marcos). - تم إصلاح وصف
system.codecsالخاص بـAES_256_GCM_SIVليعرضAES-256بدلًا منAES-128. #101917 (Jimmy Aguilar Mena). - تم إصلاح سلوك غير معرّف عند تحليل حزم Query packet في native protocol ذات قيم
QueryProcessingStageغير الصالحة. #101972 (Raúl Marín). - أُغلِق اتصال TCP عند حدوث استثناء أثناء تحليل initial query، لمنع قراءة بيانات غير صالحة من stream غير متزامن. #101989 (Raúl Marín).
- تم إصلاح الحالات التي كانت فيها
Timeذات القيم السالبة تُرجع نتيجة غير صحيحة عند المقارنة معDateTime. #102056 (Yarik Briukhovetskyi). - تم إصلاح المسافات المفقودة عند formatting لأمر unlock snapshot. #102063 (Han Fei).
- فشلت تهيئة جداول Alias التي لا تحتوي على جدول هدف على replica جديدة في قاعدة البيانات Replicated. #102397 (Nikolay Degterinsky).
- لم تعد عمليات
INSERTالعادية من دون materialized views تطلب عددًا مفرطًا من فتحاتConcurrencyControlوالخيوط (max_threadsبدلًا منmax_insert_threads)، مما يمنع نفاد فتحات CC وتضخم عدد الخيوط على العناقيد ذات معدلINSERTالمرتفع. #102961 (Sema Checherinda). - أُعيد تقديم
ArrowMemoryPoolللسماح بإطلاقMEMORY_LIMIT_EXCEEDEDلتجنّب OOM على مستوى النواة. #102999 (Azat Khuzhin). - تم إصلاح الإبلاغ عن نوع وسيطة غير صحيح في رسائل الخطأ الخاصة بـ string search functions (مثل
locateوposition) عند تمرير الوسيطات بترتيب معكوس (locate(needle, haystack)معfunction_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov). - تم إصلاح مشكلة بقاء
waitForPauseمعلّقًا إلى أجل غير مسمى عند استدعاءdisableFailPointمن دون وجود أي thread متوقفة عند الـ failpoint. #103119 (Shaohua Wang).