إصدار ClickHouse 26.8 LTS، 2026-08-27، FIXME (قيد الإعداد)
تغيير غير متوافق مع الإصدارات السابقة
- يحدد ترويس طلب HTTP
X-ClickHouse-Formatالآن تنسيق الاستجابة صراحةً: فهو اسم مستعار للإعدادoutput_format، لذا يتجاوز عبارةFORMATفي الاستعلام وامتداد المسار. في الإصدارات السابقة، كان يضبط القيمة الافتراضية فقط عندما لا يكون تنسيق الإخراج محددًا، مثل المعلمةdefault_format. يوفر ذلك خيارًا «خارج النطاق» لطلب البيانات بالتنسيق المطلوب. ولا يغيّر مطلقًا كيفية تحليل نص الطلب لعمليةINSERT— استخدمinput_formatأوformatلذلك. #105249 (Alexey Milovidov). - تُفسَّر أرقام JSON غير المقتبسة لأعمدة
DateTimeوDateTime64فيJSONEachRowوالتنسيقات المشابهة الآن كطوابع زمنية بتنسيق Unix، مع دقة اختيارية لأجزاء الثانية، بما يتوافق معValuesوCASTوtoDateTime64. سابقًا، كان يُرفض العدد الكسري مثل1703363853.035، بينما كان العدد الصحيح غير المقتبس مثل1703363853يُقرأ باعتباره القيمة الأولية المُحجَّمة لـDateTime64، ما ينتج عنه طابع زمني1970-.... لا تتأثر السلاسل النصية المقتبسة ومخرجات JSON الخاصة بـ ClickHouse. #108091 (Alexey Milovidov). - تغيّرت القيمة الافتراضية لـ
max_insert_threadsمن1إلىauto، التي تُحوَّل إلى عدد أنوية CPU المتاحة للخادم. يؤدي ذلك إلى تنفيذINSERT SELECTبالتوازي افتراضيًا، ويمكن لـmax_insert_threadsالآن أيضًا تنفيذ جانب الكتابة في عمليةINSERTعادية بالتوازي عندما يمكن لمسار الكتابة إلى الوجهة أن يتفرع بأمان. قد يغيّر ذلك عدد الأجزاء التي تنشئها هذه الاستعلامات وترتيب الصفوف المُدرجة. لاستعادة السلوك السابق، اضبطmax_insert_threadsعلى1، أو اضبطcompatibilityعلى إصدار أقدم من26.8. #109000 (Alexey Milovidov). #109006 (Alexey Milovidov). - تحترم محركات قواعد البيانات
PostgreSQLوMaterializedPostgreSQLالآنremote_url_allow_hosts، شأنها شأن محرك الجداولPostgreSQLودالة الجدولpostgresqlوالقواميس المنشأة عبر DDL. عند تهيئةremote_url_allow_hosts، يرفضCREATE DATABASEوATTACH DATABASEالذي ينفذه المستخدم الآن قواعد بياناتPostgreSQLوMaterializedPostgreSQLالتي تشير إلى مضيفين غير مسموح بهم، مع الخطأUNACCEPTABLE_URL. ولا تزال قواعد البيانات الحالية تُحمَّل عند بدء تشغيل الخادم. #111135 (Alexey Milovidov). - يُجري برنامج الترميز التجريبي
ALP(STD)الآن العمليات الحسابية لتحجيمFloat32باستخدامFloat64. يؤدي ذلك إلى تحسين نسب الضغط وإزالة الضغط الذي يكثر فيه توليد الاستثناءات للبيانات العشرية، لكن قد تُفك ترميز قيمFloat32التي كتبتها الإصدارات السابقة بفارق 1 ULP. #111627 (Raufs Dunamalijevs). - أُزيل مصدر القاموس
library. يفشلSOURCE(LIBRARY(...))الآن بالخطأUNKNOWN_ELEMENT_IN_CONFIG، وأصبح إعداد الخادمdictionaries_lib_pathمتقادمًا وليس له أي تأثير. #111980 (Alexey Milovidov). - أُزيل القارئ والكاتب المستندان إلى مكتبة Apache Arrow لتنسيقات
ArrowوArrowStream. وأصبح تنفيذ ClickHouse الأصلي، الذي كان التنفيذ الافتراضي منذ 26.7، هو التنفيذ الوحيد الآن. أصبحت الإعداداتinput_format_arrow_use_native_readerوoutput_format_arrow_use_native_writerمتقادمة: لا تزال مقبولة، لكنها بلا تأثير؛ لذا فإن الاستعلام الذي كان يضبطها على0لفرض تنفيذ Apache Arrow يستخدم الآن التنفيذ الأصلي. #111996 (Alexey Milovidov). - ارفض قيم إعدادات المدة الزمنية (مللي ثانية/ثوانٍ) التي تتجاوز سعة Int64 بالميكروثواني. #112757 (Azat Khuzhin). قد يحدث عدم التوافق هذا فقط إذا استخدمت قيمًا كبيرة على نحو غير معقول أدت إلى تجاوز السعة.
- لم يعد بالإمكان تحديد بيانات اعتماد TLS لمصدر
MySQL(ssl_ca،ssl_cert،ssl_key) كمسارات ملفات من خلال SQL، مثلCREATE NAMED COLLECTIONأو وسائط الاستعلام أوCREATE DICTIONARY، لأن الخادم يفتح تلك الملفات باستخدام امتيازاته الخاصة. تظل المسارات مدعومة في ملف تكوين الخادم. في الحالات الأخرى، مرّر محتوى الشهادة أو المفتاح ضمن المعلمات الجديدةssl_ca_pemوssl_cert_pemوssl_key_pem، والتي تُحجب في السجلات واستعلاماتSHOWكما تُحجب كلمات المرور. #112070 (Alexey Milovidov). - تستخدم عمليات التحقق من الامتيازات لأوامر
SYSTEM ... CACHE ON CLUSTERالآن الامتياز الخاص بكل أمر بدلًا من مجموعة امتيازاتSYSTEM DROP CACHE. يتيح ذلك لحاملي امتياز محدد لذاكرة تخزين مؤقت تشغيل الأمر المطابق له، ويمنع حامل المجموعة من تشغيلSYSTEM SYNC FILESYSTEM CACHE ON CLUSTERدون امتيازSYSTEM SYNC FILESYSTEM CACHE. #114042 (Groene AI). - بالنسبة إلى العروض التي يكون جسمها عبارة عن
SELECTبسيط على جدولDistributedواحد، يُدفع الآن الاستعلام الخارجي بالكامل إلى الشظايا (الإعداد الجديدoptimize_trivial_view_pushdown_to_distributedمفعّل افتراضيًا). يغيّر ذلك السلوك المرئي لهذه العروض: إذ يُمرَّر الآنFINALوSAMPLEالمكتوبان في مرجع العرض إلى الجدول المحلي للشظية بدلًا من تجاهلهما، ولا يتم الإبلاغ عنextremesفي العناقيد ذات الشظية الواحدة. اضبطoptimize_trivial_view_pushdown_to_distributed = 0لاستعادة السلوك السابق. #101791 (simonmichal). - تستخدم أجزاء تصحيح
UPDATEخفيفة الوزن الآن تنسيق v2 جديدًا على القرص، مرتبًا وفقًا لـ (sorting_key..., _block_number, _block_offset) ويُطبّق باستخدام خوارزمية دمج جديدة. تقتصر ذروة الذاكرة على أكبر سلسلة ذات مفتاح فرز متساوٍ بدلًا من التصحيح بالكامل، ولم تعد التحديثات التي تتجاوز حدود الدمج تعود إلى تطبيق Join داخل الذاكرة. تظل أجزاء التصحيح بالتنسيق القديم قابلة للقراءة. أثناء ترقية متدرجة من إصدار سابق لـ 26.8، أبقِpatch_parts_version = 'v1'أو استخدم إعدادcompatibilityإلى أن تتم ترقية جميع النسخ المتماثلة. #103182 (Anton Popov). - أُضيفت عبارة
VALID FOR <interval>إلىCREATE USERوALTER USERكاختصار لعبارةVALID UNTIL. يُحتسب الموعد النهائي لانتهاء الصلاحية عند تنفيذ الاستعلام، وذلك بإضافة الفاصل الزمني المحدد إلى الوقت الحالي، ويُخزَّن بصيغةVALID UNTIL. أصبح العمودvalid_untilفي جدولsystem.usersمن النوعArray(DateTime64(0))بدلًا منArray(DateTime)، لكي تُمثَّل المواعيد النهائية بعد عام 2106 بدقة؛ وينبغي للأدوات التي تقرأ هذا العمود التعامل مع النوع الجديد. #110171 (Alexey Milovidov). - يعيد
EXPLAIN SYNTAXالآن الاستعلام المُعاد تنسيقه كسجلStringواحد (يتضمن أسطرًا جديدة مضمنة) بدلًا من سجل لكل سطر، لذا يصبح خرجه صفًا واحدًا قابلًا للاسترجاع ويمكن استخدامه مباشرةً (مثلًا، يعيدSELECT count() FROM (EXPLAIN SYNTAX ...)القيمة1). يتحكم الخيار الجديدsingle_recordفي ذلك، وقيمته الافتراضية1؛ اضبطsingle_record = 0لاستعادة الخرج السابق بسجل واحد لكل سطر. تحتفظ أنواعEXPLAINالأخرى (PLAN/PIPELINE/AST) بخرجها الشجري سطرًا بسطر. #110479 (Alexey Milovidov). - وُسِّع النطاق المدعوم لـ
Date32من[1900-01-01, 2299-12-31]إلى[0000-01-01, 9999-12-31]ليتطابق معDateTime64. يقبل التحليل والتحويلات الآن النطاق الموسّع بدلًا من حصره بصمت ضمن الحدود القديمة. ملاحظات التوافق مع الإصدارات السابقة: في التحويل الرقميtoDate32(N)، تُفسَّر القيم ضمن[120530, 2932896]الآن كأرقام أيام (تواريخ من2300-01-01إلى9999-12-31) بدلًا من طوابع Unix الزمنية في أوائل عام 1970، بما يتوافق مع القاعدة القائلة إن الرقم الذي يقع ضمن نطاق أرقام الأيام يُعد رقم يوم؛ وتُشبَع الأرقام الأقل من رقم يوم0000-01-01والطوابع الزمنية التي تلي9999-12-31عند الحدود الجديدة. #111534 (Alexey Milovidov). - لم تعد
arrayIntersectوarraySymmetricDifferenceتعاملان القيمة المكررة ضمن وسيطة واحدة كما لو أنها ظهرت في عدة وسيطات. قد تُرجع الاستعلامات التي تعتمد على السلوك السابق نتائج مختلفة الآن: تُرجعarrayIntersect([1], [2], [1, 1])القيمة[]بدلًا من[1]، وتُرجعarrayIntersect([1, 2], [2], [1, 1, 2])القيمة[2]بدلًا من[1, 2]، وتُرجعarraySymmetricDifference([1], [2], [1, 1])القيمة[2, 1]بدلًا من[2]. تكفي وسيطتان بالفعل لـarraySymmetricDifference: تُرجعarraySymmetricDifference([1], [2, 2])القيمة[2, 1]بدلًا من[1]. لا تُحتسب القيمة ضمن وسيطة الآن إلا إذا كانت موجودة في كل الوسيطات السابقة، لذا تحتوي النتيجة على القيم الموجودة في جميع الوسيطات فقط. وكجزء من التغيير نفسه، تنشئarrayIntersectجدول التجزئة الخاص بها من أصغر وسيطة بدلًا من جميع الوسيطات، ما يجعلها أسرع بما يصل إلى 1.85 مرة وتستهلك ذاكرة أقل بمقدار الثلث عندما تختلف أحجام الوسيطات بدرجة كبيرة. لا تتأثرarrayUnion. #113021 (Alexey Milovidov). - تمنع
disable_insertion_and_mutationالآن الاستهلاك في الخلفية من جداولKafkaوRabbitMQوNATS، مع الاستمرار في السماح بالكتابة المباشرة إلى التخزين الخارجي. لا تهيئ جداولKafka2وNATSوRabbitMQالمحكومة مستهلكين لعملياتSELECTالمباشرة. يتطلب إعدادmessage_queue_disable_insertionالمُضاف مؤخرًا الآن إعادة تشغيل الخادم. #113660 (Christoph Wurm). - يُرفض الآن استخدام
PARTITION BYأوORDER BYفي دالة نافذة على عمودAggregateFunctionمع الخطأILLEGAL_COLUMN، كما كان الحال بالفعل معORDER BYذي المستوى الأعلى على مثل هذا العمود. سابقًا، كان هذا الاستعلام يُقبل لدى محلل واحد على الأقل، وكانPARTITION BYفي دالة النافذة يقسم البيانات بصورة مختلفة وفقًا لـmax_threads. يشمل الرفض أيضًا حالة متداخلة فيArrayأوTupleأوMapأوVariantأوSimpleAggregateFunction. لا تتأثرSimpleAggregateFunctionعلى نوع عادي، ولاQBit، ولاGROUP BYوDISTINCTعلى حالة. #113878 (Groene AI). - لم يعد الإعداد
include_fromيستخدم/etc/metrika.xmlافتراضيًا. سابقًا، كان هذا الملف يُستخدم لإجراء استبدالات التكوين كلما كان موجودًا، رغم عدم وجود أي إشارة إليه في تكوين ClickHouse. إذا كنت تعتمد على ملف الاستبدالات الضمني هذا، فأضف<include_from>/etc/metrika.xml</include_from>صراحةً إلى كل ملف تكوين متأثر؛ وتحتاج ملفاتusers.xmlالمحمّلة بصورة منفصلة وتكوينات قواميس XML إلى عنصرinclude_fromخاص بها. #114161 (Alexey Milovidov). - يقبل محرك الجدول
NATSالآن بيانات اعتماد مضمنة في الإعداد الجديدnats_credentials(بالحمولة نفسها لملف.creds)، ولم يعد يقبلnats_credential_fileعبر SQL: إذ يشير المسار إلى ملف على نظام ملفات الخادم، يفتحه الخادم بصلاحياته الخاصة؛ لذلك لا يمكن تحديده إلا ضمن مجموعة مسماة معرّفة في ملف تهيئة الخادم، أو باسمnats.credential_fileفي تهيئة الخادم نفسها. يمكن للاستعلام استبدال هذا المسار المُهيأ بـnats_credentialsالمضمنة، ما لم يثبّته المشغّل باستخدام<nats_credential_file overridable="false">. تظل الجداول التي أُنشئت قبل هذا التقييد تعمل بعد الترقية. #114644 (Alexey Milovidov). - يمكن أن تستخدم المقاييس غير المتزامنة الآن نوع البيانات
Map، كما حُوِّلت المقاييس لكل نواة CPU ولكل جهاز إلى مقاييس مفتاح-قيمة مفردة: أصبحتOSUserTimeCPU0وOSUserTimeCPU1و… مقياسًا واحدًا باسمOSUserTimeCPU، يتضمن خريطة تربط رقم نواة CPU بالقيمة (وينطبق الأمر نفسه على مقاييسOS*TimeCPU*الأخرى، وCPUFrequencyMHz_*، وTemperature*، وEDAC*، وBlock*_*، وNetwork(Receive|Send)*_*، وDisk*_*، و*BlobsQueueEstimate، وAsyncLogging*QueueSize). يحتويsystem.asynchronous_metricsعلى عمود جديد هوkey_values Map(LowCardinality(String), Float64)(وتكون قيمة العمودvalueهيNaNلهذه المقاييس)، ويسجلهاsystem.asynchronous_metric_logفي صف واحد لكل مفتاح باستخدام عمودkeyجديد، وتصدّرها نقطة نهاية Prometheus مع تسمية، مثلClickHouseAsyncMetrics_BlockReadBytes{device="sda"}، بينما يرسلهاMetricsTransmitterفي Graphite بالصيغة<prefix>.<Metric>.<key>. إذا كانت منظومة المراقبة لديك تقرأ أسماء المقاييس القديمة، فاضبط إعداد الخادم الجديدasynchronous_metrics_key_values_modeعلىlegacy_namesلنشر كل مفتاح مجددًا كمقياس قياسي منفصل باسمه السابق، أو علىbothلنشر الصيغتين في الوقت نفسه أثناء ترحيل منظومة المراقبة؛ ويُطبَّق الإعداد بواسطةSYSTEM RELOAD CONFIGدون إعادة تشغيل. #115333 (Alexey Milovidov). #116791 (Alexey Milovidov).
ميزة جديدة
- أُضيفت تعليمات
CREATE HANDLERوALTER HANDLERوDROP HANDLERلتعريف معالجات HTTP مخصصة من SQL، تُخزَّن محليًا أو في Keeper. وأُضيفت الدالتانcurrentHandlerوcurrentRequestURL، والجدولsystem.handlers، والعمودانhttp_handler_name/http_request_urlفيsystem.query_log. #106231 (Alexey Milovidov). - أُضيفت طريقة للوصول إلى الجداول وقواعد البيانات عبر مسارات URL في واجهة HTTP (مثلًا `/database/table.format.gz?filter=a>0`)، بالإضافة إلى إعدادات جديدة (`http_allow_database_as_path`، `http_allow_table_as_file`، `http_allow_filters_as_path`، `http_allow_filters_as_unrecognized_url_parameters`، `select`، `order`، `sort`، `filter`، `page`، `compression`، `format`، `input_format`، `output_format`، `default_format`، `database`) يمكن تركيبها معًا ومع معامل URL الحالي `query`. #105249 (Alexey Milovidov).
- أُضيفت تنسيقات التأطير التي يحددها الإعداد الجديد
framing_output_format: إذ تجمع أجزاء الاستجابة المختلفة للاستعلام ضمن تدفق استجابة HTTP واحد — مقاطع البيانات، والإجماليات والقيم القصوى، وحزم التقدم، وأحداث التوصيف، وسجلات الخادم، والاستثناءات. تشمل تنسيقات التأطير المنفذة:None(الافتراضي، حيث يعمل كل شيء كما كان سابقًا)، وEventStream(أحداث HTTP التي يرسلها الخادم)، وJSONEachPacketBase64، وJSONEachPacketString(كائن JSON لكل حزمة، ببيانات مرمَّزة بـBase64 أو كسلسلة نصية). #110127 (Alexey Milovidov). - أُضيف إعداد الخادم
default_session_user: وهو المستخدم الذي تتم المصادقة باسمه عند اتصال عميل دون تحديد اسم مستخدم (كان محددًا برمجيًا سابقًا بالقيمةdefault؛ وتقبل الآن البروتوكولات الأصلية وMySQL وPostgreSQL اسم مستخدم فارغًا بدلًا من رفضه، بينما يراعي Arrow Flight هذا الإعداد بدلًا من استخدام القيمةdefaultالمحددة برمجيًا لديه). يمكن لنقاط نهاية البروتوكولات القابلة للتركيب في قسمprotocolsتجاوز هذا الإعداد لكل نقطة نهاية باستخدام المفتاحdefault_session_user، بحيث يمكن لمنافذ الاستماع المختلفة خدمة مستخدمين مجهولين مختلفين. يؤدي تعيينه إلى سلسلة فارغة إلى منع الاتصالات التي لا تحدد اسم مستخدم. لا تستخدم الاتصالات بين الخوادم مستخدم الجلسة الافتراضي مطلقًا. #110179 (Alexey Milovidov). - أُضيف دعم عوامل الأنبوب في استعلامات SQL:
FROM t |> WHERE x > 1 |> AGGREGATE count() AS c GROUP BY y |> ORDER BY c DESC |> LIMIT 10، على غرار صياغة الأنبوب في GoogleSQL. يمكن أن يتبع أي استعلامSELECTسلسلة من عوامل|>، ويلف كل عامل الاستعلام السابق في استعلام فرعي، لذا تكون شجرة AST الناتجة مماثلة لتلك الخاصة بالاستعلام المكافئ ذي الاستعلامات الفرعية المتداخلة. في الاستعلام الذي يبدأ بعبارةFROM، أصبحت عبارةSELECTاختيارية وتكون افتراضيًاSELECT *. #111151 (Alexey Milovidov). - أُضيفت الدالتان
parseQueryToJSONوformatQueryFromJSONلتسلسل AST وإلغاء تسلسلها بصيغة JSON، ولهجةclickhouse_jsonتجريبية تُفعَّل بواسطةenable_json_ast_dialect. #100412 (Alexey Milovidov). #113480 (Nikita Fomichev). - إعداد جديد
run_query_in_background. يقبل الخادم الاستعلام ويعيد نتيجة فارغة فورًا، ثم ينفّذه حتى اكتماله بغض النظر عمّا يحدث للاتصال. تُهمَل النتيجة. تتبّع الاستعلام باستخدامquery_idالخاص به فيsystem.processesوsystem.query_log. مخصص للاستعلامات الطويلة، مثلINSERT ... SELECTأوCREATE TABLE … AS SELECTأوCREATE MATERIALIZED VIEW … POPULATE، التي يجب ألا تتوقف عند انقطاع الاتصال. #112816 (Miсhael Stetsyuk). - أُضيف جدول نظام جديد،
system.user_query_log، يتيح لكل مستخدم عرض سجلات استعلاماته الخاصة دون الحاجة إلى صلاحية الوصول إلى جدول سجل الاستعلامات. يعود التنفيذ الأصلي والفكرة إلى Yue Ni (@niyue)، #104462. #110156 (Alexey Milovidov). - اكتمل تنفيذ العناصر المتبقية من توحيد عناوين URL (المشكلة #59617). يحل الإعداد الجديد
s3_baseعناوين URL النسبية في دالة الجدولs3ومحرك الجدولS3(والدوال التي تشترك في إعداداتهما:s3Clusterوgcsوoss) على نحو مماثل لـurl_base. يعامل محرك قاعدة البيانات الجديدURLأسماء الجداول على أنها عناوين URL، ويحلّها بالاستناد إلى عنوان URL أساسي اختياري، ويوجّهها وفق مخطط URL، بحيث تُعالَج الملفات والويب والتخزين الكائني بصورة موحّدة. ويستبدلFilesystemفي قاعدة البيانات الافتراضية (Overlay) لـclickhouse-localبعنوان URL أساسيfile://، بحيث تستمر أسماء الملفات البسيطة في العمل، ويمكنك أيضًا كتابةSELECT * FROM 'https://example.com/data.csv'. #111512 (Alexey Milovidov). - أُضيفت دالة الجدول
bigqueryومحرك الجدولBigQueryللقراءة من جداول Google BigQuery والكتابة إليها، بما في ذلك مجموعات البيانات العامة. يُستنتج مخطط الجدول من مخطط جدول BigQuery. يدعم الاستيثاق رمز وصول OAuth، ومفتاح حساب خدمة بتنسيقJSON، وعميل OAuth مزودًا برمز تحديث. #110166 (Alexey Milovidov). - أصبح
CREATE MATERIALIZED VIEW ... POPULATEالعادي ذريًا محليًا: يُشترَك العرض في عمليات الإدراج الجديدة في الجدول المصدر، وتُلتقط لقطة للبيانات الموجودة معًا ضمن قفل حصري قصير على المصدر، لذا لم تعد الصفوف المُدرجة عبر الخادم نفسه بالتزامن مع التعبئة تُفقَد أو تتكرر (الإعداد الجديدmaterialized_views_populate_atomically، مفعّل افتراضيًا). يغطي الضمان مسار الإدراج المحلي فقط؛ أما عمليات الإدراج الواصلة إلى نسخة متماثلة أخرى أو عبر مسار كتابة موزّع، فهي خارج هذا النطاق، ويتطلب ذلك مصدرًا قادرًا على توفير لقطة مثبّتة (عائلةMergeTreeوMemory). أما المصادر الأخرى، وكذلكCREATE OR REPLACE/REPLACEوالعروض المنشأة في قواعد بياناتReplicated، فتحتفظ بالتعبئة القديمة غير الذرية. يمكن الآن أيضًا استخدامPOPULATEمعTOلتعبئة الجدول الهدف بالبيانات السابقة. #108715 (Alexey Milovidov). - يمكن لـKeeper الآن تخزين البيانات على القرص ضمن شجرة LSM مخصصة. ويقدم أداءً مماثلًا للتخزين السابق. استخدم إعداد التنسيق
use_lsmt_storage = trueللتمكين، وstorage_memory_only = falseلتخزين الملفات على القرص، وأضفdata_storage_pathأوdata_storage_diskإلى التهيئة لتحديد مكان تخزين الملفات. للكتابة إلى S3، وجّهdata_storage_diskإلى قرص من النوعs3_plain. #113903 (Michael Kolupaev). - فهرس محرك “جداول S3” لبحيرات البيانات، كما في #103220، ولكن مع
INSERTيعمل. #113505 (Konstantin Vedernikov). - أُضيف دعم Snowflake Horizon. يمكنك الآن الاستعلام عن جداول Iceberg الموجودة خلف كتالوج Horizon، كما يمكنك الكتابة إلى جداول Iceberg عبر الكتالوج. #114547 (Melvyn Peignon).
- أُضيف دعم تنسيق الملفات
Puffin. يمكن استخدامه مع دوال الجداولfileوurlوs3وغيرها من الدوال المشابهة. #103936 (Konstantin Vedernikov). - أُضيف دعم وضع الإطار
GROUPSللدوال الإطارية (SQL:2011)، مثلany(price) OVER (PARTITION BY symbol ORDER BY ts GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING). في إطارGROUPS، تُحتسب الحدود حسب مجموعات النظراء بأكملها، وهي مجموعات من الصفوف التي تتساوى في مفتاحORDER BY؛ لذا تعنيN PRECEDING/N FOLLOWINGعددNمن مجموعات النظراء قبل/بعد مجموعة نظراء الصف الحالي، بدلًا من الصفوف الفعلية (ROWS) أو فروق قيمORDER BY(RANGE). #108653 (Nihal Z. Miaji). - أُضيفت دالة الجدول
mergeTreeCodecBlockCounts، التي تعرض، لكل جزء وعمود وتيار فرعي في جدولMergeTree، عدد الكتل المضغوطة التي تستخدم كل codec. #109623 (Raufs Dunamalijevs). - أُضيف نوع البيانات الجغرافية
MultiPoint، ويُخزّن كـArray(Point)، وأُدرج ضمن النوعGeometry. #109951 (David Meng). - أُضيف العمود الافتراضي
_etagلتخزينHDFS. #108255 (Zhang Yifan). - يدعم قارئ
ORCالأصلي وتنسيق الإخراج الآنuniontype، إذ يُعيَّن إلى النوعVariantفي ClickHouse. سابقًا، كانت قراءة هذه الأعمدة تفشل بالرسالةUnsupported ORC type، وكانت كتابتها تفشل بالرسالةILLEGAL_COLUMN. #110078 (Alexey Milovidov). #110085 (Alexey Milovidov). - أُضيف محلل رموز
japaneseللفهارس النصية والدوالtokensوhasAnyTokensوhasAllTokens، ويستخدم المحلل الصرفي MeCab. يُحمَّل القاموس وقت التشغيل من موقع محدد في تهيئة الخادم، ويُتحقق من مطابقته لقيمة تحقق SHA-256 قبل استخدامه. #111420 (Jimmy Aguilar Mena). - أُضيف محلل رموز
chineseللدالةtokensوالفهارس النصية فيMergeTree. يقسم النص الصيني إلى كلمات باستخدام قاموس ونموذج ماركوف المخفي (تتبع الخوارزمية jieba)، وبمستويي دقةcoarse_grained(الافتراضي) وfine_grained. امتدادًا لـ #80174. #89945 (Amos Bird). - أُضيف محلل رموز جديد
icuللفهارس النصية والدوالtokensوhasAnyTokensوhasAllTokens، ويوفر تقسيم كلمات Unicode المراعي للإعدادات المحلية، بما في ذلك التقسيم المستند إلى القاموس للغات مثل الصينية واليابانية والتايلاندية. #109940 (Jimmy Aguilar Mena). - أُضيف مُقسِّم الرموز
splitByRegexpلفهارس النصوص ودالةtokens. يقسم الإدخال إلى رموز باستخدام تعبير منتظم كفاصل، مثلtokenizer = splitByRegexp('[^\p{L}\p{N}#+]+')، ما يتيح الحفاظ على الرموز التي تحتوي على أحرف خاصة، مثلC++أوC#، والتي كانت مُقسِّمات الرموز الأخرى ستجزئها. #110002 (Jimmy Aguilar Mena). - تتضمن لوحة معلومات Keeper عبر HTTP الآن علامة تبويب Cluster تعرض أعضاء Raft في رسم بياني للطوبولوجيا بألوان تشير إلى الحالة الصحية والتأخر والأولوية، ما يتيح لك معرفة العُقد السليمة أو المتأخرة أو التي يتعذر الوصول إليها، وفتح لوحة معلومات القائد مباشرةً. #111655 (yanglongwei).
- يطلب قسم جديد في تهيئة الخادم،
create_union_system_log_tables، إنشاء جداولall_...وصيانتها تلقائيًا (مثلsystem.all_query_log) لإجراء استعلامات اتحاد على جدول سجل النظام وإصداراته المُدوّرة و/أو الجداول نفسها عبر جميع النسخ المتماثلة في مجموعة. تقبل دوال الجداولremoteوremoteSecureوclusterوclusterAllReplicasالآن عبارةSETTINGSلاحقة تتضمن إعدادات تخزينDistributedالذي تنشئه، مثلclusterAllReplicas('default', system.query_log, SETTINGS skip_unavailable_shards = 1). #112670 (Alexey Milovidov). - أُضيف الإعداد
nats_credentialsإلى محرك جداول NATS، مما يتيح للمستخدمين تحديد بيانات اعتماد NATS مباشرةً كسلسلة نصية (مطابقة لمحتوى ملف.creds). #110733 (addshore). - أُضيفت خوارزمية
IEJoinالمعتمدة على الفرز لعمليات الربط التي تحتوي عبارةONفيها على مقارنتَي عدم مساواة (<أو<=أو>أو>=) بين الجدولين المربوطين، وتُفعَّل بإضافةie_joinإلى الإعدادjoin_algorithm. الأنواع المدعومة هيALL INNER/LEFT/RIGHT/FULL JOINوSEMI/ANTI LEFT/RIGHT JOIN. سابقًا، كانت هذه الاستعلامات تُنفَّذ باعتبارهاCROSS JOINمع عامل تصفية (INNERفقط)، وهو أبطأ بكثير مع الجداول الكبيرة. #109920 (Vladimir Cherkasov). - أُضيفت الدالة التجميعية
gini، التي تحسب معامل Gini للقيم العددية المنتهية وغير السالبة، بما في ذلك التجميعات المجمعة والموزعة. #112280 (Amirreza Akhondi). #114643 (Groene AI). - أُضيف تنسيق الإخراج
HiveText، الذي يكتب نصوص Apache Hive بتنسيقLazySimpleSerDe. تُفصل الحقول بواسطة\x01، والصفوف بواسطة الإعدادformat_hive_text_rows_delimiter(القيمة الافتراضية\n)، وتستخدم قيمArrayوMapوTupleالمتداخلة قائمة الفواصل الخاصة بـ Hive. يستهدف الإخراجLazySimpleSerDeالافتراضي في Hive، ولا يتطابق تماثليًا مع إدخالHiveTextفي ClickHouse للقيم المتداخلة أو فواصل الصفوف المخصصة. #107582 (Alexey Milovidov). - أُضيف دعم للتسميات الثابتة في نقطة نهاية مقاييس Prometheus: يضيف قسم
<labels>جديد داخل<prometheus>التسميات المهيأة إلى كل مقياس مكشوف، مما يساعد على التمييز بين مجموعات متعددة يجمع Prometheus مقاييسها. تدعم قيم التسميات استبدالات التهيئة القياسية مثلfrom_env. يُغلق #85969. #111672 (Valery Petrov). - أُضيف الإعداد
always_fetch_mutated_part. عند تفعيله، يمكن لنسخة متماثلة تنزيل الأجزاء المُعدَّلة من نسخة متماثلة أخرى بدلاً من تنفيذ عمليات التعديل محلياً. #113020 (Rory Shanks). - أُضيفت الدالة التجميعية
mergedJSONPatchلتجميع تصحيحات الدمج بأسلوب RFC 7396 عبر قيمJSON، بما في ذلك دعم دمج الحالة واستخدامAggregatingMergeTree. يمكن للمستخدمين تجميع عمودJSONباستخدام طابع زمني أو عمود ترتيب آخر كمفتاح فرز لحساب أحدث حالة. #108349 (larryluogit). - أُضيفت الدالة
aiSimilarityالتي تحسب التشابه الدلالي بين نصين باستخدام نموذج تضمين. وتُرجعNullable(Float32)ضمن[-1, 1]، حيث تعني1أن النصين متطابقان، أوNULLإذا كان أحد المعاملاتNULLأو فارغاً، أو إذا فشل إنشاء تضمينه. #110777 (David Meng). - أُضيفت إعدادات الاستعادة
restore_table_dataوrestore_access_entitiesوrestore_functionsللتحكم الدقيق في العناصر التي تُستعاد. يمكن لهذه الإعدادات تجاوزstructure_onlyلفئات محددة — على سبيل المثال، يستعيدstructure_only=true, restore_access_entities=trueتعريفات الجداول وكيانات الوصول دون بيانات الجداول. #102402 (Nikita Fomichev). - يدعم عامل الفهرسة للمصفوفات مصفوفةً من الأعداد الصحيحة كفهرس: تُرجع
arr[indexes]العناصر الموجودة في جميع المواضع المحددة، بما يعادلarrayMap(i -> arr[i], indexes). #108371 (folly). - أُضيفت الدالة
notHas، وهي نفيhasللمصفوفات والخرائط وJSON. عندما تكون مصفوفة البحث مصفوفة ثابتة، يُعاد تحويلnotHas(constant_array, x)إلىx NOT IN constant_arrayبواسطةoptimize_rewrite_has_to_in(المفعّل افتراضياً)، لذا تُنفَّذ عبر بحث في مجموعة ويمكنها استبعاد البيانات باستخدام فهرس المفتاح الأساسي، مثلNOT IN. #109926 (Nihal Z. Miaji). - تعمل الدالتان
arrayElement(عامل التشغيلvec[n]) وarraySliceالآن مع نوع البياناتQBit: تُرجعqbit[n]العنصر رقم n من المتجه بالدقة الكاملة، وتُرجعarraySlice(qbit, offset, length)إسقاطاً على مجموعة فرعية من الأبعاد. تقرأ كلتاهما مستويات البت لمجموعاتstrideالتي تحتاجان إليها فقط، وتعيد الشرائح المحاذية لحدود مجموعةstrideاستخدام التدفقات المخزنة دون نسخ. يحل هذا المشكلة #109942. #109953 (Utkal Singh). - دعم PNG المتحرك في تنسيق الإخراج
PNG. يحوّل عمودtنتيجة استعلام إلى رسم متحرك، ويُضبط المقياس الزمني لـtبواسطةoutput_format_image_time_multiplier_secondsوoutput_format_image_time_divisor_seconds، بينما يتيحoutput_format_image_streaming_animationكتابة الإطارات أثناء إنتاج الاستعلام لها بدلاً من تخزينها مؤقتاً في الذاكرة. #112846 (Alexey Milovidov). - دالة جديدة
aiRedactتكتشف معلومات تحديد الهوية الشخصية (PII) في النص وتحجبها باستخدام موفر LLM. حدّد الفئات المطلوب حجبها (مثل['email', 'name']) أو مرر مصفوفة فارغة لاستخدام مجموعة افتراضية من فئات معلومات تحديد الهوية الشخصية. تُستبدل القيم المطابقة برمز مميز ([REDACTED]افتراضياً). #110464 (David Meng). - أُضيفت دالة
aiFilterلتقييم شرط مكتوب بلغة طبيعية على نص باستخدام نموذج لغوي كبير (LLM)، وتُرجعUInt8لاستخدامها فيWHEREوPREWHEREوJOIN ... ON. #110594 (yanglongwei). - دعم اتصالات TLS/SSL بـ PostgreSQL لمحرك الجدول
PostgreSQL، ودالة الجدولpostgresql، ومحركَي قاعدة البياناتPostgreSQLوMaterializedPostgreSQL، وقواميسPostgreSQL: sslmodeإلى جانب الشهادات والمفتاح، سواءً كمحتويات حرفية (sslrootcert_pemوsslcert_pemوsslkey_pem؛ تُخفى مثل كلمات المرور) أو كمسارات (sslrootcertوsslcertوsslkey؛ لا تُقبل إلا من مجموعة مسماة محددة في ملف تهيئة الخادم). #110615 (Alexey Milovidov). - يتضمن ClickHouse server الآن منفذًا للاستبطان. وهو مستمع TCP للبروتوكول الأصلي يبدأ قبل أن يشرع الخادم في إرفاق الجداول، ولا يتوقف إلا بعد اكتمال فصلها. خلال هذه الفترة، يمكن للمشغّل الاتصال به باستخدام
clickhouse clientوتشغيل استعلامات مثلSHOW PROCESSLISTأوSELECT * FROM system.stack_traceأوSYSTEM INSTRUMENT ADD 'QueryMetricLog::startQuery' SLEEP ENTRY 0.5. بالإضافة إلى ذلك، زادت القيمة الافتراضية لإعداد الخادمshutdown_wait_unfinishedمن 5 إلى 120 ثانية. كانت القيمة الافتراضية السابقة أقل من فترة استطلاع الاتصالات، لذا كان بإمكان الخادم الخروج قسرًا أثناء الإيقاف بدلًا من انتظار اكتمال الاتصالات المعلّقة. #110838 (Miсhael Stetsyuk). - إضافة مقاييس ZooKeeper محاكية إلى أمر
mntrفي Keeper:zk_leader_uptimeوzk_sum_election_timeوzk_cnt_election_timeوzk_sum_leader_unavailable_timeوzk_cnt_leader_unavailable_time؛ وإضافة مقاييس مرتبطة بالقائد لـ Keeper فقط:KeeperLastLeaderElectionTimeوKeeperLastLeaderUnavailableTime. #113334 (Maxim Orlovsky). - دعم ALTER TABLE … MODIFY PROJECTION لتغيير إعدادات مستوى الإسقاط، مثل index_granularity، لإسقاط موجود دون إعادة بنائه. تُطبَّق الإعدادات الجديدة تدريجيًا عبر عمليات الدمج. #113343 (Diego Gomes Tomé).
- أُضيف عمود
finish_timeإلىsystem.mutationsلتسجيل وقت اكتمال العملية التحويرية. وتعرض العمليات التحويرية غير المكتملة، وكذلك تلك التي لا يُعرف وقت اكتمالها، القيمة صفر. #113474 (Nikita Mikhaylov). - أُضيف مستوى ميزات جديد
private previewبينexperimentalوbeta، فأصبح ترتيب مستويات الميزات:experimental < private preview < beta < production. أُضيف مستوى جديد إلى إعداد الخادمallow_feature_tier: تسمح القيمة0بجميع المستويات، وتستبعد القيمة1الميزات التجريبية، وتستبعد القيمة2أيضًا المعاينة الخاصة، بينما تسمح القيمة3بإعدادات الإنتاج فقط. يجب على التهيئات التي كانت تثبّتallow_feature_tier = 2سابقًا للسماح بإعدادات الإنتاج فقط استخدام القيمة3الآن. يغلق #113481. #113581 (Groene AI). - تتيح واجهة Web SQL UI المضمّنة (
/play) الآن فرز النتائج حسب أعمدتها، وتصفيتها بحسب قيمها، والتنقّل بين صفحاتها دون تحرير الاستعلام. تظهر أسهم الفرز وحقل إدخال للتصفية في رأس كل عمود، وتعرض الخلية المحددة المقارنات المناسبة لقيمتها، ويظهر مرقّم صفحات بحجم صفحة قابل للضبط أسفل النتائج التي لا تتسع في شاشة واحدة. ينفّذ الخادم كل ذلك باستخدام إعدادات إنشاء الاستعلامorderوfilterوlimitوpage، بحيث تُشكَّل النتيجة كاملةً، لا الصفوف المعروضة حاليًا فقط؛ ويُضمَّن الفرز وعوامل التصفية والصفحة المختارة في URL الصفحة، لذا يعيد الرابط المشترك إنتاج النتيجة نفسها. #115540 (Alexey Milovidov). chdigv26.8.1: ratatui، وأجزاء tmux، وجلسات tmuxinator، ومشاركة السجلات بالألوان، وجولة في الميزات. #115216 (Azat Khuzhin).
ميزة تجريبية
- أُضيف مُحسِّن Cascades تجريبي قائم على التكلفة لخطط الاستعلامات الموزعة، ويُفعَّل عبر
enable_cascades_optimizer = 1معmake_distributed_plan = 1. ويختار بناءً على التكلفة المقدّرة بين استراتيجيات الربط shuffle وbroadcast وreplicated وlocal، واستراتيجيات التجميع ثنائي الطور وshuffle وlocal، وtop-N الموزع على مرحلتين، والقراءات المتوازية والمنسوخة، مع إدراج عوامل exchange عند الحاجة. #86353 (Alexander Gololobov). - أُضيف إعداد
MergeTreeتجريبي باسمenable_adaptive_codec_selection. عند تفعيله، تختار عمليات الدمج والتعديلات codec الذي ينتج أصغر حجم لكل block للأعمدة التي تستخدم codec الافتراضي. #111834 (Raufs Dunamalijevs). * أصبح اختيار codec التكيفي يضغط الآن بكل codec مرشح مرة واحدة على الأكثر لكل block، بدلًا من قياس جميع المرشحين ثم إعادة ضغط الفائز. #113511 (Raufs Dunamalijevs). - أصبح من الممكن بناء الملف التنفيذي
clickhouseلـ WebAssembly (wasm64، عبر Emscripten)، ويشغّلclickhouse localالاستعلامات، بما فيها جداولMergeTree، ضمن Node.js ≥ 24 وفي المتصفح. وتثبّت مهمة CI جديدة باسمBuild (wasm64)مسار البناء ومسار التنفيذ في Node.js (ولا يزال مسار المتصفح غير مغطّى بواسطة CI)، وتوفّر وحدة WebAssembly كـ artifact. #113404 (Alexey Milovidov). - يختار
parallel_replicas_plan_basedالآن الحد الفاصل بين التنفيذ المحلي والبعيد عبر تحسين خطة الاستعلام، ويمكنه موازاة الاستعلامات على views تحتوي علىUNIONدونparallel_replicas_allow_view_over_mergetree، ويعود إلى الخطة المحلية لاستعلاماتIN (subquery)بدلًا من الفشل، كما يوزّع الآن عملياتJOINالمؤهلة (INNERوLEFTوRIGHT، بما فيهاSEMI/ANTI). #111063 (Igor Nikonov). #112268 (Igor Nikonov). #112443 (Igor Nikonov). - تدعم خطط الاستعلامات الموزعة (
make_distributed_plan) الآن أيضًا الاستعلامات التي يُعرف وقت التخطيط أن مصدرها لن ينتج أي صفوف، مثل القراءات من جدولMergeTreeفارغ. #111941 (Groene AI). - أُضيف إعداد
use_projection_index_in_read_pools، وهو معطّل افتراضيًا. عند تفعيله، تُستبعد النطاقات التي ترشّحها projection أو skip index بالكامل داخل مجموعات القراءة لـMergeTreeقبل إنشاء مهام قراءة لها، بدلًا من تخطيها granule تلو الآخر أثناء القراءة. ويجنب ذلك إنشاء مهام القراءة وإعداد القارئات للبيانات التي لن تُقرأ. #110291 (Nikolai Kochetov). #112296 (Anton Popov). - PromQL: أُصلحت العمليات على المتجهات الفورية من دون tags، مثل
vector(1) + vector(2)وtopk(1, vector(1))وlabel_replace(vector(1), ...)والعوامل الثنائية معon()، التي كانت تفشل بسبب خطأ في النوع. #111872 (Valery Petrov). - PromQL: نُفِّذت الدالتان
changesوresets. #112352 (Valery Petrov). - الإبلاغ عن الخطأ الذي أدى إلى إلغاء استعلام موزع (
make_distributed_plan = 1) بدلًا من الاكتفاء بـQUERY_WAS_CANCELLED. في السابق، لم يكن الخطأ الفعلي لمهمة العامل التي فشلت ظاهرًا إلا في سجل الخادم. #112590 (Alexander Gololobov). - عند استخدام
make_distributed_plan = 1، يعطّل ClickHouse الآن الميزات التي لا تدعمها خطط الاستعلام الموزعة بعد، بدلًا من السماح بفشلها لاحقًا. يغلق #109476. #112463 (alesapin). - تستخدم خطط الاستعلام الموزعة (
make_distributed_plan) الآن التحقيق الكسول لاستعلاماتORDER BY ... LIMIT k. #113111 (Shankar Iyer). - دعم دوال النافذة غير المقسمة (
OVER (ORDER BY ...)) في خطط الاستعلام الموزعة (make_distributed_plan). في السابق، كان أي استعلام يتضمن دالة نافذة يفشل لأنWindowStepلم يكن قابلًا للتسلسل من أجل التنفيذ عن بُعد؛ ولا تزال النوافذ التي تتضمنPARTITION BYمرفوضة حاليًا. #109802 (Vighnesh Pathrikar). - أُضيف الإعداد
use_query_condition_cache_for_top_k، الذي يفعّل ذاكرة التخزين المؤقت لشروط الاستعلام لاستعلاماتORDER BY ... LIMIT n(TopK). #111492 (Alexey Milovidov). أصبحت ذاكرة التخزين المؤقت لشروط الاستعلام مفعّلة افتراضيًا للاستعلامات التي تستخدم تحسينORDER BY <column> LIMIT n(TopK). ويمكن تعطيلها مجددًا باستخدام الإعدادuse_query_condition_cache_for_top_k. #114539 (Alexey Milovidov). - أُضيفت ألفة ثابتة بين الأقسام والشظايا لـ
StorageKafka2عبر الإعدادينkafka_partition_shard_numوkafka_shard_count، ما يتيح لعدة شظايا في ClickHouse استهلاك مجموعات فرعية منفصلة من أقسام Kafka بصورة حتمية. #108886 (johnjing). - تعزيز أمان دوال AI التجريبية: رفض نقاط النهاية غير الآمنة (
http) للمضيفين البعيدين افتراضيًا (الإعداد الجديدai_function_allow_insecure_endpoint)، وتقييد استدعاءات واجهة برمجة التطبيقات الصادرة لكل استعلام افتراضيًا (أصبحت القيمة الافتراضية لـai_function_max_api_calls_per_queryهي1000)، وتنقية استجابات أخطاء المزوّد المكتوبة في السجلات. #111286 (George Larionov). - PromQL: تُرجع
quantileذات مستوى كمي خارج [0, 1] الآن -Inf/+Inf/NaN، كما في Prometheus، بدلًا من إلقاء خطأ، وتتجاهلhistogram_quantileالآن سلاسل الإدخال التي تكون تسميةleفيها مفقودة أو غير قابلة للتحليل، كما في Prometheus. #111871 (Valery Petrov). - السماح بالمعرّفات متعددة المكونات في جداول TimeSeries. #112799 (Vitaly Baranov).
- أُضيف إعدادا
TimeSeries، وهماsamples_index_granularityوtags_inner_granularity، للتحكم في دقة الفهرس للجداول الداخلية. #113075 (Vitaly Baranov). - PromQL: أُضيفت الدالة
derivوأُصلح خطأ كانت فيه دالة التجميع الداعمة لها تُرجع قيمًا أصغر بمقدار 1000 مرة مع الطوابع الزمنية بدقة المللي ثانية. #112360 (Valery Petrov). - PromQL: رفض تسلسلات الهروب غير الصالحة عبر المحددات في السلاسل النصية ونقاط شيفرة Unicode البديلة غير الصالحة. #113587 (Minh Vu). #113203 (Minh Vu).
- PromQL: الحفاظ على القيم المنتهية عند استخدام باقي القسمة مع قاسم لا نهائي. #113746 (Minh Vu).
- PromQL: يمكن الآن استدعاء دوال التاريخ والوقت
hourوminuteوmonthوyearوday_of_weekوday_of_monthوday_of_yearوdays_in_monthدون وسيطات، بحيث تستخدمvector(time())افتراضيًا كما في Prometheus. #111869 (Valery Petrov). - يدعم PromQL الآن المعلمة
lookback_deltaفي واجهة برمجة تطبيقات HTTP لـ Prometheus للاستعلامات الفورية واستعلامات النطاق. #113971 (Minh Vu). - تدعم خطط الاستعلامات الموزعة (
make_distributed_plan) الآنIN (subquery)دون إعادة كتابتها إلىJOIN: تُبنى المجموعة مرة واحدة على العقدة البادئة وتُرسل قيمها مع مهام العاملين. أُزيل التجاوز الإجباريrewrite_in_to_join، بينما تظل إعادة الكتابة متاحة كإعداد صريح. #113826 (Alexander Gololobov). - تدعم استعلامات البث العلامات المائية. #106169 (Mikhail Artemenko).
- أُضيفت ذاكرة تخزين مؤقت لنظام الملفات للقراءة العابرة إلى مسار القراءة التجريبي
ReaderExecutor(use_reader_executor، معطّل افتراضيًا). #110029 (Sema Checherinda). - PromQL: تنفيذ الدوال
clampوclamp_minوclamp_maxوround. #111870 (Valery Petrov). - جمع إحصاءات عمليات الإدراج والاستعلامات بشكل صحيح عبر نقطة نهاية Prometheus remote-write. #112825 (James Cunningham).
- تقبل عوامل التجميع في PromQL الآن استخدام الأحرف الكبيرة والصغيرة معًا، بما يتوافق مع Prometheus. #114076 (Minh Vu).
- TimeSeries: تخزين جميع الوسوم في العمود
tags. #114300 (Vitaly Baranov). - تطبيق تحسين القراءة بالترتيب على استعلامات
ORDER BYعند تمكينparallel_replicas_plan_based: يُرسل الفرز الآن إلى النسخ المتماثلة ويُدمج على العقدة البادئة، بحيث تقرأ كل نسخة متماثلة وفق ترتيب مفتاح الفرز. كما يُصلح الخطأUnknown function __topKFilterعند استخدامORDER BYعلى عمود ليس ضمن المفتاح الأساسي مع تمكين هذا الإعداد. #114315 (Igor Nikonov). - رفض محارف تغذية السطر الحرفية في سلاسل PromQL العادية المقتبسة. #114381 (Minh Vu).
- إصلاح مفاتيح
GROUP BYالمكررة في استراتيجية التجميع الجزئي لـmake_distributed_plan، والسماح بهذه الاستراتيجية للتجميعات عبر قراءة موزعة. #114523 (Alexander Gololobov). - طرح استثناء عند مخالفة قائمة السماح الخاصة بأنواع الفهارس الافتراضية في WHATIF. #114646 (Yarik Briukhovetskyi).
- استعادة قراءة الأعمدة الفرعية المُكمَّمة للبحث المتجهي (أُضيفت في 26.7). #114763 (Shankar Iyer).
- لم يعد محرك الجدول التجريبي
TimeSeriesيطبّق برنامج الترميزGorillaعلى أعمدةvalueالمُنشأة تلقائيًا في جدول العينات الداخلي؛ إذ تستخدم الآنCODEC(ZSTD(1))افتراضيًا. تحتفظ الأعمدة المُعرَّفة صراحةً ببرامج الترميز التي حدّدها المستخدم. ولم يتغير الإعداد الافتراضي للعمودtimestamp(CODEC(DoubleDelta, ZSTD(1))). #114790 (Nikita Mikhaylov). - أصبح استعلام الخطة الموزعة (
make_distributed_plan) يوقف مراحله السابقة عند استيفاءLIMIT، بدلًا من حساب النتيجة كاملةً ثم تجاهلها. #114806 (Alexander Gololobov). - أُضيفت طبقة لذاكرة التخزين المؤقت للصفحات في مساحة المستخدم إلى مسار القراءة في
ReaderExecutorالتجريبي (use_reader_executor، معطلة افتراضيًا). وعند عدم العثور على البيانات، يملأ المنفذ الآن ذاكرة التخزين المؤقت للصفحات في مساحة المستخدم ويخدم القراءات اللاحقة منها دون نسخ. #114890 (Sema Checherinda). - دعم
ROLLUPوCUBEوGROUPING SETSوالدالةgroupingفي الاستعلامات المنفذة باستخدامmake_distributed_plan = 1. #114950 (Alexander Gololobov). - إصلاح الخطأ
Illegal type Decimal(18, 0) of argument of function toIntervalNanosecondعندما يستخدم استعلام PromQLoffsetداخل محدد نطاق، مثلrate(m[2m] offset 5m). #114997 (Nikita Mikhaylov). - لم يعد ضبط
distributed_plan_workers_numعلى قيمة كبيرة جدًا يتسبب في إنهاء الخادم بسببstd::length_errorعند تمكين الميزتين التجريبيتينmake_distributed_planوenable_cascades_optimizer. ويُرفض الآن عدد العُقد هذا باستخدامINVALID_SETTING_VALUE. #115398 (Groene AI). - دعم تجميع
GROUPING SETSفي الخطط الموزعة التي ينشئها مُحسِّن Cascades (make_distributed_plan = 1, enable_cascades_optimizer = 1). #115426 (Alexander Gololobov). - يمكن لجداول
TimeSeriesالآن الاحتفاظ بجدول “عينات حديثة”: عندما يكون إعداد المحرك الجديدrecent_samples_ttl_secondsغير صفري، ينشئ المحرك نسخة من جدول العينات مزودة بـ TTL (مقسمة حسبrecent_samples_partition_by، وبحسب اليوم افتراضيًا) ويكتب إليها عند كل إدراج. وتقرأ استعلامات PromQL التي يقع نطاقها الزمني ضمن نافذة TTL منها تلقائيًا، مما يجعل قواعد التنبيه والتسجيل ولوحات المعلومات ذات النطاق الزمني القصير أسرع عدة مرات في الجداول الكبيرة. يمكن تعطيل هذا التفضيل باستخدام الإعداد الجديد على مستوى الاستعلامtime_series_prefer_recent_samples_table. #115441 (Nikita Mikhaylov). - تنفيذ استعلام SELECT من TimeSeries. #115622 (Vitaly Baranov).
- تنفيذ نقطة النهاية
/api/v1/seriesمن واجهة برمجة تطبيقات HTTP لـ Prometheus لجداولTimeSeries: محددات السلاسلmatch[](تُعامل القيم المتكررة كاتحاد)، ونطاق زمني اختياريstart/end، ومعلمةlimitاختيارية. #115676 (Nikita Mikhaylov). - أصبحت خطط الاستعلامات الموزعة (
make_distributed_plan) توقف المراحل السابقة الخاملة بسرعة بعد استيفاءLIMIT: إذ يقرأ مستقبِل التبادل الخاملNoMoreDataNeededفور وصولها، بينما يلاحظ مصدر التبادل الخامل إغلاق مخرجه ويمرّر الإيقاف إلى المراحل السابقة. في السابق، كانت هذه المراحل تواصل قراءة البيانات ومعالجتها رغم عدم استهلاكها. #115690 (Alexander Gololobov). - يمكن الآن للنسخ المتماثلة المتوازية التلقائية جمع إحصاءات وقت التشغيل وتمكين النسخ المتماثلة المتوازية للاستعلامات المدعومة عند تمكين
parallel_replicas_plan_based. #115788 (Igor Nikonov). - تسجيل جدول العينات الحديثة الخارجي لجدول TimeSeries باعتباره تبعية مرجعية. #115944 (Groene AI).
تحسين الأداء
- خوارزمية تكيفية جديدة لـ
GROUP BYالمتوازي (يتحكم بها الإعدادenable_adaptive_aggregator، وهي مفعّلة افتراضيًا): يُجمّع كل خيط تنفيذ في جدول التجزئة الخاص به إلى أن يبلغadaptive_aggregator_freeze_thresholdمفتاحًا، ثم يجمّده. وبذلك تواصل المفاتيح المتكررة تحديث الجداول الصغيرة المقيمة في الذاكرة المؤقتة دون حاجة إلى تنسيق، بينما تُوجَّه المفاتيح النادرة وفق تجزئتها إلى قوائم انتظار متراكمة خاصة بكل حاوية، وتُجمّع مرة واحدة فقط ضمن الدمج المتوازي للحاويات. #111459 (Nihal Z. Miaji). - تقليل استخدام الذاكرة في جداول
MergeTreeالتي تضم العديد من أجزاء البيانات، عبر مشاركة بيانات التعريف الخاصة بكل جزء والمشتقة من المخطط (قائمة الأعمدة، وأوصاف الأعمدة، والتسلسلات، والتدفقات الفرعية للأعمدة) بين أجزاء الجدول بدلًا من نسخها إلى كل جزء. ويكون التأثير أكبر في الجداول العريضة التي تضم العديد من الأجزاء الصغيرة. #109816 (Raúl Marín). - تحسين استعلامات
GROUP BY ... ORDER BY ... LIMITوGROUP BY ... LIMITعبر الاحتفاظ بكومة محدودة أثناء التجميع لاستبعاد المجموعات التي لا يمكن أن تظهر في النتيجة، مما يقلل استخدام الذاكرة ووقت التنفيذ بدرجة كبيرة عند التجميع عالي الكاردينالية. يتحكم بذلك الإعدادenable_group_by_top_k_optimization. استنادًا إلى التنفيذ الأولي من Dmitriy Terenichev (#78553). #96630 (Konstantin Bogdanov). - تقليل حجم خلايا جدول التجزئة لمفاتيح التجميع المفردة من نوع
String، مما يحسن أعباء عملGROUP BYكثيفة السلاسل النصية. الإعداد الجديدenable_packed_string_keys_in_aggregationمفعّل افتراضيًا؛ ويؤدي تعطيله، أو ضبطcompatibilityعلى قيمة أقل من26.8، إلى استعادة أسلوبStringHashTableالقديم، الذي قد يظل أسرع للتجميع منخفض الكاردينالية جدًا عندما تزيد المفاتيح على 11 بايتًا. #110573 (Harikrishnan Prabakaran). #112089 (Harikrishnan Prabakaran). - موازاة الدمج النهائي لجداول تجزئة التجميع أحادية المستوى باستخدام الإعداد الجديد
enable_parallel_single_level_merge، المفعّل افتراضيًا. يسرّع ذلك استعلاماتGROUP BYالتي تبقى فيها جداول التجزئة الخاصة بكل خيط تنفيذ دون عتبة المستوى الثنائي، لكن يهيمن دمجها على زمن التنفيذ. #110395 (Nihal Z. Miaji). - تحسين أداء
DISTINCTعندما يكون تدفق الإدخال مرتبًا حسب بادئة من أعمدة التمييز، مثلSELECT DISTINCT a, b FROM table ORDER BY a. يمكن أن تعمل هذه الاستعلامات بسرعة أكبر تصل إلى 2.4 مرة. #110170 (Nihal Z. Miaji). - تسريع استعلامات
DISTINCTوتقليل استخدامها للذاكرة في جداولMergeTreeالمقسّمة، عبر إبقاء صفوف كل قسم ضمن تدفق واحد، بحيث يعملDISTINCTالأولي لكل تدفق على مجموعة مفاتيح منفصلة، بدلًا من ظهور مجموعة المفاتيح نفسها في عدة عملياتDISTINCTأولية. ينطبق ذلك عندما يكون تعبير التقسيم دالة حتمية لأعمدةDISTINCT، ويخضع لآلية استدلالية للتكلفة تستند إلى عدد الأقسام والانحراف (يمكن تفعيلها أو تعطيلها عبر الإعدادforce_distinct_partitions_independently، وهو معطّل افتراضيًا). ويُمرَّر هذا الانفصال بين الأقسام عبر خطواتExpressionوFilterوARRAY JOINإلى مستهلكاتDISTINCTوLIMIT BYوGROUP BYالنهائية، بحيث يمكنها أيضًا تجاوز الدمج. يتحكم بذلك الإعدادان الجديدانallow_distinct_partitions_independently(مفعّل افتراضيًا) وmax_number_of_partitions_for_independent_distinctلضبط الآلية الاستدلالية. #108326 (Nihal Z. Miaji). - تم تحسين الدوال
uniqوuniqExactوuniqHLL12في عمليات التجميع دون مفتاح. #110150 (Anton Popov). - أصبح بإمكان قارئ
ParquetV3 تجاوز مجموعات الصفوف بالكامل باستخدام صفحة القاموس، إلى جانب إحصاءات الحد الأدنى/الحد الأقصى ومرشحات Bloom، في شروط المساواة وINعندما يكون جزء العمود مرمّزًا بالكامل بالقاموس. يتحكم في ذلك الإعداد الجديدinput_format_parquet_dictionary_filter_push_down. #106952 (Alexey Milovidov). #110567 (Alexey Milovidov). - المَوضعة الكسولة عند قراءة ملفات
Parquetمن تخزين الكائنات، بما في ذلك جداولIceberg: في استعلاماتORDER BY ... LIMIT n، لا تُقرأ الأعمدة غير اللازمة للفرز والتصفية إلا للصفوفnالتي تبقى بعد تطبيقLIMIT. في ملفParquetبحجم 200 MB علىS3، يقرأSELECT k, s ... ORDER BY k DESC LIMIT 10مقدار 3.3 MB بدلًا من 171 MB (عمليات I/O أقل بـ51 مرة وأسرع بـ8 مرات). يتحكم في ذلك الإعداد الجديدquery_plan_optimize_lazy_materialization_for_object_storage(مفعّل افتراضيًا، ويتطلب أيضًاquery_plan_optimize_lazy_materialization). #110970 (Alexey Milovidov). * تنطبق المَوضعة الكسولة لاستعلاماتORDER BY ... LIMIT n(#110970) الآن أيضًا على ملفات Parquet المحلية المقروءة باستخدام دالة الجدولfileومحرك الجدولFile: لا تُقرأ الأعمدة غير اللازمة للفرز والتصفية إلا للصفوفnالتي تبقى بعد تطبيقLIMIT. تفشل القراءة الثانية لملف باقٍ بأمان مع الخطأ الجديدFILE_CHANGED_DURING_READإذا عُدّل الملف بين المرحلتين. يتحكم في ذلك الإعداد الجديدquery_plan_optimize_lazy_materialization_for_file(مفعّل افتراضيًا). كما يُصلح فشل المَوضعة الكسولة لتخزين الكائنات مع الخطأNot found column or subcolumn ... in blockعند تأجيل عمود فرعي مطلوب (مثل عمود فرعي من عمودJSON). #114262 (Alexey Milovidov). - تُجرى مَوضعة إحصاءات الأعمدة الآن عند
INSERTافتراضيًا إذا كان مجموع الحجم النشط الحالي للجدول وحجم الكتلة المكتوبة لا يتجاوز الإعداد الجديدmaterialize_statistics_on_insert_max_table_size(القيمة الافتراضية 25 GiB)؛ ويُفحص ذلك لكل كتلة مكتوبة، لذا قد تستمر أول عملية تحميل مجمّع إلى جدول فارغ في مَوضعة الإحصاءات لكل كتلة مكتوبة. يتيح ذلك لمُحسّن الربط المستند إلى التكلفة تقديرات دقيقة لجداول الأبعاد المحمّلة حديثًا، ويتجنب ترتيبات الربط غير المثلى (فعلى سبيل المثال، لم يعد TPC-H Q5 وQ8 ينتهيان بمهلة عند عامل مقياس 40)، بينما تستمر جداول الحقائق الكبيرة القائمة في مَوضعة الإحصاءات أثناء عمليات الدمج. #109454 (Alexey Milovidov). - تسريع الدوال النافذة في جداول
MergeTreeالمقسّمة بقراءة كل قسم عبر تدفقه الخاص وتقييم النوافذ لكل قسم، مع تجاوز إعادة التوزيع باستخدام التجزئة التي تعيد عادةً خلط كل صف بين الخيوط قبل فرز النافذة. ينطبق ذلك عندما يكون تعبير تقسيم الجدول دالة حتمية لأعمدةPARTITION BYالخاصة بالنافذة، ويخضع لنفس آلية استدلالية للتكلفة الخاصة بـGROUP BY/DISTINCTلكل قسم (عدد كافٍ من الأقسام مقارنةً بـmax_threads، وعدم وجود قسم مهيمن). تتحكم في ذلك الإعدادات الجديدةallow_window_partitions_independently(مفعّل افتراضيًا) وforce_window_partitions_independentlyوmax_number_of_partitions_for_independent_window. #114783 (Nihal Z. Miaji). - تقليل استخدام الذاكرة عند كتابة الأجزاء المعبأة عبر بث الأرشيف النهائي مباشرةً إلى الملف الوجهة بدلًا من الاحتفاظ بنسخة كاملة ثانية في الذاكرة أثناء تثبيت الجزء. #111995 (Alexey Milovidov).
- أُضيفت قيمة جديدة لـ
join_algorithmهيparallel_full_sorting_merge: بالنسبة إلى عمليات الربط بالمساواة المتوافقة مع التجزئة، تُقسِّم عملية ربط دمج بفرز كامل حسب تجزئة مفاتيح الربط إلى عمليات ربط دمج مستقلة لكل جزء، تعمل على جميع الخيوط. وتحافظ على انخفاض استخدام الذاكرة بأسلوب البث في ربط الدمج مع إتاحتها بالتوازي (في اختبار معياري، أسرع بنحو 2.4x وتستهلك ذاكرة أقل بنحو 3.3x منparallel_hash). تعود عمليات ربطASOFإلىfull_sorting_mergeواحد؛ أما أنواع المفاتيح غير المتوافقة مع التجزئة (ذات الفاصلة العائمة،JSON،Object،Dynamic) فتتخطى فقط إعادة كتابة التوزيع بالتجزئة، ويمكن مع ذلك تقسيمها عند المصدر حسب نطاقات المفتاح الأساسي عند تمكينquery_plan_join_shard_by_pk_ranges. النتيجة غير مرتبة. #109005 (Alexey Milovidov). - إضافة تقليم مكاني لـ GeoParquet على مستويي مجموعات الصفوف والصفحات إلى قارئ
Parquet. يتخطى تقليم مجموعات الصفوف مجموعات الصفوف كاملةً عندما لا يتداخل صندوقها المحيط مع هندسة الاستعلام. ويستخدم التقليم على مستوى الصفحة فهرس العمودcovering.bboxلتخطي الصفحات غير ذات الصلة داخل مجموعات الصفوف، كما يُطبَّق الآن دفع المسندات المكانية أيضًا أثناء قراءة صفوفParquet. #104435 (Vasily Chekalkin). - يدعم دفع المرشحات في Parquet (تقليم مجموعات الصفوف وفهرس الأعمدة) المزيد من تحويلات الأنواع:
DateTime64(x) <-> DateTime64(y)،Decimal(x) <-> Decimal(y)،Float32 <-> Float64. #110457 (Michael Kolupaev). - تقليل طلبات القراءة المكررة على الأقراص البعيدة عندما تكون نطاقات العلامات مجزأة، مثلًا بسبب الفهارس الأساسية أو فهارس التخطي. #113584 (Anton Popov).
- تسريع تنفيذ
INعلى الأعمدة المجمعة (مثلًا، المرتبة حسب المفتاح الأساسي) عبر إعادة استخدام نتيجة الصف السابق للصفوف المتتالية المتساوية. #114853 (Nikita Mikhaylov). - لم يعد التجميع دون مفاتيح
GROUP BYيوزع مخرجه المكوَّن من صف واحد على تدفقاتmax_threads، لذا تحصل الاستعلامات التي تستمر خطتها بعد هذا التجميع على مسار تنفيذ أصغر بكثير (معالجات أقل للإنشاء والجدولة وقياس الأداء) من دون فقدان أي توازٍ. #115170 (Nikita Mikhaylov). - يقرأ Keeper الآن إدخالات سجل التغييرات مع تنازع أقل على القفل: تُخطَّط قراءات الاستدراك تحت قفل مشترك وتُنفَّذ عمليات إدخال/إخراج القرص دون قفل، كما يمكن لكل من استدراك المتابع ومسار الالتزام فك ترميز الإدخالات مسبقًا في تجمع خيوط خلفي، مما يقلل قراءات القرص الزائدة وفك الترميز على المعالج في القائد. #108473 (Antonio Andelic).
- تسريع بدء تشغيل Keeper بقراءة عدة ملفات سجل التغييرات بالتوازي بدلًا من قراءتها تسلسليًا، ويتحكم في ذلك الإعدادان الجديدان
log_startup_read_max_streamsوlog_startup_read_buffer_size. #109881 (Antonio Andelic). - إضافة نوع مخطط جديد
bucketedلـsystem.metric_log، يخزن جميع المقاييس في عمود واحد من نوعMap(Enum16(...), Int64)باستخدام تسلسلMapالمقسم إلى حاويات مع 128 حاوية، بالإضافة إلى عمودALIASلكل مقياس للتوافق: يتكون الجدول من بضعة أعمدة بدلًا من آلاف الأعمدة، ولا تُخزَّن القيم الصفرية، وعند قراءة مقياس واحد لا تُقرأ سوى حاوية واحدة من الحاويات الـ128. بالإضافة إلى ذلك، يمكن الآن فهرسةMapبمفاتيحEnumباستخدام الاسم النصي لقيمة التعداد، مثلmap['name']. #115380 (Alexey Milovidov). - أُضيف تحسين لخطة الاستعلام يدفع الدوال التي تقلل حجم البيانات (
length،lengthUTF8،empty،notEmpty) إلى ما قبل خطوتَيSortingوFilter، باستبدال وسيطةString/FixedStringكبيرة الحجم بنتيجتها ثابتة الحجم، بحيث لا تُخزَّن مؤقتًا أثناء الفرز ولا تُنسخ أثناء التصفية. يتحكم في ذلك الإعداد الجديدquery_plan_push_down_volume_reducing_functions، وهو مفعّل افتراضيًا. #106199 (Peng). - أصبح
read_in_order_use_virtual_rowمفعّلًا افتراضيًا. عند القراءة وفق ترتيب المفتاح الأساسي (مثلًاORDER BY primary_key LIMIT n) من جدول يحتوي على أجزاء كثيرة، لا تُقرأ إلا الأجزاء التي يمكن أن تسهم فعليًا في النتيجة، إلى جانب نافذة قراءة استباقية لا تتجاوزmax_threadsجزءًا للحفاظ على توازي القراءة، مما يقلل استهلاك الذاكرة الأقصى بدرجة كبيرة. #106215 (Alexey Milovidov). - تستخدم الآن استعلامات التجميع التي لا تتضمن دوال تجميع أساليب تستند إلى
HashSetبدلًا منHashMapلأنواع المفاتيح المدعومة. ولوحظت تحسينات في السرعة تصل إلى 1.8x. #108862 (Nikita Taranov). - تجنّب الحمل الإضافي لمرشح وقت التشغيل في
JOINعندما يُقدَّر أن جانب الفحص صغير. يتحكم الإعداد الجديدjoin_runtime_filter_min_probe_rowsفي العتبة (القيمة الافتراضية1000). #104860 (Vladimir Cherkasov). - يمكن الآن للاستعلامات ذات المسندات مثل
nullIf(key, sentinel) = constالاستفادة من استبعاد البيانات استنادًا إلى المفتاح الأساسي والتقسيم وفهرس التخطي. #107308 (Aditya Kumar). - أُضيف إعداد الخادم
jemalloc_merge_tree_arenasللتحكم في مناطق Arena المخصصة في jemalloc لبيانات تعريف الأجزاء والجداول فيMergeTree. في الخوادم متعددة الأنوية، يمكن لمجمع لكل CPU تقليل تنازع أقفال المخصص بين عمليات الدمج المتزامنة، كما أن المنطقة المخصصة لا تحتفظ الآن إلا ببيانات التعريف طويلة العمر. #109490 (Raúl Marín). - سُرّع فك ضغط ZSTD على
x86_64للأعمدة ذات إزاحات المطابقة الصغيرة، مثل أعمدة الأعداد الصحيحة ثابتة العرض، عبر توجيه عمليات النسخ المتداخلة قصيرة الإزاحة باستخدام SSSE3pshufb. على سبيل المثال، أصبح فك ضغط عمودUInt64أسرع بما يصل إلى ~1.2x على AMD Zen 5. #110909 (Konstantin Bogdanov). - سُرّعت
groupUniqArrayللأنواع الرقمية بما يصل إلى 3x باستخدام تجزئة CRC32، كما فيuniqExact، ومن خلال تضمين عملية الإدراج لكل صف. #110917 (Manuel). - أصبحت
estimateCompressionRatioأسرع مع برنامج الترميزNONE. #111107 (Raufs Dunamalijevs). - خُفِّضت القيمة الافتراضية لـ
max_snapshot_commit_thread_pool_sizeإلى16، لتتوافق معbackup_threads، بهدف تقليل تقييد CFS عند تثبيت لقطات الجداول ذات الأجزاء الكثيرة. #111417 (Han Fei). - خُفِّض استخدام CPU عند تثبيت لقطات الجداول التي تحتوي على أعداد هائلة من الملفات. #112297 (Han Fei).
- تخطَّ التسخين المسبق لتجزئات إزالة التكرار في async-insert عند تعطيل إزالة التكرار. #111549 (Sema Checherinda).
- لم يعد
JOINالذي يكون شرطONفيه خاطئًا دائمًا، مثلON 1 = 2أوON NULLأوa.t = 'A' AND a.t = 'B'، يقرأ الطرف الذي لا يساهم في النتيجة. يتحكم في ذلك الإعدادquery_plan_short_circuit_constant_false_join(مفعّل افتراضيًا). #110234 (Groene AI). - تسريع قراءة جداول
Icebergعبر الجلب المسبق لملف البيان التالي أثناء تحليل ملف البيان الحالي، بما يتيح تداخل عمليات الإدخال/الإخراج مع عمل وحدة المعالجة المركزية. #108543 (Asya Shneerson). - لم تعد الاستعلامات التي تستخدم
FINALوتقرأ بترتيب المفتاح الأساسي معLIMITصغير تستخدمsplit_intersecting_parts_ranges_into_layers_final. #110431 (Nikolai Kochetov). - تحسين أداء
RIGHTوFULL JOINباستخدام خوارزميةparallel_hashعندما يحتوي الطرف الأيمن على مفاتيح ربط بقيمةNULLأو صفوف تمت تصفيتها بواسطة تعبيرON، وذلك بتجنب إعادة بناء خريطة القيم الفارغة. #111258 (Hechem Selmi). - تسريع
countSubstringsCaseInsensitiveUTF8بإصلاح التعقيد التربيعي الذي كان قد يجعل الدالة تستغرق دقائق عند البحث في نص بحجم بضعة ميغابايتات مع عدد كبير من المطابقات. #112003 (Groene AI). - تُنفّذ الآن واجهة برمجة تطبيقات استعلامات Prometheus (
/api/v1/query,/api/v1/query_range) لمحركTimeSeriesالتجريبي الاستعلامات بالتوازي بدلًا من خيط واحد. #112108 (Nikita Mikhaylov). - تستخدم أعمدة
timestampوvalueالتي تُنشأ تلقائيًا في الجدول الداخلي لعيناتTimeSeriesالآن، افتراضيًا،CODEC(DoubleDelta, ZSTD(1))وCODEC(Gorilla, ZSTD(1))على التوالي. #112110 (Nikita Mikhaylov). - إصلاح تراجع في أداء استيعاب
system.query_log. كان بناء عمودي الخريطةSettingsوasynchronous_read_countersأبطأ بنحو ست مرات من السابق، ما قد يؤدي إلى تجاوزSYSTEM FLUSH LOGS query_logمهلة 180 ثانية على الخوادم التي تسجل عددًا كبيرًا من الاستعلامات ذات الإعدادات المعدّلة. يغلق #112191. #112210 (Groene AI). - تحسين أداء عمليات
RIGHTوFULL JOINباستخدام خوارزمية التجزئة عند وجود عدة عباراتORفي قسمON، وكذلك أداء عملياتRIGHT/FULL JOINذات الشروط المتبقية (عدم المساواة). #111590 (Hechem Selmi). - تقليل استخدام الذاكرة في
UNLOCK SNAPSHOTعبر عدم تحميل البيانات الوصفية لكل جزء بيانات لا يستخدمها مسار إلغاء القفل، لتجنب نفاد الذاكرة في اللقطات التي تحتوي على عدد كبير جدًا من الأجزاء. #111849 (Julia Kartseva). - استعادة التخصيص المسبق للذاكرة للمسارات الديناميكية لعمود
JSONأثناء تفريغ عملياتINSERTغير المتزامنة، لتجنب إعادة التخصيص المتكررة أثناء إلحاق الصفوف المجمّعة. #112222 (Groene AI). - إعادة تفعيل تحسين المفاتيح المتتالية لتجميع
TTL ... GROUP BYأثناء عمليات الدمج. كان هذا التحسين قد عُطّل عن طريق الخطأ في ذلك المسار، لذا ظلت النتائج صحيحة، لكن عمليات الدمج كانت تنفذ عملًا أكثر من اللازم. #112314 (Groene AI). - تسريع قراءة الأعمدة
Nestedمن الأنواع المرمّزة ثنائياً، مثلNativeوRowBinary، عند تمكينinput_format_binary_decode_types_in_binary_format، والإبلاغ عن أسماء الأنواعTupleالمتداخلة غير الصحيحة كأخطاء في البنية بدلاً من استغراق وقت أُسّي في تحليلها. #112560 (Alexey Milovidov). - تحسين أداء دمج الكتل الصغيرة ودمج الأعمدة
DynamicوObjectالتي تحتوي على عدد كبير من المتغيرات الديناميكية أو مسارات JSON. #110583 (Christoph Viebig). - تسريع
minوmaxللأنواع ذات 128 و256 بت (Int128وUInt128وInt256وUInt256وDecimal128وDecimal256). أسرع بما يصل إلى 1.8 مرة للأعداد الصحيحة العريضة، وبما يصل إلى 3.4 مرة للأعداد العشرية العريضة. #111965 (Manuel). - تم تمكين ميزتين على القرص افتراضياً وترقيتهما إلى الإصدار بيتا: 1)
packed_skip_index_max_bytes = '1M': تُكتب الآن التدفقات الفرعية لفهارس التخطي التي يصل حجمها إلى 1 MiB في أرشيفskp_idx.packedواحد لكل جزء، مما يقلل عدد الكائنات وطلبات الكتابة في تخزين الكائنات. التوافق: تتأثر الأجزاء المكتوبة حديثاً فقط، وتبقى قابلة للقراءة بالكامل في الإصدارات الأقدم؛ أما الإصدارات السابقة لـ 26.6، فلا تستخدم الفهارس المعبأة للتقليم فحسب، إذ تُعامل على أنها غير مُجسَّدة. اضبطpacked_skip_index_max_bytes = 0للإبقاء على التخطيط المستقل لكل ملف. 2)compute_exact_num_defaults_for_sparse_columnsمعoptimize_trivial_count_with_sparsity_filter: تُحفَظ عداداتnum_defaultsالدقيقة لكل عمود وتُستخدم للإجابة عنSELECT count() FROM t WHERE <pred>دون فحص البيانات عندما يقسم الشرط الصفوف إلى قيم افتراضية وغير افتراضية. التوافق: تتجاهل الإصدارات الأقدم العلامةexact_num_defaultsفيserialization.json، لذا تبقى الأجزاء قابلة للقراءة بالكامل بعد الرجوع إلى إصدار أقدم؛ ولا تنطبق إعادة كتابة العد إلا على الأجزاء التي تحتوي على عدادات دقيقة، لذلك تظل النتائج صحيحة في الجداول ذات الأجزاء المختلطة. #111816 (Raúl Marín). - إضافة تخزين مؤقت اختياري للرموز غير الموجودة في فهارس النص. #112742 (Rory Shanks).
- إصلاح إعادة التخصيص التربيعية عند نسخ
Arrayتحتوي عناصرها على قيمJSONفي البيانات المشتركة، مثلArray(JSON)ثابتة تُمرر إلى دالة تجميعية. كانت هذه الاستعلامات تنسخ عدداً من البايتات ينمو تربيعياً مع عدد الصفوف. #112897 (Groene AI). - استخدام فهرس المفتاح الأساسي مع
pointInPolygonعندما تكون وسيطة النقطة عمود مفتاح كاملاً من النوعPoint(أوTupleأخرى تضم عنصرين رقميين)، مثلpointInPolygon(coord, [...])لجدول مرتب حسبcoord. سابقاً، لم يكن يُحلَّل سوى النموذجpointInPolygon((x, y), [...])الذي يتضمن عمودي مفتاح قياسيين. يغلق #54805. #112956 (Alexey Milovidov). - تخطي خطوة قراءة البيانات بالكامل لعمليات دمج
TTLDropلتقليل استخدام الذاكرة، خصوصاً لمخازن القراءة والجلب المسبق. يغلق #105639. #105859 (Pavel Kruglov). - تقليل تخصيصات الذاكرة عند قراءة البيانات الوصفية للنسخ الاحتياطية عبر نقل إدخالات الملفات إلى خرائط في الذاكرة بدلاً من نسخها. #111718 (Julia Kartseva).
- استخدام الفهرس النصي عندما يتضمن تعبيره مقارنة بسلسلة فارغة، مثل
arrayFilter(s -> s != '', ...)، حتى عند إعادة كتابةoptimize_empty_string_comparisons = 1لها إلىnotEmpty. إغلاق #111788. #112115 (Jimmy Aguilar Mena). - استعادة تقليم ذاكرة التخزين المؤقت لشروط الاستعلام بعد
lightweight DELETE: لم تعد الاستعلامات الانتقائية المتكررة على جدول سبق أن تأثر بـlightweight DELETEتعود إلى قراءة كل علامة. #112947 (Nikita Fomichev). - لم تعد الدوال عالية الرتبة تنسخ الأعمدة الملتقطة ماديًا لكل عنصر في المصفوفة عند تمكين
enable_lazy_columns_replication، ما يقلل استخدام الذاكرة ووقت النسخ لتعبيرات لامبدا التي تلتقط أعمدة كبيرة. #111581 (Diego Gomes Tomé). - إصلاح تراجع في الأداء بمقدار ~1.5x أُضيف في الإصدار 26.5 ضمن
GROUP BYعلى مفاتيحDynamicوالأعمدة الفرعية لمساراتJSON. #112316 (Utkal Singh). - أصبحت القيمة الافتراضية لـ
text_index_posting_list_apply_modeهيlazy، لذا تفك استعلامات الفهرس النصي ترميز قوائم النشر عند الطلب، على مستوى الكتل المعبأة وباستخدام مؤشر، بدلًا من تجسيدها مسبقًا في خرائط بتية للفهارس النصية التي ضُبط فيهاposting_list_codec. #113521 (Anton Popov). - تسريع استعلامات PromQL على جداول
TimeSeries: تعيدtimeSeriesIdToGroupالآن استخدام مجموعة الصف السابق عندما تحمل الصفوف المتتالية معرّف السلسلة نفسه، متجاوزة تسلسل المعرّف والبحث بالتجزئة لكل صف. #113580 (Nikita Mikhaylov). - تستخدم عوامل التجميع في PromQL، وهي
topkوbottomkوlimitk، الآن خطة تنفيذ متدفقة ومتوازية بذاكرة محدودة بدلًا من جمع جميع السلاسل في صف واحد. وأصبحت الاستعلامات على المقاييس عالية الكاردينالية التي كانت تفشل سابقًا بسببMEMORY_LIMIT_EXCEEDEDتعمل الآن بذاكرة محدودة. #113656 (Nikita Mikhaylov). #114409 (Alexey Milovidov). - تسريع قسمة الأعداد الصحيحة ذات 256 بت (
Int256وUInt256وDecimal256)، ما يؤثر فيintDivوmoduloوحساباتDecimal256وتحويل هذه الأنواع إلى نص. #112477 (Konstantin Bogdanov). - تحسين أداء قراءة
MergeTreeللأعمدة الفرعية فيJSONبإعادة استخدام البيانات الوصفية المحلولة للأعمدة الفرعية أثناء التحويلات المطلوبة. #113008 (Rory Shanks). - تسريع بناء فهارس التخطي النصية والمعتمدة على مرشح بلوم باستخدام محلل النصوص
sparseGrams. #110541 (UnamedRus). - يستخدم إنشاء اللقطات الآن تجمع خيوط مخصصًا، لذا لم تعد عملية
BACKUPثقيلة ومتزامنة تستنزف موارده. #113509 (Han Fei). - قيِّم التعبيرات الفرعية في PromQL المشتركة بين عدة خطوات في الخطة (مُعاملات
topk/bottomk/limitkوالطرف الأيسر منor) مرة واحدة بدلًا من مرتين: إذ يُجسِّد SQL المُولَّد من PromQL الآن الاستعلامات الفرعية المشتركة. يؤدي ذلك إلى إزالة فحص مكرر لجدول العينات؛ ويصبحtopkعلىrateأسرع بنحو الضعف في الحالة الباردة، كما تتحسن استعلامات قواعد kubernetes-mixin بنسبة 10-29%. #113772 (Nikita Mikhaylov). - يمكنك الآن تمكين الطيّ المبكر قصير الدائرة للعمليتين المضمنَتين
andوorأثناء التحليل باستخدام الإعدادenable_function_early_short_circuit. يمكن أن يؤدي ذلك إلى تخطي تنفيذ الاستعلامات الفرعية ذات القيمة المفردةcount()غير المستخدمة، مع الحفاظ على استنتاج الأنواع المعتاد والتحقق الدلالي. يحل #83017. #83505 (fhw12345). - ادمج تكلفة الإدخال/الإخراج مع الانتقائية عند ترتيب شروط
PREWHERE. يعالج ذلك تراجعًا في أداء تنفيذPREWHEREفي بعض الحالات ظهر بعد #101275. جزء من #110462. #110695 (Pavel Kruglov). - حُسِّن أداء
levenshteinDistance(وeditDistance) للسلاسل متوسطة الطول على ARM عبر تجنب تخصيصات الكومة لكل صف في مسار كود Myers المحظور. #108185 (Groene AI). - أُضيف إعداد
merge_use_batch_sorting_queueالخاص بـMergeTreeلإتاحة استخدام قائمة انتظار فرز الدُفعات اختياريًا في عمليات دمجMergeTreeالعادية، مما يقلل وقت CPU ووقت الساعة الفعلي لأحمال عمل الدمج التي تشكل فيها عملية الدمج المرتب تكلفة كبيرة. #108468 (Rory Shanks). - أُضيف الإعداد
merge_tree_min_bytes_per_read_streamلتقليل تدفقات القراءة المفرطة وأعباء خط الأنابيب لعمليات فحصMergeTreeالعادية المحلية غير المرتبة ذات الأعمدة الضيقة على الخوادم ذات العدد الكبير من الأنوية. #109035 (Jiebin Sun). - سرِّع الدالة
toStartOfInterval(الأسماء المستعارةtime_bucketوdate_bin) بما يصل إلى 5 أضعاف لفواصلSECONDوMINUTEوHOUR. #109729 (Manuel). - يرسل البروتوكول الأصلي الآن أعمدة
Stringكتدفق منفصل من إزاحات البايتات التراكمية (بالتخطيط نفسه الذي يستخدمهArrayلإزاحاته)، يتبعه البيانات المتصلة، بدلًا من بادئة طول varint لكل قيمة، عند استخدام كلا الطرفين مراجعة البروتوكول 54489 أو أحدث. يمكن للعميل حينها قراءة أعمدةStringبتخصيص مسبق دقيق للمخزن المؤقت وعملية نسخ مجمع واحدة، بسرعة تزيد بنحو 4 مرات عن تخطيط كل قيمة. لا تتأثر العملاء والخوادم القديمة، إذ يُتفاوض على التخطيط عبر مراجعة البروتوكول. يتوفر التخطيط نفسه في تنسيقيNativeوBuffersعبر الإعدادين الجديدينoutput_format_native_write_string_with_size_stream/input_format_native_read_string_with_size_stream(وهما متوقفان افتراضيًا، ليبقى التنسيقان قابلين للنقل). #110320 (vahid-sohrabloo). - تجنب التسلسل المبكر إلى JSON لإدخالات بيان Iceberg عندما يكون iceberg_metadata_log_level أقل من عتبة موضع الاستدعاء. #110437 (Andy Bradshaw).
- حسِّن أداء full sorting merge join بما يصل إلى 1.5-3 أضعاف في السيناريوهات المتفرقة. #111200 (Vladimir Cherkasov).
- تحسين كفاءة إحصاءات minmax وإحصاءات الأعمدة الأساسية للأعمدة ذات الفاصلة العائمة. #111221 (Christoph Viebig).
- تمكين
join_runtime_filter_from_fixed_hash_tableعندما تختلف أنواع مفاتيح الربط في مرحلتي probe وbuild (مثلًا، مفتاح probe من نوع Nullable ومفتاح build ليس من نوع Nullable). #111244 (Hechem Selmi). - إرجاع نتائج استعلامات
COUNT()مباشرةً من البيانات الوصفية لتعددية text index. #111494 (Elmi Ahmadov). - تسريع حساب التجزئة على مستوى الصفوف لقيم أعمدة JSON/
Objectالمخزنة في البيانات المشتركة (المستخدمة مثلًا بواسطةuniq/uniqExactعلى عمود JSON، وبواسطة مفاتيحGROUP BY/DISTINCTالمعتمدة على hash) من خلال تجنب إعادة إنشاءColumnDynamicلكل قيمة. تظل قيم hash دون تغيير. #111501 (Valery Petrov). - تستهلك الدوال
mapContainsKeyLikeوmapContainsValueLikeوmapExtractKeyLikeوmapExtractValueLikeذات pattern غير الثابت ذاكرة ووقتًا أقل عند تمكين enable_lazy_columns_replication. لم يعد يُنسخ pattern مسبقًا لكل إدخال في map وقت الالتقاط؛ بل يُؤجَّل النسخ إلى تنفيذ lambda الداخلية ويُحرَّر في وقت أبكر، لذا تقل نسخة موسعة واحدة من pattern عند الذروة. #111749 (Diego Gomes Tomé). - تسريع الفرز والعمليات الأخرى المعتمدة على المقارنة في أعمدة
JSONالتي تُخزَّن مساراتها في البيانات المشتركة. سابقًا، كانت كل مقارنة بين قيمتين تُنشئ عمودDynamicمؤقتًا وتنفذ إلغاء تسلسل ثنائي كاملًا لكلا الطرفين، مما جعلORDER BYعلى هذه الأعمدة بطيئًا للغاية. #111894 (Groene AI). - لم يعد
clickhouse-clientيرسل Ping إلى server قبل كل query، مما يلغي رحلة ذهاب وإياب عبر الشبكة لكل query. ولم يعد يعيد إنشاء connection، فيبدأ session جديدة بصمت ويفقد بذلك temporary tables وcurrent database وsession settings، لمجرد أن server كان بطيئًا جدًا في الرد على Ping. #111990 (Alexey Milovidov). - استخدام تحسين الشروط المتعدية بصورة أكثر حكمة: لا يُستخدم filter الإضافي الناتج عن التعدية الآن إلا لتحليل index عندما يتعذر تطبيق filter بالكامل. راجع الإعداد
optimize_and_compare_chain. #112076 (Yarik Briukhovetskyi). - تمت إضافة إعدادين،
shrink_over_allocated_columns_min_waste_ratioوshrink_over_allocated_columns_min_waste_bytes، يجعلان عمليات INSERT تقلّص الأعمدة المخصصة بإفراط (التي تتجاوز ذاكرتها المحجوزة الذاكرة المستخدمة بسبب نمو الأعمدة متغيرة الطول وفق قوى العدد اثنين) لتلائم حجمها قبل materialization وكتابة part، مما يقلل ذروة استخدام الذاكرة. تكون هذه الإعدادات معطلة افتراضيًا. #112161 (Pavel Kruglov). - لم يعد تكرار الأعمدة الكسول لـ
ARRAY JOINيُفقد عند تسلسل خطة الاستعلام. عند استخدامserialize_query_plan = 1، كانت العقدة التي تنفذ جزءًا بعيدًا من الخطة تتجاهلenable_lazy_columns_replicationوتُحوّل دائمًا كل نسخة مكررة إلى نسخة مادية، رغم أن هذا الإعداد مفعّل افتراضيًا. #112330 (Groene AI). - أصبح تنسيق قيم
Decimalكنص أسرع بكثير — بما يصل إلى 190 مرة لـDecimal256ذي مقياس كبير، ونحو 1.6 مرة لـDecimal64. وعلى المعالجات المزودة بـ AVX-512 IFMA، أصبح تحويل الأعداد الصحيحة ذات 64 بت إلى نص أسرع بنحو 1.4 مرة. أُصلح أيضًا تقريبtoDecimalString، الذي كان يُسقط ترحيلاً من الجزء الكسري: كانتtoDecimalString(toDecimal64('9.995', 3), 2)تُرجع9.00وأصبحت الآن تُرجع10.00. #112457 (Konstantin Bogdanov). - أصبح شرط المساواة في
WHEREيُدمج الآن في شرطJOINعندما تكون معاملاته من أنواع مختلفة، لكن لها نوع فائق مشترك، مثلInt32وNullable(Int32). يتيح ذلك تحويل CROSS JOIN إلى INNER JOIN. #112630 (Hechem Selmi). - أصبحت الاستعلامات على جداول Iceberg التي تضم عددًا كبيرًا من ملفات الحذف تبدأ بسرعة أكبر. يقرأ ClickHouse ملفات بيان الحذف ويفك ترميزها بالتزامن بدلًا من معالجتها واحدًا تلو الآخر، بحيث تتداخل عمليات القراءة من التخزين. يتحكم الإعداد الجديد
iceberg_delete_manifest_decode_concurrency(القيمة الافتراضية4) في عدد الملفات التي يُفك ترميزها في الوقت نفسه. #112679 (Asya Shneerson). - يستخدم التسجيل غير المتزامن الآن طابورًا محدودًا بلا أقفال: لا تُحجب الخيوط التي تكتب رسائل السجل على mutex، ولا توقظ خيوط التسجيل. #112803 (Alexey Milovidov).
- أصبح
randomHadamardTransformلمتجه ثابت يُقيَّم مرة واحدة بدلًا من مرة لكل صف. يسرّع ذلك استعلامات البحث المتجهي التي تدوّر متجه الاستعلام باستخدامrandomHadamardTransformقبل مقارنته بعمودQBit. #112921 (Alexey Milovidov). - استُعيدت مشاركة المجموعات بين مهام الأجزاء الخاصة بطفرة واحدة تُجري تصفية باستخدام
IN (subquery)على عمود مفتاح أساسي. يكونenable_sharing_sets_for_mutationsمفعّلًا افتراضيًا، لكن المجموعة المُنشأة لتحليل المفتاح الأساسي توقفت عن المشاركة في ذاكرة التخزين المؤقت المشتركة، لذا كان جدول يحتوي على N أجزاء يُحوّل المجموعة نفسها إلى نسخة مادية N مرات. #112941 (Groene AI). - أُصلح التعقيد التكعيبي لتخطيط استعلام JOIN مع جدول
Mergeيعتمد على العديد من الجداول ذات البنى المختلفة. كان من الممكن سابقًا أن تقضي مثل هذه الاستعلامات دقائق في تخطيط الاستعلام دون الاستجابة لـmax_execution_timeأوKILL QUERY. #113140 (Alexey Milovidov). - أصبحت ذاكرة التخزين المؤقت لمنطقة الحاوية في عميل
S3تعمل الآن أيضًا مع كتالوجات بحيرة البيانات؛ إذ كان كل طلب إليها يعيد تحديد المنطقة سابقًا. #113330 (Konstantin Vedernikov). - أُصلح تراجع في الأداء كان يحدث عندما يقوم تجميع بلا مفاتيح
GROUP BYبتسلسل الشجرة الفرعية الكاملة لخطة الإدخال، بما في ذلك المحتويات الكاملة للثوابت المطوية، عند كل تنفيذ لحساب مفتاح لذاكرة تخزين مؤقت لحجم جدول تجزئة لا يمكنه استخدامه مطلقًا. كان استعلام مثلSELECT quantileMerge(arrayJoin(arrayMap(x -> state, range(5000000))))يقضي نحو 63 مللي ثانية لكل تنفيذ في تحسين خطة الاستعلام، ويقضي الآن 0.15 مللي ثانية. #113333 (Groene AI). - أضف تسلسلاً اختياريًا لقيم UInt128/UInt256/Int128/Int256 بتنسيق Parquet كنوع DECIMAL لتمكين تشذيب مجموعات الصفوف والصفحات. #113347 (Ivan Babrou).
- سرّع تخطيط الاستعلامات عند استخدام إحصاءات الأعمدة
uniq_v2. إذ أصبح العدد التقديري للقيم المميزة يُخزَّن مؤقتًا بدلًا من إعادة حسابه لكل طلب، وهي عملية يُجريها تخطيط الاستعلامات مرات عديدة لكل استعلام. (مشكلة #113038). #113357 (Groene AI). - لا تجلب مسبقًا التدفقات الفرعية غير المطلوبة عند قراءة مسار JSON كامل من البيانات المشتركة المتقدمة. #113380 (Pavel Kruglov).
- أصبح دفع المرشحات يعمل الآن مع الأعمدة الفرعية
Tupleفي ملفات Parquet وORC. إذ يؤدي مسند مثلWHERE tup.1 = 555555عبرfileأوs3أوurlالآن إلى تشذيب مجموعات الصفوف وخطوات فهرس الصفوف باستخدام إحصاءات عنصر الـ tuple نفسه، بدلًا من قراءة الملف كاملًا. #113383 (Groene AI). - استُبدلت خريطة التجزئة لكل حاوية داخل الدالات التجميعية
timeSeries*ToGridبمصفوفة مسطحة ومرتبة من العينات: يصبح استيعاب العينات عملية إلحاق O(1) للمدخلات المرتبة زمنيًا (وهي الحالة الأكثر شيوعًا بفارق كبير)، ولم تعد هناك حاجة إلى النسخ والفرز لكل حاوية عند الإنهاء. #113681 (Nikita Mikhaylov). - حسّن أداء استعلامات PromQL عبر محرك TimeSeries: إذ تقرأ SQL الداخلية للمحدد الآن أعمدة المفتاح الأساسي لجدول العينات مباشرةً، من دون تحويلات غير مؤثرة، وتتحقق من نطاق الطابع الزمني قبل مجموعة معرّفات السلاسل، مما يجعل الاستعلامات الباردة الكثيفة بالمحددات أسرع بنسبة 30-44%. #113768 (Nikita Mikhaylov).
- استخدم خرائط معرّفات محددة النوع في جامع وسوم السلاسل الزمنية. #113839 (Vitaly Baranov).
- تخطَّ فحص الترتيب الزائد عند كتابة أجزاء MergeTree التي تكون مفاتيح ترتيبها ثابتة كلها. #113899 (Perfloop Agent).
- أصبحت محددات PromQL التي تطابق جميع سلاسل مقياس واحد ترشّح جدول العينات لجدول
TimeSeriesبنطاق متصل من المفتاح الأساسي علىidأثناء تحليل الفهرس، بدلًا من شرط كبير من النوعid IN <set>، عندما يكون تخطيط المعرّف عبارة عن tuple من مكوّنين مع مولّد المعرّفات القياسي. يزيل ذلك التكلفة الرئيسية أحادية الخيط لتحليل الفهرس في استعلامات PromQL الكثيفة بالمحددات: انخفاض يصل إلى 45% في زمن الاستجابة البارد لأنماط استعلامات لوحات المعلومات والقواعد، وانخفاض قدره 11% في المتوسط الهندسي البارد عبر المجموعة الكاملة على جدول يضم 62 مليار عينة. #114131 (Nikita Mikhaylov). - سرّع تحويلات وسوم TimeSeries المتجهة باستبدال إعادة التعيين المعتمدة على التجزئة بالفهرسة المباشرة عندما تشغل معرّفات مجموعات الوسوم نطاقًا مضغوطًا. #114244 (Minh Vu).
- تُقيّم نقاط نهاية واجهة برمجة تطبيقات HTTP لـ Prometheus،
/api/v1/queryو/api/v1/query_range، الآن استعلامًا فرعيًا من PromQL مشتركًا بين عدة خطوات في الخطة مرة واحدة، كما كانت تفعل بالفعل دالتا الجدولprometheusQueryوprometheusQueryRange. في السابق، كان الطلب المُرسل معenable_analyzer = 0، أو من مستخدم يضبط ملفه الشخصي هذا الإعداد، يعيد فحص الاستعلام الفرعي المشترك مرة لكل خطوة تشير إليه. #114261 (Groene AI). - تم الحدّ من تكلفة تقدير انتقائية
col IN (...)استنادًا إلى إحصاءات الأعمدة، والتي كان يمكن أن تضيف مئات المللي ثانية إلى تخطيط استعلام واحد. لم يعد المُقدِّر يشغّل الاستعلام الفرعي فيcol IN (subquery)لملء مجموعة لا يحتاج منها إلا إلى قيمة انتقائية واحدة، بل يتخطى المجموعة غير المُنشأة. بالنسبة إلى المجموعات التي يتجاوز حجمها الإعداد الجديدstatistics_max_set_size_for_exact_selectivity_estimation(القيمة الافتراضية 10000)، تُستمد الانتقائية الآن من حجم المجموعة ونطاق حدودها. #114389 (Nikita Taranov). - لم يعد تحليل طلب HTTP يحتوي على عدد كبير من معلمات الاستعلام أو الرؤوس التي تحمل الاسم نفسه (مثل آلاف معلمات
role=المكررة) يستغرق وقتًا تربيعيًا. #114410 (James). - تم إصلاح تراجع في الإصدار 26.7: في جدول
MergeTreeالمرتب حسبtoUnixTimestamp(أو تحويل صحيح آخر) لعمودDateTime64، لم يعد مرشح نطاق بسيط على ذلك العمود يستخدم المفتاح الأساسي ويقرأ جميع الحبيبات من الأجزاء المطابقة. بالإضافة إلى ذلك، يستخدم الآن مرشح مثلtoInt64(ts) >= cفي جدول مرتب حسب عمودDateTime64الأصلي المفتاح الأساسي. #114413 (Alexey Milovidov). - يُجرى فحص الاتساق المكثف في
ColumnArrayالآن في إصدارات التصحيح فقط. #114469 (Anton Popov). - لا تُجرِ فرز دمج لتجميع موزع يكون وصف الفرز فيه ثابتًا بالكامل. #114626 (Groene AI).
- تسريع بناء المجموعات لـ
IN (subquery)في جداولMergeTreeالمقسمة إلى أقسام، عبر إبقاء صفوف كل قسم ضمن تدفق واحد وإزالة التكرارات من كل تدفق بشكل مستقل، بحيث لا يرى تحويل ملء المجموعة الوحيد — الذي كان يحسب سابقًا تجزئة كل صف تسلسليًا — سوى الصفوف الفريدة. ينطبق ذلك عندما يكون تعبير التقسيم دالة حتمية لأعمدة إخراج الاستعلام الفرعي. لا يُطبَّق هذا التحسين عندما يحتوي أكبر قسم على أكثر من ضعف عدد صفوف القسم المتوسط؛ ويتجاوز الإعداد الجديدforce_creating_set_partitions_independently(المعطّل افتراضيًا) هذا الفحص. ويتحكم فيه الإعداد الجديدallow_creating_set_partitions_independently(المفعّل افتراضيًا). #114645 (Nihal Z. Miaji). - موازاة التحويل من مستوى واحد إلى مستويين لحالات التجميع لكل خيط قبل دمجها. يعالج ذلك تراجعًا بمقدار 2-3 مرات في استعلامات
GROUP BYالقصيرة ذات حالات التجميع الثقيلة (مثلCOUNT(DISTINCT ...)وClickBench Q10/Q11) على الأجهزة ذات العدد الكبير جدًا من الأنوية، والذي ظهر في إصدارات تطوير 26.7 عند جعل احتساب ذاكرة التجميع دقيقًا. #114691 (Alexey Milovidov). - تسريع الدالات التجميعية
timeSeries*ToGrid: تتجنب حسابات الحاويات لكل عينة الآن قسمة Int128، وتتخطى العينات المتتالية في الحاوية نفسها البحث في خريطة التجزئة. #114889 (Nikita Mikhaylov). - لم تعد الإضافة إلى قائمة انتظار سجل النظام تتطلب نسخ القائمة بأكملها نسخًا عميقًا عند نموها. #115030 (Groene AI).
- معالجة عينات الدالات التجميعية
timeSeries*ToGridعلى دفعات من العينات المتتالية التي تقع ضمن حاوية شبكة واحدة، مما يسرّع مرحلة إدخال العينات فيtimeSeriesRateToGridوالدالات ذات الصلة بمقدار 1.2-2 مرة لبيانات السلاسل الزمنية المرتبة. #115041 (Nikita Mikhaylov). - استخدام أقنعة وجود مدمجة لعوامل المجموعات في PromQL. #115224 (Minh Vu).
- تسريع تقييم استعلامات PromQL الفورية: تستخدم الدوال التجميعية
timeSeries*ToGridمسار تصنيف العينات المتجه للشبكات ذات النقطة الواحدة، بينما يملأtimeSeriesIdToGroupعمود النتيجة مباشرةً. #115267 (Nikita Mikhaylov). - لم يعد
JOINالذي يحتوي قسمONفيه على عدة مقارنات مساواة مرتبطة بـORيُجسِّد أعمدة المفاتيح في الجانب الأيمن التي لا يحددها الاستعلام. #115465 (Nikita Taranov). - لم تعد تسمية نوع
DateTimeأوDateTime64تنشئ جدول بحث لمنطقة UTC الزمنية لا يُستخدم، مما يسرّع إنشاء هذه الأنواع — وبالتالي بدءclickhouse localوclickhouse client. #115488 (Konstantin Bogdanov). - لم يعد إرفاق جداول النظام ينسخ البيانات الوصفية لكل جدول، بما في ذلك وصف العمود الكامل، مرتين لمجرد تعيين تعليق الجدول. #115490 (Konstantin Bogdanov).
- يُحلّ اسم مضيف العميل الآن عند الإبلاغ عنه للمرة الأولى، بدلاً من حله عند كل استدعاء لـ
clickhouse clientوclickhouse local. #115491 (Konstantin Bogdanov). - تم إصلاح تعقيد زمني تربيعي عند إنشاء الدوال
h3kRingوh3ToChildrenوh3PolygonToCellsوh3PolygonToCellsWithContainmentنتائجها عبر عدد كبير من الصفوف. كان استعلام على 196 000 صف يستغرق 838 ثانية في نسخ الذاكرة أثناء تشغيل ضغط في CI؛ أما الآن فيستغرق نحو 5 ثوانٍ. #115773 (Groene AI). - تسريع التحقق من السلاسل المكررة لمتجهات شروط PromQL التي تتكون بالكامل من أصفار. #115822 (Minh Vu).
- تسريع
GROUP BYدون دوال تجميعية على مفاتيحStringوFixedStringوLowCardinality: لم يعد الاستعلام يعيد كتابة عنصر نائب غير مستخدم في جدول التجزئة لكل صف، بل للصفوف التي تضيف مفتاحًا جديدًا فقط. #115834 (Nikita Taranov). - تسريع
toUTCTimestamp/to_utc_timestampوfromUTCTimestamp/from_utc_timestampللوسائط من نوعDateTime64، مع استعادة معدل النقل السابق لإصلاح التجاوز في #109738. لم تتغير النتائج. يغلق #115802. #115838 (Groene AI). - تقليل استخدام الذاكرة ووقت تحسين خطة الاستعلام للتجميعات ذات المفاتيح على القيم الحرفية الكبيرة المطوية كثوابت. يُجزّأ مفتاح ذاكرة التخزين المؤقت لإحصاءات جدول تجزئة التجميع الآن أثناء تسلسله بدلاً من تجميعه في الذاكرة أولاً، لذا لم تعد الخطة التي تحمل قيمة حرفية كبيرة تحتفظ بنسخة منها أثناء التحسين. بالنسبة إلى قيمة حرفية بحجم 80 MB، تنخفض ذروة استخدام الذاكرة بنحو 250 MB ووقت التحسين بنحو 2.5x. يبقى المفتاح المحسوب دون تغيير. #115847 (Groene AI).
تحسينات
- تُوسَم الآن طلبات HTTP الصادرة بتنسيق OpenAI باسم SQL لدالة الذكاء الاصطناعي المستدعية، لتحديد نقطة النهاية الأولية. #110449 (George Larionov).
- تقليل زمن استجابة الإلغاء للصيغ الإيجابية من
LIMIT BY: أصبحKILL QUERYوCtrl+C يوقفان التنفيذ ضمن كتلة واحدة بدلًا من انتظار اكتمال الخطوة بأكملها. #106070 (Roman Vasin). - عند فشل
INSERTلأن جدول الهدفTOلعرض مادي يرفض الكتابة أثناء إنشاء مسار الإدراج، تعرض رسالة الخطأ الآن اسم العرض المادي وجدول هدفه بدلًا من الإبلاغ عن خطأ التخزين المجرد فقط. #107234 (Groene AI). - مع
input_format_protobuf_oneof_presence، لم يعد ClickHouse يتطلب أن يسرد تعداد وجودoneofالعلامات المعرّفة في مخطط Protobuf بدقة: يُسمح الآن بعلامات إضافية لا تقابلها أعمدة في جدول الهدف، مما يسهّل إجراء تغييرات على المخطط. #109174 (Ilya Golshtein). - تقبل دوال المسافة المنقولة على
QBit(L2DistanceTransposedوcosineDistanceTransposedوdotProductTransposedومتغيراتها المكمّاة) الآن متجهًا مرجعيًا أطول من عدد الأبعاد التي يجري البحث فيها، مع تجاهل العناصر الزائدة في نهايته. يتيح ذلك إعادة استخدام متجه استعلام كامل الحجم لبحث Matryoshka منخفض الأبعاد دون تقطيعه مسبقًا. #109388 (Alexey Milovidov). - أُعيدت تسمية الإحصائية الفرعية
NullCountضمن إحصاءاتbasicإلىDefaultCount، وأصبحت تحسب الصفوف التي تساوي القيمة الافتراضية لنوع العمود، لا صفوفNULLفقط في أعمدةNullable. #109977 (Han Fei). - دعم الكتابة المتزامنة في جداول
Icebergعلى قرص محلي: ينفذLocalObjectStorageالآن عمليات كتابة شرطية، لذا تعمل عملية المقارنة والاستبدال التي تنشر لقطة جديدة عبرversion-hint.textفيه، ولا يفقد الكتّاب المتزامنون تحديثات بعضهم البعض. #112556 (Alexey Milovidov). - يُطلق
ALTER TABLE ... MOVE/REPLACE PARTITIONبين جدوليMergeTreeذوي مستوى تفصيل غير متوافق الخطأBAD_ARGUMENTSالآن بدلًا منLOGICAL_ERROR. #110535 (Groene AI). - لم يعد تنسيق
Valuesيسجل أخطاء تحليل زائفة فيsystem.errorsوsystem.error_logعندما ينتقل التحليل المتدفق بنجاح إلى تحليل تعبير SQL. #111141 (Pablo Marcos). - أُضيف
ProfileEventباسمDuplicationDataHashComputations، والذي يحسب عمليات احتساب تجزئة البيانات لكل عمود التي تُجرى أثناء إزالة تكرار كتلINSERTفي جداول*MergeTree. #111173 (Valery Petrov). - إبراز أمري
./clickhouseوsudo ./clickhouse installفي مخرجات برنامج التثبيت العام. #111514 (Alexey Milovidov). - لم تعد عمليات الربط الديكارتية وعمليات الربط ذات الشرط الثابت التي يخطط لها المحلل تفشل بسبب إعداد
join_algorithmغير متوافق عند استخدام المحلل. #108289 (János Benjamin Antal). - تدعم
bitmaskToArrayوbitmaskToListالآن الوسائطInt128وUInt128وInt256وUInt256. كما أصبحتbitPositionsToArrayأسرع للوسائط ذات الأعداد الصحيحة الكبيرة، لأنها تتناسب الآن مع عدد البتات المضبوطة بدلاً من موضع أعلى بت مضبوط. #110743 (Manuel). - أُصلح تعطل في التعبيرات المُصرَّفة بأسلوب JIT في إصدارات macOS/aarch64 الأصلية المبنية من المصدر، وذلك باستخدام LLVM host triple الصحيح لنظام التشغيل المضيف. #111591 (Raúl Marín).
- أُصلحت
JSON_EXISTSوJSON_VALUEوJSON_QUERYمع إدخالDynamicعندما تحتوي وسائط مسار tuple على عناصرLowCardinality، مما يمنع استثناءاتLOGICAL_ERROR. يغلق #110345. #109944 (Groene AI). - أصبحت ملفات
ORCالتالفة التي تعلن شجرة أنواعها عن أعمدة أكثر مما يحتويه تذييل الشريط تفشل في استنتاج المخطط بالخطأCANNOT_EXTRACT_TABLE_STRUCTUREبدلاً من الإنهاء المفاجئ في إصدارات التصحيح أو sanitizer. #110967 (Groene AI). - يمكن الآن وسم جداول سجلات النظام التي خضعت للتدوير، مثل
system.metric_log، بأنهاtable_readonlyحتى عندما تتجاوز بياناتها الوصفيةmax_query_size، لذا لم يعد التدوير يسجلQUERY_IS_TOO_LARGEويستمر بصورة طبيعية. #111703 (Alexey Milovidov). - في Play، أُضيف زر لإغلاق جميع علامات التبويب باستثناء علامة التبويب الحالية. #111835 (Mikhail Artemenko). وأُصلح تركيز لوحة المفاتيح بعد تفعيله بمفتاح Enter أو Space عندما يخفي الزر نفسه. #111899 (Alexey Milovidov).
- في Play، يؤدي الضغط باستمرار على
Ctrl(Cmdعلى Mac) أثناء تمرير المؤشر فوق خلية جدول قيمتها عنوان URL لصورة إلى عرض معاينة للصورة. #109347 (Alexey Milovidov). - على Linux، يضيف ClickHouse الآن إدخالاً إلى
system.warningsعند بدء التشغيل إذا كانrseqغير متاح، لأن عدادات ملف التعريف لكل CPU تعود حينها إلى مسارsched_getcpuالأبطأ. #109283 (Azat Khuzhin). - لم يعد
COUNT(*)عبر دالة الجدولfileيطلق استثناءً عندما يغلّف استنتاج المخطط الأعمدة فيNullable. يغلق #102044. #102509 (Rory Shanks). - تعمل الدوال
L1NormalizeوL2NormalizeوLinfNormalizeوLpNormalize(وأسماؤها المستعارة) الآن مع وسائطArray، وليس فقط وسائطTuple، بما يتسق معL2Normودوال المسافة. #110052 (Alexey Milovidov). - أُزيل قارئ
ORCالقديم المعتمد على Apache Arrow. يستخدم تنسيق الإدخالORCالآن دائماً مفكك الترميز الأصلي في ClickHouse، والذي كان بالفعل الخيار الافتراضي. إعدادinput_format_orc_use_fast_decoderمتقادم وليس له أي تأثير. #110074 (Alexey Milovidov). - أُتيحت إمكانية ضبط الوسائط الشائعة لـ
clickhouse-clientمن XML (<hints/>,<highlight/>,<echo/>,<echo_query_id/>,<echo_formatted/>,<print-profile-events/>)، مع الاحتفاظ بقيم إعدادات العميل عند حذف علامات CLI المقابلة ذات القيم الافتراضية، لإعدادات مثلhistory_max_entriesوsuggestion_limitوprogressوprogress-tableوenable_progress_table_toggleوprint-memory-to-stderrوchime-threshold-secondsوprofile-events-delay-ms. #110607 (Larry Snizek). - أُضيف إعداد
analyzer_compatibility_apply_final_to_all_joined_tablesلاستعادة السلوك القديم الذي يجعلFINALعلى الجدول الواقع في أقصى يسارJOINيُطبَّق أيضًا على الجداول الأخرى المنضمة. يُسجَّل الإعداد في سجل تغييرات الإعدادات، لذا تستعيدcompatibilityتلقائيًا الدلالات القديمة مع الإصدارات السابقة للإصدار 26.6. #111589 (Nikita Fomichev). - في Play، أصبح زر
+(علامة تبويب جديدة) يُعرض بالارتفاع الصحيح في Firefox. #109524 (Alexey Milovidov). - أصبح الاستعلام الفرعي المتداخل والمترابط
EXISTSالذي يشير إلى عمود من نطاق يتجاوز استعلامه الخارجي المباشر يفشل بالخطأNOT_IMPLEMENTEDبدلًا من الاستثناء الداخليNOT_FOUND_COLUMN_IN_BLOCK. #110310 (Groene AI). - لم يعد تنسيق استعلام
EXECUTE ASبعد إعادة كتابة AST يطرح استثناءً من جهة العميل، مثلًا في AST fuzzer. #111725 (Groene AI). - تحسين دعم استعلام
DESCRIBEللعروض ذات المعلمات، ودعم العروض ذات المعلمات في التعبيرات القياسية في المحلل الجديد. يغلق #66307. يغلق #69598. #68978 (Dmitry Novik). - أصبحت تعبيرات
CREATE INDEXوCREATE HYPOTHETICAL INDEXغير الصالحة التي لا يمكنها اجتياز دورة تنسيق-تحليل-تنسيق تُبلغ عن استثناء بدلًا من التسبب في خطأ منطقيInconsistent AST formattingفي إصدارات التصحيح والإصدارات المبنية باستخدام أدوات sanitizer. #109175 (Groene AI). - واجهة الويب: إصلاح بقاء حقل اسم المستخدم/كلمة المرور باللون الأحمر حتى عند صحة بيانات الاعتماد وإمكانية الوصول إلى الخادم، وإعادة التحقق من بيانات الاعتماد بعد تعديل الاتصال لكي تتحول القيمة الصحيحة إلى اللون الأخضر. #109414 (Alexey Milovidov).
- أُضيف إعدادا
text_index_max_processed_tokens_before_flushوtext_index_max_memory_usage_before_flushللتحكم في وقت قيام منشئي فهارس النص بتفريغ المقاطع المؤقتة. #111573 (Rory Shanks). - أُضيف إعداد
system_cache_extensionsللتحكم في امتدادات الملفات التي تُخزَّن في ذاكرة التخزين المؤقت للنظام عند تمكينuse_split_cache. #111575 (Kirill). - تعرض رسائل الخطأ في الإصدارات المبنية على musl الآن نص
strerrorالمقروء بشريًا بدلًا من قيمة فارغة أو رقمية مثلstrerror: 0. #111620 (Konstantin Bogdanov). - أصبح نوع تخزين المجموعات المُسمّاة الفعّال متاحًا الآن باسم
named_collections_storage.typeفيsystem.server_settingsومن خلالgetServerSetting('named_collections_storage_type'). #111806 (Pablo Marcos). - يخفّف التحقق المفرط في صرامته من حجم التبديل في
ColumnReplicated::permuteبحيث يتوافق مع عقدIColumn::permuteالعام، الذي يسمح بأن يكون التبديل أقصر من العمود عند تعيين حد. #109897 (Groene AI). - يحسّن تخطيط استعلامات البث عبر توحيد خطة القراءة الداخلية للبث، ما يتجنب التحسين المزدوج لقراءات فهرس النص المباشرة. #111821 (Mikhail Artemenko).
- واجهة الويب: أصبحت المسافة بين زري
Run oneوRun allمساوية للهامش الأيسر قبل الزر الأول. #111988 (Alexey Milovidov). - لم تعد جدولة حجز الذاكرة (تجريبية) تُخلي تخصيصًا عندما يوفّر تحرير ذاكرة معلّق المساحة اللازمة لزيادة حجز تتجاوز الحد؛ إذ ينتظر قرار الإخلاء الآن تطبيق التخفيضات قيد الإرسال، ما يجنب إنهاء الاستعلامات دون داعٍ تحت ضغط الذاكرة. #112299 (Sergei Trifonov).
- يتطلب Iceberg v2 وجود
sequence_numberفي ملفات البيان، لكن محركات أخرى مثل BigQuery يمكنها كتابة ملفات بيان بدونه. ويمكن لـ ClickHouse الآن قراءة هذه الجداول. #112431 (Konstantin Vedernikov). - إظهار تحذير عند غياب الإحصاءات اللازمة لإعادة ترتيب الربط. #107666 (Vladimir Cherkasov).
- أُضيفت أعمدة للتوافق مع MySQL إلى عروض
INFORMATION_SCHEMA:SCHEMATA.DEFAULT_COLLATION_NAMEوDEFAULT_ENCRYPTION؛ وTABLES.ENGINEوأعمدة MySQL ذات الصلة؛ وCOLUMNS.COLUMN_KEYوPRIVILEGESوGENERATION_EXPRESSIONوSRS_ID. يتيح ذلك للعملاء المتوافقين مع MySQL تشغيل استعلامات استبطان الكتالوج دون مواجهةUNKNOWN_IDENTIFIER. #109351 (Alexey Milovidov). - لم يعد يُبلّغ عن المرجع غير المؤهل إلى مفتاح
INNER JOINالمساوى في شرطON(مثلًاSELECT id FROM a INNER JOIN b ON a.id = b.id) باعتباره معرّفًا ملتبسًا، إذ يُضمن أن يحمل الطرفان القيمة نفسها. #109366 (Alexey Milovidov). - إرجاع رمز HTTP
403 Forbidden(بدلًا من500 Internal Server Error) لاستثناءاتACCESS_DENIEDعبر واجهة HTTP. #111043 (Schum). - كتابة SST لفهرس UNIQUE KEY مباشرةً إلى تخزين الجزء بدلًا من وضعه مؤقتًا في ملف محلي، ما يزيل الاعتماد على وحدة تخزين مؤقتة محلية ويتجنب إنشاء نسخة إضافية. #111189 (johnjing).
- تقبل
UTMToGeoالآن حرف نطاق خط العرض في MGRS الذي تُرجعهgeoToUTMكوسيط رابع لها، بالإضافة إلى علامة نصف الكرة الأرضية الصحيحة، بحيث يمكن تمرير نتيجةgeoToUTMمباشرةً إلىUTMToGeoوإعادتها دون فقدان البيانات. #111521 (Alexey Milovidov). - إصلاح
LOGICAL_ERROR(“تم إنشاء فهرس Min-Max على مستوى الجزء من مجموعة أعمدة غير متوقعة”) كان يمكن أن يؤدي إلى إيقاف عملية دمج في الخلفية في إصدارات debug/sanitizer بعد خفضpart_minmax_index_columns(مثلًا منwith_block_number_offsetإلىpartition_key_only). #111511 (Groene AI). - يُصلح نقص الإبلاغ في
ProfileEvents['JoinResultRowCount']عن حجم نتيجةJOINالتي تُرحَّل إلى القرص. كانت الصفوف الصادرة من الحاويات المؤجَّلة تُحتسب فقط ضمنJoinDelayedJoinedTransformRowCountولا تُضاف إلى الإجمالي. كانت نتائج الاستعلام صحيحة دائمًا؛ وكان الخطأ مقتصرًا على حدث ملف التعريف. #112673 (Groene AI). - أصبح
SYSTEM DISABLE FAILPOINTيرفض اسم نقطة فشل غير موجود ويطرحBAD_ARGUMENTS، كما كانSYSTEM ENABLE FAILPOINTيفعل بالفعل. سابقًا، كان الاسم المكتوب خطأً يُبلّغ عن النجاح مع إبقاء نقطة الفشل المقصودة مفعّلة، دون أي إشارة إلى عدم تعطيل أي شيء. #112680 (Groene AI). - أُضيف عمود جديد
skipping_indices_typesإلى جدولsystem.tables. ويحتوي على الأنواع المميزة لفهارس تخطي البيانات المعرّفة لكل جدول. #106388 (Anton Popov). - أُضيف فحص اتساق للتأكد من أن الاستعلام الموزع يحمل دائمًا إصدار عميل معروفًا، بحيث يُطرح خطأ منطقي بدلًا من تمرير إصدار صفري بصمت إلى الأجزاء البعيدة. أصبحت الاستعلامات التي يبدأها الخادم (عمليات تفريغ الخلفية، والمستهلكات المتدفقة، وإعادة تحميل القواميس، وعمليات تفريغ الإدراج غير المتزامن) تُبلّغ الآن عن إصدار الخادم نفسه باعتباره إصدار المُبادِر. #109408 (Alexey Milovidov).
- خُفّض مستوى تفصيل تشخيصات البحث الثنائي عن المفتاح الأساسي لكل جزء في
MergeTreeمن تسجيل التتبع إلى تسجيل الاختبارات. #110324 (Alexey Milovidov). - أصبح مسار نموذج تقسيم Hive لجداول تخزين الكائنات (مثل
S3) يُحدَّد عند أول استخدام للجدول بدلًا منCREATE/ATTACH، لذا لم تعد نقطة نهاية يتعذر الوصول إليها تمنع إنشاء الجدول وبدء تشغيل الخادم. #111842 (Nikolay Degterinsky). - أُصلح
ReadBufferFromPocoSocketBase::setReceiveTimeoutالذي كان يتعامل مع وسيطه بوصفه ثوانٍ بدلًا من ميكروثوانٍ، كما أُصلحت البُنى المهيأة باستخدام-DENABLE_LIBFIU=OFFالتي لم تكن تُجمَّع. في البُنى التي لا تتضمن libfiu، أصبحتSYSTEM ENABLE FAILPOINTوالأوامر ذات الصلة تطرح استثناءً بدلًا من عدم تنفيذ أي إجراء بصمت. #112767 (Alexey Milovidov). - يُصلح
clickhouse-localنقص الإبلاغ عنrows_readوعدادات التقدم الأخرى فيstatisticsلمخرجاتJSON/XMLوفي شريط التقدم: إذ كانت زيادة التقدم التي تصل أثناء تجميع حزمة التقدم تُهمل. #112958 (Alexey Milovidov). - أُصلح الخطأ المُبلّغ عنه عندما يحتاج
INSERTغير متزامن إلى جدولDistributedإلى دليل قائمة انتظار يتجاوز طول اسمه حد نظام الملفات البالغ 255 بايتًا (ويمكن الوصول إلى هذه الحالة باستخدامuse_compact_format_in_distributed_parts_names = 0). كان الخطأLOGICAL_ERRORلجزء ذيinternal_replication، وCode: 1001. std::exceptionدون إسناد في الحالات الأخرى؛ ويُبلّغ كلاهما الآن عنARGUMENT_OUT_OF_BOUNDمع ذكر الجدول والعنقود والحد. #113083 (Groene AI). - ارفض حدود حصة
execution_timeالخارجة عن النطاق باستخدامBAD_ARGUMENTSبدلًا من الاعتماد على سلوك غير معرّف عند تحويلها إلى نانوثوانٍ داخلية. #113178 (Alexey Milovidov). - تدعم النسخ المتماثلة المتوازية التلقائية الآن استعلامات
JOIN. #106073 (Nikita Taranov). - دعم مصادقة رمز التحديث لكتالوج
OneLake. #110413 (alesapin). - أصبح إعداد Keeper
write_snapshot_versionقابلاً لإعادة التحميل أثناء التشغيل. #112150 (alesapin). - تنفيذ
SYSTEM DROP FILESYSTEM CACHEبالتوازي. #112532 (Kseniia Sumarokova). - أصبح التداخل غير المدعوم لطريقة عرض
SQL SECURITY DEFINERأوSQL SECURITY NONEفوقs3ClusterأوurlClusterأوfileClusterيُرفض بخطأ استعلام عادي بدلاً من ظهورLOGICAL_ERRORفي إصدارات التصحيح والبناء باستخدام sanitizer. #113371 (Groene AI). - أُضيف الإعداد
analyzer_compatibility_multiple_joins_qualify_column_names(قيمته الافتراضيةfalse). عند تفعيله، وإذا احتوى بندFROMفي استعلام على عمليتيJOINأو أكثر، تحاكي أسماء أعمدة النتائج التي يُنتجها المحلل إعادة كتابة عمليات الربط المتعددة في المحلل القديم: تُسمّى الأعمدة الموسعة من*بالصيغة<alias-or-table>.<column>، ويحافظ مرجع العمود غير المستعار في قائمةSELECTعلى اسمه تمامًا كما كُتب. يتيح ذلك للاستعلامات الخارجية التي تشير إلى هذه الأسماء المؤهلة، مثلSELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)، أن تعمل كما كانت مع المحلل القديم. ويعالج أيضًا فقدان المحلل لأسماء أعمدة النتائج المؤهلة للأعمدة الموسعة من*عند استخدامgroup_by_use_nullsمعROLLUPأوCUBEأوGROUPING SETS، مما كان يؤدي إلى أسماء أعمدة نتائج مكررة وتعطّل المراجع الخارجية إليها. #110746 (Dmitry Novik). - أُعيدت تسمية
allow_experimental_delta_kernel_rsإلىallow_delta_kernel_rs. ويُحتفظ بالاسم القديم كاسم مستعار. #113476 (Kseniia Sumarokova). - عند تمرير مجموعة مسماة غير موجودة إلى دوال الجدول
remote/remoteSecureأو محركات الجدولRemote/RemoteSecureمع تجاوزkey = value، يُبلغ ClickHouse الآن عن المجموعة المسماة غير الموجودة بدلاً من إعادة تحليل الاستدعاء موضعيًا والإبلاغ عن خطأ غير ذي صلة. #113510 (Groene AI). - لم يعد بدء shell مع إكمال
clickhouse-bootstrapيطبع متغيرات البيئة عند تحميل الإكمال من خطاف إكمال المستخدم. #113694 (Azat Khuzhin). - أُضيفت القيمة
sainte_lagueإلى الإعدادshared_merge_tree_merge_coordinator_distribution_algorithm، وأصبحت القيمة الافتراضية بدلاً منwater_filling. #113442 (Mikhail Artemenko). - أُضيف الإعداد
filesystem_cache_wait_for_concurrent_download_timeout_millisecondsلتحديد أقصى مدة انتظار لقراءةٍ ما ريثما يُنزّل استعلام آخر من ذاكرة التخزين المؤقت لنظام الملفات جزءًا واحدًا (نحو 1 MiB)، وليس شريحة ملف كاملة. #113322 (Kseniia Sumarokova). - أُضيف إعداد Keeper
min_time_between_fsyncs_ms(قيمته الافتراضية5مللي ثانية)، الذي يجمع عمليات الإلحاق بسجل التغييرات التي تصل بعد وقت قصير من التفريغ السابق بدلاً من بدء عملية تفريغ أخرى فورًا. #113749 (Michael Kolupaev). - تُصدر جداول Kafka ذات الإزاحات المخزنة في Keeper (
kafka_keeper_path) الآن الخطأABORTEDبدلاً منLOGICAL_ERRORعندما يصبح الجدول غير نشط بعد فقدان جلسة Keeper، مثلًا أثناء قراءة مباشرة أو بث materialized-view. #113913 (Alexey Milovidov). - تم إصلاح عدم اتساق تنسيق AST في
viewIfPermitted: لم يعد نموذج دالة الجدول ينسّق عاملًا مثلnotبشكل غير صحيح في فرعELSE، ولم يعد نموذج التعبيرviewIfPermitted(...)يتلقىELSEزائدًا. #113652 (Alexey Milovidov). - تم إصلاح خطأ زائف
Failed to drop temporary table after refresh. Table ... is left behind and requires manual cleanup.كان يُسجَّل عند إلغاء تحديث عرض مادي قابل للتحديث (مثلًا عند إيقاف الخادم) مع تمكينdatabase_atomic_wait_for_drop_and_detach_synchronously. كان الجدول المؤقت قد حُذف بالفعل، لذا لم تكن هناك حاجة إلى تنظيف يدوي. #113957 (Groene AI). - يُطلق الخادم الآن الخطأ
UNKNOWN_ELEMENT_IN_CONFIGعند وجود خيارات تهيئة غير معروفة في تهيئة الخادم، مما يساعد على اكتشاف الأخطاء المطبعية وخيارات التهيئة الخاطئة مبكرًا. يمكن تعطيل هذا الفحص باستخدام<skip_check_for_incorrect_settings>. #100332 (Alexey Milovidov). - في واجهة الويب، لم يعد سجل المتصفح وعنوان URL يُحدَّثان عند كل ضغطة مفتاح؛ بل يُسجَّلان عند تنفيذ استعلام بنجاح أو عند تغيير علامة التبويب. #113596 (Alexey Milovidov).
- يُبلّغ ClickHouse الآن عن تجاوز سعة المكدس بدلًا من التوقف بصمت: تعمل معالجات الإشارات الفادحة على مكدس إشارات بديل، لذا تُنتج
SIGSEGVوSIGABRTوSIGILLوSIGBUSوSIGSYSوSIGFPEوSIGTRAPتتبع مكدس حتى عندما يكون الخيط المتسبب في الخطأ قد استنفد مكدسه. #113927 (Groene AI). - أصبح
ALTER TABLE ... MODIFY COLUMN <col> Tuple(...)علىTupleمُسمّى عمليةً للبيانات الوصفية فقط عند إضافة حقول فرعية فقط، وبسرعة مماثلة لـADD COLUMNعلى المستوى الأعلى. يتطلب تفعيله ضبطSETallow_metadata_only_named_tuple_alter= 1. #107305 (Amos Bird). - أُضيف الإعداد
input_format_json_max_object_sizeللحد من حجم كائن JSON أثناء التحليل. يُغلق #106704. #107669 (Pavel Kruglov). - تجنب تسجيل
sasl.kerberos.kinit.cmd configuration parameter is ignored.لتهيئات محركKafkaالتي لا تستخدم مصادقة Kerberos عبر keytab. #108235 (Ivan Shelestov). - أُضيف system.s3(azure)_queue_metadata. #108522 (Kseniia Sumarokova).
- سجّل إخفاقات الاتصال المقبولة بقواعد بيانات MySQL/PostgreSQL البعيدة كتحذيرات بدلًا من أخطاء. #109472 (Shaohua Wang).
- عندما لا يكون أي من
portأوsecureمحددًا، يحاولclickhouse-clientالمنفذين الافتراضي 9000 والآمن 9440 بالتزامن ويستخدم أول منفذ يستجيب، لذا يتصلclickhouse-client --host play.clickhouse.com --user playعبر TLS دون--secure، رغم أن المنفذ غير الآمن لذلك الخادم يُسقط الاتصالات بصمت بدلًا من رفضها. إذا اتضح أن المنفذ المستجيب غير قابل للاستخدام — كمنفذ آمن بشهادة غير موثوقة مثلًا — يعود العميل إلى المنفذ الآخر، لأن البروتوكول لم يُطلب صراحةً. #110130 (Alexey Milovidov). - يؤدي النقر على شعار السحابة في Playground الآن إلى فتح موقع ClickHouse في علامة تبويب جديدة، كي لا تفقد تقدمك أثناء تشغيل الاستعلامات. #110422 (William Hatcher).
- أُضيف المعدِّل STREAM BOUNDED، الذي يقرأ اللقطة الأولى فقط من الاستعلام المتدفق ثم ينهي التنفيذ بدلاً من الاشتراك في التحديثات. #110653 (Smita Kulkarni).
- أُضيفت معلومات عن الحالة الداخلية لعمليات الربط إلى
EXPLAIN ANALYZE. #110892 (Kirill Kopnev). - عند فشل تأكيد إعادة الدخول في
RWLockImpl::getLock()(RWLock is already locked in exclusive mode/Cannot acquire exclusive lock while RWLock is already locked)، تعرض رسالة الخطأ الآن معرّفاتquery_idالأخرى التي تمتلك القفل حالياً، وعدد الأقفال التي يحتفظ بهاquery_idالطالب بالفعل، لتسهيل تشخيص أخطاء ترتيب الأقفال هذه. #110971 (Groene AI). - يسجل ClickHouse Keeper الآن حدث “Client has not sent any data” بمستوى
Informationبدلاً منWarning، بما يتوافق مع معالج TCP في الخادم. يتجنب هذا التحذيرات الزائفة الناتجة عن مجسات التحقق من سلامة TCP (مثل مجسات الحيويةtcpSocketفي Kubernetes) التي تفتح اتصالاً بمنفذ عميل Keeper ثم تغلقه فوراً. #111217 (Zeynel). - يحتفظ
MaterializedPostgreSQLالآن بقيمTOASTغير المتغيرة في PostgreSQL أثناء التحديثات بدلاً من استبدالها بالقيم الافتراضية. #111552 (OrpheusAgent). - keeper: رُفعت القيمة الافتراضية لـ
write_snapshot_versionإلى 8، وأصبح بالإمكان إعادة تحميلها أثناء التشغيل. #111715 (Michael Kolupaev). - أُضيف المعدِّل STREAM UNORDERED: يتخطى الفرز حسب ترتيب الالتزام لكل لقطة. #111794 (Smita Kulkarni).
- أُضيف إعداد MergeTree جديد باسم
text_index_versionيتحكم في إصدار التنسيق على القرص لفهارس النص:v0_initialأوv1_with_codecأوv2_with_positions. أثناء الترقية المتدرجة أو قبل الرجوع إلى إصدار أقدم، اضبطه على إصدار أقدم لكي تستمر الخوادم الأحدث في كتابة أجزاء فهرس النص بتنسيق لا تزال الخوادم الأقدم قادرة على قراءته؛ ويضبطه إعداد التوافق تلقائياً. #111803 (Anton Popov). - ترفض دوال النص المدعومة بالذكاء الاصطناعي (
aiGenerateوaiClassifyوaiExtractوaiTranslate) الآن استجابات المزوّد المقتطعة أو غير المكتملة بأي شكل آخر (مثل عندما يصل النموذج إلى حدmax_tokens) بدلاً من إرجاع مخرجات جزئية بصمت. يتبع السلوك الإعدادai_function_throw_on_error. #111830 (George Larionov). - حُسِّنت
L2DistanceTransposedQuantizedوcosineDistanceTransposedQuantizedوdotProductTransposedQuantizedمنخفضة الدقة عبر إعادة بناء رموزQBit(Int8)ذاتp < 8باستخدام مراكز بادئة ذات متوسط شرطي غاوسي. تظل الدقة الكاملة (p = 8) مطابقة على مستوى البت؛ وقد تتغير المسافات التقريبية منخفضة الدقة، بينما تعتمد مكاسب الاستدعاء وزمن الاستجابة على عبء العمل. #111867 (Sergey Kuznetsov). - تم إصلاح عدم تعبئة ذاكرة التخزين المؤقت لشروط الاستعلام للحبيبات التي استُبعدت بواسطة أي اقتران غير الأخير في عبارة
WHEREالتي تحتوي على عدة شروطAND. #112083 (Shankar Iyer). - أُضيف إعداد جديد
input_format_json_max_string_column_growth_stepيقيّد نمو مخازن String الداخلية، وفق قوى العدد اثنين، عند إنشاء عمود JSON، مما يقلل ذروة استخدام الذاكرة عند إدراج مستندات JSON كبيرة. ويكون معطّلًا افتراضيًا. #112159 (Pavel Kruglov). - خُفِّضت ذروة استخدام الذاكرة عند كتابة أعمدة JSON التي تستخدم تسلسل البيانات المشتركة القائم على buckets (
map_with_bucketsوالمتقدم)، وذلك بتقسيم البيانات المشتركة إلى buckets واحدًا تلو الآخر أثناء الكتابة بدلًا من مَوضعة جميع buckets في وقت واحد. يفيد ذلك خصوصًا أعمدة Array(JSON): ففي JSON القياسي تُقسَّم البيانات المشتركة لكل granule (بحد أقصى index_granularity_bytes)، لذا يكون التوفير محدودًا، بينما قد يحتوي granule واحد من Array(JSON) على العديد من الصفوف المتداخلة، وبالتالي على كمية كبيرة من البيانات المشتركة، حيث يخفض التقسيم bucket تلو الآخر ذروة استخدام الذاكرة بشكل ملحوظ. #112172 (Pavel Kruglov). - تتضمن وثائق الإعداد في
system.documentation— التي تعرضها صفحة/docsالمضمنة والأمرhelp— الآن سجل تغييرات قيمته الافتراضية: الإصدار الذي أُضيف فيه الإعداد، وكل تغيير لاحق لقيمته الافتراضية، مع القيمة السابقة والقيمة الجديدة وسبب التغيير. #112177 (Alexey Milovidov). - يعمل
EXPLAIN ANALYZEالآن مع الاستعلامات المتدفقة. #112445 (Kirill Kopnev). - يمكن الآن كتابة مُعدِّلات تعريف العمود —
COMMENTوCODECوSTATISTICSوTTLوCOLLATEوPRIMARY KEYوSETTINGSلكل عمود — بأي ترتيب فيCREATE TABLE، وبحد أقصى مرة واحدة لكل منها. سابقًا، لم يكن يُقبل سوى ترتيب ثابت واحد، وكان مثلًاx UInt64 CODEC(ZSTD) COMMENT 'text'خطأً نحويًا. فيALTER TABLE ... ADD COLUMN/MODIFY COLUMN، يمكن أيضًا كتابة المُعدِّلات المدعومة —COMMENTوCODECوSTATISTICSوTTLوSETTINGSلكل عمود — بأي ترتيب؛ وتُطبَّق الآنSETTINGSلكل عمود فيADD COLUMNوSTATISTICSالمُعلنة فيADD COLUMN/MODIFY COLUMNبدلًا من إسقاطها بصمت، كما أنCOLLATEوPRIMARY KEYفي أوامرALTERهذه يطلقان الآن استثناءً بدلًا من تجاهلهما بصمت. #112788 (Alexey Milovidov). - تتطلب طريقة القراءة
pread_threadpoolاستدعاء النظامpreadv2مع العلامةRWF_NOWAITلقراءة البيانات الموجودة أصلًا في ذاكرة التخزين المؤقت للصفحات دون إحالة القراءة إلى thread pool. يُتحقق الآن عند بدء التشغيل مما إذا كان يمكن استخدام استدعاء النظام هذا، وإذا تعذّر ذلك — لأن نواة Linux أقدم من 5.11، أو لأن ملف تعريفseccompلبيئة تشغيل حاويات يرفض استدعاء النظام — تُغيَّر القيمة الافتراضية لـlocal_filesystem_read_methodإلىpread، ويُبلّغ عن السبب في سجل الخادم. سابقًا، كانت كل قراءة تتحمل تكلفة إحالتها إلى thread pool على هذه الأنظمة، وكان ملف تعريفseccompالذي يُرجعEPERMيتسبب في فشل الاستعلامات بالخطأCANNOT_READ_FROM_FILE_DESCRIPTOR. #112945 (Alexey Milovidov). - أبلغ عن بيانات تعريف thrift غير الصحيحة الخاصة بـ Parquet باعتبارها INCORRECT_DATA. #113311 (Groene AI).
- أُصلح تعامل codec GCD مع القيم الموقعة ذات العرض الثابت والأرقام السالبة. سابقًا، كان يحسب المقسوم عليه من القيم الموقعة مباشرةً، ما قد يفوّت القاسم المشترك ويقلل كفاءة الضغط بدرجة كبيرة للأعمدة الصحيحة والعشرية الموقعة. يحسب الآن المقسوم عليه من القيم المطلقة للأنواع الموقعة، مع الحفاظ على السلوك الحالي للأنواع غير الموقعة وفك الضغط. #113798 (Kirill Shcherbatov).
- أضف الإعدادات
enable_alp_codecوenable_sz3_codecوenable_zxc_codecوenable_quantized_codecلتمكين كل codec ضغط تجريبي على حدة. #113824 (Raufs Dunamalijevs). - اسمح باستخدام
ALTER TABLE ... MODIFY COLUMNلعمود تُستخدم أعمدته الفرعية في المفتاح الأساسي أو مفتاح التقسيم، ما دامت الأعمدة الفرعية المستخدمة في المفتاح تحتفظ بنوع متوافق على القرص. سابقًا، كان أي ALTER من هذا النوع محظورًا. #113862 (Pavel Kruglov). - أضف لوحة المعلومات
Filesystem cacheإلىsystem.dashboards. #113884 (Kseniia Sumarokova). - اجعل سجلات cache لكل إعادة تعبئة للمخزن المؤقت خاضعة للإعداد
filesystem_cache_verbose_logging. #113885 (Groene AI). - عندما يختلف النوع المعلن للعمود عن بياناته أثناء قراءة
MergeTree(بسبب مصادر بيانات بأنواع مختلطة، مثلًا بعدALTER TABLE ... MODIFY COLUMNلم تكتمل عمليته بعد)، يُبلغ الخادم الآن عن استثناء واضح يحدد العمود والبنيتين، بدلًا من إجراء تحويل نوع غير متحقق منه: كانت إصدارات التصحيح وsanitizer تتوقف سابقًا برسالةBad cast from type A to Bمقتضبة لا تذكر أي عمود، بينما كانت إصدارات الإنتاج تتعامل بصمت مع ذاكرة غير متطابقة. #114087 (Alexey Milovidov). - تعمل الآن دالة نافذة مع
PARTITION BYضمنmake_distributed_plan. وعندما يسمح شكل الخطة بذلك، تُنفَّذ دالة النافذة بالتوازي عبر حاويات تتلقى كل منها أقسامًا كاملة. #114111 (Vighnesh Pathrikar). - واجهة الويب: أصبح مؤشر التحميل على شكل ساعة رملية في لوحة قواعد البيانات متحركًا مجددًا. #114187 (Alexey Milovidov).
- تُستخدم الآن دالة hash ذات 64 بت لأساليب aggregation الخارجية Nullable ثابتة العرض، لتجنب مشكلة التصادمات عند aggregation ذات cardinality مرتفعة جدًا. #114210 (Nikita Taranov).
- تستنتج جداول
DistributedوBufferالتي لا تحدد قائمة أعمدة الآن البنية دائمًا وفقًا لـ access rights الخاصة بالمستخدم الذي أنشأها. #114211 (Pedro Ferreira). - يعيد
x IN (subquery)على عمودLowCardinalityالآنLowCardinality(UInt8)— وهو النوع نفسه الذي يعيدهx IN (literal list). سابقًا، كان الشكلان يعيدان نوعين مختلفين، وكانت الخطط الموزعة التي تتضمنINمن هذا النوع تحتاج إلى حالة خاصة عند التحقق من نوع الخطة. #114229 (Alexander Gololobov). - تم تمكين
ie_joinافتراضيًا: أصبحت القيمة الافتراضية لـjoin_algorithmهيdirect,parallel_hash,hash,ie_join. يُنفَّذ الآنJOINالذي لا يحتوي قسمONفيه إلا على شروط عدم مساواة (مقارنتان باستخدام<أو<=أو>أو>=بين تعبيرات الجداول الموصولة) باستخدام خوارزمية IEJoin القائمة على الفرز بدلًا منCROSS JOINمع عامل تصفية، كما أصبحت عمليات الربطLEFT/RIGHT/FULL/SEMI/ANTIبهذه الشروط مدعومة. وبما أنie_joinيأتي أخيرًا في القائمة، فلا يُستخدم إلا عندما لا تنطبق الخوارزميات الأخرى. #114327 (Vladimir Cherkasov). - تم إصلاح المخططات في واجهة الويب التي كانت تعرض بيانات نقطة متناظرة في تلميح التمرير لنتيجة مرتبة حسب
xترتيبًا تنازليًا. يمكن الآن رسم الأعمدةDateوDate32وDateTimeوDateTime64بيانيًا؛ إذ كانت طوابع Unix الزمنية الصحيحة فقط مدعومة سابقًا. تُعرض التواريخ على المحاور وفي التلميحات بتنسيق ISO 8601، وكذلك الكميات ذات اللاحقاتK/M/G/…، كما في لوحة المعلومات المتقدمة. #114349 (Alexey Milovidov). - دعم تحليل الأعداد الصحيحة التي تتجاوز نطاق 64 بت في نوع البيانات
JSONوJSONExtractوisValidJSON. تُقرأ هذه القيم في أنواع أعداد صحيحة واسعة مثلInt128/UInt256بدلًا من رفض المستند بأكمله. #114379 (Pavel Kruglov). - أصبحت جداول QueryRunner تبدأ خيوط التنفيذ العاملة عند الطلب وتحررها عند خمولها، بدلًا من شغل خيوط التنفيذ طوال عمر الجدول. #114522 (Miсhael Stetsyuk).
- أُضيفت قابلية الرصد لمكدسات الألياف، التي تُستخدم للاتصال غير المتزامن بالنسخ المتماثلة البعيدة: أحداث ملف التعريف
FiberStackAllocsوFiberStackAllocBytesوFiberStackAllocNanosecondsوFiberStackFreeNanoseconds، والمقاييسFiberStacksوFiberStackBytes. #114541 (Alexey Milovidov). - PromQL: دعم معدّلات الطابع الزمني
@ start()و@ end(). #114558 (Minh Vu). - نقل سياق التتبّع في OpenTelemetry إلى الألياف المستخدمة لإنشاء الاتصالات غير المتزامن وتنفيذ الاستعلامات عن بُعد (الطلبات المحوطة،
async_socket_for_remote،async_query_sending_for_remote). أصبحت امتدادات الاستعلامات عن بُعد ضمن استعلام موزع تُربط بشكل صحيح تحت امتدادConnection::sendQueryالخاص بالعقدة البادئة، بدلًا من ربطها مباشرةً بسياق التتبّع الذي يقدمه العميل، وينتج كل تنفيذ لمهمة غير متزامنة امتدادًا خاصًا به. #114813 (Diego Gomes Tomé). - مع هذا التغيير، عند استخدام فهارس WHATIF، يُبلغ خط الأساس المعروض عبر الإسقاطات عن
not_applicableلكل مرشح بدلًا من فشل التعليمة. #114846 (Yarik Briukhovetskyi). - أصبح
DROP DATABASEيحذف الجداول بالترتيب الطوبولوجي العكسي لتبعيات التحميل والتبعيات المرجعية معًا (سابقًا تبعيات التحميل فقط)، لذا لا يمكن لتعطل في منتصفDROP DATABASEأن يترك جدولًا حُذفت تبعياته بالفعل. #114952 (Alexey Milovidov). - في لوحات المعلومات بواجهة الويب، استُبدلت شاشة الخطأ العامة بملاحظة فوق لوحات المعلومات، لذا لم يعد تعطل مخطط واحد يخفي الصفحة بأكملها. #115019 (Mikhail Artemenko).
- إفراغ جداول مرحلة التعلّم الخاصة بالمجمّع التكيفي إلى القرص عند ضغط الذاكرة. #115038 (Groene AI).
- أصبح
clickhouse-localيجيب عن طلبات Preflight لـ CORS بالرؤوس المتساهلة نفسها التي يستخدمهاclickhouse-server، لذا يمكن استخدام واجهة HTTP التي يفتحهاSYSTEM START LISTEN HTTPمن المتصفح دون إعداد إضافي، بما في ذلك واجهة الويب المفتوحة من عنوان URL من نوعfile://. #115045 (Alexey Milovidov). - دعم معاملات مطابقة التعبيرات النمطية بأسلوب PostgreSQL:
~(اسم مستعار للدالةmatch)، و~*(مطابقة غير حساسة لحالة الأحرف)، و!~و!~*(النفي). تعمل الآن أوامر\dو\dtو\dvفيpsqlعند الاتصال بـ ClickHouse عبر بروتوكول توافق PostgreSQL، ولم يعد الاستعلام الفاشل ينهي الاتصال. #115066 (Alexey Milovidov). - لم يعد
clickhouse-clientيطبع الرسالةConnecting to ...مرتين عند طلب كلمة المرور تفاعلياً. #115081 (Alexey Milovidov). - يوضح
EXPLAIN WHATIFالآن سبب تجاوز التقدير التجريبي في سطر جديد باسمempirical_reason، يظهر عندما تكون قيمةempirical_statusهيunsupported. #115140 (Yarik Briukhovetskyi). - عندما لا تتمكن أي خوارزمية ربط مفعّلة بإعداد
join_algorithmمن تنفيذJOIN، تسرد رسالة الخطأ الآن الخوارزميات التي جرت تجربتها، ودرجة الصرامة ونوعJOINالذي فشل، بدلاً من الاكتفاء بالإبلاغ عن عدم نجاح أي منها. #115226 (Alexey Elkin). - يمكن لاستعلامات البحث المتجهي الآن استخدام فهرس تشابه المتجهات عندما يكون المتجه المرجعي قيمة حرفية لمصفوفة أعداد صحيحة، مثل
ORDER BY L2Distance(vec, [1, 2]). سابقاً، كانت هذه الاستعلامات تعود بصمت إلى فحص بالقوة الغاشمة. #115255 (Robert Schulze). - يُعاد الآن محاولة فشل الشبكة من جهة العميل في Azure (إعادة تعيين الاتصال أو رفضه، وأخطاء DNS وTLS) بوصفه أخطاء نقل بدلاً من إظهاره كخطأ
500اصطناعي، بما يتوافق مع عميل S3. #115269 (Arsen Muk). - يمكن الآن استرداد توثيق جميع عبارات SQL (مثل الاسم والبنية والوصف والأمثلة) من جدول النظام
system.statements. #115341 (Robert Schulze). - لم يعد
BACKUPيترك ملف قفل في وجهته إذا فشلت المحاولة التي أنشأته قبل كتابة أي شيء، سواء أثناء حجز الوجهة أو عند فتح أرشيف. لم يكن بإمكان أي نسخة احتياطية لاحقة مطابقة هذا القفل، لذا كانت كل إعادة محاولة للوجهة نفسها تفشل إلى أن يُحذف الملف يدوياً. تنشئ النسخ الاحتياطية إلى وجهاتS3وAzureالقفل أيضاً بشكل حصري، ويُبلّغ عن القفل التابع لنسخة احتياطية أخرى باعتباره نسخة احتياطية متزامنة، بدلاً من أي خطأ تُرجعه وحدة التخزين. #115387 (Julia Kartseva). - دعم مصادقة رمز الحامل في BuilderRWBufferFromHTTP (المحاولة 2). #115400 (Sergei Trifonov).
- إضافة بعض المقاييس ذات الأبعاد إلى S3Queue. #115422 (Bharat Nallan).
- أُضيف
keywordكاسم مستعار لمُجزّئ النصarrayالخاص بفهرس النصوص، لتحسين التوافق مع OpenSearch وElasticsearch وSolR وLucene. #115507 (Robert Schulze). - السماح بإنشاء جداول S3 خاصة. #115652 (Konstantin Vedernikov).
- عدم تسجيل الذاكرة غير المتتبعة لكل خيط في أخطاء MEMORY_LIMIT_EXCEEDED التي لا تشمل الخادم بأكمله. #115658 (Azat Khuzhin).
- يدعم بروتوكول Prometheus remote-write الآن عمليات الإدراج غير المتزامنة: تُجمَّع البيانات الواردة من عدة طلبات remote-write متزامنة قبل تكوين الأجزاء، وفقًا لإعداد
async_insert(مفعّل افتراضيًا؛ أضفasync_insert=0إلى URL المعالج للحفاظ على السلوك المتزامن). ولا يُقَرّ الطلب إلا بعد تفريغ البيانات إلى جميع الجداول الداخلية لجدولTimeSeriesالهدف. #115688 (Nikita Mikhaylov). - أصبحت جميع الدالات التجميعية
timeSeries*تتعامل مع الطوابع الزمنية المكررة وفق قاعدة واحدة (تُعتمد القيمة الأكبر، وتخسر NaN أمام أي قيمة أخرى)، مما يصلح النتائج التي تعتمد على الترتيب فيtimeSeriesInstantRateToGridوtimeSeriesInstantDeltaToGridوtimeSeriesLastTwoSamplesوtimeSeriesResampleToGridWithStalenessعندما تكون بعض القيم ذات الطابع الزمني نفسه NaN. والقاعدة موثقة ومختبرة الآن. #115920 (Vitaly Baranov).
إصلاحات الأخطاء (سلوك غير صحيح يلاحظه المستخدم في إصدار مستقر رسمي)
- إصلاح تلف أسماء الأعمدة واستثناءات
BAD_ARGUMENTSمعinject_random_order_for_select_without_order_by: لم تعد استعلاماتSELECTمتعددة الأعمدة تفشل، وتُحفَظ أسماء أعمدة الإخراج فيCREATE TABLE AS SELECTوCREATE VIEW AS SELECTوالتنسيقات المُسمّاة مثلJSONEachRowبدلًا من استبدالها بالأسماء المستعارة الداخلية__subquery_column_<UUID>. إغلاق #102812. إغلاق #101107. #105896 (Groene AI). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKفي قارئParquetV3 الأصلي عندما يحتويPREWHEREعلى شروط مترافقة تشترك في تعبير وسيط. #107059 (Groene AI). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKللاستعلامات التي تستخدم الأعمدة الافتراضية_part_starting_offsetأو_part_offsetفيWHEREمع التجسيد الكسول. #108287 (Vladimir Cherkasov). - إصلاح
Not found column or subcolumn c.null in blockعند تشغيلWHERE col IS NULLأوIS NOT NULLعلى عمودIcebergخضع لتطور المخطط وأُضيف بعد كتابة ملفات بيانات أقدم، معoptimize_functions_to_subcolumns = 1(الإعداد الافتراضي). #109515 (Groene AI). - إصلاح أخطاء
ICEBERG_SPECIFICATION_VIOLATIONالزائفة عند قراءة جدولIcebergيُسلسَل فيه نوع عشري أو نوع بدائي آخر ذي معلمات بمسافات بيضاء مختلفة بين ملفات البيانات الوصفية، مثلdecimal(20,0)في البيانات الوصفية للجدول وdecimal(20, 0)في ملف البيان. #109676 (Groene AI). - إصلاح
PREWHEREالمؤجل معoptimize_move_to_prewhere = 1عندما يُطبَّقPREWHEREبعدFINAL: لم تعد شروطWHEREتُنقل قبل سياسة صفوف مؤجلة، إذ كان ذلك قد يغيّر نتائج الاستعلام. #109703 (Yarik Briukhovetskyi). - إصلاح
BAD_GETعند مقارنة عمودArray(String)بحرفية مصفوفة مثلarr = ['x']وكان للعمود فهرس تخطٍ من نوعtextأوtokenbf_v1أوngrambf_v1. تعود هذه المقارنات الآن إلى فحص كامل بدلًا من فشل الاستعلام. #110057 (Groene AI). - إصلاح النتائج الخاطئة للدوال
hasوmapContainsKeyوmapContainsValueعند استخدام قيمة بحث فارغة بوجود فهرس نصي. #110246 (Robert Schulze). - إصلاح
Host is empty in S3 URIعند استخدام استعلام فرعي قيَمي كوسيطة عنوان URL لدالة الجدولs3، أو كوسيطة لأي دالة جدول أخرى، في استعلاماتCREATE TABLE ... AS SELECT. #110254 (Sema Checherinda). - إصلاح عمليات التحقق من امتيازات
ON CLUSTERلـSYSTEM STOP/START CLEANUPوSYSTEM STOP/START VIRTUAL PARTS UPDATE: لم تعد تتطلبSYSTEM PULLING REPLICATION LOG، وأصبحت تستخدمSYSTEM CLEANUPأوSYSTEM VIRTUAL PARTS UPDATE. #110289 (Groene AI). - إصلاح مشكلة عدم اكتشاف النسخة المتماثلة للقراءة فقط في تخزين الكائنات، عند ضبط
read_only = true، للأجزاء الجديدة عبرrefresh_parts_interval، وفشلtable_disk = trueعلى هذا القرص برسالةtable_disk is not supported for non-ObjectStorage disks. #110460 (Julia Kartseva). - إصلاح عمليات الكتابة عبر دوال جداول بحيرة البيانات، مثل
INSERT INTO FUNCTION icebergS3(...)، التي كانت تُنتج ملفاتParquetتفقد فيها الأعمدة النصية توصيف النوعString، مما يجعل البيانات المكتوبة غير قابلة للقراءة بواسطة قارئات خارجية مثل Spark. #110465 (Shaohua Wang). - إصلاح فشل استنتاج المخطط مع
Map cannot have a key of type LowCardinality(Nullable(String))عند قراءة ملفاتORCذات مفاتيح الخرائط المُرمّزة بالقاموس، بما في ذلك الملفات التي يكتبها Spark والملفات التي يكتبها ClickHouse نفسه عند تمكينoutput_format_orc_dictionary_key_size_threshold. #110492 (Shaohua Wang). - إصلاح نتائج
IS NULL/IS NOT NULL/count()غير الصحيحة معoptimize_functions_to_subcolumnsلعمود حُوّل إلىNullableعبرALTER MODIFY COLUMN Tمقتصر على البيانات الوصفية إلىNullable(T). بالنسبة إلى الأجزاء المكتوبة قبل التحويل، يُشتق الآن العمود الفرعي.nullمن العمود الأب الموجود فعليًا بدلًا من القيمة الافتراضية لنوع التخزين. #110584 (Groene AI). - إصلاح نتائج الاستعلامات غير الصحيحة الناتجة عن تحسين
optimize_and_compare_chainعندما تمزج الشروط المتعدية أنواعًا ذات دلالات مقارنة مختلفة، مثلEnumمعString، أوDecimalمعFloat64، أو قيمFixedStringذات أطوال مختلفة. #110621 (Yarik Briukhovetskyi). - إصلاح النتائج غير الصحيحة لبعض استعلامات القراءة بالترتيب عندما يوسّع المُحسِّن بادئة مفتاح الفرز. #110725 (Groene AI).
- إصلاح عبارات
CREATEالتي تحتوي على عبارةCOMMENTبحيث تُصدر خطأً نحويًا عند غياب سلسلة التعليق الحرفية، بدلًا من قبول استعلام فُسّر بصورة خاطئة بصمت. على سبيل المثال، لم يعدCREATE VIEW v COMMENT AS SELECT 1ينشئ عرضًا دون تعليق. #111159 (Shaohua Wang). - إصلاح النتائج غير الصحيحة من
SummingMergeTreeوCoalescingMergeTreeمعFINALعندما يكونoptimize_move_to_prewhere_if_final = 1وتكون عبارةWHEREشرطًا منطقيًا ضمنيًا على عمود مفتاح الفرز، مثلWHERE k. #111342 (Groene AI). - إصلاح استثناءات
Directory '...' was created concurrently with remote path '...'الزائفة في العمليات المقتصرة على البيانات الوصفية لقواعد البيانات والجداول المدعومة بتخزين الكائنات، مثلDROP DATABASE. #111353 (Mikhail Artemenko). - تُبلغ كتالوجات REST لبحيرة البيانات الآن عن بيانات الاعتماد المنتهية الصلاحية بالاستثناء المناسب بدلًا من التعامل معها بصمت كجدول مفقود أو إرجاع
UNKNOWN_TABLE. #111379 (alesapin). - إصلاح تجاهل
SQL SECURITY DEFINERوSQL SECURITY NONEللعروض ذات المعلمات عند تعطيل المحلل (enable_analyzer = 0). سابقًا، كان الاستعلام عن مثل هذا العرض بواسطة مستخدم لا يملك امتيازات على الجدول الأساسي يفشل معACCESS_DENIED، رغم أن العرض نفسه يعمل عند تمكين المحلل. #111458 (Groene AI). - رفض إنشاء عمود
Nullable(Nothing)، أو أي نوع آخر غير مسموح به في الجداول، عند تنفيذCREATE TABLEإذا كان المخطط مستنتجًا من التخزين، مثلًا في جدولremoteأوRemoteأوDistributedبلا أعمدة فوق عرض ينفّذSELECT NULL، بدلًا من حفظ بيانات وصفية يتعذر تحميلها عند إعادة تشغيل الخادم التالية وتمنع تحميل الجداول غير ذات الصلة. #111487 (Groene AI). - إصلاح
std::bad_variant_accessوالتطور غير الصحيح لمخططIcebergفي أعمدةArray(Map(...))المتداخلة التي يتم تعديلStructالداخلي فيها. #111489 (Konstantin Vedernikov). - إصلاح فشل
ALTER MODIFY COLUMNعند تحويل عمودNullableإلى نوع مختلف معDEFAULT، مثل التحويل منNullable(UInt8)إلىStringأوLowCardinality(String)أوArray(UInt8). #102156 (DQ). - إصلاح ظهور
BAD_ARGUMENTS(Dictionary not found) منdictGetبعد رفضDETACH DICTIONARY ... PERMANENTLYبسببHAVE_DEPENDENT_OBJECTS؛ إذ يبقى القاموس الآن قابلًا للاستخدام عند رفض فصله. #105259 (Groene AI). - تتضمن ملفات البيانات التي يكتبها ClickHouse لجداول
Icebergالآن معرّفات حقولIcebergفيAvroوORC، وتُكتب أعمدةStringفيORCبصيغةstringبدلًا من صيغة ثنائية، وتحافظ حقولORCالمركبة الاختيارية (ArrayوMapوTuple) الآن على البيانات الوصفية الصحيحةiceberg.required. يعالج هذا نتائجNULLالصامتة بعد إعادة تسمية الأعمدة ويستعيد التوافق مع القارئات المتوافقة مع المواصفة، مثل Spark وiceberg-java. #109994 (Groene AI). #111775 (Groene AI). - إصلاح قراءة الملفات على أقراص
plain_rewritableبعد إعادة كتابة مسار موجود بمحتوى بحجم مختلف، إذ كان من الممكن أن تؤدي البيانات الوصفية القديمة المخزنة في الذاكرة إلى حدوثUNEXPECTED_END_OF_FILE. #110304 (Konstantin Bogdanov). - إصلاح انحراف متتبع الذاكرة لكل مستخدم الناجم عن سجلات النظام، مثل
query_logوquery_views_log، والذي كان من الممكن أن يؤدي إلى تفعيل حد خاطئ لـmax_memory_usage_for_userلدى المستخدمين ذوي أعباء العمل المستمرة. #110708 (Raúl Marín). - إصلاح حالة تنافس نادرة كان فيها تنفيذ
ALTERلتعديل تعليق فقط أو إعدادات فقط على جدولReplicatedMergeTreeقد يحذف بصمت عمودًا أضافه تنفيذ متزامن لـALTER ... ADD COLUMN، مما يترك نسخة متماثلة ببيانات وصفية قديمة للجدول. #111029 (Shaohua Wang). - إصلاح التقليم غير الصحيح للمفتاح الأساسي في الجداول التي ينتهي مفتاح ترتيبها بترتيب تنازلي، مثل
ORDER BY (g, r DESC)، والذي كان من الممكن أن يستبعد صفوفًا مطابقة. #111059 (Nihal Z. Miaji). - إصلاح تسرّب ذاكرة لشهادة النظير عند كل مصافحة TLS مع تمكين التحقق من الشهادة. #111425 (Konstantin Bogdanov).
- إصلاح الطفرات التي تستخدم معلمة استعلام كتقسيم في
ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}: إذ يمكن الآن تحليل قيمة التقسيم المتسلسلة مجددًا بصورة صحيحة، لذا لم يعدALTERيكتب إدخالات طفرات تعطل تحميل الجدول. #111518 (Michael Kolupaev). - إصلاح تعطل على macOS/aarch64 عند التقاط تتبع مكدس على مكدس coroutine أو fiber، مثلًا بواسطة محلل أداء الذاكرة. #111656 (Raúl Marín).
- إصلاح تعطل الخادم عند قراءة بيانات
Protobufباستخدامinput_format_allow_errors_num > 0، إذا سبقت رسالة صالحة رسالة تالفة قابلة للتخطي ضمن الكتلة نفسها. #107739 (Andrey Tsarevskiy | Андрей Царевский ). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKعندما يستخدم استعلام على جدولDistributedالقيمة_shard_numأوshardNumالتي تصبحNullable، مثلًا ضمنFULL JOINمعjoin_use_nulls = 1وبالاقتران معORDER BYوالمحلل. #109798 (Groene AI). - إصلاح النتائج الخاطئة واستثناءات
UNKNOWN_ELEMENT_OF_ENUMفيLEFT/RIGHT/FULL/ASOF JOINمعjoin_algorithm = 'full_sorting_merge'، إذ كان يمكن ملء الصفوف غير المرتبطة بـ0بدلًا من القيمة الافتراضية لنوع العمود. #111197 (Groene AI). - إصلاح استثناء
LOGICAL_ERRORعندما يكون جسم lambda لدالة عالية الرتبة عبارة عنifأوmultiIfذي شرط ثابت، يمزج فرعًا حرفيًا من نوعBoolمع فرع مقارنة من نوعUInt8، مثلًاarrayFilter(p -> multiIf(false, true, p = 'ALL'), ['ALL']). #111245 (Groene AI). - يشير العنصر النائب
{_partition_id}في مسار محركاتS3وAzureBlobStorageوURLوالمحركات المشابهة للملفات، عند عدم تحديدpartition_strategyصراحةً، مجددًا إلى استراتيجيةwildcard، مما يعيد التوافق مع عبارات DDL السابقة للإصدار 26.6 التي بدأت تفشل معBAD_ARGUMENTS. #111279 (Nikita Fomichev). - إصلاح
NUMBER_OF_COLUMNS_DOESNT_MATCHفي استعلاماتGROUP BYعلى جدولMergeيغلّف جدولDistributed، عندما يكون مفتاح التجميع دالةً لعمود وتقرأ دالة تجميعية العمود نفسه. #111334 (Groene AI). - يُرفض الآن
GRANT role TO roleللدور نفسه معBAD_ARGUMENTSبدلًا من إنشاء إدخال ذاتي المرجع بصمت فيsystem.role_grants. #103315 (zxuhan7). - إصلاح عمليات الكتابة إلى جداول
Icebergعندما لا يحتوي ملف البيانات الوصفية على قسمrefs. #106896 (Aleksandr Musorin). - إصلاح تعذر قراءة
system.session_logبعد تسجيل دخول Arrow Flight: كان عمودinterfaceمن النوعEnum8، لكن القيمةArrowFlightكانت مفقودة من تعداده، لذا كانت عملية تسجيل الدخول عبر بروتوكول Arrow Flight تكتب القيمة الخام10، وكان أيSELECTيقرأ هذا الصف يطرح استثناءUnexpected value 10 in enum. #110758 (Alexey Milovidov). - إصلاح تجاوز عدد صحيح موقّع في
toStartOfIntervalمع فواصل زمنية دون الثانية: بالنسبة إلى قيمDateTime64الواقعة ضمن فاصل زمني واحد من الحد الأدنى لـInt64، كانت النتيجة المقربة تلتف بصمت إلى قيمة موجبة غير صالحة؛ أما الآن، فترمي الدالة استثناءDECIMAL_OVERFLOW. #111370 (Alexey Milovidov). - إصلاح
readWKTPointوreadWKTاللذين كانا يعيدان إحداثيات غير مهيأة (في الوضع القياسي) أو إحداثيات الصف السابق (في الوضع المتجه) لنقطة فارغة موسومة ببُعد، مثلPOINT M EMPTY. تُرفض هذه المدخلات الآن بالخطأCANNOT_PARSE_TEXT، بما يتسق معPOINT EMPTY. #111517 (Groene AI). - إصلاح استثناءات
Unexpected number of columns in result sample blockفيRIGHTوFULL JOINعندما يحتوي الجانب الأيسر على عمود مكرر بالاسم نفسه، مثل1 AS b, 1 AS b، ويستمر هذا التكرار عبرUNION ALL. #111554 (Groene AI). - إصلاح استثناءات
CANNOT_CONVERT_TYPEوLOGICAL_ERRORفي الاستعلامات الموزعة التي تستخدم الموفّق-Tupleمع المعدّلRESPECT NULLSأوIGNORE NULLSضمن موفّقات متداخلة، مثلanyRespectNullsStateTuple(...) IGNORE NULLS. #111570 (Alexey Milovidov). - إصلاح تمييز بناء جملة SQL في Play على iPhone، إذ كان تضخيم النص التلقائي في Safari على iOS قد يؤدي إلى اختلال محاذاة طبقة التمييز المتراكبة. #111683 (Alexey Milovidov).
- إصلاح
UNKNOWN_QUERY_PARAMETERعند استدعاء عرض مقيّد بمعلمات بوسيط قيمته استعلام فرعي من النوعArrayأوTupleأوLowCardinality، مثلSELECT * FROM v(param = (SELECT groupArray(x) FROM t)). #111790 (Groene AI). - إصلاح
TYPE_MISMATCH(Key type for complex key ... does not match) عندما تستخدم عمليةJOINعلى قاموس مفتاح ربط من النوعNullableأوLowCardinalityأوLowCardinality(Nullable)، بينما لا يكون مفتاح القاموس مغلفًا. أصبحت عملية البحث في القاموس للربط المباشر تطبّع المفتاح إلى نوع المفتاح المعلن للقاموس، كما يفعلdictGetوdictHasبالفعل، ولا يتطابق مفتاحNULLمطلقًا. #111857 (Groene AI). - مع
fsync_part_directory = 1، أصبحت إعادة تسمية دليل الجزء من اسمه المؤقت إلى اسمه النهائي دائمة بحد ذاتها عبر تنفيذ fsync للدليل الأب، وكذلك للدليل الأب المصدر عند النقل بين دليلين أبويين. سابقًا، كان يُنفّذ fsync للدليل المنقول فقط، لذا كان فقدان الطاقة مباشرة بعد تثبيت جزء قد يتركه مفقودًا على القرص ويتسبب في فقدان صفوف رغم تفعيل الإعداد. #111861 (Groene AI). - إصلاح حالات التعليق في
randChiSquaredوrandStudentTوrandFisherFوrandBinomialعند استخدام معلمات قصوى. لم يكن بالإمكان مقاطعة هذه الاستعلامات باستخدامmax_execution_timeأوKILL QUERY. تُرفض هذه المعلمات الآن حتى عند ضبطmax_rand_distribution_parameterأوmax_rand_distribution_trialsعلى0، ولم يعد بالإمكان رفعmax_rand_distribution_trialsفوق قيمته الافتراضية10^9لـrandBinomial. #111909 (Alexey Milovidov). - إصلاح النتائج الخاطئة عندما يعيد المحلل كتابة سلاسل المقارنة مثل
x = c1 OR x = c2 OR ...أوx != c1 AND x != c2 AND ...أوhas(const_array, x)إلىINوNOT IN. كما يصلح استثناءاتIllegal type ... of argument of function inللتعبيرات ذات البنيةDynamicأوArray(Dynamic)أوJSON. #111924 (Groene AI). - إصلاح النتائج الخاطئة وظهور
LOGICAL_ERRORعند اختيار عمودNullable(Tuple(...))مع أحد الأعمدة الفرعية لعناصره الحاملة للقيم الفارغة (VariantأوDynamicأوLowCardinality) من جدولMergeTree. #111949 (Groene AI). - رفض مصافحات البروتوكول الأصلي التي تستخدم
USER_INTERSERVER_MARKERلمجموعة غير معروفة أو لمجموعة مهيأة من دون عنصر<secret>. كان يمكن لهذه المصافحات سابقًا الدخول في وضع الاتصال بين الخوادم قبل المصادقة وقراءة معلومات عن الجداول المحلية. #99675 (Dan Anderson). - إصلاح
JOINعلى جداولEmbeddedRocksDBوRedisوKeeperMap، إذ كان قد يعيد بصمت صفرًا من الصفوف عند استخدامDirectKeyValueJoinمع مفاتيحStringأوNullable(String). #105253 (Vladimir Cherkasov). - إصلاح العروض المادية القابلة للتحديث المنسقة في قاعدة بيانات
Replicatedالتي كانت تتعطل بعد إعادة الإرفاق بـ Keeper لا تتوفر فيه علامة الميزةMULTI_READ؛ إذ يتوقف العرض الآن بصورة سليمة بالحالةDisabledبدلًا من تسجيلUnexpected exception in refresh schedulingإلى ما لا نهاية. #108890 (Groene AI). - إصلاح إرسال عميل ZooKeeper بادئة طول
int32متجاوزة للسعة للطلبات الأكبر منINT32_MAXبايت. تُرفض الطلبات كبيرة الحجم الآن من جهة العميل. يمكن ضبط الحد عبرmax_request_sizeضمن<zookeeper>، وإلا فيُستمد من Keeper. يُغلق #109165. #109190 (Arsen Muk). - إصلاح وضع
OrderedلـS3Queue/AzureQueueمع عُقد المعالجة الدائمة: تُجدَّد أقفال الحاوية الآن أثناء التدفق، بحيث لا تؤدي عملية التنظيف باستخدام TTL، التي يتحكم بهاpersistent_processing_node_ttl_seconds، إلى إزالة أقفال معالج نشط. وإذا فُقدت ملكية القفل رغم ذلك، يُكتشف الأمر ويُبلَّغ عنه، ويتعافى التدفق باستخدام مكرّر ملفات جديد. #110292 (Kseniia Sumarokova). - إصلاح البيانات الخاطئة واحتمال القراءة خارج الحدود عند قراءة أعمدة
Stringذاتstring_serialization_version = 'with_size_stream'بعد تخطي الصفوف الأولى، وعند قراءة الكائنات الفرعية لأعمدةJSONالمخزنة باستخدامobject_shared_data_serialization_version = 'map'. #110471 (Alexey Milovidov). - إصلاح قبول المحلل في
CREATE TABLEوALTER TABLEلتعبيرDEFAULTأوMATERIALIZEDيشير إلى عمود افتراضي مثل_tableأو_database. تُرفض هذه التعبيرات الآن عند تعريفها بدلًا من فشلها لاحقًا عند الإدراج معNOT_FOUND_COLUMN_IN_BLOCK. #111776 (Groene AI). - إصلاح حالة تسابق في دوال UDF القابلة للتنفيذ، ومحرك الجدول
executable، والقواميس القابلة للتنفيذ، إذ كان يمكن لـfcntlعلى واصف ملف مغلق مسبقًا أن يفسد واصفًا غير ذي صلة لاستعلام متزامن، مما يؤدي إلى تعليق الاستعلامات إلى أجل غير مسمى. #111779 (Raúl Marín). - يؤدي إنشاء إحصاءات
minmaxالمهجورة الآن إلى إصدار تحذير بدلًا من طرح استثناء. #111785 (Han Fei). - إصلاح جداول
Icebergالتي يكتبها ClickHouse بحيث تصبح قابلة للقراءة بواسطة قارئات خارجية مثل PyIceberg وSpark. تتضمن مخططاتAvroلقائمة البيان والبيان الآن خصائصfield-idالمطلوبة فيIceberg. #111786 (Groene AI). - أعِد إنشاء العمودين المُجسّدين داخل الجزء
block_numberوblock_offsetأثناء عمليات إرفاق الأجزاء وفصلها ونقلها واستنساخها، حتى لا تصبح قيمهما قديمة بعد معالجة الأجزاء. #111801 (Mikhail Artemenko). - أصلح تحسين
query_plan_split_filterالذي كان يترك عمودًا داخليًا باسم__split_filterفي أحد فروعINTERSECTأوUNION، ما قد يؤدي إلى الاستثناءBlock structure mismatch in IntersectOrExceptStep stream: different number of columns. #111930 (Groene AI). - أصلح
AMBIGUOUS_COLUMN_NAMEفي الاستعلامات التي تكرر شرطJOIN ONفيWHEREعند استخدامjoin_use_nulls = 1؛ إذ تُرجع هذه الاستعلامات نتائجها الآن بدلًا من الفشل. #112007 (Groene AI). - أصلح مصادقة DLF في كتالوج REST لـ
Paimon: لم تعد الطلبات اللاحقة للطلب الأول تفشل برمز HTTP 401، وأصبحت عمليات التحقق من وجود الجداول تتعرف على HTTP 404 بشكل صحيح. #112015 (JIaQi Tang). - أصلح
LOGICAL_ERRORأثناء التنظيف المتزامن لجداولKafkaفي Keeper؛ فلم تعد عمليات الإنشاء أو الإزالة تفشل إذا اختفى مسار Keeper الخاص بالجدول بعد انتهاء الجلسة. #112078 (Groene AI). - أصلح عمليات الدمج والتعديل عند تمكين فهرس الحدين الأدنى والأقصى على مستوى الجزء للعمودين
_block_numberو_block_offset. #109281 (Mikhail Artemenko). - أصلح حالات فشل
INSERTفي جداولDeltaLakeLocalأوdeltaLakeالتي كانت تترك ملف بيانات غير مُنهى بعد بدء الكتابة. #109328 (Groene AI). - أصلح تسرّب بيانات الاعتماد في
SHOW CREATEوsystem.query_logوسجلات الخادم ومخرجاتEXPLAINالخاصة بـs3/s3Clusterوالمحركات المعتمدة علىS3وBACKUP ... TO S3ووسائط الأسرار لدوالencryptوdecryptوHMAC المُنشأة من تعبيرات أو دوال SQL معرّفة من المستخدم. #109768 (Raúl Marín). - أصلح قراءة ملفات
Parquetالكبيرة من إدخالات zip غير المضغوطة من نوعSTOREDعبرs3وfile. #110495 (Eva Wuuu). - أصلح تعليق
EXPLAIN ANALYZEفي الاستعلامات التي تتضمن قراءة متدفقةFROM ... STREAMمخفية في استعلام فرعي أو تعبير الجدول الشائع أو عرض. تُرفض هذه الاستعلامات الآن باستخدامNOT_IMPLEMENTED، كما هي الحال بالفعل مع القراءات المتدفقة من المستوى الأعلى. #110935 (Groene AI). - ارفض المتجهات التي يفيض مقدارها التربيعي إلى ما لا نهاية عند استخدام فهرس
vector_similarityمع تكميمi8. في السابق، كانت هذه المتجهات تُنتج بيانات غير صالحة دون إصدار أي تنبيه. #111085 (Groene AI). - نفّذ
fsyncلملفات فهرس النصوص الخاصة بجزء مدموج أو مُجسّد عند تعيينmin_rows_to_fsync_after_mergeأوmin_compressed_bytes_to_fsync_after_mergeأوfsync_part_directory. في السابق، كانت هذه الملفات الوحيدة في الجزء التي لا تُزامَن، لذا كان انقطاع الطاقة مباشرة بعد الدمج قد يترك جزءًا مُثبتًا لكنه معطوبًا، ما قد يؤدي إلى فقدان البيانات. #111335 (Groene AI). - أصلح التحقق من المسارات بالنسبة إلى
user_files. #111442 (Alexander Tokmakov). - إصلاح فشل
SYSTEM REFRESHأحيانًا في استهلاك البيانات المتراكمة في قائمة الانتظار من جدولRabbitMQمتوقف. تنتظر عملية التحديث الآن بدء حلقة تسليم AMQP قبل استهلاك دورة البث الوحيدة خارج الترتيب. #111480 (Groene AI). - قصر الوصول إلى الكائنات المحلية على المسار
user_files. #111483 (Konstantin Vedernikov). - إصلاح segfault ناتج عن وصول إلى الذاكرة خارج حدودها عند إلغاء تسلسل حالة دالة تجميعية مشوهة تحتوي على قيمة
String. تُتحقق هذه الحالات الآن ويُرفض غير الصالح منها. #111606 (Miсhael Stetsyuk). - إصلاح تجاوز سعة عدد صحيح أثناء تحليل
system.zookeeper_info. #111629 (Kseniia Sumarokova). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKعندما يرشّح استعلامFINALحسب عمود من مفتاح الفرز غير موجود في قائمةSELECTويُنقل المرشح إلىPREWHERE، على سبيل المثالSELECT s FROM t FINAL WHERE k GROUP BY sمعoptimize_move_to_prewhere_if_final = 1. #111721 (Groene AI). - إصلاح
INSERTالمقسّم إلىDeltaLakeمعallow_experimental_delta_lake_writes = 1الذي كان يفسد قيم الأقسام التي تحتوي على محارف مسار ويرفض قيم الأقسامNULL. تُرمَّز قيم الأقسام الآن بترميز النسبة المئوية ضمن مقطع مسار واحد، وتُكتب قيمNULLأو السلاسل الفارغة بوصفها__HIVE_DEFAULT_PARTITION__مع إدخالpartitionValuesبقيمة null. #111793 (Groene AI). - إصلاح استثناء وتخطي بيانات بصمت عند قراءة عمود فرعي ديناميكي عبر جدول
Buffer. #111948 (Alexey Milovidov). - إصلاح فقدان
clickhouse-clientلقاعدة البيانات الحالية بعدUSE {db:Identifier}. إذا اضطر العميل إلى إعادة الاتصال لاحقًا، كان يبدّل الجلسة بصمت إلى قاعدة البياناتdefault. #111982 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERROR(Type mismatch when building statistics for column) أثناء عمليات mutation فيMergeTreeبعد أن يغيّرALTER MODIFY COLUMNيقتصر على البيانات الوصفية نوع عمود يحمل إحصاءات. يُعاد الآن حساب إحصاءات الأعمدة التي تعيد عملية mutation كتابتها فعليًا، بينما تحتفظ الأعمدة غير المعدلة بإحصاءاتها الحالية. #112009 (Groene AI). - إصلاح قراءات جدول
Paimonالتي كان يمكن أن تفشل أثناء استبدال تلميحsnapshot/LATESTالقابل للتغيير بالتزامن. تُتجاهل الآن التلميحات غير الصالحة أو القديمة، ويُحمَّل snapshot من الكتالوج بدلًا من ذلك. #112010 (JIaQi Tang). - إصلاح قراءة ملفات
GeoParquetوArrowوArrowStreamالتي يستخدم عمود الهندسة المُرمَّز بـ WKT فيها كلمة مفتاحية للنوع بأحرف غير كبيرة مثلpoint(1 2)، أو حاوية فارغة مثلLINESTRING EMPTYأوPOLYGON(). يصلح هذا أيضًا إعادة قراءة الملفات التي تخزّن مخرجاتwktلهندسة فارغة. #112020 (Groene AI). - إصلاح عدم تطبيق تجاوزات الإعدادات على مستوى الاستعلام على النسخ الأصلي لـ Azure. #112037 (Smita Kulkarni).
- إصلاح إعادة
query_masking_rulesكتابة نوع عمودEPHEMERAL، ما قد يؤدي إلى أن يخزّنCREATE TABLEنوعًا خاطئًا أو يفشل. #112048 (Alexey Milovidov). - لم تعد معاملات دوال الجدول تقبل حالات التجميع، إذ كانت تؤدي سابقًا إلى خطأ منطقي لأن هذه المعاملات غير مدعومة. يغلق #112085. #112087 (Pedro Ferreira).
- إصلاح النتائج الخاطئة في
JOINالذي يحتوي تعبيرONفيه على اقتران ثابت، مثلON l.id = r.id AND CAST(NULL AS Nullable(UInt8)). #112155 (Vladimir Cherkasov). - إصلاح النتائج الخاطئة لعمليات البحث
hasAllTokensوغيرها من عمليات بحث فهرس النصوص متعددة الرموز في البُنى التي لا تستخدمsimdcomp، مثلaarch64، عندما يكونtext_index_posting_list_apply_mode = 'lazy'. #112178 (Groene AI). - إصلاح النتائج الخاطئة عند استدعاء عرض مُعلَّم بمعاملات بوسيطة ليست تعيينًا بصيغة
parameter = value. تُرفض هذه الاستدعاءات الآن باستخدامUNKNOWN_QUERY_PARAMETERفي مساري التنفيذ كليهما. #112194 (Groene AI). - إصلاح العروض المُعلَّمة بمعاملات التي يستخدم متن
SELECTفيهاINTERSECTأوEXCEPTأو سلسلةUNIONتمزج بينUNION DISTINCTوUNION ALL، إذ كانت تُصنَّف خطأً كعروض عادية، ما جعل بياناتها الوصفية غير قابلة للتحميل. #112211 (Groene AI). - إصلاح استنتاج المخطط لعائلة
TSVالذي كان يستنتجStringللقيم العشرية المكتوبة بصفر بادئ، مثل0.0أو0.5، ويعامل هذا الصف الأول كرأس. كما أُصلحTSKVالذي كان يستنتج نوعًا رقميًا لقيمة مرمَّزة بتسلسل هروب مثلx=1\x2E5. يغلق #112105. #112226 (Groene AI). - إصلاح
system.s3_queue_settingsالذي كان يبلّغ عن قيم غير صحيحة لـbucketing_modeوpartitioning_modeوpartition_regexوpartition_component. #112300 (Bharat Nallan). - إصلاح النتائج الخاطئة، ومخرجات
ORDER BYالمرتبة بشكل غير صحيح، واستثناءاتBAD_TYPE_OF_FIELDعندما يكون المفتاح الأساسيArrayأوTupleويطبّق الاستعلام عليهplusأوminusأوmultiplyأوdivideأوintDiv. #112339 (Groene AI). - إصلاح التنفيذ عن بُعد للاستعلامات التي تحتوي على
PASTE JOIN، مثلًا عبر جدولDistributedأو دالة الجدول*Cluster. لم يعد ClickHouse ينسّق الاستعلام بالصياغة غير الصالحةALL PASTE JOIN. #112404 (Groene AI). - إصلاح
LOGICAL_ERROR(Invalid number of rows in Chunk) فيJoiningTransformلـLEFT JOINذي مفاتيح يمنى فريدة، وشرطONمختلط، وقيمة صغيرة لـmax_joined_block_size_rows. #106928 (Groene AI). - تم إصلاح العمود الافتراضي
_tagsلمحرك الجداولS3Queue: كان مُعلنًا عنه لكنه لم يُملأ مطلقًا، لذا كانSELECT _tagsيعيد دائمًا خريطة فارغة. ويعيد الآن وسوم الكائن، كما يفعل محركS3ودالة الجدولs3. #108676 (Groene AI). - إصلاح فقدان بيانات عمود لا يحتوي على تعبير افتراضي عند تنفيذ عملية دمج بالتزامن مع
ALTER TABLE... RENAME COLUMN، أو عندما تكون قيم العمود الوحيدة ناتجة منUPDATEخفيف. إذ كان يمكن إسقاط العمود من الجزء المدمج، فتُقرأ جميع قيمه لاحقًا على أنها NULL. #109356 (Groene AI). - إصلاح إسقاط فهارس التخطي من جزء بيانات (أو فشل
CHECK TABLEبالخطأUNEXPECTED_FILE_IN_DATA_PART) بعد طفرة تعيد كتابة الجزء بالكامل، مثلALTER TABLE... DROP COLUMNلعمودMATERIALIZED، في جزءWide. #109616 (Groene AI). - تم إصلاح خطأين في مسار
DateTime64للدالتينtoUTCTimestamp/fromUTCTimestamp(والاسمين المستعارينto_utc_timestamp/from_utc_timestamp) وtoTime64. الأول هو تجاوز عدد صحيح موقّع قرب حدInt64(ويُحسب الآن باستخدامInt128ويُقيَّد بالنطاق القابل للتمثيل). والثاني نتيجة خاطئة للقيم الكسرية السالبة قرب حد إزاحة المنطقة الزمنية: إذ كان تقسيم الثواني يقتطع باتجاه الصفر، فتفحصtimezoneOffset()الثانية التالية وقد تختار الجانب الخطأ من تغيير التوقيت الصيفي/الإزاحة. #109738 (Groene AI). - إصلاح خطأ منطقي (“Cannot determine row level filter; 0 columns deleted, 0 columns added”) عند القراءة من جدول
Mergeكان جدوله الفرعي يملك سياسة صف يكون عامل تصفيتها عمودًا موجودًا فقط (مثلًاCREATE ROW POLICY... USING flag). #109843 (Groene AI). - تم إصلاح خطأين يظهران عند تشغيل استعلام يحتوي على
GROUP BY GROUPING SETS(أو استعلام فرعي قياسي أو استعلام فرعي لطفرة يتضمنه) معforce_aggregation_in_order = 1: الخطأTrying to get name of not a column: ExpressionListفي المحلل القديم (enable_analyzer = 0)، والخطأMemory bound merging of aggregated results is not supported for grouping sets.لاستعلام موزع معenable_memory_bound_merging_of_aggregation_results = 1في المحلل. #109862 (Groene AI). - إصلاح تحليل القيمتين الرقميتين
1/0كقيمBoolداخل أنواع الحاويات (مثلArray(Bool)وTuple(Bool,...)). سابقًا، كان[1,0]يفشل بالخطأCANNOT_READ_ARRAY_FROM_TEXT، بينما كان[true,false]يعمل. #109976 (Groene AI). - تم إصلاح خطأ
ILLEGAL_COLUMNغير صحيح صادر عنALTER TABLE... ADD COLUMN IF NOT EXISTSعندما يكون العمود موجودًا بالفعل وقت التطبيق. كان ذلك يحدث عند إضافة العمود نفسه مرتين باستخدامIF NOT EXISTSفي تعليمة واحدة، أو عندما يضيفALTERمتزامن العمود بين مرحلتي التحضير والتطبيق. #110080 (Groene AI). - تم إصلاح نتيجة خاطئة كانت فيها
length(وبُعد QBit) لعمودFixedStringتعيد0بدلًا من الحجم الثابتNعند استخدام النسخ المتماثلة المتوازية، عندما يتضمن الاستعلام عامل تصفية انتقائيًا. #110427 (Groene AI). - تم إصلاح فقدان
flipCoordinatesللنوعGeometry: إذ أصبحت نتيجة تمرير وسيطة من النوعGeometryهيGeometryمجددًا بدلًا منVariant(...)الأساسي، ما يتيح تمريرها مباشرةً إلى دوال مثلareaCartesian. #110694 (Groene AI). - تم إصلاح تغيّر نتائج الاستعلامات بسبب
optimize_injective_functions_in_group_byمعGROUP BY GROUPING SETSوGROUP BY... WITH TOTALS. يوثَّق هذا الإعداد على أنه لا يغيّر النتائج، لكن إزالة دالة حقنية لمفتاح تجميع كانت تنتج قيمة خاطئة (أو تحذف صفًا) للصفوف التي لا يكون فيها ذلك المفتاح ضمن المجموعة المجمَّعة (مجموعة غير عضو فيGROUPING SETS) أو لصفWITH TOTALS. وقد تتطابق القيمة الخاطئة مع قيمة مفتاح فعلية، مما يجعل صف التجميع الفائق غير قابل للتمييز عن مجموعة فعلية ضمن مجموعة النتائج نفسها. #110721 (Groene AI). - أصبحت القيم الرقمية
1/0عند تحليل JSON كـBoolتراعي إعدادallow_special_bool_values. سابقًا، كانت مدخلات JSON مثل{"v":1}لـVariant(Bool, UInt32)تُقرأ كـBoolحتى معallow_special_bool_values_inside_variant = 0، لأن محللات JSON لـBoolكانت تتجاهل الإعداد ولأن لـBoolأولوية أعلى عند إلغاء تسلسلVariantمن أنواع الأعداد الصحيحة. #110835 (Groene AI). - تم إصلاح خطأ منطقي
block.rows() == getRows()(قراءة خارج الحدود وتعطل إزالة تكرار عمليات الإدراج في إصدارات الإصدار) عند مرورINSERTعبر عرض مادي تابع يكون هدفهAliasويغيّر استعلامه الداخلي عدد الصفوف، مع وجود جدول لإزالة التكرار يمكن الوصول إليه بعد الاسم المستعار. #111103 (Alexey Milovidov). - تم إصلاح خطأ منطقي
Block structure mismatch(في إصدارات التصحيح وsanitizer) وخطأIllegal types of argumentsفي عمليات المجموعات على أعمدة لحالات تجميع متوافقة (مثلquantileStateوquantilesState(0.9)) متداخلة داخل أعمدة حاوية مثلTupleأوArrayأوMapأوNullableأوVariant. #111191 (Alexey Milovidov). - تم إصلاح
DISTINCTمعLIMIT/OFFSETمرتّب، الذي كان يعيد صفوفًا خاطئة عندما لا يتمكن تلميح حد الإيقاف المبكر لـDISTINCTمن تقييد بداية النتيجة:LIMITسالب (كان يعيد البداية بدلًا من النهاية)، أوLIMIT/OFFSETكسري (لا يُحسم الكسر إلا بعد قراءة كاملة)، أوOFFSETدونLIMIT(كانت تُحذف النهاية بعد الإزاحة). على سبيل المثال، كانSELECT DISTINCT intDiv(x, 100) FROM t ORDER BY intDiv(x, 100) LIMIT -1على جدول متعدد الأجزاء يعيد أصغر قيمة مميزة بدلًا من أكبرها. #111326 (Groene AI). - تم إصلاح نتائج خاطئة عندما يحتوي الاستعلام على فهرس تخطي
setومسند بالشكل(x AND <null-value>) OR y، حيث تنتجNULLمن دالة (مثلtoInt64OrNull('x')أوnullIf(1, 1)أوCAST(NULL AS Nullable(Int64))). كانت هذه القيمة تُغلَّف بواسطة__bitWrapperFuncوتنشرNULLبدلًا من قناع “غير معروف”، ما يسمح لفهرسsetباستبعاد حبيبات تتطابق فعليًا، فيعيد الاستعلام صفوفًا أقل مما ينبغي. #111604 (Groene AI). - تم إصلاح
DELETE/UPDATEعلى جدول Iceberg، الذي كان يحذف بصمت صفوفًا خاطئة (أو يطرحNOT_FOUND_COLUMN_IN_BLOCK) عندما يحتوي الجدول على ملفات بيانات كُتبت قبل وبعدALTER TABLE... ADD COLUMNمع تمكينoptimize_move_to_prewhere. #111693 (Groene AI). - تم إصلاح
LOGICAL_ERROR(“عدد الصفوف غير صالح في Chunk”) — وكذلك إجهاض ذي صلة بسبب تجاوز الحدود في البنيات المُحصّنة — عند استخدامORDER BY ... WITH FILL ... INTERPOLATEعلى جدولDistributedيضم جزأين أو أكثر، أو عبرclusterAllReplicas، أو عبر النسخ المتماثلة المتوازية ذات المفاتيح المخصصة، بما في ذلك النتائج الفارغة. يُطبَّقWITH FILLالآن فقط على العقدة التي تنتج النتيجة النهائية، مما يصلح أيضًا تكرار صفوف الملء المُولَّدة عبر الأجزاء/النسخ المتماثلة. #111919 (Yakov Olkhovskiy). - الحفاظ على إمكانية استخدام
randBinomialمع الاحتمالين الحديين0و1لأي عدد من التجارب. #112021 (Alexey Milovidov). - إصلاح نتائج خاطئة ناتجة عن تلويث استعلام بحث متجهي لذاكرة التخزين المؤقت لشرط الاستعلام. كان استعلام
SELECT... WHERE <condition> ORDER BY <distance function> LIMIT nعلى جدول ذي فهرسvector_similarityقد يسجل الحبيبات على أنها لا تطابق<condition>، مما يؤدي إلى أن يعيد استعلامSELECT... WHERE <condition>عادي لاحق على الجدول نفسه عددًا أقل من الصفوف بصمت. لم تعد قراءات البحث المتجهي تكتب في ذاكرة التخزين المؤقت لشرط الاستعلام. #112086 (Groene AI). - إصلاح خطأ كان يؤدي إلى قبول
CREATE VIEWأوCREATE FUNCTIONيستدعي تعريفهsubstrأوmidأوbyteSliceبصيغة لا تستطيع قواعدsubstringتحليلها مجددًا، لكن البيانات الوصفية التي يكتبها ClickHouse له ليست SQL صالحة. تفشل قراءة هذا التعريف لاحقًا معSYNTAX_ERROR، وعند بدء الخادم يتوقف تحميل البيانات الوصفية، لذلك لا يمكن للخادم البدء مطلقًا. أصبحت هذه التعريفات الآن قابلة للتحليل والكتابة مجددًا، وأصبحت ملفات البيانات الوصفية الحالية بصيغةsubstring(x, a, b, c)قابلة للقراءة مجددًا، بحيث يبدأ الخادم المتأثر دون تدخل يدوي. #112195 (Groene AI). - إصلاح جدول
TimeSeriesكانت بياناته الوصفية المحلية قد اختلفت عن Keeper، مما جعل استرداد النسخة المتماثلة في قاعدة بياناتReplicatedيتعطل إلى الأبد، فلا تعود النسخة المتماثلة تخدم قاعدة البيانات وتظل معطلة بعد إعادة التشغيل. تُحذف الآن الجداول الداخلية لمثل هذا الجدول بينما لا تزال معاملة البيانات الوصفية للاسترداد متاحة، بدلًا من تأجيلها إلى مهمة خلفية لم تكن تستطيع تنفيذDROPأصلًا. #112218 (Groene AI). - تم إصلاح قراءة عمود فرعي من عمود
Nullable(Tuple(...))يكون عنصرهLowCardinality(T)غير قابل للقيم الخالية، عندما يقرأ الاستعلام نفسه أيضًا العمود الفرعي الأصلي. في جزء مضغوط، كان العمود الفرعي الأصلي يعيد قيمًا خاطئة، أو يفشل الاستعلام معUnexpected return type from assumeNotNull، أو يُقتل الخادم بسبب تأكيد تحصينstring_view، لأن العمود الفرعي المستخرج كان يُفك تسلسله في مخزن مؤقتLowCardinality(Nullable(T))ثم تُشارك تدفقاته الفرعية مع قراءة العمود الفرعي الأصلي. #112232 (Groene AI). - تم إصلاح تعليق دائم للخادم على macOS ناتج عن فقدان
pthread_rwlockلإشارات التنبيه عند تمكين محلل الاستعلامات بأخذ العينات (خطأ Apple FB24027930): يُستبدلpthread_rwlockالآن بتنفيذ متين في مواجهة الإشارات على Darwin. #112267 (Raúl Marín). - إصلاح تجاهل
max_execution_timeوKILL QUERYأثناء تقييم استعلام لـgeohashesInBoxأوarrayFoldأوsleepأوbase58Decodeأوh3PolygonToCellsأوh3PolygonToCellsWithContainment. كان يمكن لمثل هذه الاستعلامات الاستمرار في التشغيل لدقائق بعد الإلغاء. يشمل ذلك الآن أيضًا التقييمات داخل التعبيرات المخزنة في البيانات الوصفية للجدول، مثل مفاتيح الفرز وفهارس التخطي ومفاتيحPARTITION BY. #112273 (Groene AI). #113456 (Groene AI). - يُصلح خطأً منطقيًا
Cannot add step Expression to QueryPlan because it has incompatible header with root step JoinLazyColumnsStepفي استعلام يستخدمFINALومرشحPREWHEREوLIMITصغيرًا وmake_distributed_plan = 1، عندما تكون الأعمدة المحددة مرتبةً على نحو يختلف عن ترتيب أعمدة الجدول. إذ كانت المادية الكسولة تستبدل عقدةً في الخطة دون الاحتفاظ بترويسة مخرجاتها، مما يجعل خطة الاستعلام غير متسقة. #112303 (Groene AI). - يُصلح كتابة جداول Iceberg التي يتضمن مخططها Tuple متداخلًا داخل Tuple آخر. إذ كانت البيانات الوصفية المنشورة للجدول تستبدل أسماء حقول الـ Tuple الداخلي بأسماء موضعية
1،2،…، ولذلك كانINSERTيفشل بالخطأINCORRECT_DATAعند استخدام تنسيقParquetالافتراضي، ولم يكن بالإمكان قراءة العمود مجددًا باستخدامAvro. #112480 (Groene AI). - يُصلح الخطأ
ATTEMPT_TO_READ_AFTER_EOFعند دمج أجزاء تحتوي على فهرس نصي إذا كان أحد الأجزاء المدمجة فارغًا، مثلًا بعد عملية mutation حذفت جميع صفوف الجزء. #112490 (Anton Popov). - يُصلح نتائج غير صحيحة وخطأً منطقيًا عندما تأتي وسيطة يجب أن تكون ثابتة، مثل مقياس
toDecimal32أو المنطقة الزمنية لـtoDateTime، من استعلام فرعي قيَمي مع استخدام المحلل القديم. إذ كانت هذه الوسيطة تُحلل كما لو أن قيمتها صفر أو فارغة، فتختلف النتيجة المحسوبة عن نوع النتيجة المُعلن، ويؤديCREATE VIEWوCREATE MATERIALIZED VIEWإلى حفظ نوع عمود خاطئ. #112492 (Groene AI). - يُصلح
LOGICAL_ERROR(“Part… contains column… that is absent in table…”) عندما تُجري نسخة متماثلة منReplicatedMergeTreeعملية mutation على جزء جلبته من نسخة متماثلة أخرى قبل تطبيقALTER... ADD COLUMNالمعلّق الخاص بها. تُؤجَّل عملية mutation هذه الآن حتى يُطبَّق تغيير البيانات الوصفية. #112510 (Groene AI). - أصلح نتائج استعلام غير صحيحة عند استخدام GROUP BY مع ORDER BY و
arrayJoinفي الإسقاط. #101775 (Yash ). - يُصلح تعطل الخادم (وصول خارج الحدود) في
S3Queue/AzureQueueمعenable_hash_ring_filtering = 1عندما تحتوي دفعة على ملف غير قابل للمعالجة، ويفشل في الوقت نفسه طلب Keeper لتعيين الدفعة بحالة processing. #108977 (Groene AI). - يُصلح خطأً منطقيًا
Stream <col>.variant_discr... is not found(توقف الخادم في إصدارات debug وsanitizer) عندما يغيّرALTER TABLE... MODIFY COLUMNعمودًا إلى نوع ذي أعمدة فرعية ديناميكية (مثلًا منVariantإلىDynamic) في جدول ذي أجزاء Wide، ثم يُقرأ الجزء أو يُدمج لاحقًا. #110204 (Groene AI). - يُصلح تجاوز سعة عدد صحيح موقّع (UBSan) عند تحويل قيمة قصوى من
DateTime64(مثلINT64_MIN) إلىTime/Time64في منطقة زمنية ذات إزاحة سالبة. #110451 (Groene AI). - أصلح مشكلة تجعل جدول MergeTree يحتوي على إسقاط
_part_offsetأو إسقاط بترتيب commit غير قابل للإرفاق بشكل دائم بعد تعطيلallow_part_offset_column_in_projectionsأوallow_commit_order_projectionوفصل الجدول أو إعادة تشغيل الخادم. هذان الإعدادان يمثلان بوابتين عند وقت CREATE، لذا لم يعد يُعاد التحقق منهما عند ATTACH. #110570 (Groene AI). - مع
analyzer_compatibility_join_using_top_level_identifier = 1، أصبح بالإمكان الآن حلّ معرّف فيJOIN... USINGباستخدام اسم مستعار مُعرّف لتعبير فرعي ضمن قائمة SELECT (مثلًا،SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id))، بما يتوافق مع سلوك المحلّل القديم. في السابق، لم تكن تُؤخذ في الحسبان إلا الأسماء المستعارة للإسقاطات في المستوى الأعلى، وكانت هذه الاستعلامات تفشل باستثناءUNKNOWN_IDENTIFIERحتى عند تمكين هذا الإعداد. ويُعرض الآن أيضًا تلميح الخطأ الذي يقترح هذا الإعداد عندما يكون الاسم المستعار المطابق متداخلًا. #110739 (Dmitry Novik). - يُصلح مشكلة كانت تتيح للطلبات غير الموثَّقة أن تتسبب في قيام ClickHouse بحل أسماء المضيفين الواردة في ترويسات عناوين العملاء المُمرَّرة. يقبل ClickHouse الآن عناوين IP رقمية فقط من هذه الترويسات. وتُتجاهل القيم غير الصالحة عند إسناد الحصص إلى العناوين المُمرَّرة، من دون إجراء حل DNS. وعند تمكين
auth_use_forwarded_address، تُرفض العناوين المُمرَّرة غير الصالحة أثناء المصادقة. وتُسجَّل حالات الرفض على مستوى التصحيح. #111060 (Dmitriy Borisenko). - يُصلح
NOT_FOUND_COLUMN_IN_BLOCKعندما تشير سياسة صفوف وadditional_table_filtersإلى العمود نفسه الذي لا يختاره الاستعلام لولا ذلك. #111099 (Groene AI). - يُصلح خطأ
UNKNOWN_IDENTIFIERللأعمدة المؤهَّلة باسم تعبير الجدول الشائع (cte_name.column) في الاستعلامات المخزنة ضمن العروض عند تمكين المحلّل. #111386 (Dmitry Novik). - يُصلح خطأ
LOGICAL_ERROR(Got read request from replica N for unknown stream...) كان قد يؤدي إلى إيقاف الخادم عند القراءة باستخدام النسخ المتماثلة المتوازية، إذا أُجيب عن الاستعلام بالكامل بواسطة تحسين إسقاط على البادئ (عدد دقيق، أو عدد minmax، أو إسقاط تجميعي/عادي مخزَّن لا يختار أي نطاقات). #111689 (Groene AI). - أُصلح تجاوز سعة لعدد صحيح موقّع في التحميل الزائد ذي الوسائط الثلاثة للدالة
toStartOfInterval: إذ كانت الدالة، عند وجود وسيطةoriginقرب الحد الأدنى لـInt64، تُرجع قيمة ملتفة بدلًا من الإبلاغ عن خطأ. #112045 (Alexey Milovidov). - يُصلح استثناء
LOGICAL_ERROR(Block structure mismatch in joined block stream) في عملية ربط متعددة الجداول، حيث لا ينتج الربطان الفرعيان أي أعمدة إخراج، مثلSELECT count() FROM t1, t2, t3, t4 WHERE (t1.b = t2.b) AND (t3.a = t4.a)مع ضبطquery_plan_optimize_join_order_limitعلى0أو1. #112205 (Groene AI). - أُصلحت دالة الجدول
valuesالتي كانت تعرض ثابتBoolغير حرفي (مثلCAST(true, 'Nullable(Bool)')) مُدرجًا في عمودString/نصي على هيئة1/0بدلًا منtrue/false. #112308 (Yakov Olkhovskiy). - يُصلح
LOGICAL_ERROR(partitions_count > 0) عند تقسيم أجزاء بياناتIcebergالتي أفرغتها عمليات الحذف حسب الموضع، مثلًا أثناء ضغط جدولIcebergمُقسَّم يحتوي على ملفات بيانات محذوفة بالكامل. #112432 (Pedro Ferreira). - تم إصلاح استنتاج المخطط الذي كان يقترح نوعًا رقميًا لقيم نصية يتعذر على محلل القيم قراءتها مجددًا. كان الاستنتاج يقبل أسًّا غير مكتمل (
1e+) أو مانتيسا مفقودة (.) أو إشارة مكررة (++inf)، ثم يرفضهاreadFloatTextPreciseباستخدامCANNOT_PARSE_NUMBERعند قراءة المخطط المستنتج؛ وكان ذلك يؤدي إلى خطأ عند INSERT في عمودDynamic. يتحقق الاستنتاج الآن من الرقم باستخدام المحلل الذي يستخدمه القارئ فعليًا. ويزيل هذا أيضًا حالة كان فيها النوع المستنتج يعتمد علىmax_read_buffer_size، ويتيح لصيغ الأس الصالحة ذات الأصفار البادئة، مثل0e5، استنتاجFloat64في TSV، كما هو الحال بالفعل في CSV. يتبع #112226 ويغلق الجزء المتعلق بالأس من #112105. #112453 (Groene AI). - الإبلاغ عن الموضع الصحيح للأخطاء في استعلامات PromQL. #112494 (Minh Vu).
- إصلاح خطأ
LOGICAL_ERROR(Cannot add transform Resize to Pipes because it has no outputs) الذي يحدث عند تشغيل استعلام يجمع البيانات عبر عنقود معserialize_query_plan = 1والنسخ المتماثلة المتوازية المستندة إلى الخطة، بسبب قيام خطوة الدمج بتغيير حجم خط المعالجة إلى صفر من التدفقات. #112506 (Groene AI). - إصلاح تجاوز سالب غير موقّع في التحقق من طول اسم الجدول كان يسمح بإنشاء جدول لا يمكن حذفه أبدًا. عندما بلغ اسم قاعدة البيانات المُهرَّب 214 بايتًا، حدث التفاف في الحد المحسوب لاسم الملف
metadata_dropped، لذا تم قبولCREATE TABLEوفشلDROP TABLEأوDROP DATABASEاللاحق برسالةFile name too long. يُرفض الآن هذا الاسم باستخدامARGUMENT_OUT_OF_BOUND، وهو الخطأ نفسه الذي كان يُعاد بالفعل قبل ذلك الحد مباشرةً. #112527 (Groene AI). - إصلاح الاستثناء
Context has expiredعند استخدامgetClientHTTPHeaderداخل استعلام فرعي. #112533 (Alexey Milovidov). - تم إصلاح الرفض غير الصحيح من
s3_allow_server_credentials_in_user_queriesلـextra_credentials(role_arn = '...')المقدمة ضمن الاستعلام. أصبح تولّي دور عبر STS مع تحديد الدور صراحةً مسموحًا به دائمًا، لأنه لا يكشف بيانات اعتماد الخادم نفسه للاستعلام، ولأنه الطريقة الموثقة لمنح الوصول إلى حاوية S3 خاصة. #112603 (Raúl Marín). - إصلاح فرض رسوم زائدة على عدادات القراءة (
read_rows،read_bytes،ProfileEvents['SelectedRows']،ProfileEvents['SelectedBytes']) وحصصREAD_ROWSوREAD_BYTESللاستعلامات التي يكتب فيهاORDER BYبيانات مؤقتة إلى القرص. كانت الصفوف المعاد قراءتها من الملفات المؤقتة للفرز الخارجي تُحتسب مجددًا كقراءات من المصدر، لذا كان الاستعلام الذي يكتب بيانات مؤقتة إلى القرص يبالغ في الإبلاغ عما قرأه وقد يُرفض باستخدامQUOTA_EXCEEDEDرغم بقائه ضمن حصته. #112645 (Groene AI). - إصلاح جدول Iceberg بتنسيق كتابة
Avroكان يُسلسل حقلًا مُعلنًا عنه بـ"required": falseونوعهlistأوmapأوstructعلى أنه مطلوب، من دون اتحاد["null", T]، مما كان يجعل مخطط ملف البيانات نفسه لا يتوافق مع بيانات تعريف الجدول، ويرى قارئو Iceberg الآخرون الحقل مطلوبًا. يُكتب هذا الحقل الآن كاتحاد["null", T]الذي تستخدمه مواصفة Iceberg للحقل الاختياري. #112648 (Groene AI). - إصلاح مشكلة في جداول
DeltaLakeكانت تؤدي إلى إرجاع عدد قليل جدًا من الصفوف عندما يحتوي مسندWHEREعلى تعبير فرعي لا يستطيع مترجم المسندات في delta-kernel التعامل معه ويقع ضمنNOT. يُبلّغ الآن عن هذا التعبير الفرعي إلى delta-kernel باعتباره مسندًا غير معروف صراحةً بدلًا من اعتباره نهاية مكرّر العناصر الفرعية، وهو ما كان يؤدي سابقًا إلى اقتطاع الاقتران المحيط بصمت. #112652 (Groene AI). - إصلاح تلف في الكومة كان قد يتسبب في تعطل الخادم عند إيقاف التشغيل، وينجم عن قيام التابع
constAccessRights::getFiltersبتعديل شجرة لحقوق الوصول تتشاركها استعلامات متزامنة. #112692 (Groene AI). - إصلاح خطأ منطقي في تنسيق الاستعلامات عندما لا تتضمن عبارة
ARRAY JOINأي تعبيرات. تُرفض هذه العبارة الآن أثناء التحليل باستخدامSYNTAX_ERROR، على غرارUSINGالفارغة، بدلًا من قبولها وتنسيقها كنص لا يمكن تحليله مجددًا. #112699 (Groene AI). - إصلاح تعليق استعلام أثناء التنفيذ المحلي لخطط الاستعلامات الموزعة (
distributed_plan_execute_locally = 1): إذ كان قارئ التبادل داخل الذاكرة قد يحجب خيط pipeline الوحيد قبل بدء المصادر التي تنتج بياناته. #111762 (Alexander Gololobov). - إصلاح حقول
Icebergالمعلنة باستخدام"required": falseوالتي يكون نوعهاlistأوmapأوstruct، إذ كانت تُكتب كـREQUIREDفي تذييلParquet. تُكتب هذه الحقول الآن كـOPTIONAL، بما يتوافق مع مخططIcebergالمنشور والقارئات الأخرى. #112669 (Groene AI). - إصلاح استخدام الكومة بعد تحريرها في منفّذ pipeline، كان قد يتسبب في تعطل الخادم عندما يزيل استعلام معالجات أثناء وقت التشغيل (مثل
FINALمع القراءات الكسولة أو الفرز الخارجي)، وقد اكتشفه AST fuzzer. #111017 (Groene AI). - إصلاح استخدام بعد التحرير (خطأ تجزئة) عندما يزيل استعلام ذو لقطة تخزين مشتركة (الإعداد
enable_shared_storage_snapshot_in_query) أجزاء بيانات من اللقطة — مثل استعلام فرعي متدفق يقرأ جدولMergeTreeنفسه الذي يقرأه جزء آخر من الاستعلام بالتزامن. #111192 (Alexey Milovidov). - رفض الاستخدامات غير المدعومة لأعمدة
AggregateFunctionفي تعبيرات TTL عند تنفيذCREATE TABLE(مثلTTL toDateTime(state)) بدلًا من الفشل لاحقًا أثناء تنفيذ TTL باستخدامILLEGAL_TYPE_OF_ARGUMENT. يشمل ذلك أيضًا الحالات الموجودة ضمن بدائلVariantوقيمDynamic. وما زالت المستهلكات الصالحة المراعية للحالة، مثلfinalizeAggregation، مقبولة. #107366 (Ria Khatoniar). - إصلاح
LOGICAL_ERROR(CTE '...' does not have query tree, but was not planned yet) عندما يُشار إلى CTE MATERIALIZEDمن أكثر من موضع في شجرة الربط (مثل استعلامين فرعيين مربوطين، أو استعلام فرعي مربوط واستعلام فرعي قيَمي فيWHERE) ضمن استعلام على جدولDistributed. يُنفّذ الاستعلام الآن بدلًا من إثارة الاستثناء (إذ كان يؤدي إلى إيقاف الخادم في إصدارات debug/sanitizer). #108924 (Groene AI). - الحفاظ على الترتيب الأصلي للمفاتيح في تسلسل Map المقسّم إلى حاويات لإصلاح عمليات المقارنة التي تعتمد عليه. #109178 (Pavel Kruglov).
- تم إصلاح تحوّل
made_current_atفيsystem.iceberg_historyإلى1970-01-01للقطة محتفَظ بها بعد تنفيذALTER TABLE... EXECUTE expire_snapshotsعلى جدول Iceberg. كما تم إصلاح عدم إرجاعsystem.iceberg_historyأي صفوف لجدول لا تحتوي بياناته الوصفية علىsnapshot-log. #111781 (Groene AI). - تم إصلاح محاولة تحليل نص من نوع
FixedStringكانت تترك بايتات مضافة جزئيًا في العمود عند فشل التحليل، ما قد يسبب الخطأ المنطقيSizes of nested column and null map of Nullable column are not equalأثناء تسلسل أعمدةVariant/Array/Nullable، أو ينتج بايتات نتيجة مزاحة بصمت. #111908 (Groene AI). - تم إصلاح تجاهل
replaceOneوreplaceAllوreplaceRegexpOneوreplaceRegexpAllلـmax_execution_timeوKILL QUERY. يتحقق الاستدعاء الواحد الآن من الإلغاء أثناء تنفيذه، بحيث يتوقف الاستبدال طويل التشغيل على قيمة كبيرة أو عدد كبير من الصفوف بدلًا من شغل خيط خادم حتى اكتماله. لا يمكن لهذا الاستدعاء إرجاع نتيجة جزئية، لذا فإنه في ظلtimeout_overflow_mode = 'break'يبلّغ عن تجاوز الموعد النهائي كخطأ: دائمًا عند الطي الثابت، وفي خط الأنابيب كلما وصلت العملية إلى نقطة التحقق هذه قبل فحص المنفّذ بين الكتل، الذي يواصل إيقاف الاستعلام بصمت. #112483 (Groene AI). - تم إصلاح خطأ منطقي وسجل تبعية خاطئ عندما يشير متن
VIEWعادي إلى جدول أو قاموس عبر معامل استعلام، كما فيCREATE VIEW v AS SELECT x FROM {db:Identifier}.t. لم يعد هذا العرض يسجل تبعية مرجعية لجدول بالاسم نفسه في قاعدة البيانات الحالية، لذا أصبح بالإمكان حذف الجداول غير المرتبطة مجددًا. #112704 (Groene AI). - تم إصلاح قراءة بنوع خاطئ لعمود فرعي لعنصر
Nestedحُذف عموده ثم أُضيف مجددًا. كان اختيار هذا العمود الفرعي مع العمود الأصل الخاص به يعيد العنصر كاملًا في موضع العمود الفرعي، بينما كانت الكتلة لا تزال تعلن نوع العنصر، ما كان ينتج قيمًا عشوائية في إصدارات الإنتاج وخطأً منطقيًا في إصدارات التصحيح وsanitizer. #112769 (Groene AI). - تم إصلاح الخطأ
Cannot read all data of type FixedStringعند قراءة العمود الفرعيproduct_quantization_codebookلعمود يستخدم برنامج الترميزQuantized('product',...). يُكتب دفتر الشيفرات الخاص بكل جزء بعد بيانات جميع الحبيبات، ولذلك لا تحدّه العلامات، وقد تؤدي قراءة ينتهي نطاق علاماتها قبل العلامة النهائية للجزء إلى قراءته بشكل ناقص. #112818 (Alexey Milovidov). - تم إصلاح تعطل تجزئة وفساد صامت للبيانات عند تنفيذ
INSERTفي محركFileأو دالة الجدولfileلإضافة بيانات إلى ملف غير فارغ بتنسيق لا يدعم الإضافة، مثلAvro. كانت الكتابة عبر واصف ملف أو مسار مقسّم تتجاوز الفحص القائم، لذا كانت بادئة التنسيق تُحذف ويُكتب ترويس ثانٍ بعد البايتات الموجودة، ما يجعل الملف غير قابل للقراءة. يُرفض الآنINSERTمن هذا النوع بالخطأCANNOT_APPEND_TO_FILE، كما هو الحال بالفعل مع مسار عادي. #112839 (Groene AI). - تم إصلاح ظهور الخطأ
Context has expiredمنconnectionIdعند استخدامها داخل استعلام فرعي، وذلك بالتقاط معرّف اتصال العميل عند إنشاء الدالة. يغلق #112533. #112870 (ClickGap AI Bot). - أُصلح تحليل الأعداد الصحيحة التي لا تتسع في النوع الهدف في
Poco::NumberParser، المستخدم لقراءة أرقام JSON. إذ كان هذا العدد يُحلَّل بصمت إلى قيمة خاطئة (مثلًا، كان18446744073709551617يصبح1) بدلًا من رفضه، كما أن رقمUInt64الذي يتجاوز الحد الأقصى لـInt64لم يكن يحتفظ بقيمته بعد التحويل ذهابًا وإيابًا عبر JSON الخاص بـ AST. #112904 (Alexey Milovidov). - أُصلح
IS DISTINCT FROMلقيمArrayوMapعند مقارنتها بـNULL. يغلق #103042. #103162 (yanglongwei). - منع استنفاد إعادات المحاولة في DDL الموزع المنسوخ الذي ينفذه القائد من حظر استعلامات DDL اللاحقة باستخدام
ON CLUSTERبشكل دائم. #108505 (Ahaan Limaye). - أُصلح
LOGICAL_ERROR(“محاولة استخراج جزء من ChunkBuffer قبل انتهاء جميع المدخلات”) عند دمج عملية مجموعات (INTERSECT/UNION ALL/EXCEPT) لفروع تستخدم استعلامات فرعية مترابطة وcorrelated_subqueries_default_join_kind = 'left'. #108554 (Groene AI). - أصبح تحويل قيم الفاصلة العائمة خارج النطاق (
BFloat16،Float32،Float64) وقيمUInt64التي تتجاوزInt64::max()إلىDateTimeوTimeيتشبع بصورة موثوقة عند حدود النطاق على جميع المعماريات (إذ كانت نتيجة التحويل خارج النطاق تعتمد سابقًا على المعمارية وقد تلتف على x86-64)، وأصبحت القيم غير المنتهية (NaN،inf) تطرح استثناءً بدلًا من إنتاج نتيجة عشوائية. يُطبَّق الإصلاح نفسه على مسار التحويل من الفاصلة العائمة إلىDateفيtoDateوعلى تحويلاتUInt64والأعداد الصحيحة العريضة ((U)Int128،(U)Int256) إلىDateوDate32، التي كان يمكن أن تعيد يومًا سابقًا للعصر بدلًا من التشبع. كما أصبح تحويل الأرقام إلىTimeيتشبع ضمن نطاق النوع لجميع أنواع المصادر الرقمية (إذ كانت القيم من المصادر غير الموقعة الضيقة أو مصادر الأعداد الصحيحة العريضة تُخزَّن سابقًا دون تقييد ولا تُقيَّد إلا عند طباعتها)، ولم يعد التحويل الدقيق إلىTimeيرفض القيم السالبة التي يدعمهاTimeأو يشبع بصمت القيم التي لا تتسع فيه. ولم يعد التحويل الدقيق لعدد إلىDate32(accurateCast،accurateCastOrNull) يشبع بصمت قيمة خارج النطاق أو غير منتهية، بل يطرح استثناءً أو يعيدNULL، كما كان يفعل معDateوDateTime، بينما تعيد صيغOrDefaultالقيمة الافتراضية لـDate32لمثل هذا الإدخال. وأصبح التحويل الدقيق لعدد ذي فاصلة عائمة غير صحيح إلىDateأوDate32أوDateTimeأوTimeمرفوضًا بدلًا من اقتطاعه بصمت. أُصلحت أيضًا وثائق الدالةtoDateTime32، التي كانت تعرض خطأً أمثلةtoDateTime64وتصف نطاق قيمDateTime64. #110459 (Alexey Milovidov). - أصبح
ALTER TABLE... DETACH PARTITION/PARTينفذ الآنfsyncللنسخة التي ينشئها ضمنdetached/(الشجرة الفرعية للجزء وسلسلة الدلائل حتى جذر القرص) عند تمكين إعدادfsync_part_directoryللجدول، وذلك لكلٍّ من تخزين الأجزاء Full (الدليل) وPacked. سابقًا، لم يكن يُنفَّذfsyncللنسخة مطلقًا، بينما كان يُنفَّذ للجزء المغطي الفارغ الذي يزيل الصفوف من المجموعة النشطة؛ لذلك كان فقدان الطاقة مباشرة بعد الإقرار قد يؤدي إلى إتلاف البيانات المفصولة على btrfs (إذ تتراجع إدخالات دليل النسخة غير المتزامنة، مما يتركdetached/فارغًا ولا شيء لتنفيذATTACHعليه). يخضع ذلك لإعدادfsync_part_directoryالحالي، ولا يتغير السلوك الافتراضي. #111426 (Groene AI). - إصلاح
CREATE OR REPLACEالذي كان يترك الكائن المستبدَل باسم داخلي عندما لا يملك المستدعي صلاحية حذفه. #111466 (Nikolay Degterinsky). - إصلاح تعطل عند تنفيذ قراءة
STREAM(enable_streaming_queries = 1) على جدول يحتوي على أكثر من قسم واحد ومُعرَّفة عليه سياسة صفوف. في إصدارات التصحيح والتنقية، كان يفشل بالخطأ المنطقيFilter column... not found in DAG outputs؛ وفي إصدارات الإنتاج، كان قد يؤدي إلى خطأ تجزئة. #111572 (Groene AI). - إصلاح
count()في جداول Iceberg التي يكون ملخص لقطة الحالة فيها غير دقيق أو تالفًا: يستمد تحسين العد البسيط الآن أعداد الصفوف الدقيقة من ملفات البيان، ويلجأ إلى مسح فعلي عندما تجعل عمليات الحذف على مستوى الصف أعداد البيانات الوصفية غير دقيقة. كما يُصلحOPTIMIZE TABLEفي Iceberg الذي كان يكتب أعداد قائمة البيانات الوصفية وسجل الأصل بشكل غير صحيح، ويجعل البيانات الوصفيةtotalBytesأكثر متانة أمام الملخصات التالفة. #111617 (Melvyn Peignon). - إصلاح عمود DEFAULT مفقود في جزء كان يُملأ بالقيمة الافتراضية للنوع بدلًا من تعبير DEFAULT عندما يُقسَّم شرط PREWHERE إلى عدة خطوات قراءة. يغلق #111757. #111795 (Yarik Briukhovetskyi).
- إصلاح الخطأين المنطقيين
Expected UInt64 column for __grouping_set, got BLOBوColumnBLOB should be converted to a regular column before usageفي استعلام موزع يُنفَّذ على جزء مع تفعيلenable_parallel_blocks_marshalling(مُفعَّل افتراضيًا)، مثلًا عند استخدامGROUP BY GROUPING SETSعلى عنقود يتضمن نسخة متماثلة محلية، أو عند قراءة جدولMergeيمتد عبر جدول محلي وآخر موزع. لم تعدBlocksMarshallingStepتُضاف إلى الخطط التي تُستهلك كتلها ضمن العملية نفسها. #111997 (Groene AI). - تفشل العمليات الآن عند تحميل إحصاءات MergeTree تالفة بدلًا من تجاهل الخطأ. #112201 (Sergey Kuznetsov).
- إصلاح خطأ منطقي عند استخدام PREWHERE على جدول Merge فوق جدول Merge آخر أو عرض مادي يختلف نوع أحد أعمدته. كما يُصلح تجاهل سياسة صفوف بصمت في الجداول التي تقرأ من خوادم بعيدة (جدول Distributed أو جدول يغلّف واحدًا)، مما قد يكشف صفوفًا كان يُفترض أن تخفيها السياسة؛ إذ تُرفض هذه الاستعلامات الآن بخطأ ILLEGAL_PREWHERE. عرّف هذه السياسات بدلًا من ذلك على الجداول المحلية الأساسية في كل خادم بعيد؛ لاحظ أن هذه السياسة لا تزال لا تُطبَّق على القراءات المُرسلة مع
serialize_query_plan = 1، وهذا خطأ منفصل موجود مسبقًا. #112326 (Pedro Ferreira). - إصلاح
connection_pool_max_wait_msبحيث تعني قيمته الموثقة والافتراضية0مهلة انتظار لا نهائية. كان الاستعلام الذي يجد تجمّع الاتصالات ممتلئًا يعيد المحاولة في حلقة محكمة، مستهلكًا CPU ومسجلًاNo free connections in pool. Waiting 0 ms.في كل تكرار. وينتظر الآن حتى يُعاد اتصال إلى التجمّع. يغلق #112053. #112380 (Groene AI). - إصلاح الفقدان الصامت لعمليات كتابة Iceberg المُقَرّ بها على HDFS: ينشر التزام Iceberg كل ملف بيانات وصفية جديد بعملية كتابة مشروطة، لكن
HDFSObjectStorageكان يتجاهل الشرط ويجري استبدالًا عاديًا، لذا كان يُقَرّ بجميع الكتّاب المتزامنين بينما تصبح لقطة أحدهم غير قابلة للوصول. يرفض HDFS الآن الكتابة المشروطة بدلًا من ذلك، ولذلك تفشل الآن عمليات كتابة Iceberg المُدارة بواسطة التخزين على HDFS، بما فيهاCREATE TABLE... ENGINE = IcebergHDFS(...)مع قائمة أعمدة صريحة. لا تتأثر القراءات. #112437 (Groene AI). - إصلاح قراءة خارج الحدود (تؤدي إلى تعطل في إصدارات الإصدار) في إزالة تكرار عمليات الإدراج عندما تمر عملية
INSERTعبر عرض مُجسَّد يغيّر استعلامه الداخلي عدد الصفوف، ويكون جدول الهدف لإزالة التكرار مُقسّمًا. كانتDeduplicationInfo::filterToPartitionتُسنِد كل رمز لإزالة التكرار إلى الأقسام عبر اجتياز نطاق صفوف المصدر الخاص بالرمز ضمن محدد أقسام بحجم كتلة إخراج العرض (الأصغر)، ما يؤدي إلى القراءة بعد حدوده. وهي الآن تحتفظ بكل رمز في كل قسم لأي هدف عرض مُجسَّد — إذ لم تعد مطابقة صفوف المصدر بالأقسام متاحة بعد تغيّر عدد الصفوف — بدلًا من هذا الاجتياز خارج الحدود (وبدلًا منNOT_IMPLEMENTEDالذي كان يثيره فحص لاحق لعملية الإدراج نفسها). #112649 (Sema Checherinda). - إصلاح خطأ منطقي (يؤدي إلى الإيقاف في إصدارات التصحيح وبُنى أدوات التعقيم) عند تطبيق
finalizeAggregationعلى عمود تأتي حالات التجميع فيه من دوال مختلفة تشترك في تمثيل الحالة لكنها تُنهي إلى أنواع مختلفة — مثلquantileStateوquantilesState(0.9)اللتين تُجمعان بواسطةUNIONأو تُنتجان عبرarrayReduce. تُصدر هذه الاستعلامات الآن خطأً عاديًا بدلًا من التعطل. #112662 (Zain Ul Abidin). - إصلاح
DELETEفي جداولKeeperMapالذي كان يحذف أولmax_block_sizeصفوف متطابقة فقط، مع الإبلاغ عن اكتمال الطفرة بنجاح. وإصلاحDELETEأيضًا معkeeper_map_strict_mode = 1لكونه غير ذري؛ إذ كان يمكنه الرجوع إلى عمليات إزالة غير مُرقّمة بالإصدارات وحذف صفوف حُدّثت بالتزامن، كما كان يطبّق الصفوف المتطابقة كتلةً تلو أخرى، بحيث قد يترك التعارض الحذف مطبقًا جزئيًا. #112777 (Alexey Milovidov). - إصلاح تطبيق
ALTERعلى جداولMergeTreeبينما لا تزال طفرة التعديلRENAME COLUMNغير المكتملة قيد التنفيذ. كان ذلك قد يحدّث البيانات الوصفية للتخزين على نحو غير متوافق ويمنع الطفرات اللاحقة تمامًا. #112783 (Mikhail Artemenko). - إصلاح فشل بدء الخادم و
ATTACHبرسالةWITH RECURSIVE is not supported with the old analyzerلعرض يحتوي على تعبير جدول شائع تعاودي عندما تكونenable_analyzer = 0هي القيمة الافتراضية للخادم. #112784 (Nikolay Degterinsky). - إصلاح خطأ منطقي عند استخدام محرك الجدول
Joinعلى الجانب الأيمن من عملية JOIN تحتوي عبارةONفيها على شرط يشير إلى أعمدة كلا الجدولين، مثلON (t.key = j.key) AND (t.a < j.a). يُرفض هذا الاستعلام الآن باستثناء واضح بدلًا من ظهورrequired columns:... but not found any in left tableأوstd::bad_variant_access. #112815 (Groene AI). - إصلاح نتائج خاطئة لعملية
JOINتحتوي عبارةONفيها على شرط مختلط، أي شرط متبقٍ غير تساوٍ بين الجانبين مثلON (t1.key = t2.key) AND (t1.a * 10 < t2.a). لا تقيّم هذا الشرط إلا خوارزميات عائلة التجزئة، لكنfull_sorting_mergeوpartial_mergeوربط المفتاح-القيمة المباشر كانت تدّعي قدرتها على تنفيذ عمليات الربط هذه ثم تتجاهل الشرط المتبقي بصمت، فتُرجع صفوفًا إضافية. وهي ترفضها الآن، لذا تُستخدم خوارزمية تجزئة بدلًا من ذلك. #112831 (Groene AI). - إصلاح الخطأ المنطقي
ReadBufferFromEncryptedFile: Wrong file positionعند قراءة جزءCompactمن قرصencryptedباستخدام إدخال/إخراج مباشر، والذي كان يؤدي إلى توقف عمليات الدمج فيsystem.replication_queue. #112943 (Alexey Milovidov). - إصلاح تباطؤ تربيعي عند تحليل استعلام PromQL ذي ذيل طويل من المحارف غير المعروفة (مثل قيمة
FixedStringمحشوة ببايتات NUL): كان تحليل إدخال غير صالح بحجم ميغابايت يشغل خيط تنفيذ لعشرات الدقائق دون إمكانية إلغائه، لأنه يحدث أثناء تحليل الاستعلام. يتوقف المُحلِّل الآن عند الخطأ الأول. #112944 (Alexey Milovidov). - رفض مدد PromQL التي تتكرر فيها الوحدات أو لا تكون مرتبة من الأطول إلى الأقصر. #112954 (Minh Vu).
- إصلاح تعليق عند كتابة
Parquetمع تفعيلoutput_format_parquet_parallel_encoding(وهو الإعداد الافتراضي) وكونmax_threadsأكبر من 1. إذا تعذّر على المُرمِّز جدولة خيط تنفيذ إضافي، كان عدّاد خيوط التنفيذ النشطة يتعرض لنقصان سفلي، وقد تتوقف الكتابة عن إحراز أي تقدم نهائيًا بدلًا من الاكتمال أو الإبلاغ عن خطأ. #112959 (Groene AI). #113170 (Alexey Milovidov). - إصلاح استهلاك
geohashesInBoxوقتًا غير محدود عند معالجة صندوق ذي مساحة صفرية، مثلgeohashesInBox(0., 0., 180., 0., 12). كان هذا الاستعلام يعيد geohash الصحيح الوحيد، لكنه يستهلك نحو 5e8 تكرارًا فارغًا للحلقة لكل صف ويتجاهل كلاً منmax_execution_timeوKILL QUERY. #112976 (Groene AI). - إصلاح سلوك غير معرّف (تمرير مؤشر فارغ إلى
memcpy) فيreplaceRegexpOne/replaceRegexpAllعندما يحل نص الاستبدال محل مجموعة التقاط لم تشارك في المطابقة، مثلreplaceRegexpAll('abc', '(a)|(b)', '\\2'). #113012 (Alexey Milovidov). - رفض تغيير
SETTINGSالمعلَّم على أنه مكتوب دون قيمة إذا كان يحمل قيمة غيرtrue، وعدم حذف قيمة هذا التغيير مطلقًا عند تنسيق استعلام. سابقًا، كان بإمكان حمولة AST JSON مُعدّة تنفيذ إعدادBoolبقيمةfalse، بينما كانsystem.query_logوformatQueryFromJSONيعرضان الصيغة بلا قيمة. #113025 (Alexey Milovidov). - إصلاح سلوك غير معرّف وخطأ جدولة صامت عند جدولة مهمة في الخلفية بتأخير كبير جدًا، مثلًا بواسطة عرض مادي قابل للتحديث بفترة
REFRESH AFTERضخمة. أصبحت التأخيرات الآن مقيّدة بأكبر قيمة قابلة للتمثيل بدلًا من تجاوز السعة. #113041 (Groene AI). - إصلاح كتابة خارج الحدود عند قراءة عمود
DECIMALفيParquetيكون نوعه الفيزيائي أعرض من النوع الذي تقابله دقته المعلنة، مثلDECIMAL(9, 2)المخزّن بالنوع الفيزيائيINT64. هذه الملفات صالحة فيParquetوتنتجها أدوات كتابة أخرى، لكن القارئ كان يحدد حجم العمود الوجهة استنادًا إلى الدقة المعلنة، بينما كان مفكك الترميز يكتب بالعرض الفيزيائي، مما يفسد الذاكرة. تؤدي قراءة مثل هذا الملف الآن أيضًا إلى ظهورDECIMAL_OVERFLOWعندما لا تتسع قيمة ضمن الدقة المعلنة، بدلًا من إرجاع بيانات تالفة، وتتم القراءة دون فقدان للبيانات مع تلميح نوع بعرض لا يقل عن عرض النوع الفيزيائي. #113046 (Groene AI). - تم إصلاح
intDivعند استخدامه على عمود غير ثابت مع مقسوم عليه ثابت قيمته -1، إذ كان يلتف بصمت عند قسمة أصغر عدد صحيح موقّع (مثلintDiv(-9223372036854775808, -1)) بدلاً من طرح استثناءILLEGAL_DIVISIONكما في مسارات التنفيذ الأخرى. وكان هذا الالتفاف الصامت قد يؤدي أيضاً إلى نتائج خاطئة فيORDER BY/DISTINCT، لأن تحسين القراءة بالترتيب يعاملintDivمع ثابت سالب، على نحو صحيح، باعتباره رتيباً، بينما كانت القيمة الملتفة تخالف ترتيب الفرز الناتج. #113048 (Alexey Milovidov). - تم إصلاح مشكلة عدم توافق كانت تمنع تحميل فهارس النص التي أُنشئت في ClickHouse 26.3 باستخدام محلل الكلمات
unicode_wordفي الإصدارات اللاحقة. #113061 (Robert Schulze). - تم إصلاح خطأ منطقي
Pipeline stuckفي الاستعلامات التي توزّع البيانات حسب التقسيم، مثل دالة نافذة تتضمنPARTITION BYأو عملية join تتضمنjoin_algorithm = 'parallel_full_sorting_merge'، عندما ينتهي المسار اللاحق لأحد الأجزاء الموزعة في حين تكون كتلة قد وُزّعت جزئياً فقط. #113190 (Groene AI). - تم إصلاح نتائج خاطئة عند استخدام hash join بمفتاح
LowCardinalityواحد من نوع أعرض من 8 بايتات (UInt128وInt128وUInt256وInt256وبدائلهاNullable). إذ كانت عملية join هذه تعيد بصمت صفوفاً لا تتساوى قيم مفاتيحها. #113230 (Groene AI). - تم إصلاح مشكلة في
ALTER TABLE ... ADD PROJECTIONفوق عمودALIASعلى مستوى الجدول كانت تجعل الجدول غير قابل للاستخدام، وتتسبب في فشل عملياتINSERTاللاحقة بالخطأUNKNOWN_IDENTIFIER(Missing columns) عندما تكون الجلسة مضبوطة علىoptimize_respect_aliases = 0. #109091 (Groene AI). - تم إصلاح استثناءي
NOT_FOUND_COLUMN_IN_BLOCKوLOGICAL_ERRORفيJOINمن النوعdirectعلى جدولMergeTreeالأيمن، وكذلك حالات الإنهاء المرتبطة بها في إصدارات debug وsanitizer. #109932 (Groene AI). - تم إصلاح المقارنات التي كانت تطرح سابقاً
ILLEGAL_TYPE_OF_ARGUMENTعندما لا يكون للمعاملات أصغر نوع فائق مشترك. يمكن الآن مقارنة المصفوفات مثلArray(Int64)مقابلArray(UInt64)وArray(Int256)مقابلArray(UInt256)معجمياً باستخدام=و!=و<و<=و>و>=وIS DISTINCT FROMوIS NOT DISTINCT FROM. كما أصبحisDistinctFromوisNotDistinctFromيقارنان أزواج الأنواع الرقمية والعشرية المدعومة غير المصفوفية حسب القيمة بدلاً من طرح استثناء، وتم أيضاً إصلاح مقارنة المساواة للمصفوفات المتداخلة داخلTuple(Nullable(...)). يغلق #33897. #110245 (Diego Gomes Tomé). - تم إصلاح
LOGICAL_ERROR(Bad cast from ColumnString to ColumnLowCardinality) أثناء تحليل فهرس المفتاح الأساسي عندما يكون عمود المفتاحLowCardinalityمغلفاً بسلسلةCASTمتداخلة تعيد إدخالLowCardinality، مثلWHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'. في إصدارات debug وsanitizer، كان ذلك يؤدي إلى إيقاف الخادم، بينما كان يتسبب في فشل الاستعلام في إصدار النشر. #111050 (Groene AI). - تم إصلاح النتائج الخاطئة لعملية
FULL JOINعلى جدول بمحركJoinباستخدامUSINGعندما يكون المفتاح الأيسرNullableومفتاح التخزين ليس كذلك: إذ كان صف أيسر غير مطابق بمفتاحNULLيعيد0بدلاً منNULL. #111371 (Groene AI). - إصلاح ظهور الإصدارات القديمة والمحذوفة من الصفوف عند قراءة قاعدة بيانات
MaterializedPostgreSQLعبر جدولMerge. تمر هذه القراءات الآن عبر غلافMaterializedPostgreSQL، مع تطبيق ترشيحFINALو_sign = 1نفسه المستخدم في القراءات المباشرة. #112382 (Alexey Milovidov). - إصلاح الخطأ
Bad cast from ColumnNullable to ColumnStringعند تشغيل طفرة تعيد كتابة الجزء بالكامل على جزء يكون نوع عموده أقدم من النوع في بيانات تعريف الجدول، مثلًا بعدALTER TABLE ... MODIFY COLUMNمتبوعًا بـALTER TABLE ... MATERIALIZE PROJECTION. #112501 (Alexey Milovidov). - إصلاح تجاهل تنسيقات الإدخال المستندة إلى الصفوف لـ
KILL QUERYوmax_execution_timeلعدة دقائق أثناء تحليل كتلة. تتحقق الآن من الإلغاء كل 8192 صفًا، لذا يتوقفINSERTالذي تم إنهاؤه (بما في ذلك تفريغ async-insert غير المتزامن في الخلفية) فورًا بدلًا من الاستمرار حتى نهاية الكتلة. #112646 (Groene AI). - إصلاح تحقّق
RENAME TABLEمن الحد الأقصى لطول اسم الجدول في قاعدة البيانات المصدر بدلًا من قاعدة البيانات الوجهة. كان من الممكن أن تؤدي إعادة تسمية جدول إلى قاعدة بيانات ذات اسم طويل إلى إنشاء جدول يتعذر علىDROP TABLEحذفه، كما كان يُرفض خطأً إعادة تسمية جدول خارج قاعدة بيانات كهذه. #113019 (Groene AI). - إصلاح
UNKNOWN_IDENTIFIERعند الاختيار منVIEWتختلف أنواع أعمدته المعلنة عن الأنواع التي ينتجها استعلامه الداخلي، مثلًاSELECT sum(length(arr)) FROM vحيث يعلنvعنarr Array(UInt8)فوق عمودString. مع القيمة الافتراضيةoptimize_functions_to_subcolumns = 1، كان المُحسِّن يعيد كتابةlength(arr)لقراءة العمود الفرعيarr.size0ويمرّر هذا الاسم إلى الاستعلام الداخلي الذي لا يحتوي على عمود فرعي كهذا. #113057 (Groene AI). - إصلاح استثناء (أو خطأ في إصدارات الإنتاج يمنع بدء تشغيل الخادم) عندما يستخدم مسند طفرة دالة الجدول
mergeدون اسم صريح لقاعدة البيانات. تُستخدم الآن قاعدة بيانات الجدول المُعدَّل، كما هو الحال مع أسماء الجداول. #113185 (Alexey Milovidov). - إصلاح نتائج خاطئة وخطأ
LOGICAL_ERRORعند قراءة عمود فرعي لعضوNestedحُذف ثم أُعيدت إضافته مع عضو موجود من المجموعة نفسها، في جدولMergeTreeمعshare_nested_offsets = 1. كانت الأعضاء الموجودة تُرجع قيمًا من كتلة لاحقة عندما تمتد القراءة عبر أكثر من كتلة واحدة. #113225 (Groene AI). - إصلاح تعليق عبارات
ALTERوOPTIMIZEوTRUNCATEوعبارات معالجة الأقسام معalter_sync = 2علىReplicatedMergeTreeعندما يبدأ الجدول في الإيقاف بينما تنتظر العبارة نسخة متماثلة أخرى، مثلًا بسببDROP DATABASE ... SYNCمتزامن. تفشل هذه العبارة الآن بالخطأUNFINISHED، كما تلتزم بـmax_execution_timeوKILL QUERY. #113228 (Groene AI). - عدم كتابة تسلسل الهروب ANSI إلى
INTO OUTFILEعندما يكونstdoutطرفية TTY. #113252 (Azat Khuzhin). - إصلاح حالة نادرة من استخدام الذاكرة بعد تحريرها في قائمة انتظار الإدراج غير المتزامن عندما تكون للإدخالات المختلفة مواعيد نهائية متطابقة. #113363 (Miсhael Stetsyuk).
- أصلح مشكلة بقاء الجداول فارغة دون أي تنبيه عند إنشاء أكثر من قاعدة بيانات بمحرك
ENGINE = Backupمن النسخة الاحتياطية نفسها، أو عند إعادة إنشاء قاعدة بيانات كهذه باسم مختلف. أصبحت سياسة التخزين التي تدعم قاعدة بياناتBackupتُعرَّف باسم يتضمن أيضًا اسم قاعدة البيانات المحلية، بحيث تحصل كل قاعدة بيانات على القرص المُنشأ لمسار بياناتها الخاص. #113378 (Groene AI). - أصلح مشكلة عدم حذف الصفوف مطلقًا عندما يحتوي جدول
MergeTreeعلى قاعدتين أو أكثر من قواعدTTL ... DELETE WHEREذات تعبير الوقت نفسه والتي تختلف فقط في شرطWHERE. بعد دمج للحذف وفق TTL، كانت قيمةrows_where_ttl_infoالخاصة بالجزء تُصفَّر، لذلك لم يكن يُجدوَل له أي دمج TTL آخر، وظلت الصفوف منتهية الصلاحية محفوظة إلى أجل غير مسمى دون أي خطأ أو رسالة سجل. يغلق #113116. #113384 (Groene AI). - أصبح الاستعلام على جدول
Merge(أو دالة الجدولmerge) الذي يطابق عددًا كبيرًا من الجداول يستجيب لـKILL QUERYوmax_execution_timeأثناء إنشاء خطط الاستعلام لكل جدول، بدلًا من الاستجابة فقط بعد اكتمال تخطيط جميع الجداول الفرعية. ومعtimeout_overflow_mode = 'break'، يتوقف الآن أيضًا عن إنشاء خطط الاستعلام للجداول المطابقة المتبقية ويعيد النتيجة الجزئية دون خطأ، وفقًا لما هو موثق لهذا الوضع. #113415 (Alexey Milovidov). #113642 (Groene AI). - أصلح خروج
clickhouse-clientبالرمز139بدلًا من0بعد إلغاء استعلام باستخدام Ctrl+C، أو بعد تنفيذINSERTيقرأ البيانات من stdin. #113431 (Groene AI). - اسمح لتعبيرات
preprocessorوpostprocessorفي فهرس نصي بالإشارة إلى أعمدةALIAS. #110014 (Jimmy Aguilar Mena). - أصلح عدة حالات كانت فيها النسخ المتماثلة المتوازية تُرجع صفوفًا مكررة: إذ كان
distributed_aggregation_memory_efficientيُتجاهل في النسخ المتماثلة المتوازية المستندة إلى الخطة، فتصل الحاويات الخاصة بالدمج الفعّال للذاكرة بترتيب غير صحيح وتُدمج مرتين؛ كما كان يُقرأ جزء موزع من جميع نسخه المتماثلة رغم أن البيانات غير مقسمة بينها، عندما لا تنطبق النسخ المتماثلة المتوازية على الاستعلام أو عندما يطلبparallel_replicas_modeالتصفية بمفتاح مخصص دونparallel_replicas_custom_key. #112942 (Nikita Taranov). - أصلح تحول
CREATE TABLE ... AS SELECTإلى عملية يتعذر إيقافها عندما يفشلSELECTالذي يملأ الجدول وتكونdatabase_atomic_wait_for_drop_and_detach_synchronouslyمفعّلة: إذ كانDROPالداخلي لتنظيف الجدول المؤقت ينتظر قائمة انتظار الحذف الخلفية ويتجاهل كلًا منKILL QUERYوmax_execution_time. #113504 (Groene AI). - أصلح حذف
ALTER TABLE ... EXECUTE remove_orphan_filesلملفmetadata/version-hint.textمستخدم لجدولIceberg. كان إدخال مجموعة العناصر القابلة للوصول يُنشأ بربط السلاسل النصية مع افتراض وجود شرطة مائلة لاحقة في قيمة لا تحتوي عليها مطلقًا، لذلك لم يُتعرَّف على ملف التلميح الفعلي باعتباره قابلًا للوصول، وأُزيل عند تجاوز عمره عتبةolder_than. ومعiceberg_use_version_hint = 1، كان الجدول يفشل بعد ذلك في القراءة تمامًا. #113548 (Groene AI). - تم إصلاح فقدان العرض المُعلَّم بالمعلمات لقاعدة بياناته عند إرسال استعلام يشير إليه دون تأهيل إلى جزء بيانات، إذ كان جزء البيانات يحلّ الاسم وفقًا لقاعدة بياناته الافتراضية. وبحسب محتوى تلك القاعدة، كان الاستعلام إما يفشل بالخطأ
UNKNOWN_FUNCTIONأو يعيد بصمت صفوفًا من عرض مختلف. يؤثر ذلك فيINوJOINوremoteعبر جدولDistributed. #113550 (Groene AI). - تم إصلاح
LOGICAL_ERRORعند تصفية استعلام لـsystem.databasesبناءً على عمودnameباستخدام استعلام فرعي داخلindexHint، مثلًاSELECT count() FROM system.databases WHERE indexHint(name IN (SELECT 'foo')). #113556 (Groene AI). - تم إصلاح حلقة لا نهائية في عمليات الدمج الخلفية و
OPTIMIZEعندما كانت قيمةmerge_max_block_size_bytesأقل منbyteSize()لعمود فارغ. يظل عمودLowCardinalityالفارغ محتفظًا بقاموسه، لذلك كان يمكن بلوغ حد البايتات قبل دمج صف واحد؛ ثم كان الدمج ينتج كتلًا فارغة إلى الأبد، مستهلكًا 100% من نواة CPU من دون تحرير خانته في مجمع العمليات الخلفية. #113585 (Groene AI). - تم إصلاح استعلام على عمود
Variantكان يتجاهلmax_execution_timeوKILL QUERY. كان استدعاء دالة بعدة وسائطVariantيحل الدالة مرة واحدة لكل بديل من كل وسيطة، ولم تكن أي من الحلقتين اللتين تنفذان هذا العمل تتحقق من الإلغاء، لذلك تعذر إيقاف هذا الاستعلام حتى يكتمل. #113612 (Groene AI). - تم إصلاح الخطأ
Unknown compression methodلتلميحات الضغطautoوnoneعند كتابتها بحالة أحرف غير الأحرف الصغيرة بالكامل، مثلًاfile('data.csv.gz', 'CSV', 'x String', 'AUTO'). كانت أسماء برامج الترميز مثلGZIPمقبولة بالفعل دون حساسية لحالة الأحرف؛ وأصبح التلميحان الخاصان يتصرفان بالطريقة نفسها. #113631 (Groene AI). - تم إصلاح طي الثوابت في analyzer الجديد، الذي كان يغيّر نوع قيمة
Geometryثابتة. إنGeometryهوVariantمسمّى يمكن لبدائله أن تتشارك تخطيط التخزين نفسه (LineString/RingوMultiLineString/Polygonوالقيم الفارغة)، لذا كان يمكن لثابتين مطويين يختلفان فقط في بديلهما أن ينهارا إلى ثابت واحد؛ فعلى سبيل المثال، كانMULTIPOLYGON EMPTYيصبحLINESTRING(). #110709 (Groene AI). - تم إصلاح استثناء (
Cannot calculate columns sizes when columns or checksums are not initialized) أثناء دمج جدولMergeTreeأحادي العمود، عندما يكون عموده الوحيد ذاTTLتنتهي صلاحيته بالكامل، معmin_bytes_for_wide_part = 1. #111169 (Groene AI). - لم يعد فشل بدء مجمع الجدولة الخلفية (مثل مجمع
icebergعند استنفاد مجمع خيوط التنفيذ العام) يوقف الخادم: أصبح الخطأ الآن استثناءً قابلًا للاسترداد. كما أن قراءةsystem.background_schedule_poolلم تعد تنشئ تلك المجمعات كأثر جانبي. #111209 (Groene AI). - تم إصلاح قراءة خارج الحدود في البروتوكول الأصلي عند وجود بيانات فهرس تالفة. #112331 (Pavel Kruglov).
- تم إصلاح حالة جمود تؤدي إلى تعليق قاعدة بيانات
FilesystemأوHDFSبشكل دائم عندما يحل استعلامان اسم الجدول نفسه في الوقت ذاته. ويُحجب كل استعلام لاحق على قاعدة البيانات تلك إلى الأبد ولا يمكن مقاطعته، لذا يلزم إعادة تشغيل الخادم للتعافي. #112495 (Groene AI). - إصلاح عدم فعالية
max_execution_timeوKILL QUERYبصمت في استعلام موزّع ينشئ اتصالات بالنسخ المتماثلة. يتوقف هذا الاستعلام الآن عند محاولة الاتصال التالية، بدلًا من المرور على كل نسخة متماثلة ومحاولة إعادة الاتصال بها. #112689 (Groene AI). - إصلاح تعليق
DROP TABLEوSYSTEM STOP VIEWعندما يُحظر عرض مادي قابل للتحديث أثناء تخطيط استعلام التحديث الخاص به. #113188 (Nikolay Degterinsky). - إصلاح كشف
CREATE TABLEمعENGINE = Distributed(...)أوENGINE = Buffer(...)ومن دون قائمة أعمدة لبنية جدول مُشار إليه لا يملك المستخدم الذي ينشئه صلاحية رؤيته. بالنسبة إلىCREATEمحلي، تُستنتج البنية الآن ضمن سياق المستخدم نفسه، لذا يلزم امتلاك صلاحيةSHOW COLUMNSعلى الجدول المُشار إليه. لا يشمل ذلكCREATEالمُعاد تشغيله من طابور DDL (ON CLUSTERأو داخل قاعدة بياناتReplicated). #113220 (Groene AI). #113372 (Groene AI). - إصلاح قراءة قاعدة البيانات الداخلية
_temporary_and_external_tablesعبر دالة الجدولmergeومحرك الجدولMerge، التي كانت تتيح لجلسة قراءة الجداول المؤقتة لجلسات ومستخدمين آخرين. يتخطى التعبير النمطي لقواعد البيانات هذه القاعدة الآن، ويُرفض ذكرها صراحةً، كما يُرفض الوصول المباشر إليها. #113224 (Alexey Milovidov). - إصلاح تجاهل
countSubstringsوcountSubstringsCaseInsensitiveوcountSubstringsCaseInsensitiveUTF8وcountMatchesوcountMatchesCaseInsensitiveلـKILL QUERYوmax_execution_time: إذ كان يمكن لاستدعاء على عدد كبير من الصفوف أو المطابقات، أو على قيمة كبيرة واحدة، أن يستمر لدقائق بعد إلغاء الاستعلام. #113369 (Groene AI). #113886 (Groene AI). - إصلاح عملية mutation لجزء Compact كانت تنتج نتيجة مختلفة بحسب ما إذا كانت معلومات تسلسل الجزء لا تزال في الذاكرة أو أُعيد تحميلها من
serialization.json، عندما يستخدم الجدولserialization_info_version = 'basic'. فيReplicatedMergeTree، كان هذا يؤدي إلى أن تكتب نسختان متماثلتان تحتفظان بجزء مصدر متطابق البايتات أجزاء معدّلة مختلفة، فتفشل عملية mutation بالاستثناءCHECKSUM_DOESNT_MATCH. يغلق #113500. #113588 (Groene AI). - إصلاح إبلاغ
made_current_atفيsystem.iceberg_historyعن أقدم وقت أصبحت فيه لقطة ما حالية، بدلًا من أحدث وقت، عندما يظهرsnapshot-idنفسه أكثر من مرة فيsnapshot-logالخاص بـIceberg، كما يحدث عند إجراء تراجع. #113598 (Groene AI). - إصلاح القيم غير الصحيحة للأعمدة الافتراضية، مثل
_tableأو_database، المُختارة من الجانب الأيمن لـJOINمع مصدر key-value مثلEmbeddedRocksDBأوKeeperMapأوRedisأو قاموس. كان يمكن أن يعيد الاستعلام قيمة عمود بيانات بدلًا منها، أو يفشل باستثناءLOGICAL_ERROR. #113698 (Groene AI). - إصلاح فشل
EXPLAIN ANALYZEعلى جدولMergeيحتوي على عدة children، وPREWHEREبعمود دون تعبير، وWHEREمنفصل، مع الرسالةRequired output position N is out of range for pass-through inputs. يغلق #113621. #113725 (Groene AI). - تم إصلاح فشل نقل دليل باستخدام
clickhouse-disks moveمع ظهور الخطأDIRECTORY_ALREADY_EXISTSعلى الأقراص ذاتmetadata_type = plain_rewritable(مثلs3_plain_rewritable)، والذي كان يترك أيضًا دليل وجهة فارغًا. #113727 (Groene AI). - تم إصلاح فشل قراءة جداول
Mergeمع الخطأNo set is registered for key ...عندما يعرّف أحد الجداول التابعة عمودALIASيحتوي علىINوتختلف الجداول التابعة في القيمة الافتراضية لذلك العمود. #113757 (Groene AI). - تم إصلاح الخطأ
UNKNOWN_IDENTIFIERمعenable_analyzer = 0عندما تشيرWHEREإلى عمود تنتجهuntupleداخل استعلام فرعي، مثلSELECT t.keys FROM (SELECT untuple(arrayJoin(m)) AS t FROM ...) WHERE t.values > 0. كانت إعادة الكتابة بواسطةenable_optimize_predicate_expressionتدفع هذا الشرط إلى الاستعلام الفرعي باعتبارهHAVING، حيث لا يكون الاسم موجودًا بعد. #113760 (Groene AI). - تم إصلاح فشل
ALTER TABLE ... MODIFY COLUMNمع الخطأCannot specify codec for column type ALIASعندما تحوّل تعليمة واحدة عمودALIASإلى عمود فعلي (DEFAULTأوMATERIALIZED) وتحددCODECفي الوقت نفسه. يغلق #113693. #113853 (Groene AI). - تم إصلاح
ORDER BY ALLوGROUP BY ALLعلى جدولMergeمرتبط باستخدام المحلل القديم (allow_experimental_analyzer = 0). لم يعد الاستعلام يفشل باستثناء داخلي، ولم تعد إصدارات التصحيح وإصدارات sanitizer تُجهض. #109139 (Groene AI). - تم إصلاح استثناء متقطع
Cannot parse string ... as UInt64 ... While executing ValuesBlockInputFormatقد يحدث عند إدراج قيم تتضمن تعبيراتها تحويلاً رقميًا، مثلinitializeAggregation('sumState', 0::UInt64). #110637 (Groene AI). - تم إصلاح الإبلاغ عن حالات فشل لقرص سليم أثناء الفحص الدوري للقرص المحلي. فعندما يشغّل الخادم Keeper مضمّنًا إلى جانب قرص
local، كان من الممكن أن يتحقق خيطا فحص من الملف نفسه، وأن يسجلا مؤقتًاFILE_DOESNT_EXISTأوCANNOT_READ_ALL_DATAأوCANNOT_UNLINK، وأن يُحتسب القرص مؤقتًا ضمن مقياسBrokenDisks. #110773 (Groene AI). - تم إصلاح نتائج غير صحيحة وخطأ منطقي
Cannot serialize FutureSetFromSubquery with no query planفي الاستعلامات على جداولMergeودالة الجدولmergeعند تمكين النسخ المتماثلة المتوازية القائمة على الخطة. #112849 (Alexey Milovidov). - لم يعد جدول في محرك قاعدة البيانات
URLيكشف لمستخدم لا يملك امتياز قراءة المصدر ما إذا كان ملف محلي موجودًا. أصبح كل منEXISTS TABLE، الذي لا يتطلب سوى امتيازSHOW TABLES، وحل اسم الجدول ينتظران التحقق من الامتياز قبل فحص نظام الملفات. #113029 (Alexey Milovidov). - تم إصلاح تعبير TTL الذي يصبح غير قابل للاستخدام عندما يزيل طيّ الثوابت الأعمدة التي يشير إليها، مثل
TTL d + INTERVAL 1 DAY DELETE WHERE isNull(x)على عمودxغيرNullable، مما كان يتسبب في فشل كل عمليةINSERTفي الجدول مع الخطأMissing columns. كما تم إصلاح فشل تشغيل الخادم عندما يحتوي جدول على تعبير TTL لعمودVariantأُنشئ باستخدامvariant_throw_on_type_mismatch = 0. #113042 (Alexey Milovidov). - تم إصلاح إلغاء قراءات دالة الجدول
postgresqlومحرك الجدولPostgreSQL. إذ كان الإلغاء أثناء بدء القراءة قد يتسابق مع مؤشر المعاملة ويُفقد، مما يترك الاستعلام قيد التشغيل حتى ينهيه PostgreSQL. #113150 (Groene AI). - يمكن الآن مقاطعة
UNDROP TABLEباستخدامKILL QUERYأثناء انتظارها للاستعلامات قيد التشغيل كي تحرر الجدول المُسقَط. #113263 (Alexey Milovidov). - إصلاح تسرّب ذاكرة لمحلل XML بأكمله عندما يطرح معالج XML من
Pocoاستثناءً أثناء التحليل، مثل تجاوز سعةPoco::XML::NamePoolعند تحليل مستند يحتوي على عدد كبير من أسماء العناصر الفريدة. #113348 (Alexey Milovidov). - تم إصلاح عمليات الكتابة إلى قرص
HDFS: لم تعد تفشل بالرسالةParent directory doesn't existعندما يحتوي مفتاح الكائن المُنشأ على بادئات أدلة متداخلة، إذ تُنشأ الآن أدلة الأصل المفقودة. #113396 (Alexey Milovidov). - إصلاح النتائج الخاطئة، وإخفاق التحقق في الإصدارات التي تكون فيها التحققات مفعّلة، لعملية
JOINعلى قاموس تحتوي عبارةONالخاصة بها على شرط غير متساوٍ يشمل كلا الجدولين، مثلON (t.key = d.key) AND (t.a * 10 < d.a)، عند تفعيلjoin_use_nulls. #113534 (Alexey Milovidov). - إصلاح تعليق استعلام لمدة تصل إلى
receive_timeoutثانية عندما ينتهي بسرعة كبيرة على العُقدة البادئة. #113551 (Nikita Taranov). - إصلاح قراءة
UPDATEوDELETEخفيف الوزن للجداول الخاطئة عندما تختلف قاعدة بيانات الجدول المُحدَّث عن قاعدة بيانات الجلسة. تُحل الآن أسماء الجداول غير المؤهلة ودالة الجدولmergeبالنسبة إلى قاعدة بيانات الجدول المُحدَّث، لذا لم يعد البيان يحدّث أو يحذف بصمت صفوفًا محددة من جدول مختلف. #113748 (Groene AI). - إصلاح رفض زائف بسبب
TOO_MANY_PARTSلعمليةINSERTمتوازية: عندما يجعلmax_insert_threadsعمليةINSERTعادية متوازية، لم يعد الاستعلام يحتسب الأجزاء التي التزمت بها المصارف النظيرة التابعة له. يُغلق #114015. #114016 (Alexey Milovidov). - تم إصلاح
NO_SUCH_COLUMN_IN_TABLEعندما يحدد استعلام ذو نسخ متماثلة متوازية عمودALIASلجدول يُنقل كجدول مؤقتGLOBAL JOIN، وMULTIPLE_EXPRESSIONS_FOR_ALIASعندما يعلن جانباJOINموزعة عن عمودALIASبالاسم نفسه، وUNKNOWN_IDENTIFIERعندما يعلن جدولDistributedعن عمودALIASفوق عمودALIASآخر، بما في ذلك عند استخدامه كمفتاحJOIN USING. #107700 (Yakov Olkhovskiy). - تم إصلاح قراءة
Tupleبتنسيق CSV عندما يكون عنصره الأولNULL. عند تمكينinput_format_csv_deserialize_separate_columns_into_tupleوinput_format_null_as_default، كان\Nفي بداية صف مثل\N,1يُفسَّر على أنه يعني أن العمود بأكملهNULL، فيُستبدل الصف بقيمة افتراضية وتتسبب خلايا العناصر المتبقية في خطأ تحليل. أصبحNULLالأول الآن قيمة العنصر الأول، ويُطبَّقinput_format_null_as_defaultعلى ذلك العنصر. أما الصف الذي يحتوي على حقل واحد\NلـTupleغير مغلّف بالكامل، فيُعد الآن ناقصًا للعناصر المتبقية ويُرفض؛ عيّنinput_format_csv_deserialize_separate_columns_into_tuple = 0لقراءة هذا الحقل باعتباره العمود بأكمله مجددًا. #109744 (Groene AI). - إصلاح خطأ نادر
Logical error: 'No more packets are available.'في استعلام موزع صالح يتضمنLIMIT. وكان يؤدي أيضًا إلى إيقاف الخادم في إصدارات التصحيح وإصدارات sanitizer. #110334 (Groene AI). - تم إصلاح خطأ منطقي (
!part.empty()) عند استخدام جدولDistributedمعرّف باسم قاعدة بيانات بعيدة فارغ فيJOINمعdistributed_product_mode = 'local'. #110677 (Groene AI). - إصلاح تحليل أسماء الأعمدة المؤهلة بالكامل، مثل
db.table.column، في المحلّل للجداول التي تحمل الاسم نفسه لقاعدة بياناتها. يغلق #82084. #110976 (Alexey Milovidov). - تم إصلاح فقدان وصلات التجزئة لتحسيناتها اللاحقة بعد البناء (التحويل إلى جدول تجزئة ثابت، ومرشح وقت التشغيل المشترك، وإعادة ترتيب نطاقات الجدول الأيمن) عند تكوين حد تلقائي للكتابة إلى القرص، وهو الإعداد الافتراضي منذ الإصدار 26.5. #111972 (Alexey Milovidov).
- تم إصلاح خلل كان يحدث عند استخدام
ALTER TABLE ... MODIFY COLUMNلتغيير تلميح نوعJSON(مع تمكينallow_experimental_json_lazy_type_hints) في عمود يُستخدم عموده الفرعي في المفتاح الأساسي أو مفتاح الفرز أو مفتاح التقسيم أو فهرس تخطٍ صريح، إذ كان يمكن أن يفسد المفتاح أو الفهرس على القرص. كانت عمليات القراءة العادية تخفي ذلك عبر البنية المخزنة مؤقتًا، لكن بعد إعادة تحميلها (مثلًا عند إعادة تشغيل الخادم) كانت الاستعلامات تفشل برسالةCANNOT_READ_ALL_DATAأو تعرض نتائج خاطئة. تُرفض عملياتALTERهذه الآن كلما غيّرت النوع على القرص لعمود فرعي مُشار إليه منJSON. تظل تغييرات تلميحات النوع على الأعمدة خارج تلك البنى، أو التغييرات التي لا تغيّر النوع على القرص للأعمدة الفرعية المُشار إليها (مثل إضافة مسار مكتوب غير ذي صلة)، مقتصرة على البيانات الوصفية. #112302 (Pavel Kruglov). - إصلاح النتائج الخاطئة عندما يبدّل
query_plan_join_swap_tableجانبيANY JOINبينماjoin_any_take_last_row = 1: يحتفظ ClickHouse الآن بالترتيب الأصلي لجانبي الوصل بحيث يظلANY JOINيعيد آخر صف مطابق. يغلق #111645. #112458 (Vladimir Cherkasov). - تم إصلاح
listObjectsعلى قرصAzureBlobStorageذي نقطة النهاية ذات البادئة، إذ كان يعيد أسماء blob خاطئة في كل صفحة بعد الأولى لأن ترقيم الصفحات كان يتجاوز غلاف العميل الذي يزيل بادئة نقطة النهاية. يدخل ترقيم الصفحات الآن إلى الغلاف مجددًا عبر رمز الاستمرار، بحيث تكون أسماء blob في كل صفحة صحيحة. #112872 (Arsen Muk). - تم إصلاح تخصيص ذاكرة غير محدود عند قراءة ملف
Parquetتعلن بياناته الوصفية Thrift عن طول حاوية أو سلسلة أكبر من البيانات الوصفية نفسها. يُرفض هذا الطول الآن بدلًا من تخصيص ذاكرة له. #113212 (Groene AI). - تم إصلاح الخطأ
Cannot insert element into Set(NOT_IMPLEMENTED) عند تمكينread_in_order_use_virtual_rowواستخدام استعلام قراءة مرتبة منMergeTreeيجمع بينWITH FILL ... INTERPOLATEومرشحINأوhas. #113264 (Groene AI). - إصلاح تجاهل
optimize_read_in_orderبصمت في بعض استعلاماتORDER BY، بما في ذلك الاستعلامات التي تستخدم صفًا افتراضيًا أوtoString/CAST(..., 'Nullable(String)')على مفتاح فرز من نوعString. كما تم إصلاح النتائج الخاطئة للمرشحات أوORDER BYعلىtoStringلقيمTimeأوTime64أوDateTimeفي المناطق الزمنية التي تطبق التوقيت الصيفي. #113291 (Vladimir Cherkasov). - رفض تعبيرات
parallel_replicas_custom_keyغير الصالحة، مثلtuple()أو(x, y)، بالخطأILLEGAL_TYPE_OF_COLUMN_FOR_FILTERبدلًا من القراءة بعد نهاية قائمة أنواع المفتاح المخصص. #113359 (Nikita Taranov). - إصلاح فشل إعادة تشغيل الخادم بعد إنهائه أثناء تنفيذ
DROP TABLEلجدول يستخدم مجموعة مسماة: إذ كان يمكن أن تنجح عمليةDROP NAMED COLLECTIONلاحقة، مما يترك بيانات تعريف جدول تشير إلى مجموعة مسماة مفقودة ويتسبب في فشل بدء التشغيل التالي بالخطأNAMED_COLLECTION_DOESNT_EXIST. #113524 (Alexey Milovidov). - إصلاح حالتين كانت فيهما قاعدة بيانات AWS Glue في
DataLakeCatalogتُبلغ عن عدم وجود جدول بدلًا من الإبلاغ عن خطأ. لم يعدSHOW TABLESوsystem.tablesيفشلان بالخطأDATALAKE_DATABASE_ERROR(“Exception calling GetTables … not found”) عندما تكون قاعدة بيانات Glue غير موجودة أثناء سرد جداولها، مثلًا بسبب حذف قاعدة بيانات غير مرتبطة في حساب AWS نفسه بالتزامن؛ إذ لا تسهم قاعدة البيانات هذه الآن بأي جداول بدلًا من إيقاف السرد. ولم يعدEXISTS TABLEيُرجع0لجدول موجود عند فشل استدعاءGetTableالأساسي لسبب غير عدم وجود الجدول، مثل فشل المصادقة أو DNS أو خطأ 5xx. ولا تزال جميع أخطاء Glue الأخرى تُنقل في كلا المسارين. #113591 (Groene AI). - تم إصلاح خطأ في متانة Keeper، إذ كان التعطل أثناء حفظ ملف حالة Raft (الذي يخزن
termوvoted_for) قد يترك العقدة دون حالة صالحة أو نسخة احتياطية. وعند إعادة التشغيل، كان يمكن للعقدة إعادة الضبط إلىterm = 0ومنح تصويت سبق أن منحته في ذلك المصطلح، مما قد يؤدي إلى وجود قائدين وفقدان البيانات الملتزم بها. وتُحتفظ الآن بالحالة السابقة حتى يُكتب ملف الحالة الجديد بالكامل وتتم مزامنته. #113654 (Alexey Bakharew). - إصلاح سباق بيانات عند حذف جدول
MergeTreeبينما لا تزال مهام تحديث الإحصاءات في الخلفية أو تحديث الأجزاء أو تحميل الأجزاء القديمة/غير المتوقعة قيد التشغيل. #113722 (Alexey Milovidov). - إصلاح
ORDER BY ALLفيWINDOW VIEW، وأخطاءUNKNOWN_IDENTIFIERالخاصة بـINTERPOLATEوWINDOWوLIMIT BYفي استعلام على جدولMergeأوDistributedيتضمن ربطًا، عند استخدام المحلل القديم. #113759 (Alexey Milovidov). - إصلاح تسرب للذاكرة في برنامج ترميز الضغط التجريبي
SZ3: فعند فشل ضغط بيانات ضعيفة القابلية للضغط أو بيانات تالفة بسبب استثناء، كانت مخازن الذاكرة المؤقتة تظل مخصصة. #113916 (Alexey Milovidov). - إصلاح التعقيد التربيعي عند تحليل وسيطة العنوان في دوال الجدول
remoteوmysqlوما شابهها: إذ كان العنوان الطويل جدًا (مثلFixedStringبحجم ميغابايت ومُعبّأ بأصفار بادئة) يؤدي إلى تعليق الاستعلام أثناء التحليل دون إمكانية إلغائه. #113918 (Alexey Milovidov). - إصلاح فشل
OPTIMIZE TABLEعلى جدولIcebergبالخطأUnsupported snapshot's operation type OVERWRITEعندما كان سجل الجدول يحتوي على عملية حذف صفوف أزالت أكثر من صف واحد لكل ملف حذف حسب الموضع. يغلق #113745. #113964 (Groene AI). - عدم تكرار
ALTER TABLE ATTACH PARTITION FROMلقواعد البيانات ذات النسخ المتماثلة. #94835 (MikhailBurdukov). - تُرفض الآن إعدادات حجم التحميل غير الصالحة في Azure (مثل
azure_min_upload_part_size = 0أوazure_max_blocks_in_multipart_upload = 0) مبكرًا برسالة خطأ واضحة بدلًا من التسبب في استثناء داخلي (second_size > 0) عميقًا في مسار الكتابة. ينطبق ذلك على كل من إعدادات الاستعلام وتكوين قرص Azure. #103394 (Statxc). - إصلاح الإفلات غير الصحيح للقيم الحرفية في SQL في
StorageSQLiteودالة الجدولsqlite()عند دفع شروطWHEREإلى SQLite: إذ كانت علامات الاقتباس المفردة ومحارف التحكم (\nو\rو\tو\) تُفلَت بشرطات مائلة عكسية لا يفسرها SQLite، مما يؤدي إلى أخطاء في البنية أو نتائج استعلام غير صحيحة. كما أُصلح إفلات القيم الحرفية النصية المدفوعة إلى PostgreSQL: إذ كانت السلاسل المتداخلة داخل قوائمINتحتفظ بإفلات ClickHouse، وتُرسل محارف التحكم كتسلسلات شرطات مائلة عكسية يقرأها PostgreSQL كبايتات مختلفة. #104217 (Shaohua Wang). - إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKفي استعلاماتINNER JOIN ... ON arrayJoin(...) = ...عند تفعيلquery_plan_convert_join_to_inوعندما يشير SELECT إلى عمود المصفوفة المصدر. #104809 (Shaohua Wang). - إصلاح تعبيري IN وNOT IN ذوي معاملات الجانب الأيمن غير الثابتة التي تشير إلى أعمدة من الصف الحالي، ومواءمة معالجة الصفوف في الجانب الأيمن في analyzer الجديد مع دلالات IN الحالية في ClickHouse. في analyzer القديم، كان عمود مصدر مجرّد في الجانب الأيمن (
x IN (arr)) يُفسَّر باسم جدول ويبقى خارج النطاق. #104993 (Yue Ni). - إصلاح الخطأ
Cannot add column ...: column with this name already existsعند تنفيذINSERT SELECTمن دالة جدول مثلfileأوs3أوinput، عندما يُختار عمود المصدر نفسه أكثر من مرة. #105982 (etienne). - رفض
max_replication_lag_to_enqueue = 0في قواعد بياناتReplicated. كانت هذه القيمة تجعل فحص عدم التزامن بعد الاستعادة صحيحًا دائمًا، وتتسبب في إيقاف الخادم بخطأLOGICAL_ERRORفي إصدارات debug وsanitizer. يُرفض الآن0وقت التحليل معBAD_ARGUMENTSمن جميع المصادر (CREATE DATABASE ... SETTINGS، وكتلة تكوين الخادم<database_replicated>، وإعادة تشغيلATTACH، وإعادة تشغيل البيانات الوصفية الحالية عند الترقية). أصغر قيمة صالحة هي1. يغلق #98823. #106006 (Groene AI). - إصلاح
Logical error: 'Pipeline stuck'في الاستعلامات التي تستخدمenable_sharding_aggregator = 1معUNION ALLوmax_streams_for_union_stepأصغر من عرض خط الأنابيب. يُنهيBufferedShardByHashTransformالآن منافذ إخراج قوائم الانتظار الفارغة فور استنفاد الإدخال، ويواصل سحب الإدخال عندما لا يحتوي منفذ فارغ مطلوب على بيانات قابلة للتصريف، حتى إذا بلغت قائمة انتظار شقيقة حد الضغط الخلفي. #106251 (Groene AI). - إصلاح تجاوز سعة عدد صحيح موقّع عند ضبط إعداد مهلة انتظار، مثل
interactive_delay، على قيمة ضخمة: إذ كان من الممكن أن تنتهي المهلة فورًا بدلًا من الانتظار، وقد يتوقف الخادم عند استخدام Undefined Behavior Sanitizer. #106961 (Groene AI). - يُرفض الآن تصدير قيم
Time/Time64الواقعة خارج نطاق وقت يوم صالح (سالبة أو>= 24h) إلى تنسيقArrowبرسالة خطأ واضحة، بدلًا من كتابة بياناتtime32/time64غير صالحة في Arrow. #107179 (Shaohua Wang). - إصلاح النتائج الخاطئة لـ
GROUP BYعلى جدولDistributedذي أعمدةALIASمكررة تتوسع إلى التعبير نفسه (مثلًا، عمودان معرّفان بـtoString(x)) عند استخدام التجميع الموزع ثنائي المستوى أو الموفر للذاكرة. كانت المفاتيح المكررة تُطوى إلى مفتاح واحد على الأجزاء، لكنها تُدمج باستخدام مجموعة المفاتيح الكاملة على البادئ؛ لذا كانت المجموعات المتساوية من أجزاء مختلفة تقع في دلاء مختلفة عند التجميع ثنائي المستوى ولا تُدمج، فتُعاد مجموعة واحدة لكل جزء معcount()مقسّم. #108855 (Groene AI). - إصلاح خطأ زائف
Inconsistent AST formattingفيALTER TABLE ... MOVE PART ... TO SHARD '<path>'. كان منسّق الاستعلام يحذف الكلمة المفتاحيةSHARD، لذا لم يكن من الممكن تحليل الاستعلام المنسّق مجددًا، مما أدى إلىLOGICAL_ERROR(استثناء مُعالَج في إصدارات الإنتاج، وإيقاف في إصدارات التصحيح وsanitizer). #109060 (Groene AI). - رفض إزاحات
Arrayغير الرتيبة في جميع مسارات القراءة التي تفك ترميزها كقيم مطلقة، بدلًا من تنسيقNativeفقط. كان جزء حبيبة من skip indexsetتالف يمر سابقًا دون تحقق ثم يُقرأ خارج الحدود. #109212 (Groene AI). - يراعي
JSONExtractالآنcast_string_to_date_time_modeعند تحويل قيم JSON النصية إلىDateTime/DateTime64، بما يتسق معCAST. يغلق #109126. #109252 (Utkal Singh). - إصلاح خطأ منطقي محتمل “Unexpected substream … for column …” عند رفع إصدار إعداد compatibility. #109496 (Pavel Kruglov).
- تعيين مكوّن coordination المفقود في حساب حجم system.detached_parts. #109553 (Den Kalantaevskii).
- إصلاح احتمال عدم انتهاء مهلة انتظار الكتلة لعمليات الإدراج المتدفقة (
input_format_max_block_wait_ms) أبدًا أثناء تفعيل query profiler: إذ كانت عملية استطلاع واصف الملف تُعاد بمهلة كاملة بعد كل إشارة من profiler، ما قد يسمح لمصدر إدخال متوقف بتأخير flush للكتلة الجزئية إلى أجل غير مسمى بدلًا من إفراغها عند بلوغ حد الانتظار. #109602 (Shaohua Wang). - لم يعد طيّ الثوابت أثناء تخطيط الاستعلام ينفّذ دالةً يختلف نوع وسيطها عن النوع الذي حُلّت الدالة على أساسه أثناء التحليل. كان هذا التعارض يؤدي سابقًا إلى ظهور
LOGICAL_ERRORأثناء حساب ترويسة الإخراج، وهو فشل تأكيد في إصدارات التصحيح وإصدارات sanitizer. يُتخطى الطيّ الآن بدلًا من ذلك، بينما يظل الاستعلام غير الصالح فعليًا يُبلغ عن الخطأ القابل للاستردادILLEGAL_TYPE_OF_ARGUMENTمن مسار التنفيذ المعتاد. #109747 (Groene AI). - إصلاح فشل mutation يشير إلى العمود الافتراضي
_sample_factorفي منتصف التنفيذ مع ظهورUnexpected const virtual column: _sample_factorوبقاء mutation عالقًا. تقرأ mutation هذا العمود الآن بالقيمة1، وهي القيمة نفسها التي يعيدها استعلام لا يستخدمSAMPLE. #109813 (Groene AI). - إصلاح ثلاث مشكلات في
use_constant_folding_in_index_analysis: خطأ منطقيInvalid partition key sizeكان قد يوقف استعلامSELECTيستخدم إسقاطًا عاديًا عندما يضبط الجدولpart_minmax_index_columns = 'with_block_number_offset'؛ ونتائج خاطئة (حذف صفوف بصمت) لمرشح على مفتاح تقسيم يعتمد على باقي القسمة، مثلPARTITION BY id % 200؛ وتعطلًا (سباق بيانات) عند الاستعلام عن فهرسtextيستخدم محللsparseGramsمع شرطLIKEعبر عدد كبير من الأقسام معmax_threads > 1. #109896 (Groene AI). - إصلاح سباق بيانات (وتعطل نادر) عند الإبلاغ عن خطأ في التحليل النحوي أو التحليل أثناء قراءة جدول ملف أو تخزين كائنات. كان خطأ التحليل النحوي الذي يُثار أثناء التهيئة الكسولة لـ
KeyConditionيُشارك ككائن استثناء واحد بين خيوط القراءة، وكان بإمكان خيطين إلحاق(in file/uri ...)برسالته بالتزامن، ما يؤدي إلى سباق على سلسلة رسالة الاستثناء. #109911 (Groene AI). - إصلاح تمرير إعدادات الاستعلام في
accurateCastOrDefault، مع الحفاظ على قيمNULLالأصلية المرمزة بواسطةDynamicوVariant. يغلق #109943. #109946 (Pavel Kruglov). #114912 (Alexey Milovidov). - تصحيح النتائج غير الصحيحة من
subBitmapوbitmapSubsetInRangeوbitmapSubsetLimitللـ bitmaps التي لا تزال تستخدم التمثيل الصغير، بما في ذلك قيم العناصرUInt64وInt64التي تتجاوز2^32، والتي كانت تُقتطع إلى 32 بت. تستخدم المقارنات في دوال bitmap لأنواع العناصر الموقعة الآن القيمة غير الموقعة لنوع العنصر بصورة متسقة؛ لذلك، في bitmap من نوعInt8، يُقارن العنصر-1بوصفه255بدلًا من4294967295بعد توسيع الإشارة. ويصلح هذا أيضًاbitmapMinوbitmapMaxوbitmapContainsوbitmapTransformللـ bitmaps التي تجاوزت التمثيل الصغير. يجب تعديل الاستعلامات التي مررت عتبات موسعة الإشارة: في bitmap من نوعInt8، تصبحbitmapSubsetInRange(bm, 4294967168, 4294967296)هيbitmapSubsetInRange(bm, 128, 256). صُحح أيضًاgroupNumericIndexedVectorالذي كان يعيد نتائج مختلفة لأعمدة الفهرسInt8وInt16مقارنةً بأنواع الفهارس الأوسع، وnumericIndexedVectorGetValueالذي كان يعيد0للفهارس السالبة. كما صُححت وثائق دوال bitmap، بما في ذلك دوال subset التي وُصفت بأنها تستخدم فهرسة تبدأ من 1، ودعمbitmapBuild/bitmapToArrayللأنواع الموقعة. #110072 (Rami Darwiche). - إصلاح تجاهل
optimize_aggregation_in_orderلإلغاء الاستعلامات. يتحققAggregatingInOrderTransformالآن من الإلغاء أثناء تجميع جزء، بحيث يتوقف الاستعلام الذي أوقفتهKILL QUERYأوmax_execution_time(مع الإعداد الافتراضيtimeout_overflow_mode = 'throw') سريعًا بدلًا من إكمال معالجة الجزء بالكامل. #110104 (Groene AI). - إصلاح حالة سباق بين
KILL TRANSACTIONوALTER TABLE ... UPDATE/DELETEالمنفذ ضمن معاملة: كان التراجع الذي يحدث بين تسجيل التعديل في المعاملة وتسجيله في الجدول يترك إدخال تعديل يتيمًا، مما يؤدي إلى ظهور خطأ منطقي (Cannot find transaction ... that has started mutation ...) في المهام الخلفية ويحجب جميع التعديلات اللاحقة للأجزاء المتأثرة إلى حين إعادة تشغيل الخادم. #110226 (Shaohua Wang). - إصلاح خطأ
LOGICAL_ERROR(Left and right columns have same names) في مُحسِّن ترتيب الربط، كان يمكن أن ينجم عن ربط بفاصلة على عرض متعدد الجداول عند تفعيلquery_plan_merge_expression_into_join. #110227 (Groene AI). - أصبح تقدير عدد الصفوف في ترتيب الربط يركّب إحصاءات الأعمدة على الأجزاء المتبقية بعد تقليم القسم/المفتاح الأساسي، بدلًا من جميع الأجزاء النشطة. سابقًا، كان يُخطط لاستعلام مقتصر على قسم صغير باستخدام إحصاءات الجدول بالكامل (ولوحظت مبالغة بمقدار 2500 ضعفًا في تقدير عدد الصفوف أدت إلى تبديل جانب البناء في ربط التجزئة)، وكان تعطيل الإحصاءات، على نحو متناقض، ينتج خطة أفضل. أُصلح أيضًا: كان FINAL الكسول يُعطّل بصمت لعلاقات MergeTree ضمن JOIN لأن نتيجة تحليل الفهرس المخزنة مؤقتًا في مُحسِّن ترتيب الربط كانت تُعامل خطأً على أنها إسقاط مطبّق. #110283 (Sergey Kuznetsov).
- إصلاح النتائج الخاطئة من الاستعلامات الفرعية ذات القيمة المفردة المترابطة عندما يحتوي الاستعلام الخارجي على قيم مكررة للعمود المترابط ويُفك ارتباط الاستعلام الفرعي عبر مسار CROSS JOIN. سابقًا، كانت التجميعات مثل
count()وsum()تُضرب في عدد التكرارات. يؤثر ذلك في الميزة التجريبيةallow_experimental_correlated_subqueries. #110311 (Groene AI). - إصلاح خطأ منطقي (
Function node with name '...' is not resolved as ordinary function) كان يمكن أن يحدث عند تفعيلoptimize_or_like_chainإذا ظهرت دالة تجميع أو دالة نافذة في الطرف الأيسر منLIKE/ILIKE/matchضمن سلسلةOR. #110641 (Groene AI). - إصلاح حالة كان فيها
TTL ... DELETE WHERE <cond>لا يحذف أبدًا الصفوف التي بدأت تطابق<cond>بسببALTER TABLE ... UPDATEعلى عمود مُشار إليه فيWHERE. يعيد التعديل الآن حساب TTL للصف، بحيث تُحذف الصفوف المنتهية الصلاحية التي أصبحت مطابقة حديثًا بدلًا من الاحتفاظ بها بصمت. #110648 (Groene AI). - إصلاح تسرب في المحاسبة ضمن تتبع الذاكرة: عندما كان متعقب ذاكرة رئيسي يرفض تخصيصًا (مثل حد الذاكرة على مستوى الخادم)، كانت المتعقبات على مستوى الخيط والاستعلام والمستخدم تحتفظ بالمقدار المرفوض. كان الخطأ يتراكم بمرور الوقت، مما يضخم
MemoryTrackingواستخدام الذاكرة لكل استعلام ولكل مستخدم، وقد يؤدي إلى أخطاءMEMORY_LIMIT_EXCEEDEDزائفة. #110784 (Seva Potapov). - إصلاح تسلسل WKB غير القياسي لمضلع فارغ: يُنتج
wkb(POLYGON EMPTY)الآنnumRings = 0بدلًا من حلقة زائفة واحدة تضم صفر نقاط، بحيث تحافظ عملية WKB ذهابًا وإيابًا لمضلع فارغ قياسي على هويته. #110796 (Groene AI). - يُصلح حالة فشل عند استخدام الأسماء المستعارة لأعمدة تعبير الجدول الشائع مع استعلامات
INTERSECTأوEXCEPT، مثلWITH t (a, b) AS (SELECT 1, 2 INTERSECT SELECT 1, 2) SELECT a, b FROM t، إذ كان الاستعلام يفشل بالخطأ UNKNOWN_IDENTIFIER. يُغلق #104770. #110885 (Yarik Briukhovetskyi). - أُصلح خطأ
std::length_error(LOGICAL_ERROR) عند قراءة جدول MergeTree باستخدام قيمة غير اعتيادية لـmax_streams_for_merge_tree_reading(قريبة من الحد الأقصى لـUInt64) معallow_asynchronous_read_from_io_pool_for_merge_tree = 1. يُقيَّد الإعداد الآن بالحد الأعلى نفسه الخاص بـmax_threads. #110936 (Groene AI). - يُصلح تعطلًا (إلغاء إسناد مرجع لمؤشر فارغ أثناء تحليل الاستعلام) عند استدعاء
getSubcolumnعلى وسيطةJSONذات اسم عمود فرعي لتلميح نوع داخلي، أي اسم يبدأ بعلامة نوع backtick. #110940 (Groene AI). - أُصلح الخطأ
Nested type LineString cannot be inside Nullable type (ILLEGAL_TYPE_OF_ARGUMENT)عند قراءة عمود مكاني قابل للقيم الفارغة من MySQL (LINESTRINGأوPOLYGONأوMULTILINESTRINGأوMULTIPOLYGONأوMULTIPOINTأوGEOMETRYالعام) عبر دالة الجدولmysqlأو محركات الجدول/قاعدة البياناتMySQL. تستخدم هذه الأعمدة الآنNullable(String)كبديل، للاحتفاظ بالقيمة كما تُرجعها MySQL (بادئة SRID بحجم 4 بايت، تليها حمولة WKB). ويظلPOINTمُعيّنًا إلىNullable(Point). #110943 (Groene AI). - يُصلح تسلسل
NativeلمُغلِّفاتSimpleAggregateFunctionالتي تحتوي على حالات تجميع ذات إصدارات للنظراء الأقدم. #110997 (Groene AI). - أُصلح الخطأ
LOGICAL_ERROR: ReadBuffer is canceled. Can't read from it.الذي قد يحدث في ربطgrace_hashعند فشل قراءة الكتل المُفرَّغة أثناء القراءة، بينما تشترك خيوط متعددة في القارئ. #111056 (Groene AI). - يُحتسب كل مفتاح SSH الآن بشكل منفرد ضمن حد
max_authentication_methods_per_user، لذا يُطبَّق الحد بصورة متسقة بغض النظر عن الصياغة. سابقًا، كانت المفاتيح المتعددة في أسلوبssh_keyواحد تُحتسب كمفتاح واحد. #111181 (Yecine Megdiche). - يُصلح خطأ
LOGICAL_ERROR(Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan) عند قراءة تعبير جدول شائع مُجسَّد معاد استخدامه (enable_materialized_cte) في فرع يُتجاهل فيه مخرجWITH TOTALSأوextremes، بما في ذلك التجميع الخارجي وINSERT ... SELECTوعمليات المجموعات وEXPLAIN ANALYZE. #111194 (Groene AI). - أُصلح
map[key]الذي كان يُرجع قيمة مفتاح مكرر لاحق بدلًا من الأول. عندما يحتوي عمودMapعلى مفاتيح مكررة، قد تعتمد نتيجةmap[key]على الصفوف السابقة في الكتلة نفسها وعلى إعدادoptimize_functions_to_subcolumns، لذا قد تختلف نتائجSELECTوWHEREللصف نفسه. #111246 (Groene AI). - إصلاح خطأ منطقي
!rhs_literal->getValue().isNull()في مُحسِّن التعبيرات المنطقية عند مقارنة سلسلةANDعمودًا بثابت قيمته NULL ومن نوع غيرNullable(مثلVariantبقيمة NULL)، معuse_variant_default_implementation_for_comparisons = 0. #111292 (Groene AI). - إصلاح أخطاء
NOT_FOUND_COLUMN_IN_BLOCK/THERE_IS_NO_COLUMN(وكذلك نتائج خاطئة بصمت في بعض الإصدارات) فيRIGHT JOINعند تعيينparallel_replicas_min_number_of_rows_per_replicaوإسقاط عمود من الجدول الأيسر. #111332 (Groene AI). - أصبح
RESTOREينفذ الآن fsync لملفات الأجزاء المستعادة عندما يكونfsync_after_insertمفعّلًا في الجدول الوجهة، بحيث يصبح الجزء المستعاد مقاومًا لفقدان الطاقة بالقدر نفسه الذي يتمتع به الجزء المُدرج. سابقًا، كانت الملفات المستعادة تُكتب وتُغلق فقط (من دون تنفيذ fsync)، لذا قد يؤدي فقدان الطاقة مباشرةً بعد أن يعيدRESTOREالقيمةRESTOREDإلى تلف الأجزاء وترك الجدول فارغًا. #111378 (Groene AI). - إصلاح نافذة نادرة لفقدان بيانات Keeper على أقراص اللقطات المحلية: ينفذ مسار كتابة اللقطة الآن fsync لدليل اللقطة بعد إزالة وسم
tmp_، لذلك لم يعد فقدان الطاقة قادرًا على فقدان عملية إزالة الوسم مع الإبقاء على محتوى اللقطة. سابقًا، كان مثل هذا التعطل يجعل Keeper يتعامل مع لقطة سليمة ومتزامنة بالكامل على أنها غير مكتملة ويحذفها عند إعادة التشغيل، مما يؤدي إلى فقدان عمليات كتابة تم تأكيدها حتى معforce_sync=true. لا يشمل ذلك أقراص اللقطات المدعومة بتخزين الكائنات. #111397 (Groene AI). - إصلاح قراءة خارج الحدود (في إصدار الإنتاج) / خطأ منطقي (في إصدار التصحيح) في تحسين الإظهار الكسول، وخطأ منطقي في
Pipe::unitePipesلجداولMerge، عندما يترك تحسين القراءة المباشرة من فهرس النص عمودًا افتراضيًا غير مستخدم للفهرس في ترويسة القراءة لجدولMergeTreeيحوي عدة فهارسtext. #111467 (Groene AI). - إصلاح مشكلة كان فيها العمود الافتراضي
_timeفي دوال الجداولurl/urlClusterيساوي دائمًاNULLفي الإصدارات المبنية على musl، بسبب تحليل غير قابل للنقل لترويسة HTTPLast-Modified. #111619 (Konstantin Bogdanov). - إصلاح
LOGICAL_ERROR(Cannot create part with type Compact and storage type Full because table does not support polymorphic parts) الذي يحدث عندما يحمّل جدولMergeTreeجزءًا موجودًا مسبقًا من نوعCompactبينما تعطل إعداداته الحالية الأجزاء متعددة الأشكال (الدقة غير التكيفية). قد يحدث ذلك، على سبيل المثال، عندما يشارك جدول للقراءة فقط مسارًا على القرص مع جدول آخر ويعيد تحميل أجزائه عبرSYSTEM RESTART DISKأو عند بدء تشغيل الخادم. في إصدارات التصحيح وإصدارات sanitizer، يؤدي الاستثناء إلى إيقاف الخادم. #111626 (Groene AI). - إصلاح فشل
CREATE TABLE ... ENGINE = KeeperMapبسببCoordination error: No node, path .../metadata/drop_lock_versionعندما يُحذف جدول آخر على مسار Keeper نفسه بالتزامن. يتعامل الإنشاء الآن مع الشجرة الفرعية للبيانات الوصفية التي اختفت باعتبارها عملية تنظيف مكتملة، ثم يعيد المحاولة، كما يفعل بالفعل في الحالة نفسها بعد تعليمة واحدة. #111966 (Groene AI). - إصلاح حالة تسابق بين mutation في
ReplicatedMergeTreeوإزالة الأدلة المؤقتة القديمة، كان يمكن أن تؤدي إلى نشر جزء مُعدّل مع فقدان بعض ملفاته، مما يتسبب في فشل قراءة ذلك الجزء وجميع تعديلاته اللاحقة. #111992 (Alexey Milovidov). - إصلاح
quantileDeterministicوquantilesDeterministicوmedianDeterministicالتي كانت تُرجع نتائج مختلفة للبيانات نفسها عند كل تشغيل عندما يستخدم الاستعلام النسخ المتماثلة المتوازية أو جدولًا موزعًا أو تجميعًا خارجيًا، أو عند تخزين الحالات في جدول (بما في ذلك داخل قيمةDynamic). تحتفظ الحالات المكتوبة قبل هذا الإصدار باستخدام تهجئة النوع غير المُرقّمة بسلوكها السابق، إذ لا يمكن تغيير بنيتها. #112052 (Alexey Milovidov). - إصلاح إسقاط
serialize_string_in_memory_with_zero_byteمن خطة الاستعلام المُسلسلة. معserialize_query_plan = 1، كان يمكن لعنقود يعمل مع تعطيل هذا الإعداد أن يختلف فيه التمثيل النصي في الذاكرة بين البادئ والعقدة التي تنفذ الخطة بعد إلغاء تسلسلها، لأن الإعداد كان يُقرأ عند إلغاء التسلسل لكنه لا يُكتب عند التسلسل، وبالتالي كان يُضبط دائمًا على قيمته الافتراضية في العقدة المنفذة. #112131 (Groene AI). - إصلاح عرض إطار مكدس على أنه
?بدلًا من اسم دالته في رسائل السجل الفادحة وفي العمودtrace_fullمنsystem.crash_log. أثّر ذلك في إطارات الدوال العادية التي تُنسب شفرتها إلى ترويسة__functionalمن libc++، وهو أمر شائع في إصدارات الإصدار النهائي. #112152 (Alexey Milovidov). - إصلاح حالات فقدان الصفوف بصمت عندما يرشّح استعلام باستخدام
intDiv(constant, key)أوdivide(constant, key). يُبلغ تحليل المفتاح الأساسي والقسم عن اتجاه رتابة خاطئ لثابت مقسوم على عمود مفتاح، فتُستبعد الحبيبات المطابقة ويُرجع الاستعلام عددًا أقل من الصفوف دون خطأ. يصلح أيضًاintDivمع مقسوم ثابت غير موقّع تكون بتّه العليا مضبوطة، ويمنع اعتبار العملية رتيبة عندما يجعل معاملDecimalالقسمة تُحسب بالعرض الأصلي للعدد العشري، ويمنع تحليل المفتاح من إصدارCannot compare DB::IPv4 with longلاستعلام صالح يقسم ثابتIPv4/IPv6على عمود مفتاح. #112156 (Groene AI). - إصلاح تعليق
DROP TABLE ... SYNCإلى الأبد عندما كان استعلام علىsystem.replicasقد أُنهي قبل معالجة طلبات الحالة الخاصة به. #112164 (Nikolay Degterinsky). - إصلاح إنهاء الخادم (
SIGABRT) عندما تُرجع دالة WebAssembly UDF من نوعBUFFERED_V1مخزن نتائج مؤقتًا فارغًا؛ يفشل الاستعلام الآن بخطأWASM_ERRORيمكن التقاطه، ويظل الخادم قيد التشغيل. #112182 (Nikolai Ovchinnikov). - إصلاح استخدام الذاكرة بعد تحريرها عندما كان
JOINمعjoin_algorithm = 'direct'على قاموس يتلقى مفتاح ربط مخزنًا بتسلسل متفرق. كانتgetColumnVectorDataتُرجع مرجعًا إلى عمود مؤقت، لذا كانت عملية البحث في القاموس تقرأ ذاكرة محررة: قد تُرجع إصدارات الإصدار النهائي نتائج خاطئة، بينما كانت إصدارات التصحيح أو sanitizer تتوقف. #112327 (Groene AI). - إصلاح حالات لم تُطبّق فيها سياسة الصفوف على إسقاطات MergeTree أثناء تنفيذ الاستعلام. #112329 (Yarik Briukhovetskyi).
- تم إصلاح تلف البيانات عند الإدراج في جدول Iceberg يتم الوصول إليه عبر
MATERIALIZED VIEW. كان ملف البيانات يُكتب باستخدام أنواع أعمدة الهدف وقتCREATEبدلًا من مخطط Iceberg الحالي، لذا كانت قيمةDateTimeتُخزَّن كقيمة Avrointمجردة وتُقرأ لاحقًا على أنها ميكروثوانٍ، بينما تعذرت قراءة الملف نهائيًا معDateTime64(0)أوDateTime64(9). ونتيجة لذلك، أصبحINSERT INTO <materialized view>على هدف يكون مخطط Iceberg الخاص به أوسع من الأعمدة المعلنة للعرض يطلق الآن الخطأTYPE_MISMATCHبدلًا من كتابة صف تالف. #112359 (Groene AI). - لم يعد Keeper يرفض طلب
Setذا البيانات الفارغة عندما يتجاوزmax_memory_usage_soft_limit. فلا يمكن لمثل هذا الطلب زيادة كمية البيانات المخزنة، وكان رفضه يمنع العملاء من إعادة إنشاء جلستهم، ما قد يُبقي الجداول في وضع القراءة فقط طوال مدة حدث الذاكرة في Keeper. #112386 (Shaohua Wang). - تم إصلاح مشكلة خروج تابع Keeper من النصاب لفترة طويلة، ما كان يتسبب في أخطاء
Session expiredجماعية، بعد تثبيته بنجاح لقطة كبيرة: كان القائد يتجاهل إقرار التابع إذا استغرق تطبيق اللقطة وقتًا أطول من مهلة تثبيت اللقطة، ثم يُرجع فهرس سجل ذلك التابع بمقدار إدخال واحد في كل رحلة ذهاب وإياب. أُضيف أيضًا إعداد Keeper nuraft_snapshot_sync_ctx_timeout_msللتحكم في هذه المهلة، التي لم يكن يمكن تغييرها سابقًا إلا عبرraft_limits_response_limit، وبالتالي لم يكن ذلك ممكنًا دون إبطاء اكتشاف النظراء المتوقفين أيضًا. #112405 (Shaohua Wang). - إصلاح سباقات البيانات في أحداث الملف التعريفي ومتتبع الذاكرة. #112466 (Miсhael Stetsyuk).
- إصلاح خطأ متعلق بالأمان. #112479 (Kseniia Sumarokova).
- إصلاح قراءة فهرس ثانوي قديم (فهرس تخطٍّ) بعد تغيير نوع عبر
ALTER TABLE ... MODIFY COLUMNلم تُنفَّذ العملية التحويرية الخاصة به مطلقًا، مثلًا لأنKILL MUTATIONأزالها: كانت الحبيبات على القرص تُكتب بالنوع القديم، لكن تُفك شفرتها بالنوع الجديد، ما يؤدي إلى إطلاقLOGICAL_ERRORأو طلب تخصيصات بحجم عدة إكسابايت أو إرجاع نتيجة خاطئة بصمت. ويصلح أيضًا النتائج الخاطئة من فهرس فوق تعبير يتغير معناه رغم بقاء جميع البايتات المخزنة متطابقة، فلا تُنشأ أي عملية تحوير إطلاقًا، مثلMODIFY COLUMNالذي يغير المنطقة الزمنية لـDateTimeفقط، أو اسم نوع مخصص فقط، مثل تغييرUInt8إلىBool. يُتخطى هذا الفهرس الآن للجزء المتأثر. يغلق #112213. #112484 (Groene AI). - تم إصلاح تعطل عند قراءة ملف Parquet ذي بيانات وصفية غير متسقة لمرشح bloom. وكان يمكن لهذه الملفات أيضًا أن تعيد بصمت عددًا من الصفوف أقل مما ينبغي. #112498 (Shaohua Wang).
- إصلاح سباق بيانات في
readBigAtضمن AsynchronousBoundedReadBuffer. يغلق #109678. #112573 (Kseniia Sumarokova). - إصلاح عدم ظهور قائمة الأسماء المستعارة للأعمدة، مثل
(SELECT 1) AS t(x)أوWITH t(x) AS (SELECT 1)، داخل دالة الجدولview، إذ كان المرجع إلىt.xيفشل بالخطأUNKNOWN_IDENTIFIERرغم أن البنية نفسها تعمل خارجview. #112690 (Groene AI). - أُصلح الخطأ المنطقي
SortingAggregatedTransform already got bucket with number Nالذي قد يحدث في استعلاماتGROUP BYالموزعة متعددة الطبقات التي تستخدم التجميع ثنائي المستوى. #112794 (Nikita Taranov). - أُصلحت مشكلة كانت تؤدي إلى توقف جدول
NATSالمعيَّن لهnats_streamعن استهلاك أي بيانات بصمت بعد إعادة تشغيل خادم NATS. يُعاد الآن إنشاء اشتراكJetStreamتلقائيًا بدلًا من الحاجة إلىDETACH TABLEوATTACH TABLE. #112828 (Groene AI). - أُصلح تصنيف خطأ عابر في Azure Blob Storage على مسار القراءة أو الدمج — مثل
403 Forbiddenأثناء نشر صلاحيات RBAC، أو فشل مصادقة بيانات الاعتماد، أو مهلة اتصال تظهر كـ408— على أنه غير قابل لإعادة المحاولة والإبلاغ عنه كـPOTENTIALLY_BROKEN_DATA_PART(الرمز 740)، مما كان يطلق تنبيهًا حرجًا خاطئًا لجزء بيانات سليم. تُعامل هذه الإخفاقات العابرة الآن على أنها قابلة لإعادة المحاولة، بينما يظهر الإخفاق المستمر فعليًا كخطأ Azure عادي بدلًا من جزء بيانات معطوب وهمي. #112871 (Arsen Muk). - أُصلح عدم تسجيل حذف الكائنات دفعيًا في Azure لأي أحداث Delete في
system.blob_storage_logعند فشل طلب الدفعة نفسه، مما كان يترك الدفعة بأكملها دون تسجيل. يُسجَّل الآن حدث Delete لكل كائن عند حدوث فشل على مستوى الدفعة. #112873 (Arsen Muk). - أُصلح فقدان فهرس MinMax لكل جزء على
_block_numberو_block_offsetبعد إعادة تحميل جدول، عندما يكون الجزء ناتجًا عن عملية mutation لا تعيد كتابة الجزء بأكمله. #112878 (Alexey Milovidov). - أُصلح خطأ منطقي ونتائج غير صحيحة عندما يحتوي شرط
JOIN ONغير متكافئ، يُقيَّم أثناء الربط، علىarrayJoin. ترفض الآن عمليات الربطhashأوparallel_hashأوgrace_hashهذا الشرط معINVALID_JOIN_ON_EXPRESSION. إذا كان التوسيع يعتمد على جانب واحد فقط، فانقله إلىARRAY JOINفي استعلام فرعي قبل الربط؛ أما إذا كانت وسيطةarrayJoinتقرأ أعمدة من كلا الجانبين، فيجب إعادة هيكلة الشرط. #112889 (Groene AI). - أُصلحت النتائج غير الصحيحة لـ
ORDER BYعند القراءة من جدولMergeفوق جداولDistributed: إذ كان يمكن إرجاع الصفوف بترتيب غير صحيح، وقد تغيب صفوف ينبغي أن تظهر في النتيجة عند استخدامLIMIT. #112931 (Alexey Milovidov). - أُصلح تحويل ثابت
Boolفي الطرف الأيمن منINإلىStringفي الطرف الأيسر بصيغة'1'/'0'بدلًا من الصيغة القياسية'true'/'false'، ليصبح متسقًا معCASTودالة الجدولvalues. #113051 (Yakov Olkhovskiy). - أُصلح عمود
viewsفيquery_logلعمليات الإدراج في جدولAliasالذي يؤدي هدفه إلى تشغيل العروض المادية، إذ كان فارغًا دائمًا. #113076 (Enric Calabuig). - أُصلح
LOGICAL_ERRORعند قراءة جدول يحتوي على فهرس تخطٍّsetمعرّف على تعبير، ويكرر الاستعلام هذا التعبير بمعاملNullable، مثلWHERE intDiv(id, (SELECT 1000)) = 3معINDEX b_set intDiv(id, 1000) TYPE set(100). ويكفي استعلام فرعي قيَمي لإثارة الخطأ، لأنه من النوعNullable. #113244 (George Larionov). - إصلاح خطأ منطقي (استثناء)
Chunk info was not set for chunk in MergingAggregatedTransformعند تفعيل الإعدادinject_random_order_for_select_without_order_byوقراءة استعلام تجميعي من جدولMergeيحتوي على جدول فرعيDistributed: لم يعد الغلاف العشوائيORDER BY rand()يُحقن في الاستعلامات التي لا تُخطط إلا حتى مرحلة وسيطة. #113266 (Alexey Milovidov). - إصلاح توقف في تحسين خطة الاستعلام عندما تحتوي عبارة
WHEREعلى ثابت سلسلة كبير يحوي نقاطًا كثيرة، ويحتوي الجدول على فهرس تخطٍ من نوعbloom_filterأوtokenbf_v1أوngrambf_v1أوtext. كانت مطابقة اسم عمود التصفية مع أعمدة الفهرسJSONAllPaths(...)تُعدِّد جميع التقسيمات الممكنة للاسم عند كل نقطة، مما جعل بناء شرط فهرس التخطي ذا تعقيد تربيعي بالنسبة إلى طول الثابت. يغلق #113003. #113289 (Groene AI). - إصلاح
ATTACHلجدولKafkaعندما يتجاوزkafka_num_consumersالحد المستمد من عدد أنوية CPU. #113390 (Nikolay Degterinsky). - إصلاح تعليق دائم في
DROP TABLEوتسرب للذاكرة بعد فشل استعلام يستخدم تعبير جدول شائع مُجسَّد. كان الجدول يبقى عالقًا في قائمة انتظار الحذف حتى إعادة تشغيل الخادم. #113397 (Shaohua Wang). - إصلاح خطأ منطقي
IDENTIFIER is not a table expressionعند استخدام دالة جدول من عائلة remote مع وسيطةview(...)على الجانب الأيسر منJOIN ... USING، عندما يكون مفتاحها اسمًا مستعارًا في قائمةSELECT، معanalyzer_compatibility_join_using_top_level_identifier = 1. #113400 (Groene AI). - إصلاح قراءة جداول
Paimonالمقسمة حسب عمودTIMESTAMPبدقة أعلى من المللي ثانية، والتي كانت تفشل بالرسالةscale 6 is not supported, only support scale <= 3. يغلق #112768. #113401 (JIaQi Tang). - إصلاح خطأ segfault وخطأ
LOGICAL_ERROR(No host found for exchange stream final_result__0_0) عندما يضبط استعلام فرعيdistributed_plan_execute_locallyفي عبارةSETTINGSالخاصة به ضمنmake_distributed_plan. كانت الخطة الموزعة والرمز الذي ينفذها يقرآن الإعداد من سياقين مختلفين وقد يختلفان، مما أدى إلى إنشاء المُبادِر مسار تنفيذ متناقضًا ذاتيًا. #113422 (Groene AI). - إصلاح قراءة جداول
Paimonالتي تحتوي على عمودARRAYأوMAPقابل للقيم الخالية. لم يكن بالإمكان قراءة هذا الجدول إطلاقًا، لأن معيّن المخطط كان يغلّف النوع المركب فيNullable، وهو ما لا يسمح به ClickHouse، لذا كان كل منDESCوSELECTيفشلان بالرسالةNested type Array(Nullable(Int32)) cannot be inside Nullable type. يُعيَّن الآن العمود المركب القابل للقيم الخالية إلى نوع مركب غيرNullable، وتُقرأ قيمةNULLكقيمة فارغة. يغلق #113337. #113450 (Groene AI). - إصلاح تقليم الأجزاء والحبيبات لشرط
JOIN ONيتضمن أعمدة ثابتة من الجانب الآخر. #113484 (Vladimir Cherkasov). - أُوقفت كتابة جزء يكون فيه تخطيط
Mapمتعارضًا مع بياناته الوصفية، وذلك لقيمةMapداخل عمودDynamic. كانت الجداول التي لا تختلف إلا فيmap_serialization_versionتشترك في كائن تسلسل واحد مخزّن مؤقتًا، لذا كان يمكن أن يحصل الجزء على تخطيطMapbasicبينما تشير بياناته الوصفية إلىwith_buckets، فتفشل قراءته لاحقًا بالخطأLOGICAL_ERROR: Stream ...buckets_info ... is not found. تظل الأجزاء التي كتبتها إصدارات سابقة بهذه الطريقة غير قابلة للقراءة ويجب حذفها. #113514 (Groene AI). - أُصلح اعتماد نوع العمود المستنتج على ترتيب الاستعلامات السابقة لمصدر يُخزَّن مخططه مؤقتًا. كانت الإعدادات التي تغيّر نوعًا مستنتجًا غائبة عن مفتاح ذاكرة التخزين المؤقت لاستنتاج المخطط، لذا كانت قيمة الاستعلام الأول تحدد النوع الذي تراه جميع الاستعلامات اللاحقة:
input_format_try_infer_exponent_floatsوmax_parser_depthوinput_format_json_infer_array_of_dynamic_from_array_of_different_types، وبالنسبة إلىParquetأيضًاinput_format_parquet_local_time_as_utcوinput_format_parquet_allow_geoparquet_parserوinput_format_parquet_skip_columns_with_unsupported_types_in_schema_inferenceوschema_inference_make_json_columns_nullable. كما سُجّلت دالة جلب مفتاح ذاكرة التخزين المؤقت المفقودة لـForm، وأصبحت دالة جلبTemplateتستخدم قاعدة الإفلات الخاصة بتنسيق الصفوف. #113533 (Groene AI). - أُصلح سباق بيانات نظري في أحداث ملف التعريف عند استخدام إعداد
trace_profile_events_listلكتابة تتبعات المكدس لبعض أحداث ملف التعريف إلىsystem.trace_log. #113553 (Miсhael Stetsyuk). - أُصلح قبول
RENAME DATABASEلاسم هدف طويل بما يكفي لجعل حذف جداول قاعدة البيانات مستحيلًا. أصبح فحص طول اسم الجدول يُنفّذ الآن بغض النظر عنcheck_table_dependencies، ويشمل أيضًا الجداول المنفصلة التي لم تكن تُفحص من قبل، ولذلك كانت متأثرة حتى بالإعدادات الافتراضية. يغلق #101747. #113557 (Groene AI). - أُصلح الخطأ
LOGICAL_ERRORReading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query planالذي كان يظهر عندما يقرأ جدولMergeله أكثر من جدول تابع تعبير جدول شائع ماديًا يشير إليه الاستعلام الخارجي. #113558 (Alexey Milovidov). - أُصلح تقييم سياسة صف تحتوي على استعلام فرعي قيَمي مرة واحدة فقط، ثم إعادة استخدام نتيجته إلى الأبد بعد قراءة الجدول عبر جدول
Merge. تُخزَّن حالة السياسة المحللة مؤقتًا وتُشارك بين جميع الاستعلامات، وكانت قراءتها عبرMergeتعيد كتابة التعبير المخزّن مؤقتًا في موضعه، ما تسبب أيضًا في سباق بيانات بين الاستعلامات المتزامنة التي تستخدم السياسة نفسها. #113563 (Alexey Milovidov). - أُصلح الخطأ
Unsupported JOIN keys of type keys256 in StorageJoinعند قراءة جدول بمحركJoinيكون مفتاحه مركبًا من عدة أعمدة، أو قيمة واحدة بحجم 16 أو 32 بايت مثلUUIDأوInt256أوFixedString(4). كان يمكن إنشاء مثل هذا الجدول والكتابة إليه وإجراء join معه، لكن لم يكن بالإمكان قراءته مجددًا باستخدامSELECT. يغلق #74362 و#77394. #113578 (Groene AI). - في واجهة الويب، لم يعد فتح رابط يتضمن
run=1يؤدي إلى تشغيل الاستعلامات تلقائيًا من عناوين URL الخاصة بعلامات التبويب الأخرى عند إعادة تحميل الصفحة التالية. #113595 (Alexey Milovidov). - أُصلح خطأ منطقي عند مقارنة مصفوفات يكون نوع عناصرها
Nothing. #113609 (Groene AI). - تُبلغ النسخ الاحتياطية الآن عن خطأ الوصول الفعلي إلى ملف القفل بدلاً من الإبلاغ خطأً عن نسخة احتياطية متزامنة عندما يتعذر على وحدة التخزين الوجهة قراءة ملف
.lock. #113637 (Kirill Shokhin). - إصلاح خطأ منطقي
Sending a distributed query with unknown (zero) client versionعند إرفاق أو تحميل جدولDistributedبلا بنية فوق جزء موزع بعيد من بيانات تعريف كتبها إصدار أقدم من الخادم. #113675 (Alexey Milovidov). - التعامل مع بايت NUL كمحرف حرفي عادي في أنماط
match(). #113690 (Vitaly Baranov). - إصلاح
theilsUضمن إطار نافذة، إذ كان يعيد قيمة عشوائية بدلاً من 0 عندما تكون الوسيطة الأولى ثابتة ضمن الإطار. #113691 (Alexey Milovidov). - إصلاح
Logical error: Duplicate announcement received for replica number Nعندما تعتمد النسخ المتماثلة المتوازية التلقائية (automatic_parallel_replicas_mode) خطةً قُسّم متغيرها أحادي العقدة إلى أجزاء موزعة بواسطةquery_plan_join_shard_by_pk_ranges. #113730 (Alexey Milovidov). - إصلاح
CANNOT_CONVERT_TYPEواستثناء فيGroupingAggregatedTransformعند قراءة جدولMergeيكون أحد جداوله الفرعية جدولDistributedضمن النسخ المتماثلة المتوازية ذات المفتاح المخصص (parallel_replicas_mode = 'custom_key_sampling'أو'custom_key_range'). يغلق #113741. #113742 (Alexey Milovidov). - إصلاح
LOGICAL_ERRORعند استخدامSELECTلمُعدِّلSTREAMعلى جدول مُسمّى مع النسخ المتماثلة المتوازية في وضع مهام القراءة. عند استخدام تعبير الجدول الشائع المُجسّد كمجموعةINفيPREWHERE، كان الخادم يثيرReading from materialized CTE ... DelayedPortsProcessor gate is missing in the query plan(ويتوقف الخادم في إصدارات التصحيح وإصدارات sanitizer). يُرفض الآن جدول يحملSTREAMعند طلب النسخ المتماثلة المتوازية: عندenable_parallel_replicas = 2يفشل الاستعلام بـSUPPORT_IS_DISABLED، وعند1يُنفّذ من دونها، تماماً كما يحدث معFINAL. #113754 (Groene AI). - إصلاح تعطل الخادم عند إجراء
JOINبتعبيرONثابت مع جانب أيمن يحتوي علىARRAY JOIN. إذ كانت قراءة عمود مُنسخ بتكاسل من الجانب الأيمن تستخدمColumnReplicatedمُحرَّراً. يغلق #113859. #113901 (Groene AI). - إصلاح السلوك غير المعرّف والنتائج الخاطئة في
avgعلىDate/DateTime/DateTime64/Time/Time64: يُحسب المتوسط الآن بدقة باستخدام الأعداد الصحيحة، ما يصلح تجاوز السعة عند حدInt64(UB، ونتيجة خاطئة على x86) وفقدان دقةFloat64فوق 2^53 (الظاهر على مقياس النانوثانية). #113912 (Alexey Milovidov). - إصلاح النتائج الخاطئة في
JOINمعjoin_algorithm = 'partial_merge'عندما يحتوي الجانب الأيمن على المجاميع: إذ كان يمكن أن يبقى الجانب الأيمن غير مدموج، فتستبدل عملياتLEFTJOIN القيم الافتراضية بالمطابقات الفعلية، ولا تعيد عملياتINNER/RIGHTJOIN أي صفوف. وفي مسارRIGHT/FULLغير المنضم، كانت الحالة نفسها تفك مرجع مؤشر فارغ، ما يؤدي إلى تعطل الخادم. #113936 (Groene AI). - تم إصلاح عيب في تكاملات
MySQLكان يسمح بتجاوز بيانات اعتماد TLS لمجموعة مسمّاة بقيمة فارغة لـssl_ca_pem/ssl_cert_pem/ssl_key_pemعندما كانت المجموعة تخزن بيانات الاعتماد بصيغة المحتوى، ما يؤدي بصمت إلى إسقاط CA أو شهادة العميل المُعدّة بدلًا من رفض التجاوز. #113947 (Alexey Milovidov). - إصلاح استثناء
std::out_of_range(Logical error: 'std::exception. Code: 1001, type: std::out_of_range'، والذي يؤدي أيضًا إلى إيقاف الخادم في إصدارات التصحيح وإصدارات sanitizer) في قارئ Parquet v3، عندما كان يُجدوَل فك ترميز عمود مطلوب فقط لتقييم عامل التصفية بعد أن كانت خانة الإخراج الخاصة به قد أُسقطت بالفعل. #113956 (Groene AI). - إصلاح خطأ منطقي (
Unexpected return type) عند دفع عامل تصفية إلى التخزين لعرض يختلف نوع عموده عن التخزين الأساسي (مثلinformation_schema.tables، حيث يكونengineمن النوعNullable(String)، فوقsystem.tablesحيث يكون من النوعString). #113984 (Alexey Milovidov). - إصلاح مشكلة تمنع ClickHouse Keeper من البدء مع
CORRUPTED_DATAبعد تعطل أثناء اقتطاع سجل Raft عبر المقاطع (writeAt)؛ إذ كان ذلك قد يترك إدخال سجل مؤكّدًا عالقًا خلف مقاطع قديمة من سجل التغييرات. #114003 (Nishant Agarwal). - أصبح يُرفض الآن جدول أو قاعدة بيانات يُستبدل اسمها في مسار ZooKeeper لـ
ReplicatedMergeTreeعبر الماكرو{database}أو{table}إذا لم يكن الاسم مكوّن مسار آمنًا واحدًا. سابقًا، كان الاسم الذي يحتوي على/يُدرج دون تهريب، ما يؤدي إلى تسجيل الجدول لعُقد znode الخاصة به ضمن الشجرة الفرعية لـ Keeper لجدول آخر وتعطيلALTERوOPTIMIZEفيها بشكل دائم. كما تُرفض المكوّنات.و..وأحرف التحكم وبنية الماكرو. وتستمر الجداول الحالية في التحميل والإرفاق. #114006 (Groene AI). - إصلاح تسرّب للذاكرة مع
optimize_aggregation_in_order = 1عندما يكون مفتاح فرز الجدول بادئة فعلية لمفتاحGROUP BYوتُستخدم دالة تجميعية تمتلك حالتها ذاكرة كومة، مثلquantileDD. كانت ذاكرة الخادم تزداد مع كل استعلام من هذا النوع حتى إعادة التشغيل. #114010 (Groene AI). - إصلاح خطأ منطقي عندما تحتوي خطة تنفيذ استعلام موزّع على دالة نافذة تنتج حالة دالة تجميعية، مثل
theilsUState(a, b) OVER (ORDER BY a)معmake_distributed_plan = 1. يؤثر ذلك في عائلاتcramersVوcramersVBiasCorrectedوtheilsUوcontingency. #114020 (Groene AI). - إصلاح نتائج خاطئة لـ
SELECT DISTINCTمعLIMITيتطلب قراءة كامل مدخلاته: كانLIMIT n WITH TIESيُسقط الصفوف المتعادلة، وكانexact_rows_before_limit = 1يُبلغ عن قيمة مبتورة لـrows_before_limit_at_least، وكانGROUP BY ... WITH TOTALSيحسب صف الإجماليات من بادئة التدفق. #114025 (Groene AI). - تم إصلاح تجاهل
isProbablePrimeعلىUInt128/UInt256لـmax_execution_timeوKILL QUERY. كانت كتلة من القيم كبيرة العرض تُنفّذ حتى الاكتمال ضمن استدعاء دالة واحد دون نقطة إلغاء، لذا كان يمكن أن يستمر الاستعلام لدقائق بعد تجاوز موعده النهائي. #114032 (Groene AI). - يُصلح صفًا مفقودًا في
system.query_views_logلعرض مادي يفشل أثناء جمع تبعياته عند تفعيلmaterialized_views_ignore_errors. وفي إصدارات التصحيح وsanitizer، كان هذا يؤدي أيضًا إلى إجهاض الخادم باستخدامstd::out_of_rangeبدلًا من تسجيل العرض. #114064 (Groene AI). - أُصلح الخطأ
Code: 46. DB::Exception: Unknown function exists. (UNKNOWN_FUNCTION)الذي كان يحدث عندما تحتوي عبارةPREWHEREعلى شرطIN (subquery)ويُضبطrewrite_in_to_join = 1(أوmake_distributed_plan = 1، الذي يفعّله قسرًا). وكان الاستعلام نفسه عند كتابته باستخدامWHEREيعمل بصورة صحيحة. #114067 (RohithPariki). - أُصلح
ORDER BY ... LIMITالذي كان يعيد صفوفًا أقل من المطلوب، أو قد لا يعيد أي صفوف، عندما كانت سياسة الصف هي مرشح الاستعلام الوحيد وكان عمود الفرز يحتوي على فهرس تخطٍّ من نوعminmax. كان تحسين أعلى K يقيّد القراءة قبل تطبيق سياسة الصف. #114073 (Alexey Milovidov). - يُصلح
hasAnyوhasAllوhasوindexOfوmapContainsKeyوmapContainsValueوmapContainsالتي كانت تعيد صفوفًا أقل من اللازم، أو تفشل بالخطأTOO_LARGE_STRING_SIZE، عند الاستعلام عن فهرسbloom_filterباستخدام ثابتFixedString. كان الفهرس يحسب تجزئة الشكل المحشو للثابت، بينما تقارن الدالة الشكل غير المحشو، مما أدى إلى تخطي حبيبة مطابقة. #114089 (Alexey Milovidov). - أُصلح الخطأ
LOGICAL_ERROR“Not-ready Set is passed as the second argument for functionglobalNullIn” وفقدان رسالة الخطأ الفعلية للاستعلام، اللذان كانا قد يحدثان عندما ينفّذ تقليم الأجزاء بالإحصاءات استعلامًا فرعيًاIN/GLOBAL INاستباقيًا أثناء تحليل الفهرس ويفشل ذلك الاستعلام الفرعي. #114121 (Groene AI). - احترم إعداد
allow_calculating_subcolumns_sizes_for_merge_tree_readingفي تحسين PREWHERE. #114146 (Pavel Kruglov). - ارفض القاموس التالف أو الضار إذا تجاوز
lcpالرمز السابق أو حدث تجاوز فيlcp + data_size، قبل الكتابة إلى المخزن المؤقت. #114155 (Elmi Ahmadov). - أُصلحت
minوmaxعلى أعمدةDateTime64التي كانت تعيد نتائج خاطئة بعد تصريف التجميع عبر JIT إذا احتوت البيانات على طوابع زمنية قبل عام 1970. لم يكنis_signedمخصصًا لـDateTime64وTime64، اللذين يشتقان منDecimal64، لذا كانت الشيفرة المُولَّدة تقارن أعداد النبضات كأعداد صحيحة غير موقعة، فيفوز الطابع الزمني السابق لعام 1970 فيmaxويخسر فيmin. #114168 (Groene AI). - أُصلح استثناء عند قراءة جدول
MergeTreeباستخدام طبقات نطاق المفتاح الأساسي عندما تُنتج إحدى الطبقات مسارًا فارغًا. #114177 (Alexey Milovidov). - أُصلح رمز الخطأ المُبلّغ عنه لبعض الأعمدة ذات التسلسل
Replicatedالمشوّهة المستلمة عبر البروتوكول الأصلي: تُرفض هذه الآن باستخدامINCORRECT_DATAبدلًا منLOGICAL_ERROR(الذي كان يجهض الخادم في إصدارات التصحيح وsanitizer). #114186 (Pavel Kruglov). - إصلاح فشل
ATTACH PARTITION FROMوREPLACE PARTITIONوMOVE PARTITION TO TABLEوإضافة نسخة متماثلة منReplicatedMergeTreeمع ظهورTables have different ...أوMETADATA_MISMATCHأوINCOMPATIBLE_COLUMNSفي الجداول التي كُتبت تعريفاتها بأقواس زائدة، مثلPARTITION BY (a)وORDER BY (b)وINDEX ix (b * c) TYPE minmaxوPROJECTION p (SELECT (b) ...)وCONSTRAINT c CHECK (a > 0)وTTL (d + INTERVAL 10 YEAR)أوDEFAULT (a + 1). #114188 (Alexey Milovidov). - إصلاح عدم تضمين
ALPوFPCوGCDللمعلَمة المشتقة من النوع في تجزئة برنامج الترميز. في جزء Compact، يستخدم الكاتب تدفقًا مضغوطًا واحدًا مشتركًا لكل تجزئة مميزة لبرنامج الترميز، لذا تصادم عمودان بعرضَي قيم مختلفين يستخدمان برنامج الترميز نفسه، وتشاركا كائن برنامج ترميز واحدًا يحمل العرض الخاطئ. أدى ذلك إلى رفض عمليات الإدراج الصالحة معCANNOT_COMPRESSعند اختلاف العروض، أو إلى ضغط أحد الأعمدة بكفاءة أقل مما ينبغي. #114189 (Groene AI). - إصلاح الخطأ
std::out_of_range: map::at: key not foundعندما يحتوي تعبير مفتاحMergeTreeعلى استدعاء لـmortonEncodeأوhilbertEncodeلا يشكّل بحد ذاته عمود مفتاح، مثلORDER BY mortonEncode(hilbertEncode(x, y), x, y)أوPARTITION BY mortonEncode(x, y) % 4. #114233 (Groene AI). - إزالة LIMIT/OFFSET العاديين من استعلام مصدر الملء التاريخي لعرض النافذة. #114247 (Alexey Milovidov).
- إصلاح
LOGICAL_ERRORفيarrayAutocorrelationعندما تكون الوسيطة مصفوفة غير فارغة من عناصر نوعهاNothing، مثلSELECT arrayAutocorrelation([arrayMax([])]). تُرفض هذه الوسيطة الآن بالخطأILLEGAL_COLUMN. وتبقى قيمة المصفوفة الفارغة الحرفية[]تُرجع[]. #114249 (Groene AI). - إصلاح عدم انضمام خادم Keeper إلى المجموعة مطلقًا عند تفعيل
nuraft_use_bg_thread_for_snapshot_io: إذ كانت دفعة السجل المرسلة إلى خادم قيد الانضمام تُسقَط بصمت، لذلك لم يكتمل تغيير العضوية مطلقًا. #114275 (Shaohua Wang). - إصلاح قراءة
XDG_CACHE_HOMEمنXDG_STATE_HOME. #114278 (Alexey Milovidov). - تسجيل مساحة أسماء Iceberg في الكتالوج قبل كتابة ملفات الجدول (وهو مطلوب لـ SeaweedFS). #114285 (Azat Khuzhin).
- إصلاح النتائج غير المتسقة عند دفع مرشح على عمود غير مفتاح في الجدول الأيمن إلى ما دون ANY INNER JOIN. #114313 (Kirill Shokhin).
- إصلاح الإكمال التلقائي في bash مع bash-completion 2.12+ (_comp_get_words). #114339 (Azat Khuzhin).
- يُصلح تعطلًا عند قراءة جدول بحيرة بيانات يعرّف مخططه عمودًا باسم فارغ. تُرفض بيانات Iceberg الوصفية غير الصالحة بالخطأ
ICEBERG_SPECIFICATION_VIOLATION، ويُرفض المخطط الذي يوفّره كتالوج أو Delta Lake أو Paimon بالخطأAMBIGUOUS_COLUMN_NAME. يجري هذا الفحص دون قيد، لذا يصبح جدول Iceberg الذي يحتفظ فقط بمخطط تاريخي غير مستخدم ذي اسم حقل فارغ غير قابل للقراءة أيضًا، بدلًا من التعطل عند قراءة ذلك المخطط. #114394 (Groene AI). - يُصلح خطأً كان قد يؤدي إلى احتجاز عميل يتصل بـ ClickHouse Keeper أثناء تغيير قائد Raft طوال مدة
session_timeout_ms(30 ثانية افتراضيًا) قبل رفض اتصاله، بدلًا من رفضه فور إسقاط الطلب قيد الإرسال. يمكن للعميل المتصل الآن إعادة الاتصال بنسخة متماثلة أخرى في وقت أبكر. #114401 (Groene AI). - أصبح
BACKUPوRESTOREوENGINE = Backupيتحققون الآن من صلاحية موقع النسخ الاحتياطي وفقًا لمنحSOURCESالخاصة بالمستخدم، بالطريقة نفسها التي تعمل بهاs3()وfile()وazureBlobStorage(). سابقًا، كان يمكن لمستخدم يملكBACKUPدونSOURCESكتابة نسخة احتياطية إلى أي موقع يستطيع الخادم الوصول إليه وقراءة نسخة احتياطية منه. تتطلب كتابة نسخة احتياطية الآن صلاحيةWRITEعلى مصدر الوجهة (WRITE ON S3،WRITE ON AZURE،WRITE ON FILE)، بينما تتطلب قراءتهاREAD؛ وتبقى وجهاتDisk(...)مقيدة بـbackups.allowed_diskفقط. #114405 (Groene AI). - يُصلح تسرّب
CREATE OR REPLACEلجدول داخلي باسم_tmp_replace_*، وفشلCREATE OR REPLACE VIEWبالخطأNOT_IMPLEMENTEDعند تعيينignore_drop_queries_probability. إن عمليات DROP التي يُصدرها داخليًا هي خطوات ضمن عبارة مستخدم واحدة، لذا لم يعد حقن أخطاء DROP ينطبق عليها. #114420 (Groene AI). - أُصلح خطأ
LOGICAL_ERROR(Bad cast from type DB::ASTLiteral to DB::ASTPartition) وSQL منسق غير قابل للتحليل عند إقران أمرALTER TABLE ... MOVE، الذي فُك تسلسله من JSON AST (dialect = clickhouse_json)، بصيغةPARTمعTO TABLEأو بصيغةPARTITIONمعTO SHARD. تُرفض هذه الحمولات الآن بالخطأBAD_ARGUMENTS. #114429 (Groene AI). - لا تُزل الأعمدة عند الإشارة إليها في شرطي التصفية
PREWHEREوWHEREمعًا، حتى إذا أُعيدت كتابتها إلى عمود افتراضي لفهرس نصي. #114460 (Elmi Ahmadov). - أُصلح خطأ
Not-ready Set is passed as the second argument for function 'in'عند إلغاء عملية mutation يتضمن predicate الخاص بهاIN (subquery)، مثلًا بواسطةKILL MUTATIONأوDETACH DATABASE، بينما لا تزال مجموعة الاستعلام الفرعي قيد الإنشاء. ذو صلة: #107619. #114463 (Groene AI). - أصبح
ALTER TABLE ... DROP COLUMNلعمود مستخدم في مفتاح الفرز أو المفتاح الأساسي أو مفتاح التقسيم يفشل بالخطأALTER_OF_COLUMN_IS_FORBIDDENمع توضيح، تمامًا كما يفعلALTER TABLE ... CLEAR COLUMN. سابقًا، كان يفشل برسالة الخطأ المربكةUNKNOWN_IDENTIFIER: Missing columnsالناتجة عن إعادة حساب تعبيرات المفتاح. ينطبق الأمر نفسه على إسقاط أو مسح مجموعةNestedكاملة باستخدام بادئتها المشتركة عندما يُستخدم عمود من المجموعة في مفتاح؛ إذ كان ذلك سابقًا قد يدمر بيانات المجموعة بصمت أو يترك عملية mutation لا تنتهي أبدًا. يؤدي إسقاط عمود مستخدم فقط في تعبيرTTLالآن أيضًا إلى الإبلاغ عن تعبير TTL الذي يعطله. #114468 (Maksim Dergousov). - تم إصلاح قراءة عمود
Tupleيكون عنصره الأولNULLفي التنسيقاتCustomSeparatedوRegexpوTemplateباستخدام قاعدة الإفلاتCSV. يشغلTupleغير المغلّف حقلاً واحداً لكل عنصر في هذه التنسيقات، لذا فإن الحقل الأول\Nيمثل ذلك العنصر لا العمود بأكمله. سابقاً، كان يُستهلك باعتباره العمود بأكمله، مما يؤدي إلى إزاحة حقول العناصر المتبقية إلى الأعمدة التالية، ولذلك لم يكنCustomSeparatedيستطيع قراءة مخرجاته الخاصة. يغلق #114402. #114471 (Groene AI). - تم إصلاح إرجاع
arrayExists(x -> x = needle, arr)نتيجة خاطئة، أو فشله معTOO_LARGE_STRING_SIZE، عندما يكون عنصر المصفوفة والـ needle من أنواعStringمختلفة (على سبيل المثال، needle من نوعStringمقابل عنصر من نوعArray(FixedString(N))). كانت عملية التحسينoptimize_rewrite_array_exists_to_has، المفعّلة افتراضياً، تعيد كتابة هذا الاستدعاء إلىhas، الذي لا يقارن القيم المحشوة بأصفار بالطريقة نفسها التي يفعلها=. #114496 (Groene AI). - لم تعد قراءة جدول Iceberg تؤدي إلى إيقاف الخادم عندما تصف بياناته الوصفية تطوراً في المخطط تحظره مواصفة Iceberg. كان يُبلّغ عن أربعة انتهاكات للمواصفة في
IcebergSchemaProcessorباعتبارهاLOGICAL_ERROR، الذي يُعامل كتأكيد فاشل، أو كانت تصل إلى تأكيد قاتل دون تحقق؛ وهي الآن تثيرICEBERG_SPECIFICATION_VIOLATION. #114518 (Groene AI). - تم إصلاح قيام تنسيق الإدخال
Regexpبتجاهل الجزء غير المحلل من حقل مطابق بصمت، مما كان يؤدي إلى تخزين قيمة مقتطعة أو مختلقة بدلاً من الإبلاغ عن خطأ: كانت قراءةv=-1كـUInt64تعطي0، وقراءةv=2020-01-01junkكـDateتعطي1975-07-14وفق قاعدةJSON. تُرفض الآن الحقول غير الصالحة وفق قواعدEscapedوCSVوJSON، بما يتوافق مع التنسيقات الموثقة بأن هذه القواعد تحاكي سلوكها. وفقRaw، يُقرأ الآن الحقل المطابق الذي يحتوي على علامة تبويب كاملاً بدلاً من اقتطاعه عند علامة التبويب. #114520 (Groene AI). - تم إصلاح
LOGICAL_ERRORعند تصفية عمود Iceberg جعلتهALTER TABLE ... MODIFY COLUMNمن نوعNullable. يغلق #85029. #114521 (Groene AI). - أصبح
CREATE TABLEوALTER TABLEيرفضان برامج الترميز التي تسبب فقدان البيانات، مثلSZ3، في عمود مستخدم في مفتاح الفرز. #114531 (Groene AI). - تم إصلاح
LOGICAL_ERRORعند قراءة جدول Delta Lake يحدد فيهmetaData.partitionColumnsعموداً لا يعرّفهmetaData.schemaString. تُرفض هذه البيانات الوصفية الآن باستخدامBAD_ARGUMENTSفي قارئ delta-kernel وباستخدامINCORRECT_DATAفي القارئ القديم، كلما تمت قراءة الجدول أو مخططه من لقطة، وليس فقط عندما يتضمن الاستعلام predicate. #114538 (Groene AI). - رفض Variant تُقرأ فروع ORC الخاصة به كنوع واحد. #114540 (Groene AI).
- تم إصلاح تقييم فهرس النص للعامل
LIKE/ILIKEالمبني على حاويات Map أو JSON. #114544 (Elmi Ahmadov). - دعم أسماء التسميات المقتبسة في معدِّلات التجميع في PromQL.. #114545 (Minh Vu).
- يُصلح القيم الحرفية غير الصحيحة لـ
Time64وثوابت قائمةIN، التي غالبًا ما تكون إشارتها معكوسة، والناتجة عند إعادة تحجيمDecimal64ذي مقياس أقل بما يؤدي إلى تجاوزInt64. يُبلّغ هذا التحويل الآن عنDECIMAL_OVERFLOW، بما يتوافق مع فرعDateTime64وعبارةCASTالصريحة. #114546 (Groene AI). - قبول الفواصل الختامية في قوائم تسميات التجميع في PromQL. #114548 (Minh Vu).
- يدعم أسماء المقاييس والتسميات الموضوعة بين علامتي اقتباس في محددات PromQL. #114551 (Minh Vu).
- كان يمكن إلغاء استعلام قبل انقضاء
max_execution_timeبما يصل إلى 1 مللي ثانية، فيفشل برسالة متناقضة ذاتيًا:Timeout exceeded: elapsed 999.672 ms, maximum: 1000 ms. #114559 (Alexey Milovidov). - أُصلحت قراءة جدول أثناء تنفيذ mutation، إذ كان يمكن لعمود
MATERIALIZEDأن يعيد قيمة قديمة، كما كان اختيار هذا العمود مع عمود مُحدَّث قد يفشل بخطأ. #114561 (Shaohua Wang). - يُصلح قبول
clickhouse-localلعبارةCREATE TABLEيكون اسمها أطول من المسموح به في--default_databaseالمُهيأ، ما كان يؤدي إلى إنشاء جدول لا يمكن حذفه. يتحققDatabaseOverlayالآن من طول اسم الجدول كما تفعل قاعدة البيانات الموجودة على القرص التي يكتب إليها. #114567 (Groene AI). - أُصلح تجاوز لآلية RBAC في محرك الجداول
Aliasكان يسمح للمستخدمين الذين لا يملكون امتيازات على الجدول الهدف بكشف مخططه وعدد صفوفه وحجمه ووجوده. #114596 (Kai Zhu). - أُصلحت إحصاءات جدول التجزئة — ومعها التخصيص المسبق لجدول تجزئة التجميع — التي كانت تُعطَّل بصمت وبشكل دائم على مستوى الخادم بأكمله عندما كان استعلام يستخدم تحسين
FINALالكسول (query_plan_optimize_lazy_final) أول عملية تجميع تُنفّذ بعد بدء تشغيل الخادم. #114597 (Alexey Milovidov). - أُصلح عمود أُعيدت تسميته وحُذف ثم أُضيف مرة أخرى ضمن
ALTERواحد، إذ كان يعيد قيم العمود المحذوف بدلًا من قيمته الافتراضية بينما كانت mutation لا تزال معلقة. #114601 (Shaohua Wang). - أُصلحت حلقة لا نهائية وغير قابلة للإلغاء في الدالتين
hopوwindowIDعندما يكون مدى وسيطة interval بالثواني مضاعفًا لـ 2^32 (على سبيل المثال،toIntervalDay(2147483648)): إذ كان الطرح مع الالتفاف يتجاوز فحص تجاوز الوقت، ومع الوسيطات الثابتة كانت الحلقة تعمل أثناء التحليل، حيث لم يكن بالإمكان حتى قتل الاستعلام. وكان يمكن للفاصل الزمني نفسه أيضًا أن يجعل الخيط الخلفي لـWINDOW VIEWيدور إلى الأبد؛ ويُرفض الآن إنشاء window view كهذا. #114607 (Alexey Milovidov). - يُصلح خطأً يُخزَّن فيه access entity يحمل إعدادًا بقيمة
Map، مثل profile إعدادات يتضمنhttp_response_headersأوadditional_table_filters، بصيغة لا يستطيع ClickHouse قراءتها مجددًا، مما يجعل الكيان غير قابل للتحميل بشكل دائم بعد إعادة التشغيل. #114620 (Groene AI). - أُصلح تسرّب target table السابق في refreshable materialized view عند تفعيل
ignore_drop_queries_probability. إن عبارةDROPالتي يُصدرها التحديث لتنظيف الهدف السابق هي خطوة من عملية التحديث، وليستDROPطلبها المستخدم، لذلك لم يعد حقن الأعطال ينطبق عليها. #114622 (Groene AI). - إصلاح الدوال
hasوindexOfوcountEqualوmapContainsKeyوmapContainsValueوالفهرسة الفرعية لـMapالتي كانت تُرجع “غير موجود” عند استخدام قيمة ثابتة منLowCardinalityكإبرة تساوي القيمة الافتراضية لنوع العنصر، مثلStringفارغ أو الرقم صفر. #114624 (Groene AI). - إصلاح الخطأ المنطقي
Multi-block postings must be compressedفي الاستعلامات على الجداول ذات الفهرس النصي في وضع التطبيق الكسول لقائمة الترحيلات، عند إلغاء الاستعلام أثناء القراءة. #114636 (Anton Popov). - إصلاح تنسيق وسيط استعلام فرعي لدالتي الجدول
viewوviewIfPermittedعندما يحتوي الاستعلام المحيط على عبارةSETTINGSفي نهايته. كان هذا الاستعلام يُنسَّق كـview((SELECT ...))، وهو ما لا يمكن تحليله مجددًا، لذا كان يفشل في فحص التنسيق-التحليل-التنسيق الداخلي ويُطلق الخطأInconsistent AST formatting. #114658 (Groene AI). - إصلاح تلف ذاكرة الكومة عند قراءة Parquet عبر تنسيق إدخال يمتلك مخزن القراءة المؤقت الخاص به، مثل قاموس يحتوي على
SOURCE(FILE(... format 'Parquet')). كان بإمكان مهام الجلب المسبق وفك الترميز في الخلفية الاستمرار في القراءة والكتابة عبر المخزن المؤقت بعد أن يحرره خط الأنابيب، مما قد يؤدي إلى توقف الخادم. #114668 (Groene AI). - إصلاح قراءة عمود فرعي (
.size0أو.nullأو عنصر من tuple أوString.size) عبر جدولMergeعندما يعرّف الجدول الأساسي العمود الأب باعتبارهALIAS. كانت هذه القراءة تُرجع القيمة الافتراضية للنوع، وعند اختيار العمود الأب في الاستعلام نفسه، كان يمكن أن تُرجع قيمة عمود غير ذي صلة. #114673 (Groene AI). - إصلاح
ANY RIGHT JOINوSEMI RIGHT JOINعند وجود عدة شروط موصولة بـORفي قسمON، حيث كانت تُرجع بعض صفوف الجدول الأيمن مرتين وتفقد المطابقات لبعض الصفوف الأخرى. تأثر أيضًاANY LEFT JOINالمكتوب صراحةً، لأن المخطط قد يبدّل الجدولين وينفذه كـANY RIGHT JOIN. #114676 (Vladimir Cherkasov). - إصلاح النتائج غير الصحيحة لتحسين
GROUP BY ... LIMITالبسيط (الإعدادoptimize_trivial_group_by_limit_query) في الاستعلامات التي تتضمنDISTINCTأوQUALIFYأو دوال النوافذ أوarrayJoinفي الإسقاط: إذ تستهلك هذه العناصر المجموعات أو ترشحها بعد التجميع، لذا قد يؤدي تقييد التجميع بمفاتيحLIMIT + OFFSETإلى إرجاع عدد قليل جدًا من الصفوف أو قيم خاطئة. لم يعد هذا التحسين يُطبّق على مثل هذه الاستعلامات. #114695 (Alexey Milovidov). - إصلاح الصفوف المفقودة من نتيجة
SELECTالمُرشَّحة بواسطةpointInPolygonعلى مفتاح أساسي في MergeTree، عندما يكون وسيط المضلع قيمة حرفية ثابتة غير صالحة وvalidate_polygons = 0. استمد تحليل المفتاح الأساسي استبعاد الـgranule من مضلع لم يتحقق من صحته مطلقًا، فاستبعد granules تحتوي على صفوف مطابقة. #114710 (Groene AI). - إصلاح تعطل الخادم الذي يحدث عند دمج حالات التجميع لمركبي
-OrNullأو-OrDefaultمعgroup_by_overflow_mode = 'any'وقيمة غير صفرية لـmax_rows_to_group_by، مثلًا عندما يقرأ الاستعلام عبر إسقاط تجميعي. #114740 (Groene AI). - إصلاح
LOGICAL_ERROR(“Unexpected number of kept output positions after removing unused columns fromReadFromMergeTree”) الذي كان يُطلقهSELECT ... FINALعندما يستخدمPREWHEREعمودًا يحتاجهFINALللدمج (verأوis_deletedأوsign) دون اختيار ذلك العمود. #114746 (Groene AI). - إصلاح خطأ منطقي (
Block structure mismatch) عند قراءة جدولMergeمع تفعيلmake_distributed_planعبر العقد التابعة التي تتضمن عمليات مجموعات داخلية. #114753 (Alexey Milovidov). - رفض قيمة كبيرة بصورة غير معقولة لـ
kafka_num_consumersمع رسالة خطأ واضحة، بدلًا من فشل تخصيص الذاكرة داخل محرك الجداولKafka. سابقًا، عند تفعيلkafka_disable_num_consumers_limit، كانت هذه القيمة تؤدي إلى الاستثناءstd::length_error. #114764 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERROR: Context has expiredعند تقييم تعبير مخزّن يحتوي علىaccurateCastOrDefaultأو الدالةto<Type>OrDefaultبعد انتهاء الاستعلام الذي أنشأه، مثل القيمة الافتراضية لعمودMATERIALIZEDفيINSERTأو تعبير mutation. #114769 (Groene AI). - إصلاح
LOGICAL_ERROR(Cannot find input column ... on its position in inputs of expression actions DAG) عندما يتضمن استعلامJOINفوق جدول يُستخدم عموده المفهرس نصيًا في كلٍّ من مسندي البحث النصيPREWHEREوWHERE. #114771 (Groene AI). - إصلاح فقدان إشارة إيقاظ خيط إعادة التشغيل عند بدء التشغيل من خيط الإرفاق. #114802 (Azat Khuzhin).
- كان
OPTIMIZE TABLEعلى جدول لتخزين الكائنات لا يطبق محركه compaction يُبلغ عن نجاح العملية دون تنفيذ أي شيء. أصبح الآن يُصدر خطأً، مثل جميع المحركات الأخرى التي لا تدعم هذه العبارة. يؤثر ذلك فيDeltaLakeوPaimonوHudiومحركات تخزين الكائنات الأساسية (S3وGCSوCOSNوOSSوAzureBlobStorageوHDFSوURLالمدعوم بتخزين الكائنات)؛ أماIceberg، الذي يطبق compaction، فلم يتغير. يغلق #114765. #114805 (Groene AI). - كانت
timeSeriesRangeوtimeSeriesFromGridتُصدران خطأDECIMAL_OVERFLOWغير صحيح للطوابع الزمنية السابقة لعام 1970، لأن طوابعي البداية والنهاية الزمنيين كانا يُقرآن كقيم غير موقعة. كذلك، بالنسبة إلى الطوابع الزمنية من نوعDateTime/UInt32، كانت قيمة الخطوة تُقتطع بصمت إلى أدنى 32 بت. تُجرى الآن جميع الحسابات باستخدامInt64. #114815 (Vitaly Baranov). - إصلاح إجهاض للخادم (
Logical error: Part patch-... doesn't exist) عند تنفيذDROP TABLEبالتزامن معUPDATEخفيف على جدولReplicatedMergeTree. يحتفظ التحديث الآن بالقفل المشترك للجدول حتى يتم تثبيت جزء التصحيح الخاص به، لذا ينتظرDROPبدلًا من إزالته. #114826 (Groene AI). - إصلاح بعض الأخطاء في عمليات الإدراج غير المتزامنة (تعطل محتمل عند فشل بعض الاستعلامات بسبب
MEMORY_LIMIT_EXCEEDED، وعدم عملasync_insert_queue_flush_on_shutdownمطلقًا). #114839 (Azat Khuzhin). - تم إصلاح
LOGICAL_ERROR: Unexpected return type from tuple. Expected Tuple(..., UInt8). Got Tuple(..., LowCardinality(UInt8))عند قراءة عمودLowCardinalityمُقارَن بـIN (subquery)عبرtuple(...)عند تجاوز حدّ استعلام فرعي ومعenable_analyzer = 0. مع analyzer القديم، يعيدx IN (subquery)لعمودLowCardinalityالآن النوعLowCardinality(UInt8)، وهو نفس نوعx IN (literal list)ونفس النوع عند استخدامenable_analyzer = 1. #114856 (Nikita Fomichev). - كانت إعدادات حصة دوال الذكاء الاصطناعي (
ai_function_max_api_calls_per_query،ai_function_max_input_tokens_per_query،ai_function_max_output_tokens_per_query) تُطبَّق لكل كتلة بدلاً من كل استعلام، مما كان يسمح للاستعلام بتجاوز الحد المُهيأ بما يتناسب مع عدد الكتل والخيوط المعالَجة. وهي الآن تقيّد الاستعلام بالكامل على كل خادم: حد استدعاءات واجهة برمجة التطبيقات سقف دقيق (بحجز ذري)، بينما تُطبَّق حدود الرموز المميزة بأفضل جهد. يفرض الاستعلام الموزع الحدود بشكل مستقل على كل خادم/جزء مشارك. #114885 (George Larionov). - إصلاح إيقاف الخادم الذي يحدث عندما يكون مجمع الخيوط العام مشبعًا مؤقتًا بينما لا تزال الجداول قيد التحميل. يواصل
AsyncLoaderالآن العمل إذا تعذّر عليه إنشاء عامل تحميل إضافي وكان أحد العمال سيستمر في معالجة المهام الموضوعة في قائمة الانتظار، بدلاً من استدعاءstd::terminate. #114897 (Groene AI). - تم إصلاح سلوك غير معرّف ونتائج حدودية غير صحيحة في
quantileوquantilesلقيمDateTime64وقيمDecimalذات العرض الكبير. #114919 (Alexey Milovidov). - إصلاح إيقاف الخادم عند وجود تذييل شريط ORC تالف. #114924 (Groene AI).
- إصلاح تعطل محتمل بسبب استخدام ThreadGroup بعد تحريره (في عمليات INSERT غير المتزامنة/MVs/EXPLAIN ANALYZE). #114940 (Azat Khuzhin).
- تم إصلاح تعليق عند حذف جدول
TimeSeriesيكون اسمه مرتّبًا معجميًا قبل أسماء جداوله الداخلية، مثلDROP TABLE `-ts`، أو عند حذف عرض مادي معلن باستخدامENGINE = TimeSeries. كان الحذف يؤدي إلى حالة توقف ذاتي بسبب قفل DDL، ولم يكن بالإمكان إلغاؤه باستخدامKILL QUERY. #114953 (Groene AI). - إصلاح
BAD_DATA_PART_NAME(“Trying to get part name in new format for old format version”) فيReplicatedMergeTreeأُنشئ باستخدام الصياغة الموضعية Deprecated ضمنallow_deprecated_syntax_for_merge_tree. كان يمكن الإبلاغ عن mutation على أنها مكتملة في replica لم تطبقها، وقد يبقى الجدول في وضع readonly بعد إعادة التشغيل. #114980 (Groene AI). - إصلاح الخطأ المنطقي
Not-ready Set is passed as the second argument for function 'in'في استعلام يحتوي على استعلام فرعيINيقرأ من cluster بعيد: يفشل الاستعلام الآن بالخطأ الفعلي الصادر عن الاستعلام الفرعي، مثل فشل الاتصال. #114983 (Alexey Milovidov). - إصلاح خطأ منطقي في IN عند وجود Tuple غير ثابتة ومتطابقة على كلا الجانبين في analyzer القديم. #114988 (Groene AI).
- إصلاح قراءة عنصر Tuple عبر تلميح لبنية Tuple موضعية. #115000 (Groene AI).
- لا تنشئ أسماءً مستعارة لحالات التجميع المسبق لتجميع بحجم صفري في
arrayReduceInRanges. #115008 (Groene AI). - تم إصلاح عملية
INSERTفي جدولLogأوTinyLogأوStripeLogالتي تفشل عند تثبيت أحجام الملفات المسجلة. كان من الممكن أن تُبقي هذه العملية صفوفها في الجدول رغم إبلاغها عن خطأ، أو أن تترك ملفات بيانات عمود مصفوفة غير متسقة مع بعضها. تؤدي الآن قراءة جدولLogأوTinyLogيحتوي عمود مصفوفة فيه على عناصر فارغة بينما تشير إزاحاته إلى وجود عناصر إلى ظهور خطأ يذكر اسم العمود بدلاً من القراءة بعد نهاية العناصر. وكان عمود العناصر المكتوب جزئياً يُرفض بالفعل. #115027 (Groene AI). - إصلاح توقف المُجمِّع التكيفي في الأعمدة المنسوخة عند الطلب. #115034 (Groene AI).
- تم إصلاح قراءة خارج الحدود في
pointInPolygonعند استخدام مضلع ثابت ذي صندوق محيط غير محدود، مثلاً عندما يصل إحداثي إلى+-DBL_MAX. يُرفض هذا المضلع الآن باستخدامBAD_ARGUMENTS، ويُعامل المضلع ذو الحلقة الفارغة على أنه بلا مساحة داخلية. سابقاً، كان يمكن أن يعيد الاستعلام نتيجة خاطئة أو يتسبب في توقف الخادم في الإصدارات التي تُفعّل التحصين أو أدوات كشف الأخطاء. #115035 (Groene AI). - تم إصلاح استثناء
out_of_rangeالذي كان يُثار كخطأ داخليCode: 1001عندما يحتوي نمطsequenceMatchأوsequenceCountأوsequenceMatchEventsعلى رقم الحدث0، مثلاًsequenceMatch('(?0)'). يُرفض هذا النمط الآن باستخدامBAD_ARGUMENTS. وكان الشرط الزمني الذي يتضمن إشارة منفردة، مثلsequenceMatch('(?1)(?t>+)(?2)')، يُعامل بصمت على أنه(?t>0)، ويُرفض الآن باستخدامSYNTAX_ERROR. #115056 (Groene AI). - تم إصلاح الخطأ
Found patch part ... that intersects mutation with version ...(LOGICAL_ERROR) في الجداول التي تستخدم التحديثات خفيفة الوزن. كان دمج أجزاء التصحيح قد ينتج تصحيحاً يمتد نطاق إصدارات بياناته عبر إصدار بيانات جزء موجود؛ ولا يمكن حينها تطبيق هذا التصحيح أو تجاوزه، لذا كانت كل عملية لاحقة على القسم تفشل ويتوقف طابور النسخ. لم تعد عمليات الدمج هذه تُسند. #115064 (Alexey Milovidov). - إصلاح
LOGICAL_ERROR(Cache file segment is in detached state) عند القراءة عبر ذاكرة التخزين المؤقت لنظام الملفات باستخدام الإعداد التجريبيuse_reader_executor. نتج هذا الانحدار عن #110029 ولم يُضمّن في أي إصدار، لذا لا حاجة إلى نقل الإصلاح إلى الإصدارات السابقة. #115070 (Groene AI). - خادم Arrow Flight: قبول بيانات اعتماد المصادقة
Basicالمرمّزة بـBase64 من دون حشو، كما ترسلها عملاء Flight المستندة إلى Go، مثل برنامج تشغيل ADBC Flight SQL، وإرجاع خطأ مصادقة مناسب بدلاً من الخطأ العامUnexpected error in RPC handlingعندما يكون ترويسauthorizationغير صالح. #115085 (Alexey Milovidov). - إصلاح الإكمال التلقائي (التلميحات وإكمال TAB من
system.completions) في العميل المضمّن الذي تستخدمه واجهة SSH والطرفية على الويب: كانت الاقتراحات تُحمّل عبر اتصال منفصل يصادق كمستخدمdefaultبكلمة مرور فارغة، مما كان يفشل على الخوادم التي تكون لـdefaultفيها كلمة مرور، ويكشف بخلاف ذلك أسماء الكيانات التي لا يملك المستخدم المسجل دخوله صلاحية الوصول إليها. تُحمّل الاقتراحات الآن عبر اتصال الجلسة نفسها. #115086 (Alexey Milovidov). - أُصلحت مشكلة تمنع الخادم من البدء بعد إنشاء جدول باستخدام
CREATE TABLE ... AS url('http://host/**/', ...)مع تمكينallow_experimental_url_wildcard_from_index_pages. إذ كانت قراءة بيانات التعريف الخاصة بهذا الجدول تعيد إجراء التحقق التجريبي وتفشل بالخطأSUPPORT_IS_DISABLED، مما يوقف عملية البدء. #115095 (Groene AI). - إعادة كتابة bucketIndexForTimestamp باستخدام حسابات 64 بت. #115097 (Vitaly Baranov).
- أُصلح تنسيق
ALTER TABLE ... MATERIALIZE INDEXوMATERIALIZE STATISTICSوMATERIALIZE PROJECTION، إذ كان يحذف عبارةIF EXISTS، وبالتالي لم يكن الاستعلام المنسّق هو الاستعلام الذي جرى تحليله. ورُفضت أيضًا أربع حمولات JSON لشجرة AST خاصة بـALTER ... STATISTICSلا يستطيع محلل SQL إنتاجها وتُنسَّق إلى أمر مختلف. #115099 (Groene AI). - أُصلح استثناء (
Block structure mismatch in Expression for FilterSortedStreamByRange) في بعض استعلاماتSELECT ... FINALالتي تستخدمPREWHEREعلى جدول يكون مفتاح فرزه تعبيرًا. #115113 (Shaohua Wang). - إصلاح تجاوزات CORS في واجهة CLI لـ clickhouse-local. #115129 (Alexey Milovidov).
- تعطيل تحليل الفهرس الموزع مع الإسقاطات (لأنه يؤدي إلى نتائج غير صحيحة). #115132 (Azat Khuzhin).
- أُصلح سلوك
ifوmultiIfالذي كان يعيد قيمة موجبة كبيرة بدلًا من قيمة سالبة عند دمج فرعTimeمعTime64أوDateTimeأوDateTime64وعندما يكون التعبير مُصرَّفًا بتقنية JIT. #115146 (Groene AI). - تتلقى الطرفية على الويب المضمنة في صفحة أخرى، مثل وحدة تحكم SQL أو
play.html، بيانات اعتمادها من تلك الصفحة ولم تعد تفتح اتصالًا خاصًا بها قبل وصولها. سابقًا، كانت تتصل مرتين — مرة بكلمة مرور فارغة، ثم مرة أخرى ببيانات الاعتماد الفعلية — وتطبعConnecting...مرتين. #115148 (Alexey Milovidov). - أُصلحت النتائج غير الصحيحة عندما تحتوي عبارة
WHEREعلى تعبيرNULLضمنNOT، مثلًاSELECT count() FROM t WHERE NOT (id >= 20 AND NULL). كان تحليل الفهرس يتعامل مع هذا الشرط باعتباره صحيحًا حتمًا على النطاق بأكمله، لذا جرى تجاوز المرشح: أعادcount()صفوفًا يرفضها الاستعلام، وأزالALTER TABLE ... DELETEبهذا الشرط صفوفًا كان ينبغي الاحتفاظ بها. #115152 (Groene AI). - أُصلح فقدان
EXPLAIN ANALYZEلإحصاءات الربط الخاصة بعرض مُعلن باستخدامSQL SECURITY DEFINERأوSQL SECURITY NONEويحتوي نصه على JOIN. في إصدارات التصحيح والإصدارات التي تستخدم sanitizer، كان الاستعلام يُجهض بالخطأ المنطقيJoinStep analyzed without the analyze mode. #115156 (Groene AI). - أُصلحت قراءة خارج الحدود أثناء إلغاء تسلسل قوائم النشر التالفة لفهرس نصي. #115222 (Anton Popov).
- أُصلحت النتائج غير الصحيحة للاستعلام
SELECT count(arrayJoin(arr))مع الإعداد الافتراضيoptimize_trivial_count_query = 1. إذ كان يُعاد عدد الصفوف المخزّن بدلًا من عدد عناصر المصفوفة، وكان الاستعلام يعيد0عند استخدامfile()وurl(). يغلق #115123. #115227 (Groene AI). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند كل عمليةINSERTفي جدول يعرّفSTATISTICS(...)على عمودALIASأوEPHEMERAL، والذي كان يجعل هذه الجداول في وضع القراءة فقط. #115231 (Groene AI). - إصلاح ظهور الإحصاءات النهائية للاستعلام المكتمل (
N rows in result,Read ... rows) بلون غير مرئي في واجهة الويب. #115245 (Alexey Milovidov). - إصلاح النتائج الخاطئة بصمت والسلوك غير المحدد عند قراءة حالة
AggregateFunction(uniq, ...)تالفة. كان الحقلskip_degreeفي الحالة المُسلسلة يُستخدم كأسّ إزاحة دون تحقق، لذا كانت القيمة الخارجة عن النطاق تنتج عدد عناصر عشوائيًا بدلًا من ظهور خطأ. وتُرفض هذه الحالات الآن بالخطأINCORRECT_DATA. #115276 (Groene AI). - إصلاح تجاوز سياسة صفوف، حيث كانت دالة الجدول
mergeTreeIndexتكشف قيم المفتاح الأساسي وفهرس MinMax للصفوف التي تخفيها سياسة صفوفSELECTفي الجدول المصدر؛ ويُرفض الآن إجراء قراءة منmergeTreeIndexلجدول لديه سياسة صفوف. #115304 (Yarik Briukhovetskyi). - إصلاح تجاهل
CREATE QUOTAوALTER QUOTAبصمت جميع كتلFOR INTERVALباستثناء الأخيرة عند حذف الفاصلة الفاصلة بين الفترات. كانت هذه العبارة تنجح دون تثبيت أي من الحدود السابقة. وتتراكم الفترات الآن مجددًا، كما كانت قبل عام 2020. يغلق #115282. #115320 (Groene AI). - إصلاح النتائج الخاطئة من
ifوmultiIfوCASEعندما يكون أحد الفروع من النوعDateأوDate32ويكون نوع النتيجةDateTimeأوDateTime64. معcompile_expressions = 1(الإعداد الافتراضي)، كان التعبير المُصرَّف ينسخ عدد أيام التاريخ إلى عمود الطابع الزمني دون تحويل الأيام إلى ثوانٍ، لذا كانتif(cond, toDate32('1900-01-01'), toDateTime64('1970-01-01', 3))تُرجع1969-12-31 23:59:34.433. يغلق #115272. #115325 (Groene AI). - عدم ترك بيانات وصفية تشير إلى مجموعة مسماة محذوفة. #115326 (Groene AI).
- إصلاح قيام
timezoneOffset(الاسم المستعارtimeZoneOffset) بإرجاع إزاحة خاطئة بمقدار يوم واحد بالضبط للمناطق الزمنية التي تختلف إزاحتها عن UTC عن إزاحتها في1970-01-01بمقدار يوم كامل، مثلPacific/KiritimatiوPacific/Apiaبعد عبورهما خط التاريخ الدولي، وكذلك لمعظم المناطق قبل عام 1970. ويُصلح هذا أيضًاparseDateTimeوparseDateTimeOrNullوparseDateTime64وparseDateTimeInJodaSyntaxوEXTRACT(TIMEZONE_HOUR / TIMEZONE_MINUTE ...)و%zفيformatDateTimeوtoUTCTimestampوfromUTCTimestamp، التي تعتمد على تلك الإزاحة. يغلق #115281. #115332 (Groene AI). - إصلاح تجاوز قيود الإعدادات: كان
SET <name> = DEFAULTيعيد تعيين إعداد دون التحقق من القيود في ملف تعريف المستخدم، لذا كان يمكن تجاوز قيدMIN/MAX/CONSTبإعادة تعيين الإعداد بدلًا من إسناد قيمة إليه، وكان يمكن لجلسة الخروج من وضعreadonlyباستخدامSET readonly = DEFAULT. #115334 (Alexey Milovidov). - خادم Arrow Flight: رفض بيانات اعتماد المصادقة الأساسية غير الصحيحة التي تفتقر إلى الفاصل بين اسم المستخدم وكلمة المرور. #115347 (Alexey Milovidov).
- إصلاح
LOGICAL_ERROR(Join is supported only for pipelines with one output port) في عملية JOIN منfull_sorting_mergeمع تفعيلquery_plan_join_shard_by_pk_rangesعندما يُستبعد أحد الجانبين بالكامل بحيث لا تبقى له أي أجزاء، سواءً بالمفتاح الأساسي أو بإحصاءات الأعمدة أو لأن الجدول فارغ. #115352 (Alexey Milovidov). - تعطيل ذاكرة التخزين المؤقت لشروط الاستعلام للمرشحات على _part_starting_offset. #115358 (Azat Khuzhin).
- إصلاح
randConstantالذي كان يعيد قيمتين مختلفتين ضمن استعلام واحد عندما تحمل استدعاءاته أسماء مستعارة مختلفة. تنص وثائقrandConstantعلى أنه يحتفظ بقيمة واحدة للاستعلام بأكمله، وكانSELECT randConstant() = randConstant()يعيد بالفعل1، لكن إضافة أسماء مستعارة كما فيSELECT randConstant() AS a, randConstant() AS bكانت تنتج قيمتين غير مرتبطتين. #115384 (Alexey Milovidov). - إصلاح
uniqوuniqExactوuniqHLL12وuniqThetaالتي كانت تعيد نتائج خاطئة لوسيطة مغلفة بدالة حقنية تخفي قابلية القيم الفارغة، مثلuniqExact(tuple(x))على عمودNullable. كانت عملية التحسينoptimize_injective_functions_inside_uniqتزيل الدالة المغلفة، مما يؤدي إلى تخطي صفوف NULL بدلًا من احتسابها. #115466 (Vladimir Cherkasov). - إصلاح
GroupingAggregatedTransformالذي كان ينتج مقاطع مكررة للحاوية نفسها. #115487 (Nikita Taranov). - إصلاح رسالة الخطأ الخاصة بـ
geoToH3التي كانت تشير إلى موضع وسيطة ونوع خاطئين عندما لا يكون أحد الإحداثيات من النوعFloat64. ضمن الإعداد الافتراضيgeotoh3_argument_order = 'lat_lon'، كانت الرسالة تشير إلى الوسيطة الأخرى وتطبع نوعها. يغلق #101813. #115503 (Groene AI). - رفض محرف إرجاع عربة منفرد (
\r)، بالإضافة إلى محرف تغذية السطر (\n)، في أسماء وقيم HTTP header التي تمر عبر مرشح HTTP header. يسد ذلك ثغرة حقن HTTP header (تقسيم الطلب/الاستجابة) في الميزات التي تمرر رؤوسًا يوفّرها المستخدم، مثل دالة ومحرك الجدولurl، وقواميس HTTP، وكتالوجات بحيرة البيانات. #115510 (Sergei Trifonov). - إصلاح الذواكر المؤقتة المضبوطة بحد أقصى لعدد الإدخالات (سياسة
SLRU) التي كانت تتوقف بصمت عن قبول إدخالات جديدة بمجرد الوصول إلى ذلك العدد من الإدخالات التي تم الوصول إلى كل منها مرتين على الأقل. تشمل الذواكر المؤقتة المتأثرة ذواكر ملفات البيانات الوصفية لـ Iceberg وPaimon، وذاكرة التخزين المؤقت للبيانات الوصفية لـ Parquet، وذواكر فهرس النص، وذاكرة التخزين المؤقت لفهرس تشابه المتجهات، وذاكرة التخزين المؤقت للتعبيرات المترجمة، وذاكرة التخزين المؤقت لحالة ملف ObjectStorageQueue. #115517 (Groene AI). - إصلاح تعليق يستمر حتى ساعة في
BACKUP/RESTORE ... TO S3، وأقراص GCS، ودالة الجدولs3عندما تضبط المجموعة المسماةhttp_client = 'gcp_oauth'وتقبل نقطة نهاية رمز Google OAuth2 الاتصال لكنها لا ترد مطلقًا. لم يعد طلب Bearer token يرث مهلة طلب نقل البيانات الخاصة بالمستدعي؛ بل يقتصر انتظار استجابته على 10 ثوانٍ، بما يطابق الحد الأقصى لطلب STSAssumeRole. #115531 (Groene AI). - إصلاح
dictGetوصِيَغه المختلفة في الاستعلامات الموزعة: أصبح اسم القاموس غير المؤهل يُربط بقاعدة البيانات الحالية للعقدة البادئة، بدلاً من حله ضمن قاعدة البيانات الحالية لكل جزء تقسيم، حيث إما لا يُعثر عليه أو يُحل إلى قاموس آخر بالاسم نفسه. #115541 (Alexey Milovidov). - إصلاح حالة تنافس قد تؤدي إلى أن يعيد استعلام
STREAM BOUNDEDصفوفاً أقل من تلك التي ثُبّتت قبل بدئه، وغالباً لا يعيد أي صفوف. #115543 (Alexey Milovidov). - إصلاح كتابة لقطات Keeper كملفات فارغة عند تعطيل
compress_snapshots_with_zstd_format. كان الخادم يسجلCreated persistent snapshot، لكن ملف اللقطة كان بحجم 0 بايت، ثم كانت العقدة ترفض البدء معCORRUPTED_DATA. يغلق #115388. #115553 (Groene AI). - إصلاح إبلاغ
read_rowsوread_bytesوwritten_rowsوwritten_bytesفيsystem.query_thread_logبالإجمالي التراكمي طوال عمر خيط التنفيذ بدلاً من القيم الخاصة بالاستعلام المسجل. تأثرت بذلك صفوف خيوط التنفيذ طويلة العمر في التجمع، ولا سيما خيط التنفيذHTTPHandlerالذي يبدأ الاستعلام. #115596 (Groene AI). - إصلاح قراءة خارج الحدود لتجزئات القاموس المخزنة مؤقتاً عند التجميع أو الربط باستخدام مفتاح
LowCardinality(String)ينمو قاموسه أثناء تجميعه، ويمكن الوصول إلى هذه الحالة عبرTTL ... GROUP BY. كان ذلك قد ينتج تجزئة خاطئة أو خطأ heap-buffer-overflow مُبلّغاً عنه في إصدارات sanitizer. #115604 (Groene AI). - أصبح
CREATE TABLEوALTER TABLEيرفضان برنامج ترميز فاقداً مثلSZ3لعمود مستخدم في مفتاح التقسيم. #115626 (Groene AI). - إصلاح محارف الهروب بالشرطة المائلة العكسية غير الصالحة في فهارس text وtokenbf_v1 وngrambf_v1. #115634 (Elmi Ahmadov).
- إصلاح
removePartAndCoveredPartsعند استدعائه لجزء موجود في مجموعة أجزاء البيانات النشطة. #115640 (Mikhail Artemenko). - السماح لقراء KeeperMap بقبول بيانات وصفية مشتركة عندما لا تختلف المفاتيح الأساسية المتكافئة إلا في أقواس خارجية زائدة. #115642 (Sergey Kuznetsov).
- إصلاح خلل كانت فيه استعادة قاعدة بيانات أو جدول باسم جديد تحذف الأسماء المستعارة للجداول من نصوص العروض المخزنة، مما يؤدي إلى فشل قراءة عرض مستعاد مع
UNKNOWN_IDENTIFIER. يغلق #115479. #115645 (Groene AI). - إصلاح
Code: 349. Cannot convert NULL value to non-Nullable typeعندما يحمل الشرطhasأوnotHasعنصر Array بقيمة NULL ويكون المفتاح الأساسيStringأوArray(String)أوMap(String, String)، وإصلاح النتائج الخاطئة عندما يكون ذلك العنصرDynamicأوVariantيحتوي على NULL. يُحذف NULL الآن من المجموعة أثناء تحليل المفتاح، كما كان يحدث بالفعل لأنواع المفاتيح الأخرى. #115647 (Groene AI). - إصلاح خلل في الدالة
formatRowNoNewlineكان قد ينتج نتائج غير صحيحة أو خطأً منطقياً عند تنسيق صف إلى نتيجة فارغة. #115669 (Alexey Milovidov). - رفض قيم
stepالصفرية والسالبة في استعلامات نطاق Prometheus أحادية النقطة. #115679 (Minh Vu). - رفض الطوابع الزمنية والمدد في PromQL التي تتجاوز نطاق Int64. #115682 (Minh Vu).
- إصلاح أعطال الخادم الناتجة عن إدخال متداخل بعمق في
readWKBوJSONMergePatch، ومحلل العناوين في دوال الجداولurl/remote/cluster/mysql/postgresql، ومحلل عبارةCURSORومحلل مخطط CapnProto. وإصلاح عطل في محلل عبارةEXECUTEعندما لا تكون الوسيطة قيمة حرفية. #115700 (Alexey Milovidov). - عدم إرجاع ذاكرة غير مهيأة في نتيجة قيمة حرفية لسلسلة ثنائية لا يكون طولها مضاعفًا للثمانية، أو من مفكك ضغط LZ4 عندما لا تحتوي كتلة مضغوطة على بيانات. #115704 (Alexey Milovidov).
- تقييد حجم رسالة بدء تشغيل بروتوكول PostgreSQL الشبكي، التي تُقرأ قبل المصادقة. #115708 (Alexey Milovidov).
- إصلاح الخطأ
MULTIPLE_EXPRESSIONS_FOR_ALIASفي الاستعلامات التي يتطابق فيها الاسم المستعار لعمود مع الاسم المستعار لتعبير جدول في قسمFROM(تراجع في المحلل في الإصدار 25.2). #115714 (Alexey Milovidov). - إصلاح إنهاء
clickhouse-localللعملية بأكملها عندما يُلقي معالج اتصال لمستمع بدأ بـSYSTEM START LISTENخطأً، مثلًا لأن عميلًا أرسل حزمة تالفة أو أعاد ضبط مقبس keep-alive. تسجل العملية الآن الخطأ وتواصل الخدمة، كما يفعلclickhouse-server. #115715 (Groene AI). - إصلاح
LOGICAL_ERROR: No available columnsعندما لا يقرأ استعلام أي أعمدة من تعبير جدول لا يحتوي على أعمدة إطلاقًا، مثلSELECT count() FROM loop(db, tbl)، حيث يكونtblجدولAliasحُذف هدفه، أو عرضًا ذا معلمات. يفشل هذا الاستعلام الآن بالخطأUNSUPPORTED_METHODبدلًا من إيقاف الخادم في إصدارات debug وsanitizer. #115716 (Groene AI). - إصلاح الخطأ
LOGICAL_ERROR“Reading from materialized CTE ‘X’ before its materialization completed - DelayedPortsProcessor gate is missing in the query plan” عند القراءة من CTEMATERIALIZEDداخل استعلام فرعيINعلى جدولDistributed. يغلق #113184. #115740 (Groene AI). - رفض الأسماء غير الصالحة للإسقاطات والفهارس. #115824 (Alexander Tokmakov).
- رفض معدلات مطابقة المتجهات في PromQL عندما يكون أحد المعاملين قيمة قياسية. #115828 (Minh Vu).
- إصلاح عدم احتفاظ
cast_keep_nullableبقابلية NULL عندما يكون النوع الهدف هوLowCardinality. كان تحويل قيمة تقبل NULL إلىLowCardinality(T)يُلقي الخطأCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNبدلًا من إنتاجLowCardinality(Nullable(T)). يغلق #103485. #115851 (Groene AI). - إضافة مسارات Objects إلى تجزئة إزالة التكرار، لمنع إزالة التكرار غير الصحيحة. #115866 (Mikhail f. Shiryaev).
- إصلاح
TYPE_MISMATCH(“لا يمكن تنفيذ CAST AS Array إلا بين أنواع مصفوفات لها عدد الأبعاد نفسه”) لاستعلام يحتوي على ثابت من النوعArray(Map(...))، مثلhas([map('k', 'v')], m)، يُنفَّذ على جدولDistributedأو باستخدام النسخ المتماثلة المتوازية. #115883 (Alexey Milovidov). - إصلاح الخطأ
Unknown identifierالذي يظهر أثناء تحسين خطة الاستعلام معmake_distributed_plan = 1، عندما يمر عمود الفرز في استعلام نافذة عبر خطوةExpressionلا تشير إليه. يغلق #115737. #115890 (Groene AI). - إصلاح
h3kRingوh3HexRingوh3Lineوh3ToChildrenالتي كانت تتجاهلmax_execution_timeوKILL QUERYأثناء توسيع كتلة من الصفوف. #115893 (Alexey Milovidov). - لم تعد القراءة من خلال جدول
Mergeيطابق جدولAliasهدفه عرض ذو معلمات تؤدي إلى ظهورLOGICAL_ERROR: Table has no columns.(الذي يؤدي إلى إيقاف الخادم في إصدارات debug وsanitizer). يُبلّغ هذا الجدول الآن عنSTORAGE_REQUIRES_PARAMETER، وهو الخطأ نفسه الذي يُبلّغ عنه العرض ذو المعلمات نفسه. وأي جدول مطابق آخر لا يمكنه توفير أعمدة يُبلّغ الآن عنUNSUPPORTED_METHODبدلًا من خطأ داخلي. #115896 (Groene AI). - إصلاح المعاينة الفورية لطفرة معلّقة يشير تعبيرها إلى
_sample_factor. معapply_mutations_on_fly = 1وعبارةSAMPLE، كان التعبير يُقيَّم بعامل العينة الخاص باستعلام القراءة بدلًا من القيمة التي تحتفظ بها المادية في الخلفية، لذا اختلفت الصفوف المُعايَنة عن النتيجة المادية النهائية، وكان من الممكن أن تؤدي عبارةALTER TABLE t DELETE WHERE _sample_factor > 1معلّقة إلى إرجاع قراءةSAMPLEدون أي صفوف. لم يتغير عمود_sample_factorالخاص بالاستعلام نفسه. #115906 (Groene AI). - إصلاح حالة لم يكن فيها
ATTACH TABLEالذي يحمل تعريفENGINE = URL(...)يتحقق من صلاحيةTABLE ENGINEللمحرك الذي يوجّه إليه مخطط URL. كان المستخدم الذي يمتلك فقطTABLE ENGINE ON URLيستطيع إرفاق جدول مدعوم بـFileأوS3أوAzureBlobStorageأوHDFSثم القراءة منه، بينما يرفضCREATE TABLEذلك على نحو صحيح. #115914 (Groene AI). - عدم السماح لعقدة بيانات وصفية لـ KeeperMap غير قابلة للتحليل بمنع الخادم من البدء. #115941 (Groene AI).
- إصلاح تعطل الدالة
showCertificateعلى خادم يحصل على شهادة TLS باستخدام ACME (Let’s Encrypt). تُبلّغ الدالة الآن عن الشهادة المقدَّمة فعليًا، بما في ذلك بعد إعادة تحميل الشهادة. #115976 (Alexey Milovidov). - إصلاح إيقاف الخادم في إصدارات debug وsanitizer عند الإدراج في عرض مادي يكون هدف
TOله عرضًا ماديًا آخر. كان هذا الإدراج يفشل بالفعل في الإصدارات المنشورة، معCode: 1001 STD_EXCEPTIONغير مفيد؛ ويُبلّغ الآن عنNOT_IMPLEMENTEDمع تحديد العرض المسبب للمشكلة. #115985 (Groene AI). - تُقرأ الآن ملفات الإحصاءات ذات إصدار التنسيق
V3بدلًا من رفضها بالخطأILLEGAL_STATISTICS. لم تُنتَج هذه الملفات إلا بواسطة إصداراتmasterخلال فترة قصيرة، لكن الأجزاء التي تحتوي عليها كانت غير قابلة للقراءة تمامًا، ولا يمكن لـALTER TABLE ... MATERIALIZE STATISTICSإعادة إنشائها على قرص readonly. #116030 (Alexey Milovidov). - إصلاح الخطأ
LOGICAL_ERROR: Index with name auto_minmax_index_<column> already existsالذي كان يحدث عندما تجمع تعليمة واحدة منALTER TABLEبينRENAME COLUMNوأمر آخر، مثلMODIFY SETTING، في جدول ذي فهارس minmax ضمنية (add_minmax_index_for_numeric_columnsوما شابهها). كذلك، لم تعد إعادة تسمية عمود عادي تؤدي إلى فشلDROP COLUMNلاحق بالخطأUNKNOWN_IDENTIFIERأو إلى إضافةADD COLUMNلاحقة دون فهرسها الضمني. #116063 (Groene AI). - إصلاح تعطل العاملين عديمي الحالة عند استخدام تخزين الكائنات. #116067 (Konstantin Vedernikov).
تحسينات البناء/الاختبار/التغليف
- توفير حِزم موقَّعة لنظام macOS. #115169 (Konstantin Bogdanov).
- إصلاح البناء من المصدر باستخدام clang 23. #112288 (Azat Khuzhin).
- تقليل التبعيات وحجم شيفرة محلل SQL، الذي أصبح بالإمكان بناؤه بصورة مستقلة — راجع
utils/wasm-parserللحصول على إصدار WebAssembly مستقل منه. أصبحت جداول الكلمات المفتاحية في SQL وأنواع الوصول تُبنى وقت الترجمة بدلًا من كل مرة يبدأ فيها الخادم. #112067 (Alexey Milovidov). - أصبح البناء من المصدر يفشل الآن أثناء مرحلة توليد CMake بدلًا من إتلاف
StorageSystemLicenses.generated.cppعند فشل توليد الترخيص. #111222 (Mikhail Artemenko). - تحديث مكتبة Apache Thrift المضمّنة إلى الإصدار 0.24.0. #111278 (Groene AI).
- إضافة
libucontextإلى بُنى musl، بما يتيح الواجهة الخلفيةucontextالخاصة بـboost::contextوالمستخدمة في بُنى sanitizer. #111437 (Konstantin Bogdanov). - إصلاح مشكلات قابلية النقل على مستوى الشيفرة المصدرية عند البناء باستخدام musl. #111631 (Konstantin Bogdanov).
- لم يعد تعديل
Core/ProtocolDefines.hيؤدي إلى إعادة بناء شبه كاملة عند البناء من المصدر: أُزيل التضمين منBlockInfo.hوأُضيف فقط إلى الملفات التي تستخدم ثوابته. #111650 (Alexander Gololobov). - إصلاح إيقاف مفاجئ عند بدء التشغيل في بُنى تصحيح الأخطاء على macOS، وذلك بتعطيل فحوصات تصحيح الأخطاء لمتعقب الذاكرة للتخصيصات التي تجريها مكتبات النظام. #112080 (Arsen Muk).
- تحديث
libarchiveالمضمّنة إلى الإصدار 3.8.9. #112434 (Konstantin Bogdanov). - تحديث
StringZillaإلى الإصدار 5.0.5. #112319 (Konstantin Bogdanov). - تحديث
jwt-cppإلى الإصدار v0.7.2. #112595 (Konstantin Bogdanov). - تحديث تجميعة SQLite المضمّنة من 3.41.2 إلى 3.53.4. #112599 (Konstantin Bogdanov).
- تحديث
aws-c-httpإلى الإصدار 0.11.0. #112413 (Govind R Nair). - تحديث
libcotpإلى الإصدار v4.2.1. #112596 (Konstantin Bogdanov). - يمكن الآن بناء OpenSSL من مصادر C القابلة للنقل على المعماريات التي لا تتضمن تعليمات تجميع مكتوبة يدويًا في وصف البناء، بدلًا من الفشل في مرحلة الربط النهائية بسبب رموز غير معرّفة. ويحدد خيار CMake الجديد
OPENSSL_NO_ASMهذا المسار صراحةً. #112863 (Alexey Milovidov). - أُضيف خيار CMake باسم
ENABLE_ORC(مفعّل افتراضيًا)، بحيث يمكن أن يتضمن الإصدار Parquet دون ORC أو protobuf وprotocاللذين يعتمد عليهما ORC. #112864 (Alexey Milovidov). - لم يعد
Common/Exception.cppيتطلب نسخة libc++ المصححة الخاصة بـ ClickHouse لكي يُترجم، لذا تحصل الإصدارات التي تربط مكتبة C++ قياسية مختلفة على استثناءات من دون stack trace لموضع throw، بدلًا من فشل الترجمة. #112865 (Alexey Milovidov). - أصبح فكّ المكدس في إصدارات musl على aarch64 يتابع عبر إطارات الإشارات واستدعاءات syscall المحجوبة بدلًا من التوقف عند إطار libc، مما يحسّن stack traces الصادرة عن معالج الأخطاء الفادحة وSampling query profiler. #112592 (Konstantin Bogdanov).
- تحديث
libexpatالمضمّن إلى 2.8.2. #112593 (Konstantin Bogdanov). - تحديث
simdjsonإلى v4.6.5. #112594 (Konstantin Bogdanov). - تحديث Apache Arrow إلى 25.0.0 وApache ORC إلى 2.3.1. #112604 (Konstantin Bogdanov).
- أصبحت إصدارات التغطية (
WITH_COVERAGE) تربط ببيئة تشغيل profile المُنشأة ضمن شجرة المصدر من مصادر LLVM المضمّنة، بدلًا من الأرشيف المرفق مع سلسلة أدوات clang على المضيف. #112607 (Konstantin Bogdanov). - تحديث Protocol Buffers إلى v35.1 وgRPC إلى v1.83.0. #112614 (Konstantin Bogdanov).
- أُضيف هدف WebAssembly تجريبي (
wasm64عبر Emscripten): أصبحemcmake cmakeيهيئ شجرة المصدر وتُبنى الطبقات الدنيا. كما أُصلح-DENABLE_LIBFIU=OFF، الذي لم يكن يُبنى على أي منصة. #112911 (Alexey Milovidov). - أُصلحت جميع مواضع
-Wunique-object-duplication: مثيلات singleton قابلة للتغيير معرّفة في header، كانت ستنشئ نسخة لكل كائن مشترك بدلًا من نسخة واحدة لكل عملية. وتم ذلك في الغالب بنقل التعريف إلى.cpp. #112995 (Alexey Milovidov). - أصبح تثبيت حزمة
tgzفوق ارتباط رمزي معلّق يحافظ على سلسلة الارتباطات الرمزية ويطبّق أذونات وملكية الهدف المضمّن في الحزمة بدلًا من أذونات مشتقة منumask. #112766 (Alexey Milovidov). - في إصدارات musl على
aarch64، يستخدمmemmoveالآن تنفيذ ARM optimized-routines بلغة التجميع (المشترك معmemcpy) بدلًا من حلقة C العامة التي تعالج كلمة في كل مرة. #113502 (Konstantin Bogdanov). - في إصدارات musl، يتبع
getaddrinfoمعAI_ADDRCONFIGالآن دلالات glibc، لذلك لم يعدlocalhostيُحلّ أولًا إلى::1غير قابل للاستخدام في بيئات IPv4 فقط، كما تُرجعsysconfتلميحات glibc لحجم المخزن المؤقت لـgetpwuid_r/getgrgid_rبدلًا من -1، مما يعالج مشكلة libhdfs3. #113485 (Konstantin Bogdanov). - في بنى musl، أصبحت
sched_getcpuالآن قراءة rseq (~1ns) بدلًا من syscall، بما يتوافق مع glibc ويزيل عبء وقت النظام الناتج عنpercpu_arenaفي jemalloc ضمن أعباء العمل كثيفة التخصيص؛ كما يسجّل musl rseq مسبقًا ويصدّر ABI __rseq_*الخاص بـ glibc. #113501 (Konstantin Bogdanov). - إصلاح البنى المحلية (غير التابعة لـ CI) التي كانت تترجم جميع شيفرات Rust المورّدة، بما في ذلك codec
PCO، وقراءات Delta Lake عبرdelta-kernel-rs، وprqlc، وchdig، وwasmtime، وبحث السجل الضبابي للعميل عبرskim، باستخدامopt-level = 0. كان متغير CMake SANITIZEمُعرّفًا باستخدامoption، لذا كانت قيمته الافتراضية BOOL OFF، التي أخفقت اختباراتSTREQUAL ""الخاصة بـ “عدم وجود sanitizer”، مما جعل كل بنية تُهيّأ دون-DSANITIZE=...صريح تتخذ مسار الحل البديل لـ sanitizer الذي يعطّل تحسين Rust. #114083 (Alexey Milovidov). - دفع طبقات صورة Docker مضغوطة بـ zstd. #114342 (Alexey Milovidov).
- بناء حزم Debian لبنى الإصدار فقط. #114739 (Alexey Milovidov).
- إصلاح بناء
unit_tests_dbmsفي التهيئات التي لا تتضمن المجموعة الكاملة من المكتبات (ENABLE_LIBRARIES=0أوENABLE_ROCKSDB=0). #115655 (Alexey Milovidov).
إصدار ClickHouse 26.7، 2026-07-22. العرض التقديمي, الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- لم يعد الوصول إلى S3 الصادر من SQL المستخدم يحلّ افتراضيًا بيانات اعتماد السحابة الخاصة بالخادم نفسه (البيئة، وIMDS/IRSA، وملف تعريف المثيل، وملفات config الخاصة بـ AWS، وSTS المستند إلى
role_arn، وبيانات GCP OAuth الوصفية)؛ ويجب أن يستخدم هذا الطلب بيانات اعتماد صريحة أوNOSIGN. كما أصبحت المجموعات المسماة تضبطuse_environment_credentialsافتراضيًا على0. ويمكن استعادة السلوك السابق لكل طلب باستخدامuse_environment_credentials = 1(أو على مستوى عام عبر config <s3>) مع الإعداد الجديدs3_allow_server_credentials_in_user_queries(وهو معطّل افتراضيًا). ولا تتأثر بيانات الاعتماد المورّدة صراحةً أو بيانات اعتماد config التي يوفّرها المشغّل. وعند بدء تشغيل الخادم أو تنفيذRESTORE، يُحمَّل جدولS3/S3Queueدائم، أو disk ديناميكي من S3، أوDataLakeCatalogيحلّ تعريفه بيانات الاعتماد هذه، بصورة مجهولة (ولا يمكن الوصول إليه حتى إعادة تزويده ببيانات الاعتماد) بدلًا من إيقاف بدء التشغيل، ويتحكم في ذلك إعداد الخادم الجديدs3_load_table_anonymously_if_credentials_restricted(مفعّل افتراضيًا). #106855 (Raúl Marín). - أصبح glob
**/(أي عدد من الأدلة) يطابق الآن أيضًا الدليل نفسه. في السابق، لم يكن**/في glob patterns يُعامل كحالة خاصة، لذا فإنdata/**/file.txtلم يكن يطابقdata/file.txt(أي صفرًا من مستويات الأدلة). #97676 (Alexey Milovidov). - رُفض تنسيق أرشيف النسخ الاحتياطي
zip/zipxللنسخ الاحتياطية المخزنة على التخزين الكائني — سواء كانت وجهاتS3(...)/AzureBlobStorage(...)مباشرة أو وجهاتDisk(...)المعتمدة على S3 أو Azure — وذلك لكلٍّ منBACKUPوRESTORE. يتطلب Zip إجراء seek لقراءة دليله المركزي، وهذا بطيء جدًا عبر التخزين الكائني. استخدم بدلًا من ذلك تنسيقًا قائمًا على tar مثلtar.gz. #101770 (Yash ). - تم توسيع النطاق المدعوم لـ
DateTime64من[1900-01-01, 2299-12-31]إلى[0000-01-01, 9999-12-31]. وأصبحت القيم الواقعة خارج النطاق السابق تُحسب الآن بشكل صحيح (عبر cctz) بدلًا من حصرها عند الحدود. ومع precision 8 أو 9، يبقى النطاق أضيق لأن ticks تُخزَّن بصيغةInt64(ومع دقة النانوثانية يبقى الحد الأقصى2262-04-11). التوافق مع الإصدارات السابقة: إذا كنت قد استخدمت تواريخ وأوقات خارج النطاق سابقًا، لكنك اعتمدت على قواعد الإشباع المحددة جدًا داخل النطاق القديم، فضع في اعتبارك أن النتائج تتغير الآن لتصبح أكثر صحة. #107907 (Alexey Milovidov). - يرفض
AggregatingMergeTreeالآن، عند إنشاء الجدول، المخططات التي يكون فيها عمود ما ليس جزءًا من مفتاح الفرز ولا مقياس حالة تجميع (AggregateFunction/SimpleAggregateFunction). وتُطوى هذه الأعمدة بصمت إلى قيمة اعتباطية أثناء عمليات الدمج في الخلفية، مما يؤدي إلى نتائج خاطئة للاستعلامات التي تستخدمGROUP BYأو تُجري تصفية عليها. اضبطallow_dimensions_outside_sorting_key = 1لاستعادة السلوك السابق. يغلق #751. #108087 (Alexey Milovidov). - أُزيلت تهيئة جدولة أعباء العمل المستندة إلى config (قسما config الخاصان بالخادم:
resourcesوworkload_classifiers). استخدم بدلًا من ذلك استعلاماتCREATE RESOURCEوCREATE WORKLOAD. ويتم تجاهل أقسام config المتقادمة مع إصدار تحذير. #108286 (Sergei Trifonov). - يستخدم ClickHouse الآن دائمًا هاش إزالة تكرار الإدراج الموحّد لكلٍّ من Synchronous inserts وasynchronous inserts؛ وأزيلت سلوكيات إزالة التكرار القديمة الخاصة بكل عملية
insertعلى حدة. ويُحتفَظ بإعداد الخادومinsert_deduplication_versionكإجراء حماية أثناء الترحيل، إذ يرفض الخادوم البدء إذا كان مضبوطًا على قيمة قديمة (old_separate_hashesأوcompatible_double_hashes). وللترقية من إصدار كان يستخدم قيمة قديمة، شغّل أولًا إصدارًا يدعمcompatible_double_hashes(إذ يكتب كلًا من الهاش القديم والهاش الموحّد). بالنسبة إلى replicated tables، شغّله لمدة لا تقل عنreplicated_deduplication_window_seconds(ساعة واحدة افتراضيًا؛ إذ تحتفظ النوافذ الافتراضية بالهاشات الموحّدة لجميع عمليات الإدراج خلال تلك النافذة، ويُعد ذلك كافيًا لحلقة إعادة محاولة الإدراج). أما non-replicated tables التي تكون فيها القيمةnon_replicated_deduplication_window> 0، فتكون تلك النافذة قائمة على العدد لا على الزمن، لذا شغّلcompatible_double_hashesلما لا يقل عن هذا العدد من عمليات الإدراج. ثم أزل الإعداد (أو اضبطه علىnew_unified_hash) قبل الترقية إلى هذا الإصدار. #108361 (Sema Checherinda). وإذا لم تكن قد ضبطتinsert_deduplication_versionمطلقًا، فيمكنك تجاهل هذا البند. - أزيلت الدوال المهملة منذ وقت طويل
snowflakeToDateTimeوsnowflakeToDateTime64وdateTimeToSnowflakeوdateTime64ToSnowflake. فقد أُعلن عن إهمالها سابقًا في v24.6 لصالحsnowflakeIDToDateTimeوsnowflakeIDToDateTime64وdateTimeToSnowflakeIDوdateTime64ToSnowflakeID، وهي الدوال التي ينبغي استخدامها بدلًا منها. أما الإعدادallow_deprecated_snowflake_conversion_functions(الذي كان يُستخدم سابقًا لإعادة تفعيلها) فقد أصبح الآن متقادمًا ولم يعد له أي تأثير. #108711 (Alexey Milovidov). - أصبحت القيمة الافتراضية للإعداد
use_legacy_to_timeالآن0، لذا تحوّلtoTimeالقيم إلى نوع البياناتTimeبدلًا من تحويل date with time إلى تاريخ ثابت. ولا يزال السلوك القديم متاحًا عبر الدالةtoTimeWithFixedDateأو بضبطuse_legacy_to_time = 1. #108729 (Alexey Milovidov). - أصبحت نماذج Naive Bayes (المستخدمة بواسطة
naiveBayesClassifier) تُهيَّأ الآن على شكل Dictionary بتخطيطNAIVE_BAYES، ويجري بناؤها وقت التحميل من table تحتوي على n-gram counts مجمّعة مسبقًا لكل فئة، بدلًا من configuration السابقة على مستوى الخادوم (config file بصيغة XML يشير إلى ملفات نموذج.binمُسلسلة)، وهو ما لم يعد مدعومًا — لذا يجب إعادة إنشاء النماذج الحالية على شكل Dictionaries. وأُضيفت ثلاث دوال جديدة إلى جانبnaiveBayesClassifier: إذ تُرجعnaiveBayesClassifierWithProbالفئة المتوقعة مع احتمالها، وتُرجعnaiveBayesClassifierWithAllProbsجميع الفئات مع احتمالاتها، وتُجزّئnaiveBayesNgramsالنص إلى n-grams بالطريقة نفسها التي يستخدمها القاموس، لبناء بيانات التدريب من نص خام مُصنَّف. بالإضافة إلى ذلك، طُبّقت عدة تحسينات على الأداء: فعلى نموذج لغوي trigram بحجم 9.7 MiB قائم على code points، يستهلك ذاكرة أقل بنحو ~49× (من 1.84 GiB إلى 38 MiB)، ويُحمَّل أسرع بنحو ~11×، ويُصنّف أسرع بنحو ~11×. #108773 (Nihal Z. Miaji). - لم تعد الدالة
hasColumnInTableتقبل الوسائط الاختياريةhostnameوusernameوpasswordللتحقق من column على remote server كيفما كان؛ ولم يبقَ سوى الصيغةhasColumnInTable(database, table, column). وكان وضع remote الذي أزيل يمثّل مصدر قلق أمني، إذ كان يتيح لأي مستخدم تشغيل connections صادرة إلى hostات عشوائية، كما كان يسرّب credentials إلى query logs، ولم يكن مقيّدًا بأي privilege. #110881 (Alexey Milovidov).
ميزة جديدة
- تمت إضافة
EXPLAIN ANALYZEلفحص أداء الاستعلام: يُنفَّذ الاستعلام، وتُعرَض مقاييس التنفيذ الفعلية بتنسيق خطة الاستعلام المألوف. #106586 (Kirill Kopnev). #110668 (Kirill Kopnev). - تمت إضافة دعم لعبارات
WHEREفي تعريفات الإسقاطات. ولا تُطبَّق الإسقاطات التي تحتوي علىWHEREوتُخزَّن فعليًا إلا على الصفوف المطابقة للمسند، ويمكن للمُحسِّن استخدامها (استنادًا إلى الكلفة) عندما تستلزم عبارةWHEREفي الاستعلام عبارةWHEREفي الإسقاط. #102347 (S Bala Vignesh). - تمت إضافة الإعداد
skip_unavailable_shards_mode(وهو متاح أيضًا كإعداد لمحركDistributed) للتحكم في الاستثناءات الصادرة من شظية بعيدة التي يجري تجاهلها بصمت عند تمكينskip_unavailable_shards. #79091 (cjw). - تمت إضافة الدالة التجميعية
groupFormatالتي تُنسِّق الصفوف في كل مجموعة باستخدام تنسيق إخراج محدد وتُرجع النتيجة كسلسلة نصية. #93201 (Yang Hu). - تمت إضافة
AWS_MSK_IAMكقيمة مدعومة لـkafka_sasl_mechanism، مما يتيح لـ ClickHouse المصادقة مع Amazon MSK باستخدام أدوار IAM دون الحاجة إلى إدارة بيانات اعتماد SASL/SCRAM. #96100 (kalavt). - تمت إضافة مُركِّب الدالة التجميعية
-Tuple، الذي يطبّق الدالة التجميعية الأساسية على كل عنصر في عمودTupleبشكل مستقل ويُرجعTupleللنتائج مع الحفاظ على أسماء العناصر: فمثلًا، يُرجعsumTuple(t)عندما يكونt = (a, b)القيمة(sum(a), sum(b)). أما الدوال التجميعية ذات الوسائط المتعددة فتأخذ tuple واحدًا لكل وسيطة، مع المطابقة حسب الموضع: يُرجعcorrTuple((a1, a2), (b1, b2))القيمة(corr(a1, b1), corr(a2, b2)). وعلى خلاف-ForEachعلى المصفوفات، يمكن أن تكون العناصر من أنواع مختلفة، كما تُحفَظ أنواع النتائج لكل عنصر وأسماؤها. #98190 (RinChanNOW). - تدعم فهارس النص الآن وسيطة
postprocessor— وهي تعبير اعتباطي يحوّل كل رمز بعد التجزئة إلى رموز (على سبيل المثال،lower). #98939 (Jimmy Aguilar Mena). #108606 (Jimmy Aguilar Mena). - تمت إضافة جدول النظام
system.stemmers، الذي يسرد جميع اللغات التي يمكن تحديدها للدالةstem. #100611 (Jimmy Aguilar Mena). - تمت إضافة دعم
WITH TIESمعLIMITالسالب. #100930 (Nihal Z. Miaji). - تمت إضافة دعم لمعاملي الصياغة اللاحقين في SQL القياسية
AT TIME ZONEوAT LOCALبوصفهما صياغة مختصرة لـtoTimeZone. وأصبح التعبيرexpr AT TIME ZONE zoneالآن مكافئًا لـtoTimeZone(expr, zone)، كما أصبحexpr AT LOCALمكافئًا لـtoTimeZone(expr, timeZone()). #106092 (lizepeng). - أصبح محرك الجدول
URLودالة الجدولurlيوجِّهان الآن إلى الواجهة الخلفية المناسبة بناءً على مخطط URL: إذ تُعالَجfile://بواسطة المحركFile، وs3:///gs:///gcs:///oss://بواسطةS3، وaz:///azure:///abfss:///abfs://بواسطةAzureBlobStorage، وhdfs://بواسطةHDFS، وhttp(s)://بواسطة المحركURLكما في السابق. يُطبَّق الإعدادurl_baseقبل التوجيه بحسب المخطط. ولا تُوجَّه إلا مخططات S3 التي يحلّهاurl_scheme_mappersالافتراضي؛ أما مخططات المورّدين الأخرى المتوافقة مع S3 (cosوobsو…) فلا تُوجَّه، وتتطلب استخدام المحرك/الدالةs3مباشرةً. #106093 (Alexey Milovidov). - أُضيف محركا الجدول
RemoteوRemoteSecure، وهما النظيران الدائمان لدالتي الجدولremoteوremoteSecure. وأصبحCREATE TABLE ... ENGINE = Remote('addresses', db, table, ...)يعمل الآن بالإضافة إلىCREATE TABLE ... AS remote(...). #106189 (Alexey Milovidov). - أُضيفت أوامر
SYSTEM STOPوSYSTEM STARTوSYSTEM PAUSEوSYSTEM CANCELوSYSTEM REFRESHالمحايدة بالنسبة إلى المحرك، إلى جانب صيغها العامة على مستوى الخادم... ALL BACKGROUND، للتحكم في النشاطات الخلفية لجداولKafkaوRabbitMQوNATSوS3Queue/AzureQueueوالعروض المادية القابلة للتحديث عبر واجهة موحّدة. وبالنسبة إلى العروض المادية القابلة للتحديث، فهي أسماء بديلة لأوامرSYSTEM ... VIEWالحالية. وكجزء من دعم عناصر التحكم هذه في NATS، أصبحت جداول JetStream الآن تُقرّ الرسائل فقط بعد نجاح عملية insert (مرة واحدة على الأقل؛ إذ كانت الرسائل سابقًا تُقَرّ تلقائيًا عند التسليم وقد تُفقَد إذا فشلت عملية insert). كما أُضيف إعداد جديدnats_wait_for_flush_interval(القيمة الافتراضيةfalse، مع الحفاظ على السلوك السابق منخفض الكمون) يُبقي دورة الاستهلاك مفتوحة اختياريًا طوال فترة flush بدلًا من تنفيذ flush بمجرد فراغ queue. ويجعل إعداد جديدnats_commit_on_selectتنفيذSELECTمباشر على جدول JetStream يستهلك الرسائل التي يقرؤها (ويُقِرّ بها). #107476 (Samuel Krempaský). - أُضيف دعم لدوال الجدول ومحركات الجداول
mysqlوpostgresqlوsqliteبحيث تقبل استعلام المستخدم (بدلًا من اسم جدول) وتمرّره كما هو إلى قاعدة البيانات الخارجية، سواء كُتب على هيئة استعلام فرعي(SELECT ...)أو بصيغةquery('SELECT ...'). ويُستدل على بنية الجدول الناتج من نتيجة الاستعلام، ويكون هذا الجدول للقراءة فقط. يغلق #46758. استنادًا إلى التنفيذ الأولي من Denis Vidiaev (#79652). #107740 (Alexey Milovidov). - أُضيفت علامات تبويب إلى واجهة ويب ClickHouse (Play) للعمل على عدة استعلامات في آنٍ واحد. وتُحفَظ علامات التبويب وعناوينها ومعلماتها وحالتها النشطة ولقطات صغيرة من النتائج عبر إعادة التحميل (ولا تُستعاد النتائج الكبيرة ونتائج الصور)، كما تتكامل مع سجل المتصفح و
URL، ويمكن التنقل بينها بعجلة الفأرة. #107826 (Alexey Milovidov). - أُضيف محرك الجدول
QueryRunner. وتمثل السجلات المُدرجة في جدولQueryRunnerالاستعلامات التي ينفذها المحرك. ويمكن استخدام هذا المحرك لتنفيذ الاستعلامات غير المتزامن، والتنفيذ الدفعي للاستعلامات المُولَّدة، وتوجيه الاستعلامات إلى عناقيد بعيدة، واختبارات الأداء، والاختبار بالتشويش، والاختبار باستخدام حركة مرور ظلّية. #107888 (Miсhael Stetsyuk). - أُضيف تنسيق الإخراج
GeoJSONلكتابة مستنداتFeatureCollectionبصيغة GeoJSON، مع إنشاء ميزة واحدة لكل صف. ويصبح العمود الوحيد ذي النوع الجغرافي (PointأوLineStringأوMultiLineStringأوPolygonأوMultiPolygonأوRingأوGeometry) هوgeometryلكل ميزة؛ ويصبح العمود المسمىidهوidللميزة؛ وتصبح أي أعمدة متبقية هيpropertiesالخاصة بالميزة، وفي حال وجود عمود واحد فقط من نوع object باسمproperties(من نوعJSONأوMapأوTupleمُسمّى)، فيُكتَب مباشرةً ككائنproperties. ويُكتَبRingعلى هيئةPolygonأحادي الحلقة. ويتحكم الإعداد الجديدformat_geojson_validate_geometry(المفعّل افتراضيًا) في ما إذا كانت الأشكال الهندسية غير الصالحة كأشكال GeoJSON — مثلPolygonيحتوي على أقل من أربع نقاط أو حلقةPolygonغير مغلقة — ستُرفَض عند القراءة والكتابة. بالإضافة إلى ذلك، يستنتج تنسيق الإدخالGeoJSONالآن العمودidعلى أنهNullable(String)بدلًا منString، بحيث تُقرأ الميزة التي تفتقد العضوidأو تحتوي صراحةً على العضو"id": nullعلى أنهاNULLوتظل مميزة عن السلسلة الفارغة"". استنادًا إلى التنفيذ الأولي من Mark Needham (#98124). #108065 (Nihal Z. Miaji). - أُضيفت الدالة
dotProductTransposed(بالاسم البديلscalarProductTransposed) التي تحسب الجداء الداخلي التقريبي بين عمودQBitومتجه مرجعي، استكمالًا للدالتين الحاليتينL2DistanceTransposedوcosineDistanceTransposed. #108100 (Alexey Milovidov). وأُضيفت أيضًا دوال المسافة المنقولة المُكمّاةcosineDistanceTransposedQuantizedوL2DistanceTransposedQuantizedوdotProductTransposedQuantizedالتي تعمل علىQBit(Int8)من رموز Lloyd-Max الخاصة بـquantizeBFloat16ToInt8، مع فك تكميم الرموز المخزنة آنيًا. ويكون المتجه المرجعي ذي الفاصلة العائمة هو الاستعلام كامل الدقة، وتُجرى المقارنة بدقةFloat32(ويُحوَّل الاستعلام من نوعFloat64إلى دقة أضيق)؛ أما المرجع من نوعArray(Int8)فيُفك تكميمه هو أيضًا، لتحقيق مسافة متماثلة من نوع quantized-vs-quantized. #109405 (Alexey Milovidov). - أُضيف معامل اختياري
strideإلى نوع البياناتQBit(QBit(T, dimension, stride)) لتخزين مجموعات الأبعاد في تدفقات منفصلة، بحيث يمكن للبحث المتجهي قراءة الأبعاد الأولى فقط بكفاءة (مثلًا في Matryoshka embeddings). وتقبل دوال المسافة المنقولة وسيطة رابعة اختيارية هيused_dimsلقراءة عدد أقل من الأبعاد. #108103 (Alexey Milovidov). - أُضيف دعم نوع العنصر
Int8في نوع البياناتQBit، مما يتيح التخزين وإجراء البحث المتجهي بالمسافة المنقولة (L2DistanceTransposedوcosineDistanceTransposed) على متجهات أعداد صحيحة مُكمّاة من 8 بت. #108105 (Alexey Milovidov). - دالة جديدة
randomHadamardTransform(vector[, seed[, output_dims]]): تحويل Hadamard عشوائي حتمي لمتجه ذي فاصلة عائمة — وهو تدوير متعامد يحافظ على المعيار، ومفيد للمعالجة المسبقة لـ embeddings قبل quantization، وكذلك (عندما يكون مقتطعًا) كإسقاط عشوائي من نوع Johnson–Lindenstrauss / subsampled-randomized-Hadamard. #108227 (Alexey Milovidov). - دعم تهيئة التحميل الكسول للقواميس على مستوى كل dictionary على حدة باستخدام الإعداد
dictionary_lazy_loadفي تعريف dictionary، مع تجاوز إعداد الخادم العامdictionaries_lazy_load، بحيث يمكن تحميل بعض القواميس كسولًا بينما تُحمَّل أخرى تحميلًا فوريًا. #108314 (Miсhael Stetsyuk). - أُضيفت صفحة بحث مضمّنة في التوثيق، متاحة على المسار
/docsضمن واجهة HTTP، وتوفّر بحثًا فوريًا في جدولsystem.documentationوتعرض الوثائق المرجعية (مع تمييز بناء الجملة، والصيغ الرياضية، والروابط المتقاطعة). #108345 (Alexey Milovidov). - أُضيفت الدالة
xxHash64Spark، التي تحسب قيمxxHash64المتوافقة مع Spark لمدخلاتStringوNULLباستخدام البذرة42وتُرجعInt64. #108436 (Lalit Yadav). - أصبحت
ALTER USERوALTER ROLEوALTER SETTINGS PROFILEتقبل الآنSET name = valueكاسم مستعار لـMODIFY SETTING name = value. ويؤدي ذلك إلى تعديل الإعدادات الفردية في مكانها مع الإبقاء على بقية الإعدادات، بخلاف عبارةSETTINGSالمجرّدة التي تستبدل قائمة الإعدادات بالكامل. وهذا يقلّل من احتمال مسح إعدادات المستخدم الأخرى عن طريق الخطأ. #108722 (Groene AI). - أُضيف دعم
ALTER TABLE ... MODIFY CONSTRAINT [IF EXISTS] name CHECK exprلتغيير التعبير الخاص بقيد موجود في مكانه. #108768 (Alexey Milovidov). - واجهة الويب: أُضيف مفتاح تبديل لترميز الألوان لكل عمود (أيقونة 🌈 في رأس العمود) للتبديل بين الأشرطة، والخريطة الحرارية، والتصنيف الفئوي، وعدم استخدام أي تصور. ويُحفَظ الوضع المحدد في عنوان URL وسجل المتصفح. #108873 (Alexey Milovidov).
- أصبح
Keeperالآن يتعامل على نحو صحيح مع opcode CreateContainer(19) الخاص بـZooKeeper، وذلك عبر علامة ميزة اختيارية جديدةcreate_container(معطّلة افتراضيًا، مثلcreate_ttl). وبعد تفعيلها عقب ترقية كاملة للمجموعة، يمكن لعملاءZooKeeperالخارجيين (مثل JavaZooKeeper3.9+) إنشاء عقد حاوية علىKeeperبدلًا من تلقيConnectionLoss؛ كما تُبلِغ عقد الحاوية عن قيمة المؤشرephemeralOwnerالمتوقعة، ويحذف خيط GC في الخلفية على القائد الحاويات التي بلا أبناء تلقائيًا. ويستمر رفض طلبCreateالعادي الذي يحمل علامة وضع الإنشاءCONTAINERمن دون opcode 19 (ZBADARGUMENTS)، إذ لا يوجد أي عميلZooKeeperمعروف يُصدر هذا المزيج. وهذا توافق على مستوى البروتوكول من جهة الخادم فقط: إذ إن عميلZooKeeperالخاص بـ ClickHouse (zkutil) لم يتغير ولا يوفّر API لإنشاء عقد حاوية بنفسه. #108908 (unintended). - أُضيفت الدوال
geoToUTMوUTMToGeoوgeoToMGRSوMGRSToGeoللتحويل بين الإحداثيات الجغرافية WGS84 ونظامَي الإحداثيات UTM وMGRS. #108939 (Alexey Milovidov). - أُضيفت الدالة
digits(n, offset[, length])، التي تُرجع أرقامnبدءًا منoffsetذي الفهرسة التي تبدأ من 1 وتمتد علىlengthرقمًا، أو حتى نهاية العدد إذا لم يُحدَّدlength. #109012 (Umang Agrawal). - أُضيفت الدالة الحسابية
sqrلحساب مربع عدد. #109061 (Lalit Yadav). - أُضيفت دالة جديدة
dictGetRootتُرجع السلف الأعلى (الجذر) لمفتاح في قاموس هرمي. وهي مكافئ مناسب لـdictGetHierarchy(dict_name, key)[-1]. #109459 (Alexey Milovidov). - أُضيف الأمران
SYSTEM UNLOAD DICTIONARYوSYSTEM UNLOAD DICTIONARIESلتحرير الذاكرة التي تستخدمها القواميس دون حذف تعريف القاموس. وستُعاد تحميل القواميس عند الوصول إليها لاحقًا عند الحاجة. #109639 (Matheus Nerone). - أُضيفت الدالتان
geometryIntersectCartesianوgeometryIntersectSphericalاللتان تُرجعان ما إذا كان شكلان هندسيان يتقاطعان. وعلى خلافpolygonsIntersectCartesian/polygonsIntersectSpherical، فإنهما تقبلان أي نوع بيانات هندسية (Point,LineString,MultiLineString,Ring,Polygon,MultiPolygon)، بما في ذلك النوع العامGeometry، كما يمكن أن تكون الوسيطتان من نوعين مختلفين. #110062 (Alexey Milovidov). - يمكن الآن استخدام معلمات الاستعلام (استبدالات
{name:Type}) كقيم للإعدادات، سواء في عبارةSETTINGSداخل الاستعلام (مثلSELECTأوINSERT) أو في استعلاماتSETالمستقلة، مثل:SELECT ... SETTINGS max_threads = {threads:UInt64}وSET max_threads = {threads:UInt64}. #108760 (Alexey Milovidov).
ميزة تجريبية
- توسيع أحرف البدل للدالة الجدولية
urlومحرك الجدولURL: تُوسَّع أحرف البدل في مسار URL من خلال استعراض صفحات فهرس HTTP (قوائم أدلة بصيغة HTML أو plaintext) واستخراج عناوين URL المطابقة، مع فرض حدود على حجم صفحة الفهرس وعدد الأدلة المقروءة. يُفعَّل ذلك بالإعدادallow_experimental_url_wildcard_from_index_pages. #95181 (Yue Ni). - يمكن الآن لـ Text indexes تخزين مواضع الرموز (وسيطة الفهرس
support_phrase_search) لتمكين المطابقة الدقيقة للعبارات باستخدام direct read للدالةhasPhrase. ويتطلب ذلك تفعيل إعدادMergeTreeallow_experimental_text_index_phrase_search. #103172 (Elmi Ahmadov). وقد طُرحت هذه الوسيطة في البداية تحت الاسمpositions. #109900 (Elmi Ahmadov). - دعم compaction لملف البيانات الوصفية لجداول
IcebergعبرOPTIMIZE TABLE ... MANIFEST(مع حمايته بالإعدادallow_experimental_iceberg_compaction). يُغلق #95174. #98178 (Smita Kulkarni). وإصلاحOPTIMIZE TABLE ... MANIFESTلجداولIcebergعندما لا تتطابق tuples تقسيم manifest مع مواصفة التقسيم الخاصة بها. #111368 (Smita Kulkarni). - إضافة متغير Real Doubles (RD) ووسيطة اختيارية
ALP(AUTO|STD|RD)إلى codec التجريبيALP. وأصبحALPمن دون وسيطة يختار تلقائيًا بين المخطط الحاليSTDوRDبدلًا من استخدامSTDدائمًا. #99654 (Nazarii Piontko). - إضافة cache داخل الذاكرة من نوع SLRU لملفات البيانات الوصفية
Paimonبعد إلغاء تسلسلها (manifest lists وmanifests). وعند تفعيله عبر الإعدادuse_paimon_metadata_files_cache، تتجاوز الاستعلامات المتكررة على جدولPaimonنفسه إعادة تنزيل البيانات الوصفية من object storage وإعادة تحليلها. #104657 (XiaoBinMu). - أُضيفت “drivers” للدوال المعرّفة من قبل المستخدم القابلة للتنفيذ. ويمكن استخدام driver مُعلن في
<user_defined_executable_function_drivers_config>ضمنCREATE FUNCTION name ARGUMENTS (...) RETURNS T ENGINE = DriverName(...) AS '...code...'لتجميع مقتطف شيفرة المستخدم أو معالجته بطريقة أخرى وقت إنشاء الدالة، وإنتاج executable UDF قابل للتشغيل. ويُخزَّن config الناتج في<dynamic_user_defined_executable_functions_path>، ويُحفَظ الاستعلام الأصلي بصيغةATTACH FUNCTIONبحيث تبقى الدالة بعد إعادة تشغيل الخادم. ويقوم driver إثبات المفهومc_function_bodyبتجميع أجسام دوال C وتشغيلها داخل حاويات Docker معزولة في وضعexecutable_pool. استنادًا إلى التنفيذ الأولي من Daniil Timižev (#77128). #105131 (Alexey Milovidov). - تقديم
SELECT count(*) FROM t WHERE col <op> default(col)اعتمادًا على إحصاءات sparsity لكل عمود فيserialization.jsonمن دون أي فحص للبيانات، عندما يقسم predicate العمود بدقة إلى قيم default وغير default (ضمن experimental setting جديد هوoptimize_trivial_count_with_sparsity_filter، وهو معطَّل افتراضيًا). #105890 (Raúl Marín). - تُسجَّل الآن API request الخاصة بـ Prometheus Query API إلى
/api/v1/queryو/api/v1/query_rangeفيsystem.query_logمع مقاييسread_rowsوread_bytes. #106611 (James Cunningham). - يمكن الآن لمسار القراءة التجريبي
ReaderExecutor(use_reader_executor، معطّل افتراضيًا) إبقاء source connection البعيد مفتوحًا وإعادة استخدامه عبر قراءات متسلسلة، مما يقلّل عدد طلبات object storage أثناء عمليات الفحص. #107735 (Sema Checherinda). كما أصبح يدعم أيضًا قراءة الملفات المشفّرة، مع cache عام لـ ترويسة التشفير يُضبط عبر server setting encryption_header_cache_sizeويُفرَّغ باستخدامSYSTEM DROP ENCRYPTION HEADERS CACHE. #109702 (Sema Checherinda). - دعم قراءات plan الاستعلام الموزّع لـ
SELECT ... FINALعلى جداول عائلةMergeTreeعند تفعيلmake_distributed_plan. #108148 (Alexander Gololobov). - إضافة تنفيذ تجريبي قائم على plan لوضع parallel replicas في استعلامات
MergeTree. #108504 (Igor Nikonov). - أُضيفت عائلة codec المتجهات التجريبية
Quantize، مع Rewrite اختياري لبحث متّجهي تقريبي على مرحلتين فوق streams المرافقة المُكمّاة. #108565 (Shankar Iyer). - أُعيد إحياء codec الضغط الفقدي التجريبي
SZ3ذي الخطأ المحدود لأعمدةFloat32/Float64(ومصفوفاتها)، والذي نُفِّذ أصلًا بواسطة Konstantin Vedernikov (#83088). ويتطلبallow_experimental_codecs. #108788 (Alexey Milovidov). كما أُصلحت قراءة البيانات المضغوطة باستخدامSZ3('ALGO_LORENZO_REG', ...)، التي كانت تفشل سابقًا معCORRUPTED_DATA، وتم تفادي سلوك غير معرّف عند ضغط القيم floating-point غير المنتهية (NaNوقيم اللانهاية). #110762 (Alexey Milovidov). - أُضيف codec التجريبي
ZXC— وهو codec لا متناظر من نوع LZ بضغط بطيء وفك ضغط سريع جدًا، مع compression ratio بينLZ4وZSTD. ويتطلبallow_experimental_codecs = 1، ويعرضهsystem.compression_codecsعلى أنه تجريبي. #110620 (Alexey Milovidov). #111007 (Alexey Milovidov). - يمكنك الآن المصادقة على OneLake باستخدام Bearer token تم الحصول عليه مسبقًا عبر الإعداد
onelake_bearer_token، بدلًا منonelake_client_idوonelake_client_secret. وهذا يجنّب مشاركة client secret طويل الأمد. لا يتم تحديث token، لذا يجب إعادة إنشاء database بمجرد انتهاء صلاحيته. #109104 (Asya Shneerson). - لم تعد AI functions تأخذ named collection بوصفها argument الموضعي الأول. تأتي credentials من الإعدادين
ai_function_text_default_credentials/ai_function_embedding_default_credentialsأو من المفتاحcredentialsفي argument اختياري أخير من النوعMap(String, String)، والذي يحمل أيضًا الإعدادات القابلة للضبط (model,max_tokens,temperature,system_prompt,instructions,dimensions). #109232 (George Larionov). وتأخذ الدالةaiEmbedالآنmodelبوصفه argument موضعيًا مطلوبًا (aiEmbed(text, model[, params])) بدلًا من قراءته من named collection، مما يضمن قابلية إعادة الإنتاج لـ embeddings. #110619 (George Larionov). - إصلاح
data_uncompressed_bytesلفهارس التخطي المعبأة فيskp_idx.packed(عبرpacked_skip_index_max_bytes): كان الحجم غير المضغوط المُبلّغ عنه هو في الواقع الحجم المضغوط، ما كان قد يمنع أيضًا تفعيلdistributed_index_analysis. #109272 (Raúl Marín). - أُضيف تخزين تجريبي معبأ لـ data part في جداول
MergeTree، بحيث تُخزَّن معظم ملفات الجزء في أرشيف واحدdata.packedبدلًا من ملف لكل stream (تظل projections وبعض ملفات الخدمة، مثلtxn_version.txt، مكتوبة بشكل منفصل). ويجري التحكم فيه عبر الإعداداتmin_bytes_for_full_part_storageوmin_rows_for_full_part_storageوmin_level_for_full_part_storage، وهو معطّل افتراضيًا. وما إن يبدأ جدول في كتابة الأجزاء المعبأة، حتى تعجز إصدارات server الأقدم عن قراءتها، لذا فإن تمكين هذا التنسيق يمنع الرجوع إلى إصدار أقدم من server. #108118 (Raúl Marín). - أُضيفت table function تجريبية باسم
eval، تُقيِّم expression ثابتًا إلى query string ثم تنفّذ استعلامSELECTواحدًا ناتجًا عنه. هذه الميزة معطّلة افتراضيًا، ويمكن تمكينها عبر الإعدادallow_experimental_eval_table_function. المؤلف: Yue Ni. #110132 (Alexey Milovidov). - إضافة دعم ضغط
zstdإلى HTTP handler التجريبي لـ Prometheus remote-write v1. #110907 (James Cunningham). - رُقّيت الكتابة إلى جداول
DeltaLake(الإعدادallow_experimental_delta_lake_writes) إلى مرحلة Beta. #107034 (Kseniia Sumarokova). - أُضيفت مقاييس
ProfileEventsDistributedPlanRemoteTasksوDistributedPlanLocalExecutionوDistributedPlanHostsUsedلمراقبة تنفيذ distributed query plans التجريبية (make_distributed_plan). #107985 (Shankar Iyer). - أُزيل التخزين التجريبي المستند إلى RocksDB في Keeper (
experimental_use_rocksdb). وسيصل قريبًا تخزين جديد أفضل على القرص. #108000 (Michael Kolupaev). - أصبح distributed index analysis (وهي ميزة تجريبية يتحكم فيها الإعداد
distributed_index_analysis) يرسل القوائم الكبيرة من أسماء data part إلى remote server كقيم scalar بدلًا من تضمينها في query text. وهذا يتجنب الإخفاقات المحتملة بسبب حدودmax_ast_elements/max_query_sizeويزيل عبء parsing الخاص بـ AST. #110419 (Azat Khuzhin). - تحسين دوال aggregation التجريبية
timeSeries*ToGrid: أصبحت buckets الآن محاذاة لكلٍّ من step وwindow، كما أصبح aggregation النهائي أسرع بكثير عندما تكون window أكبر بكثير من step. وقد تغيّر format الخاص بـ serialization لحالة aggregation على نحو غير متوافق (فهذه الدوال تجريبية). #106724 (Vitaly Baranov). - أصبحت target tables الخارجية لجدول
TimeSeriesتُسجَّل الآن بوصفها referential dependencies: وعلى غرار materialized views، يمنع هذا إسقاط target table خارجي قبل إسقاط جدولTimeSeriesالذي يشير إليه (إذا كانcheck_referential_table_dependenciesمُمكّنًا). #108388 (Vitaly Baranov). - إضافة دالة PromQL
increase. #111023 (Vitaly Baranov).
تحسين الأداء
- أصبح بإمكان عمليات
JOINالآن استخدام فهرس المفتاح الأساسي أو skip indexes على الجدول الواقع في الجهة اليسرى لاستبعاد الحبيبات. ويُتحكَّم في ذلك عبر الإعدادenable_join_runtime_filters_index_analysis. #109085 (Shankar Iyer). - أصبحت عمليتا التسلسل وإلغاء التسلسل لمتجهات الأنواع القابلة للتسلسل مباشرةً تستخدمان استدعاء إدخال/إخراج واحدًا للمخزن المؤقت بدلًا من معالجة العناصر واحدًا واحدًا. #89842 (Jimmy Aguilar Mena).
- تحسين عمليات البحث العكسي في القاموس: إذ يُبسَّط الآن شرط المساواة الثابت، مثل
WHERE dictGet(dict, attr, key_expr) = value، مباشرةً إلى مرشح مفتاح (key_expr = constأوkey_expr IN [...]أوWHERE 0) بدلًا من إعادة كتابته كاستعلام فرعي من النوعIN (SELECT ... FROM dictionary(...))، كما أصبح المسار الثابت لـdictGetKeysيُنفَّذ بالتوازي. #91164 (Nihal Z. Miaji). - إضافة إعداد جديد
merge_tree_generic_exclusion_search_max_stepsيحدّ من عدد الخطوات التي تقضيها خوارزمية البحث بالاستبعاد العام في تحليل فهرس المفتاح الأساسي لكل جزء بيانات. وتُستهلك الحصة أولًا على أكبر نطاقات المفاتيح المتبقية، لذا فإن حتى الحصة الصغيرة تستبعد معظم البيانات؛ أما النطاقات التي لم تُحلَّل بالكامل فتُقرأ كاملةً، لذلك تظل نتيجة الاستعلام صحيحة ولكن قد تُقرأ حبيبات أكثر. ويُطبَّق الحد بصورة مرنة: إذ قد يُتجاوز بما لا يزيد علىmerge_tree_coarse_index_granularityخطوة، بالإضافة إلى خطوة واحدة لكل نطاق يكون الجزء مقسّمًا إليه مسبقًا (على سبيل المثال، بواسطة ذاكرة التخزين المؤقت لشرط الاستعلام). وتعني القيمة الافتراضية 0 عدم وجود حد لعدد الخطوات. #92779 (Michael Jarrett). - أصبحت الاستعلامات التي تتضمن
ORDER BYوLIMITعلى العروض فوق جداولDistributedتستخدم الآن تحسين دمج التدفقات المرتبة: إذ يُدفَعORDER BY/LIMITالخارجي إلى الاستعلام الداخلي للعرض البسيط، بحيث يرتّب كل shard بياناته محليًا ويقوم المنسّق بدمج التدفقات المرتبة مسبقًا بدلًا من إجراء فرز كامل. #94102 (matanper). - جرى تفعيل
optimize_or_like_chainافتراضيًا. يُغلق #87779. #94517 (Alexey Milovidov). - وَسْم جداول السجل في النظام من نوع
MergeTreeالتي خضعت للتدوير وكانت non-replicated ولا تحتوي على TTL بأنهاtable_readonlyلتجنّب عمليات الخلفية غير الضرورية. كما أن إعدادtable_readonlyفيMergeTreeيعطّل الآن أيضًا جميع أعمال الخلفية على جدولMergeTreeعادي — بما في ذلك عمليات الدمج العادية، وعمليات TTL (DELETE/MOVE/إعادة الضغط)، وعمليات دمج إعادة الضغط، وmutations في الخلفية، ونقل الأجزاء في الخلفية — ويرفض أوامر partition المعدِّلة (ATTACH/MOVE/DROP/DROP DETACHED/FETCH/REPLACE PARTITIONوMOVE PARTITION ... TO TABLEإلى الجدول)، بالإضافة إلى عمليات الإدراج وmutations وOPTIMIZEالتي كان يرفضها بالفعل. ونتيجةً لذلك، فإن جدولtable_readonlyالذي يحتوي على TTL لم يعد يستعيد بياناته منتهية الصلاحية ما دام هذا الإعداد مفعّلًا. #95079 (Mathuranath Metivier). - تحسين أداء جلب سجل مستخدم واحد من
system.usersعندما يحتوي الخادم على عدد كبير من المستخدمين. #96699 (Alistair Evans). - أصبحت القراءة بالترتيب مع parallel replicas تستخدم الآن المنطق نفسه المتمثل في تقسيم الجدول إلى
max_threadsأجزاء كما في القراءة المحلية، لتحقيق قدر أفضل من التوازي. #101434 (Nikita Taranov). - استخدم حدود فهرس minmax للتقسيم من أجل تقليم المزيد من الحبيبات أثناء تحليل المفتاح الأساسي لجداول
MergeTree، عندما يكون أحد أعمدة المفتاح الأساسي أيضًا عمود إدخال في مفتاح التقسيم. على سبيل المثال، في جدولMergeTreeيحتوي علىORDER BY (id, event_time)وPARTITION BY toYYYYMM(event_time)، سيستخدم ClickHouse فهرس minmax للتقسيم علىevent_timeأثناء تحليل فهرس المفتاح الأساسي لاتخاذ قرارات تقليم أكثر دقة للحبيبات. يتحكم في ذلك الإعداد الجديدuse_partition_minmax_for_primary_key_pruning(مُمكّن افتراضيًا). #103480 (UnamedRus). - تم تمكين ذاكرة التخزين المؤقت لشرط الاستعلام للاستعلامات التي تستخدم التصفية الديناميكية Top-K (
ORDER BY ... LIMIT n). ويُقسَّم مُدخل الذاكرة المؤقتة بحسب معاملات خطة Top-K، بحيث يعيد الاستعلام نفسه استخدام نتائج عامل التصفيةWHEREالمخزنة مؤقتًا، بينما يؤدي اختلافLIMITأو عمود الفرز أو اتجاه الفرز إلى إنشاء مُدخل جديد. #104478 (Alexey Milovidov). - أُضيف الإعداد
use_constant_folding_in_index_analysis(معطّل افتراضيًا). عند تمكينه، يقوم تحليل المفتاح الأساسي وMinMaxوتحليل فهرس التخطي فيMergeTreeبطيّ الثوابت على مستوى القسم داخل مسند التصفية بشكل منفصل لكل جزء، مما يحسّن التقليم لعوامل التصفية التي تعتمد تفرعاتها على قيم التقسيم، مثل(a = 1 AND b >= 1) OR (a = 2 AND b > 10)معPARTITION BY a. #104582 (Mikhail Artemenko). - دفع
LIMITإلى التجميع حسب الترتيب لتمكين الإنهاء المبكر عندما يتطابق مفتاحGROUP BYمع مفتاحORDER BYومفتاح فرز الجدول، مما يقلل بشكل كبير عدد الصفوف المقروءة. #104859 (Konstantin Bogdanov). - أصبح تحديث profile events الآن أسرع بما يصل إلى 30 مرة، باستخدام عمليات ذرية لكل CPU للعدادات على مستوى الخادم ولكل مستخدم. يتحكم في ذلك إعداد الخادم
user_profile_events_per_cpu(ويستخدم نحو 640 KiB لكل مستخدم على 64 نواة، لذا مع وجود عدد كبير جدًا من المستخدمين قد يكون من المنطقي إبقاؤه معطّلًا). #105056 (Azat Khuzhin). - تم تمكين
allow_aggregate_partitions_independentlyافتراضيًا. عندما يكون مفتاحGROUP BYمناسبًا لمفتاح التقسيم، يمكن لـ ClickHouse تجميع كل قسم بشكل مستقل وتخطي خطوة الدمج العامة. وتتجاوز آلية الاستدلال في وقت التشغيل هذا التحسين تلقائيًا عندما يجعل تخطيط الأقسام ذلك غير ملائم (عدد أقسام قليل جدًا، أو عدد أقسام كبير جدًا، أو أحجام أقسام غير متوازنة بشكل ملحوظ). #105128 (Alexey Milovidov). - أصبحت استعلامات البحث المتجهي مع إعادة التقييم (
vector_search_with_rescoring = 1) تحسب الآن المسافة الدقيقة فقط للصفوف التي يعيدها الفهرس المتجهي، مع تطبيق عامل تصفية دقيق لمواضع الصفوف بدلًا من إعادة التقييم بالقوة الغاشمة للصفوف المجاورة من نفس حبيبةMergeTree. #105591 (Sergey Kuznetsov). #108846 (Sergey Kuznetsov). - تحسين أداء خوارزمية الربط
partial_mergeعلى مفاتيحFixedStringمن خلال مقارنة سلاسل من القيم دفعة واحدة بدلًا من إجراء استدعاء مقارنة واحد لكل قيمة. #105737 (Artem Zuikov). - أصبح
SHOW TABLESوsystem.tablesعلى Data Lake Catalog (Iceberg REST وGlue وUnity وHive وPaimon) يدفعان الآن المسندات المقيّدة بمساحة الاسم إلى الـ catalog، مما يتجنب إجراء مسح كامل له. يُغلق #105022. #106029 (Smita Kulkarni). - تقييد الذاكرة غير المتعقَّبة لكل CPU لتجنّب
overcommitوأخطاء نفاد الذاكرة (تُضبط الحدود باستخدام إعدادات الخادمmax_per_cpu_untracked_memoryوper_cpu_untracked_memory_thread_buffer). #106055 (Azat Khuzhin). - تسريع المشغّلات التي تفحص stream مرتبًا لاكتشاف سلاسل من قيم key المتساوية —
DISTINCTبالترتيب، وLIMIT BYبالترتيب، وLIMIT BYالسالب بالترتيب، وjoinsfull_sorting_mergeوpartial_merge. #106502 (Nihal Z. Miaji). - تنفيذ reader وwriter أصليَّين لتنسيقي
ArrowوArrowStreamلا يستخدمان مكتبة Apache Arrow، مما يتجنب نسخ البيانات والتحويلات الإضافية. وأصبح هذا الآن الخيار الافتراضي (الإعدادانinput_format_arrow_use_native_readerوoutput_format_arrow_use_native_writer)، وهو أسرع في القراءة والكتابة على حد سواء. #106522 (Alexey Milovidov). - إعادة تفعيل LTO لـ jemalloc بعد إصلاح تلف في thread-cache ظهر مع LTO، مما يحسّن الأداء. #106898 (Azat Khuzhin).
- تقليل memory usage وتحسين أداء
JOINs. يستخدم الجانب الأيمن من hash join الآن مرجع row مدمجًا بطول 8 بايت قائمًا على الفهرس، بحيث تصبح entries جدول hash في joinsALLصغيرة بقدر نظيراتها في joinsANYلجميع أنواع key. أُجري benchmark على queries join كبيرة من نوعparallel_hash— joinsINNERوANYلجداول تضم 100–300 مليون row بمفاتيحUInt64وString، مع مفاتيح فريدة ومكررة: أصبح وسيط query أسرع بنحو 12% واستخدم Peak memory أقل بنحو 15%، من دون أن تصبح أي query أبطأ. وحققت joinsINNERعلى مفاتيحUInt64أكبر تحسن (أسرع بنحو 21% في الوسيط مع ذاكرة أقل بنسبة 38%). #107189 (Harikrishnan Prabakaran). - أصبحت join keys أحادية العمود من النوع
LowCardinality(String)غيرNullableمدعومة أصلًا الآن في hash join. #107264 (Nikita Taranov). - إضافة خوارزمية تعداد ترتيب join المسماة
dpsub(البرمجة الديناميكية على المجموعات الفرعية)، بما يوفّر planات join مثالية مع overhead optimization أقل منdpsizeودعمًا للـ joins غير الداخلية. #107351 (Fisnik Kastrati). - تسريع loading لـ filesystem cache عند بدء التشغيل من خلال ترميز حجم كل ملف cache في اسمه (
<offset>_<size>)، مما يتجنب تنفيذstatلكل ملف. ويظل loading لملفات cache المكتوبة بواسطة الإصدارات الأقدم مدعومًا. #107415 (Alexey Milovidov). - تحسين أداء
arrayElementعلىArray(LowCardinality(String))ووظائفLIKEالخاصة بـ map علىMaps التي تحتوي على مفاتيح أو قيمLowCardinality(String)، وذلك بتجنب materialization غير الضروري للسلاسل النصية. #107450 (Michael Jarrett). - تجنب تحويل aggregation أحادي المستوى إلى two-level aggregation عندما يكون memory usage منخفضًا، وذلك عبر تتبّع ذاكرة aggregation state نفسها بدلًا من ذاكرة query بأكملها. #107490 (Hechem Selmi).
- تسريع تحليل queries التجميعية: يُحتسب مفتاح cache لإحصاءات حجم aggregation hash-table الآن انطلاقًا من query plan بدلًا من بناء AST الكامل للـ query. #107643 (Dmitry Novik).
- تحسين أداء
INTERSECT ALLوEXCEPT ALL(الوضع الافتراضي لـINTERSECTوEXCEPT) عدة أضعاف، وذلك بجعل مفتاح المجموعة المتعددة يعتمد على قيمة الصف بدلًا من احتسابhashلكل صف باستخدام SipHash. #107649 (Raúl Marín). - إعادة بناء عوامل تصفية سياسات الصفوف من دون الاحتفاظ بقفل الذاكرة المؤقتة، مما يحسّن قابلية توسع الاستعلامات عند تنفيذ
CREATE ROW POLICYوDROP ROW POLICYبالتزامن. #107917 (Azat Khuzhin). - تسريع الدوال
matchوextractوextractAllوreplaceRegexpOneوreplaceRegexpAllللتعبيرات النمطية البسيطة عبر ترجمتها إلى native code باستخدام LLVM. ويتحكم في ذلك الإعداد الجديدcompile_regular_expressions(مفعّل افتراضيًا)؛ أما الأنماط الواقعة خارج المجموعة الفرعية المدعومة فتعود تلقائيًا إلى محرك RE2. #108004 (Alexey Milovidov). - تسريع فك ضغط ZSTD على AArch64 (ARM) للأعمدة ذات إزاحات المطابقة الصغيرة، مثل أعمدة الأعداد الصحيحة ذات العرض الثابت، من خلال تنفيذ نسخ متّجه للتداخلات القصيرة عند الإزاحات القصيرة باستخدام NEON. فعلى سبيل المثال، أصبح فك ضغط عمود
UInt64أسرع حتى ~2.3× على AWS Graviton 4. #108049 (Alexey Milovidov). - استخدام مكتبة
libdeflateلضغط وفك ضغط gzip/zlib/deflate، مما يجعلها أسرع (الضغط ~1.15× مع ratio أفضل، وفك الضغط ~1.4–1.5×) لبيانات.gz/HTTP/url/s3وcodec GZIP الخاص بـ Parquet. #108074 (Alexey Milovidov). - تحسين أداء استعلامات البحث النصي المقترنة بعامل تصفية للمفتاح الأساسي. #108114 (Anton Popov).
- استخدام إحصاءات runtime التي جُمعت أثناء التشغيل الأول للاستعلام لتحسين عمليات التشغيل اللاحقة: إذ يمكن لخوارزمية join
hashالتبديل تلقائيًا إلىparallel_hashاستنادًا إلى الإحصاءات المجمعة. #108125 (Hechem Selmi). كما جرى تحسين حجم عوامل تصفية runtime الخاصة بـ join باستخدام حجم hash table من إحصاءات runtime الخاصة بـ join، ويتحكم في ذلك الإعداد الجديدjoin_runtime_filter_size_from_hash_table_stats. #108313 (Hechem Selmi). - تم تحسين سرعة فك ضغط LZ4 للأعمدة ثابتة الحجم ومنخفضة cardinality. #108175 (Nikita Taranov).
- تسريع الدوال
trimLeft/trimRight/trimBothالخاصة بالمسافات البيضاء الافتراضية (وأيضًا الأسماء البديلة لهاltrim/rtrim/trim): تُنسخ الصفوف المتتالية التي لا تحتاج إلى إزالة مسافات ضمن Batch واحدة، ولا يُجرى فحص المسافات لكل صف إلا للصفوف التي تحتوي فعلًا على مسافة بادئة أو لاحقة. #108177 (Groene AI). - تحسين أداء
replaceAllوreplaceRegexpAllعندما يكون pattern حرفًا واحدًا ويكون replacement حرفًا واحدًا (على سبيل المثالreplaceRegexpAll(s, ' ', '_')). لم تعد مثل هذه الاستبدالات تغيّر layout الخاص بالسلسلة، لذلك يُنسخ العمود الآن مرة واحدة وتُعاد كتابة البايتات المطابقة في موضعها بدلًا من تشغيل حلقة بحث لكل مطابقة. #108178 (Groene AI). - تحسين أداء الدالة
pointInPolygonعند استخدام مضلع ثابت. أصبحت ذاكرة التخزين المؤقت للمضلعات المُعالجة مسبقًا تُفهرَس الآن بحسب الوسائط الثابتة الخام، بحيث لا يُحلَّل المضلع الثابت إلا مرة واحدة فقط (عند الإخفاق في ذاكرة التخزين المؤقت) بدلًا من إعادة تحليله مع كل كتلة إدخال. #108184 (Groene AI). - تسريع تحليل تمثيل التاريخ والوقت القياسي
YYYY-MM-DD hh:mm:ssفي وضع أفضل جهد (date_time_input_format = 'best_effort',cast_string_to_date_time_mode = 'best_effort')، وهو الوضع الافتراضي. يعالج هذا تراجعًا في أداء التحليل ظهر عند تبديل تلك القيم الافتراضية منbasicإلىbest_effort. #108187 (Groene AI). - تجنّب الاحتفاظ بعدّادات الانتقائية في
system.predicate_statistics_logعلى مسار القراءة فيMergeTreeعندما تكون الميزة معطّلة (predicate_statistics_sample_rate = 0، وهو الافتراضي). يزيل هذا تحديثًا ذريًا لكل حبيبة واحتسابO(rows)لعدد البتات المضبوطة في عامل التصفية من كل عملية قراءة، مما يعالج تراجعًا في الأداء كان أوضح ما يكون على AArch64. #108190 (Groene AI). - تسريع تحليل الأعداد ذات الفاصلة العائمة من النص عند استخدام
precise_float_parsing = 1، بحيث يصبح بنفس سرعة المحلّل الافتراضي أو أسرع منه على معظم المدخلات. ويتضمن ذلك أيضًا ترقية مكتبةfast_floatالمضمّنة إلى v8.2.10. #108205 (Raúl Marín). - استخدام مكتبة
simdutfلوظائف ترميز base64 وفك ترميزه، مما يحسّن أداءها. #108333 (Konstantin Bogdanov). - تحسين
DISTINCTللمفاتيح المكلفة عالية الكاردينالية. #108366 (Nihal Z. Miaji). - في البنى غير المعتمدة على Linux (macOS وFreeBSD)، لم يعد jemalloc يطهّر الصفحات المتسخة على نحو متعجّل (استدعاء نظام
madviseواحد لكلfree)؛ بل يستخدم الآن خيط تطهير في الخلفية معdirty_decay_msمحدود، كما هو الحال في Linux. يسرّع هذا بشكل ملحوظ أعباء العمل كثيفة التخصيص والتحرير مثل تعبيرات الجدول الشائع التعاودية (~2x في benchmark لتعبير جدول شائع تعاودي على macOS) مع تأثير ضئيل جدًا على RSS. #108430 (Alexey Milovidov). - تسريع تخطيط الاستعلامات ضمن المحلّل للتعبيرات التي تشير إلى الاسم المستعار
WITHنفسه أو تكرّر التعبير الفرعي نفسه مرات عديدة (مثل سلاسلif/multiIfالمتداخلة بعمق)، وذلك عبر عدم إعادة بناء التعبيرات الفرعية المشتركة عند إنشاء DAG الإجراءات. #108523 (Dmitry Novik). - تُبنى مرشحات وقت التشغيل الآن على مفاتيح المساواة حتى عندما تحتوي عبارة
ONأيضًا على محمولات لا تعتمد على المساواة، مما يقلّل عدد الصفوف الداخلة إلى ربط التجزئة في عمليات الربط التي تمزج بين شروط المساواة وعدم المساواة. ولا يتأثرLEFT ANTI JOINبذلك. #108579 (Antonio Álvarez Caballero). - تفعيل
-fno-math-errnoعلى مستوى قاعدة الشيفرة بالكامل، مما يتيح للمصرّف تحسين الدوال الرياضية بشكل أفضل. #108628 (Nikita Taranov). - خفض عتبة الجلب المسبق البرمجي لجداول التجزئة الخاصة بالتجميع والربط من
4 * L2 cache sizeإلىL2 cache size، بحيث يُفعَّل الجلب المسبق بمجرد أن لا يعود جدول التجزئة ملائمًا لذاكرة L2. يعالج هذا تراجعًا فيGROUP BYوJOINعلى جداول تجزئة متوسطة الحجم (~1-8 MiB) على المنصات التي يكون فيها حجم L2 المُبلّغ عنه كبيرًا (مثل AArch64 مع L2 بحجم 2 MiB). #108655 (Groene AI). - تحسين أداء الدوال النافذة. أصبحت الاستعلامات النافذة على الجداول العريضة التي تتضمن
SELECT *تستخدم ذاكرة أقل بكثير وتعمل أسرع. كما أصبحت دوال التجميع النافذة، بما في ذلكquantile*وuniq*وgroupArray، أسرع معOVER ()وOVER (ORDER BY ... RANGE ...). وأصبحت الدالةcume_distأسرع أيضًا، كما تحسّن أداء النوافذ التي تستخدمPARTITION BYأوORDER BYعلى الأعمدة التي تحتوي على كثير من القيم المتكررة. #108688 (Nihal Z. Miaji). - تسريع تحليل الاستعلامات التي تحتوي على سلاسل
ANDكثيرة أو كبيرة جدًا من المقارنات: أصبحت آلية التحسينoptimize_and_compare_chainالآن مقيّدة بميزانية عمل (إعداد جديدoptimize_and_compare_chain_max_hash_work) بدلًا من إجراء hash لجزء كبير من شجرة الاستعلام، ولم تعد آلية تحليل لامبدا تعيد حساب قيم hash لنص لامبدا كجزء من حماية التكرار. #108757 (Alexey Milovidov). - إصلاح تراجع في الأداء عند قراءة أعمدة
JSON/Dynamicباستخدام عدة threads: إذ كان البحث عن الإعدادinput_format_binary_max_type_complexityلكل قيمة يتسبب في تنازع على عدّاد المراجع في سياق الاستعلام المشترك، ما يجعل القراءات المتوازية تسلسلية؛ أما الآن فأصبحت قيمة الإعداد مخزّنة مؤقتًا لكل thread. #108797 (Seva Potapov). - إصلاح تراجع في الأداء (أُدخل في #71781) حيث توقفت قراءة أعداد كبيرة من الملفات الصغيرة من object storage عبر
s3ودوال الجداول الأخرى عن prefetching وعادت إلى القراءات المتزامنة، ما أدى إلى إبطاء كبير للقراءات أحادية الخيط وذات التوازي المنخفض لكميات كبيرة من الملفات الصغيرة جدًا. #108872 (Nikita Fomichev). كما أصبح prefetch الأولي للكائنات الصغيرة يُصدر الآن أيضًا عندما تمر قراءات object storage عبر filesystem cache (filesystem_cache_name)، لذلك لم تعد قراءات الأعداد الكبيرة من الملفات الصغيرة (مثل ingestion فيS3Queue) مع تفعيل cache متزامنة ومقيّدة بزمن الاستجابة. #109478 (Nikita Fomichev). - تحليل القيم الحرفية المتداخلة بعمق من نوع Array وtuple بزمن خطي بدلًا من التربيعي. #108892 (Alexey Milovidov).
- تقليل الحمل الناتج عن تنازع الأقفال في خوارزمية الربط
parallel_hash. #108938 (Hechem Selmi). - تسريع
estimateCompressionRatioللأعمدة المرمّزة بـT64من خلال حساب الحجم المضغوط تحليليًا بدلًا من ضغط البيانات فعليًا. #109054 (Raufs Dunamalijevs). - إزالة عنق زجاجة أحادي الخيط في خطوة shuffle ضمن خطط الاستعلامات الموزعة: إذ أصبح كل stream من المنبع يوزّع صفوفه على حاوية الوجهة بشكل مستقل بدلًا من تمرير تدفق البيانات بالكامل عبر transform واحد. #109206 (Alexander Gololobov).
- تقليل استهلاك CPU أثناء الخمول في خادم Keeper. #109255 (Michael Kolupaev).
- تسريع serialization وعمليات الدمج لأعمدة
JSONالتي تحتوي بياناتها المشتركة على كثير من المسارات المتناثرة: فعند flattening البيانات المشتركة إلى أعمدة لكل مسار، أُزيل المسح لكل صف عبر جميع أعمدة المسارات المتراكمة، وأصبح استكمال الفجوات للبيانات السابقة يتم دفعة واحدة بدلًا من إدراج القيم الافتراضية خليةً تلو الأخرى. #109341 (Groene AI). - تقليل الحمل الإضافي على CPU عند تقييم التعبيرات في الاستعلامات التي تتضمن عددًا كبيرًا من الأعمدة (على سبيل المثال، البحث المتجهي على عمود
QBitمعstrideصغير، حيث يُوسَّع كل متجه إلى مئات الأعمدة الفرعية لمستويات البت، وتُمرَّر كلها إلى استدعاء واحد لـ*DistanceTransposed). #109380 (Alexey Milovidov). - تحسين أداء دوال Geo في H3 (
h3ToGeoBoundary,h3ToGeo,h3CellAreaM2/h3CellAreaRads2,geoToH3) عبر حساب الجيب/جيب التمام المقترنين معًا، وإزالة الاستدعاءات المثلثية الزائدة في تحويلات الإحداثيات. لم تتغير النتائج (متطابقة تمامًا على مستوى البت). #109399 (Alexey Milovidov). - تحسين أداء المقارنات (
<,>,<=,>=) لأنواع الأعداد الصحيحة العريضة (Int128,UInt128,Int256,UInt256والأنواع المبنية عليها مثلDecimal128) بما يصل إلى 7 مرات، وكذلك تحويل الأعداد الصحيحة الموقعة إلىInt256(حتى 7 مرات على البيانات مختلطة الإشارة)، وذلك بجعل شيفرة المقارنة وتوسيع الإشارة بلا تفرعات. #109474 (Manuel). - جرى تحسين
uniqCombined(بما في ذلك حالة aggregation من دون مفاتيح) وuniqHLL12. #109794 (Anton Popov). #109831 (Anton Popov). - أصبحت الدالتان
arraySortوarrayReverseSortأسرع عدة مرات عند العمل على مصفوفات رقمية (بما في ذلكDecimalوDateTime64) عند استدعائهما من دون لامبدا. #109832 (Manuel). - تسريع
addDaysوaddWeeksوsubtractDaysوsubtractWeeksعلى قيمDateTimeوDateTime64في المناطق الزمنية ذات الإزاحة الثابتة (مثل UTC) عبر استخدام مسار حسابي سريع. #109836 (Manuel). - جرى تحسين تحليل الفهرس النصي. #109886 (Anton Popov).
- إضفاء التوازي على معالجة الصفوف غير المنضمة في خوارزمية join
parallel_hashفي حالتين إضافيتين: عند وجود عامل تصفية متبقٍّ، وفي حالة مفاتيح join الصغيرة (خريطة hash أحادية المستوى). #110008 (Hechem Selmi). - أصبحت استجابات واجهة الويب المضمنة (واجهة Play UI، وdashboards، ومعالجات الملفات الثابتة) تُضغط الآن وفقًا لترويسة
Accept-Encodingالخاصة بالعميل، باستخدام zstd أو gzip أو deflate أو brotli أو lz4 أو xz أو snappy أو bzip2. على سبيل المثال، يتقلص حجم صفحة/playمن نحو 350 كيلوبايت غير مضغوط إلى أقل من 120 كيلوبايت مع zstd، مما يقلل أوقات التحميل على الاتصالات البطيئة. وتُترك الاستجابات المضغوطة مسبقًا دون تغيير، كما يُرسَلVary: Accept-Encodingلضمان صحة تقسيم CDN وcache. #110108 (Sayantanu Dey). - ادفع عامل التصفية إلى ما دون دالة نافذة أو إلى ما دون
LIMIT BYعندما يكون ذلك آمنًا: إذ إن أي predicate مكتوب فوقهما (مثلWHEREخارجي يحيط بـ subquery، أو conjunct فيQUALIFY) ويشير فقط إلى أعمدةPARTITION BYالخاصة بدالة النافذة، أو فقط إلى أعمدة المفتاح الخاصة بـLIMIT BY(في حالةLIMIT n BYعندما يكونn >= 1ومن دونOFFSET)، يصل الآن إلى طبقة التخزين ويتيح pruning للمفتاح الأساسي وpartition، وskip indexes، وprojections. على سبيل المثال، لم يعدSELECT ... row_number() OVER (PARTITION BY key ORDER BY ts) AS rn ... QUALIFY rn = 1 AND key = 'x'يقرأ الجدول بالكامل ويطبق عليه دالة نافذة. #110114 (Groene AI). #110116 (Groene AI). - مع
join_use_nulls = 1، فإنWHEREالذي يستبعد قيم NULL ويشير إلى أعمدة من جانبي outer join (مثلWHERE l.k = 42 AND r.k = 42) يحوّل الآن عملية join إلىINNER(أوLEFT/RIGHT) ويتيح pruning للمفتاح الأساسي، تمامًا كما في حالةjoin_use_nulls = 0. سابقًا كان هذا التحويل يُتخطّى في هذه الحالة، وكان كلا الجدولين يُقرآن بالكامل. #110121 (Groene AI). - أصبحت الدوال التي تحتوي على argument واحد
Nullableغير ثابت تشارك null map الخاص بـ argument مع النتيجة بدلًا من تخصيص واحد جديد ودمجه. #110151 (Manuel). - تجنّب إجراء تخصيص على heap لكل فحص hyperrectangle في index analysis للمفتاح الأساسي، مما يسرّع تصفية العلامات بنسبة 5-26% بحسب شكل query. #110153 (Manuel).
- حسّن أداء الدالتين
arrayMinوarrayMaxعلى Array رقمية بنحو ~1.3-1.5x باستخدام اختزال موجّه vectorized بدلًا من حلقة مقارنة لكل عنصر. #110163 (Manuel). - اجعل فك ضغط codec
Deltaموجّهًا vectorized. أصبح فك الترميز الآن أسرع بمقدار 1.5–5 مرات لأنواع البيانات ذات 8/16/32-بت، مما يجعل scans الأعمدة المضغوطة بـDeltaأسرع حتى 20%. #110189 (Manuel). - سرّع string search functions (
like,position,match,countSubstrings,hasTokenوغيرها) على أعمدةEnumباستخدام needle ثابت، وذلك عبر البحث فقط في أسماء enum المميّزة ثم إرجاع النتائج لكل row، بدلًا من البحث في كل row. #110325 (Alexey Milovidov). - سرّع aggregate functions
groupBitOr/groupBitAnd/groupBitXorوعائلة التباين (varPop,varSamp,stddevPop,stddevSamp,skewPop,skewSamp,kurtPop,kurtSamp,covarPop,covarSamp,corr) عبر المعالجة الدفعية الموجّهة vectorized: أسرع حتى 4 مرات مع combinator -Ifفي conditions غير المتوقعة، وأسرع حتى 3 مرات لعائلة التباين من دونه. #110461 (Manuel). - سرّع تحليل text index (المرحلة التي تحدد granules التي يجب قراءتها): استخدم البحث بالاستبعاد بدلًا من التكرار على جميع granules، وتجنّب إنشاء bitmap مؤقتة لكل فحص نطاق. #110530 (Anton Popov).
- احتساب الحجم على القرص للأعمدة الفرعية من
Mapضمن تحسينPREWHEREالتلقائي. يُصلح هذا تراجعًا في أداءPREWHEREأُدخل في #99200. جزء من #110462. #110623 (Pavel Kruglov). - تسريع تحليل قيم
UUIDمن النص (مثلJSONExtractإلىLowCardinality(UUID)، وtoUUID، وCAST AS UUID) عبر التحقق من الأرقام السداسية العشرية وتحويلها في مرور واحد بدلًا من مرورين. #110625 (Groene AI). - تحسين أداء الدوال التجميعية
timeSeries*ToGridبشكل ملحوظ باستخدام تطبيقات أسرع للفرز وجداول hash. #110875 (Nikita Mikhaylov). - أصبحت الاستعلامات مثل
SELECT * FROM t WHERE idتستخدم تخطي الفهرس على العمودid. يُغلق #89222. #89603 (Aditya Chopra). - أُضيف الإعداد
query_plan_merge_expression_into_join(مفعّل افتراضيًا) للسماح بدمج خطوات التعبير ضمن خطواتJOINأثناء تحسين إعادة ترتيبJOIN. يتيح ذلك إعادة ترتيبJOINعبر الاستعلامات الفرعية التي تغلف عملياتJOIN(على سبيل المثال، عندما يكونJOINداخل استعلام فرعي يحتوي على أعمدة محسوبة)، مما يؤدي إلى تحسين أفضل لأشجارJOINالمعقدة. #98533 (Vladimir Cherkasov). - تحسين سلاسل
ANDالتي تتضمن شروط مقارنة متعددة على التعبير نفسه: اكتشاف التناقضات (مثلa < 3 AND a > 5→false) وحذف الشروط الزائدة (مثلa = 3 AND a < 5→a = 3). #99736 (Xiaozhe Yu). - أصبحت Materialized CTEs المشار إليها من عدة فروع في استعلام
UNIONتُجسَّد مرة واحدة وتُشارك بين جميع الفروع. سابقًا، كان كل فرع يتلقى نسخته الخاصة من CTE، وكانت تُضمَّن inline وتُقيَّم بشكل منفصل. #102107 (Dmitry Novik). - أصبحت الخيوط في
BackgroundSchedulePoolتُنشأ عند الطلب بدلًا من إنشائها كلها دفعة واحدة عند بدء تشغيل الخادم. ويتحكم إعداد الخادم الجديدbackground_schedule_pool_initial_size(القيمة الافتراضية16) في عدد العمال الذين يُنشؤون مسبقًا؛ كما ينمو الـ pool حتىbackground_schedule_pool_sizeعند الحاجة. يقلل ذلك من عدد الخيوط الخاملة على الخوادم منخفضة الحمل. يُغلق #85265. #105066 (Alexey Milovidov). - تخطي عمليات تحميل ملفات العلامات غير الضرورية للتسلسل المتقدم للبيانات المشتركة في النوع
JSON. #107051 (Pavel Kruglov). - أصبحت ذاكرة التخزين المؤقت للمضلعات الثابتة المُعالجة مسبقًا للدالة
pointInPolygonمشتركة الآن بين الاستعلامات والخيوط، ويحدّها إعداد الخادم الجديدpoint_in_polygon_cache_size(القيمةdefaultهي 256 MiB، وتعطّل القيمة0ذاكرة التخزين المؤقت، ويمكن تغييره في وقت التشغيل). سابقًا، كانت ذاكرة التخزين المؤقت تحتفظ بما يصل إلىmax_threadsنسخة من كل مضلع مُعالج مسبقًا، وكانت تنمو بلا حدود مع المضلعات المختلفة، ولم يكن يُفرَج عنها مطلقًا حتى إعادة تشغيل الخادم. ويمكن مسحها باستخدامSYSTEM DROP POINT IN POLYGON CACHE، ويُبلَّغ عن الاستخدام الحالي فيsystem.metricsعلى شكلPointInPolygonCacheBytesوPointInPolygonCacheCellsوPointInPolygonCacheSizeLimit. يغلق #106393. #107247 (Nihal Z. Miaji). - لم يعد Keeper يحتفظ بقفل اللقطات الداخلية أثناء تسلسل snapshot وكتابتها إلى القرص أو نقل snapshots بين الأقراص، لذلك لم تعد عمليات نقل snapshot إلى العقد الأخرى ومعالجة Raft تتعطل بسبب إنشاء snapshot محلية. #107595 (Antonio Andelic).
- جرى تنفيذ background eviction في filesystem cache بالتوازي (ويتحكم فيه الإعداد
keep_free_space_ratio). وأُضيف إعداد جديدkeep_free_space_eviction_threadsللتحكم في درجة التوازي، كما رُفعت القيمةdefaultلـkeep_free_space_remove_batchمن100إلى250. #108147 (Kseniia Sumarokova). - حُدِّد عدد الأجزاء المرحلية التي تُجهَّز بالتزامن في عملية النسخ بالقراءة ثم الكتابة في Azure Blob Storage (المستخدمة في النسخ الاحتياطية عندما لا تكون عملية النسخ الأصلية متاحة) إلى
max_inflight_parts_for_one_file، مما يمنع الاستخدام المفرط للذاكرة عند نسخ عدد كبير من الملفات الكبيرة بالتوازي. #108232 (Smita Kulkarni). - جرى تفعيل جميع ذواكر التخزين المؤقت الثلاث الخاصة بـ text index على مستوى عام — إذ كانت سابقًا مفعّلة فقط داخل الاستعلامات. كذلك، أصبح حجم ذاكرة التخزين المؤقت لـ posting lists الآن صفرًا، ما يعطّلها فعليًا مرة أخرى، لأن posting lists كبيرة وتخزينها مؤقتًا مكلف جدًا. #108274 (Robert Schulze).
- إضافة ضغط marks المتدفقة داخل الذاكرة أثناء تحميل marks لتقليل Peak memory usage. يغلق #108285. #108325 (Pavel Kruglov).
- يحجز إعداد filesystem cache الجديد
reserve_granularity(القيمةdefaultهي 4 MiB) مساحةً مسبقًا على مستوى granules أكبر، مما يقلل تنازع الأقفال في المسار الساخن لحجز مساحة filesystem cache. #108369 (Kseniia Sumarokova). - تقليل مقدار الذاكرة التي تستخدمها metadata الخاصة بـ filesystem cache (لكل file segment ولكل مفتاح). #108477 (Kseniia Sumarokova).
- أصبحت الاستعلامات الموجَّهة إلى
system.iceberg_historyمع عواملWHEREعلى العمودينdatabaseوtableتصل الآن فقط إلى قواعد البيانات المطابقة، مما قد يوفر الوقت إذا كان لديك العديد من قواعد البيانات البعيدة غير ذات الصلة على الخادم. #108492 (Den Kalantaevskii). - أُزيلت عمليات القفل غير الضرورية في filesystem cache لتقليل تنازع الأقفال. #108932 (Kseniia Sumarokova).
- خُفِّض استخدام الذاكرة في معالجة البيانات الوصفية لـ
BACKUPوRESTORE. فعند فتح نسخة احتياطية (لأجلRESTOREأو كأساس لـBACKUPincremental) أصبح تحليل البيانات الوصفية.backupيتم على شكل تدفّق بدلًا من تحميلها إلى شجرة مستند XML داخل الذاكرة، ما يتجنب في النسخ الاحتياطية الكبيرة (وخاصةincremental) تخصيص شجرة DOM بحجم عدة غيغابايت. #109107 (Julia Kartseva). ولم يعد إنهاءBACKUPينسخ معلومات الملفات لكل الملفات إلى متجه مؤقت، وهو ما كان يستهلك مؤقتًا عدة غيغابايت عند التعامل مع نسخ احتياطية تضم ملايين الملفات. #109861 (Julia Kartseva). كما أن كتابة إدخالات النسخ الاحتياطي لم تعد تنسخ قائمة معلومات ملفات المضيف الحالي. #111162 (Julia Kartseva). - تقليل استهلاك الذاكرة في المُجمِّع. #109224 (Konstantin Vedernikov).
- دعم ذاكرة التخزين المؤقت لشروط الاستعلام لملفات
Parquetالمحلية المقروءة عبر محرك الجدولFile(وكان الدعم سابقًا مقتصرًا على تخزين الكائنات وبحيرات البيانات). #109247 (Alexey Milovidov). - خُفِّض استخدام الذاكرة في ذاكرة التخزين المؤقت لترويسة الفهرس النصي بمقدار يتراوح بين مرتين و2.5 مرة. وباتت الذاكرة المؤقتة تستوعب عددًا أكبر من ترويسات أجزاء البيانات (الإعداد
text_index_header_cache_size)، مما يقلل قراءات القرص لاستعلامات البحث النصي. #109332 (Anton Popov). - أصبحت دوال مسافة المتجهات المنقولة
L2DistanceTransposedوcosineDistanceTransposedوdotProductTransposedتطبّق الآن تحسين القراءة الجزئية لـ bit planes على أعمدةNullable(QBit)، بحيث تُقرأ مستويات البتات المطلوبة فقط بدلًا من العمود كاملًا. #109358 (Alexey Milovidov). - أصبح
IS NOT DISTINCT FROMوIS TRUEيستخدمان الآن المفتاح الأساسي وفهارس MinMax لاستبعاد الحبيبات، تمامًا مثل=. سابقًا، كانk IS NOT DISTINCT FROM 42و(k = 42) IS TRUEيفحصان جميع الحبيبات. #110006 (Groene AI). - لم تعد الاتصالات المجمّعة تُفحَص عبر ping قبل كل استخدام. وهذا يلغي رحلة الذهاب والإياب
Ping-Pongالتي كانت تُضاف إلى كل اتصال معاد استخدامه، مما يقلل زمن الاستجابة للاستعلامات الموزعة ولأداةclickhouse-benchmark. ويُكتشف الاتصال المجمّع المتقادم عبر عملية poll بمهلة صفرية (فحص غير حاجب لا يضيف أي رحلة ذهاب وإياب)، ثم يُستعاد بإعادة الاتصال. #110068 (Alexey Milovidov). - إصلاح عمليات إعادة الاتصال غير المبررة في اتصالات HTTP المجمّعة من نوع keep-alive عبر TLS (HTTPS وS3). كان فحص الاتصال المتقادم يستخدم
pollعلى الـ socket، ما كان يؤدي إلى الإبلاغ خطأً عن اتصال آمن حيّ على أنه مغلق عندما يحمل سجل TLS غير مقروء بعد المصافحة (تذكرة جلسة أوKeyUpdate)؛ أما الآن فيستخدمMSG_PEEKغير حاجب على sockets العادية وSSL_peek/SSL_has_pendingعلى sockets الخاصة بـ TLS، ما يكتشف أيضًا بشكل صحيح الإغلاق المنظم لـ TLS وسجل TLS الذي وصل منه جزء فقط. #110402 (Alexey Milovidov). - أصبحت الاستعلامات المسرَّعة بواسطة التصفية الديناميكية TopK (
ORDER BY ... LIMIT k) تستفيد بشكل أكبر من ذاكرة التخزين المؤقت لشروط الاستعلام: إذ تُملأ الذاكرة المؤقتة حتى عند تطبيقlazy materializationعلى الاستعلام، ويمكن لهذه الاستعلامات إعادة استخدام إدخالات كُتبت سابقًا بواسطة استعلام عادي له شرطWHEREنفسه. #110507 (Shankar Iyer). - يستخدم نمط
LIKE/NOT LIKEبدون أحرف بدل (%,_) الآن نطاقًا دقيقًا للمفتاح الأساسي، لذا يقرأ العدد نفسه من الحبيبات كما في الشرط المكافئ=/!=بدلًا من نطاق بادئة أوسع. #107077 (Groene AI). - إصلاح تنازع القفل الزائد على file segment (وهو تراجع في الأداء أُدخل في 26.1) عند قراءة البيانات عبر ذاكرة التخزين المؤقت لنظام الملفات. #109577 (Kseniia Sumarokova).
- تم إصلاح عدم استخدام فهارس التخطي المعرّفة على الأعمدة الفرعية من النوع
Tupleعند الوصول إلى الحقل عبرtupleElement(t, 'name')أوtupleElement(t, N)أوt.N، مع قراءة الـ tuple الكامل أيضًا في الاستعلام نفسه (مثلSELECT *). وتقوم جميع هذه الصيغ الآن بتقليص الحبيبات بالطريقة نفسها التي يوفّرها الوصول إلى العمود الفرعي المسمّىt.name. #110056 (Groene AI). - تم إصلاح بطء استعلامات
ORDER BY ... LIMITعلى جداولDistributedعندما يختارprefer_localhost_replicaنسخة متماثلة محلية: أُزيل الحدّ التمهيدي من خطة الشظية المحلية، مما كان يمنع lazy materialization والتصفية الديناميكية لـ top-K. #110136 (Michael Jarrett). - تم إصلاح عدم استخدام فهرس النص مع العامل
ILIKEعندما يكون الفهرس معرّفًا على expression بدلًا من عمود مباشر (على سبيل المثالassumeNotNull(col)مع preprocessor من نوعlower(...)): إذ كانت مثل هذه الاستعلامات تقرأ جميع الحبيبات بدلًا من استخدام الفهرس. يغلق هذا #110350. #110595 (Elmi Ahmadov). - تقليل تنازع القفل في ذاكرة التخزين المؤقت لنظام الملفات: لم تعد الاستعلامات التي تقرأ من الذاكرة المؤقتة تنتظر قفل طابور الأولوية عند تحديث أولوية LRU لإحدى الإدخالات. #109065 (Antonio Andelic).
- أصبحت استعلامات فهرس النص التي تستخدم expression من
postprocessorمخصّصة للتصفية فقط (مثلif(..., '', token)) تستبعد الآن الـ tokens الفارغة مسبقًا بدلًا من materializing لها صفًا بصف، مما يحسّن الأداء. #109049 (Elmi Ahmadov). - تقليل تنازع القفل في طوابير سجلات النظام، مما يخفض tail latency للاستعلامات على clusters المزدحمة. #110539 (Sean Haynes).
- تم تحسين أداء دوال البحث عن substring (
positionوcountSubstringsوmultiSearch*وreplaceAllوreplaceOne، ومتغيراتها case-insensitive وUTF-8) مع needle غير ثابتة بما يصل إلى 1.5x، وذلك باستخدام أدوات بحث عن السلاسل مدعومة بـ SIMD في المسار الخاص بكل صف بدلًا من تنفيذ ساذج. #110580 (Raúl Marín). - يُطبَّق lazy materialization الآن على استعلامات
ReplacingMergeTreeالتي تتضمنFINALوfilter وLIMITصغيرًا حتى من دونORDER BY. ولا تُجلب الأعمدة غير اللازمة للـ filter ودمجFINALإلا للصفوف التي تبقى بعد تطبيق الحدّ، مما يجعل مثل هذه الاستعلامات أسرع بكثير عند تحديد أعمدة عريضة مع filter انتقائي. ويُتحكَّم في ذلك عبرquery_plan_optimize_lazy_materializationوquery_plan_max_limit_for_lazy_materialization. #110722 (Nikolai Kochetov). - تحسين أداء async insert عند تمكين deduplication وانقسام عملية flush واحدة عبر عدة partitions: يعيد ClickHouse الآن استخدام قيم hash المحسوبة لإزالة التكرار عبر partitions بدلًا من إعادة حسابها لكل partition. #111150 (Valery Petrov).
تحسينات
- تمت إضافة الإعداد
input_format_csv_missing_nullable_as_empty_string(معطّل افتراضيًا). عند تفعيله، تُقرأ القيمة المفقودة في عمودNullable(String)ضمن إدخال CSV على أنهاStringفارغ بدلًا منNULL، بغض النظر عنinput_format_csv_empty_as_default. #58225 (kevinyhzou). #107577 (Alexey Milovidov). - أصبحت الدوال
toDateOrNullوtoDateTimeOrNullوtoDateTime64OrNullتقبل الآن وسائط عددية صحيحة من جميع أنواع الأعداد الصحيحة الأصلية (وتُفسَّر بالطريقة نفسها كما فيtoDateوtoDateTimeوtoDateTime64، مع وسيطةtimezoneاختيارية)، وتُرجعNULLللقيم الواقعة خارج نطاق نوع النتيجة. على سبيل المثال، تُرجعtoDateTimeOrNull(1583851242, 'Asia/Shanghai')القيمة2020-03-10 22:40:42، بينما تُرجعtoDateTimeOrNull(4294967296)القيمةNULL. #79791 (Jitendra). - تمت إضافة عمود
is_wildcardإلى جدولsystem.grantsللإشارة إلى ما إذا كان الامتياز يستخدم مطابقة البادئة بأحرف البدل (مثلًا،GRANT SELECT ON db*.*). سابقًا، لم يكن بالإمكان التمييز فيsystem.grantsبين الامتيازات ذات أحرف البدل والامتيازات المطابقة تمامًا للاسم نفسه. يُغلق #92835. #98577 (DQ). - السماح باستخدام ضغط Snappy في واجهة HTTP (
Accept-Encoding: snappy) وإضافة الإعدادsnappy_modeللاختيار بين تنسيق كتل Hadoop Snappy وتنسيق framing الخاص بـ Snappy لعمليات الإدخال/الإخراج العامةfile/urlالخاصة بـ snappy. #100752 (Alexey Milovidov). - دعم التوافق مع المحلّل القديم ضمن الإعداد
analyzer_compatibility_allow_non_aggregate_in_having. وإذا كان مفعّلًا، فستُنقل الشروط غير التجميعية منHAVINGإلىWHERE. #104232 (Dmitry Novik). - تمت إضافة إعداد جديد على مستوى الخادم
memory_worker_rss_speculative_reserve_ratio(القيمة الافتراضية1.0) يجعل متعقّب الذاكرة العام يحجز الذاكرة استباقيًا فوق RSS المرصود عندما يتجاوز نمو RSS ما يسجله المتعقّب بين العينات. وبهذا، تحصل عمليات تخصيص الذاكرة على الخطأMEMORY_LIMIT_EXCEEDEDفي وقت أبكر، ويقلّ احتمال أن يعمل OOM-killer في النواة أولًا. اضبط النسبة على0لتعطيل هذا السلوك الاستباقي. #104976 (Alexey Milovidov). - تمت إضافة مقاييس Prometheus اختيارية لنشاط إخلاء filesystem cache (
filesystem_cache_evictions_total,filesystem_cache_evicted_bytes_total,filesystem_cache_evicted_segment_hits,filesystem_cache_evicted_segment_size_bytes، ومتغيراتها لكل مستخدم والموسومة بـuser_id)، وتُعرَض لكل cache عبرsystem.dimensional_metricsوsystem.histogram_metricsونقطة نهاية Prometheus. ويُتحكَّم فيها عبر إعدادَي تهيئة قرص cache:expose_prometheus_eviction_metricsوexpose_prometheus_eviction_metrics_per_user(وكلاهما متوقف افتراضيًا)، ويمكن تبديلهما في وقت التشغيل عبرSYSTEM RELOAD CONFIG. #105020 (Sacheendra Talluri). - أصبح
EXPLAIN [PLAN] actions=1, compact=1, pretty=1هو الافتراضي. #105036 (Kirill Kopnev). - تمت ترقية
delta-kernel-rs(المكتبة التي تقف وراء تكاملDeltaLake) إلى الإصدار v0.23.0. #105861 (Smita Kulkarni). - أُضيف الأمران
duوwcإلىclickhouse-disks. يعرض الأول الحجم الإجمالي بالبايت لملف أو directory معيّن، بينما يعرض الثاني عدد البايتات والأسطر والكلمات في ملف. #106268 (Asya Shneerson). - أُضيف مقياس غير متزامن جديد
UntrackedMemory(ظاهر فيsystem.asynchronous_metrics) يبلّغ عن الذاكرة التي خصصتها الخيوط بالفعل ولكن لم تُحتسب بعد في عدّاد التتبّع العام للذاكرة: إذ يراكم كل خيط التخصيصات الصغيرة محليًا ثم يبلّغ عنها دفعة واحدة. ويساعد ذلك في تفسير الفروقات بينMemoryTrackingوالاستخدام الفعلي لذاكرة العملية. كما تتضمن رسائل الخطأMEMORY_LIMIT_EXCEEDEDالآن مقدار الذاكرة غير المتتبَّعة، مما يسهّل فهم سبب بلوغ الاستعلام أو الخادم حد الذاكرة. #106386 (Miсhael Stetsyuk). - تمت ترقية ClickStack (واجهة observability) إلى الإصدار 2.28.0. #106406 (Aaron Knudtson).
- أُضيف دعم
BFloat16فيdotProduct، كما تحسّن أداؤه عبر batching لمسار SIMD. #106569 (Nikita Taranov). - أُصبحت الإعدادات
max_named_collection_num_to_throwوmax_table_num_to_throwوmax_replicated_table_num_to_throwوmax_view_num_to_throwوmax_dictionary_num_to_throwوmax_database_num_to_throwقابلة للتغيير دون الحاجة إلى إعادة تشغيل الخادم. #106821 (Maxim Orlovsky). - أُضيف دعم القيم
REDUCED_REDUNDANCYوSTANDARD_IAوONEZONE_IAوGLACIER_IRوEXPRESS_ONEZONE(بالإضافة إلىSTANDARDوINTELLIGENT_TIERING) للإعدادs3_storage_class_name. #107251 (Aditya Kumar). - أُضيف الإعداد
materialized_postgresql_use_extended_date_and_time_typesالخاص بوقت الإنشاء إلى database engineMaterializedPostgreSQL. افتراضيًا (عند تمكينه)، يُستدل على أعمدة PostgreSQL من النوعينdate/timestampعلى أنهاDate32/DateTime64؛ أما عند ضبطه على0وقتCREATE DATABASEفيُستدل على النوعين الأضيقDate/DateTime. لا ينطبق هذا الإعداد على table engineMaterializedPostgreSQL. #107428 (Alexey Milovidov). - يدعم مُكمِّم Array
SOME/ALL(expr OP SOME(array)/expr OP ALL(array)) الآن أيضًا predicates مقارنة الكلمات المفتاحيةIS DISTINCT FROMوIS NOT DISTINCT FROM، وpredicates البحث في السلاسل النصيةLIKEوILIKEوNOT LIKEوNOT ILIKEوREGEXP، بعد إعادة كتابتها إلىarrayExists/arrayAll. #107454 (Alexey Milovidov). - أُصلح تسرّب في الذاكرة كان يحدث عند فشل فتح قاعدة بيانات SQLite (على سبيل المثال، عند تمرير path يتعذّر فتحه إلى table function
sqliteأو إلى database engineSQLite). #107807 (Alexey Milovidov). - في واجهة الويب (
play.html)، تعرض تلميحة اختصار التشغيل الآنCmd+Enterعلى Mac وCtrl+Enterعلى المنصات الأخرى بدلًا من عرضCtrl/Cmd+Enterدائمًا، كما لا يظهر الجزء, +Shift to run allمن التلميحة إلا عند وجود عدة استعلامات. #107817 (Alexey Milovidov). #108957 (Alexey Milovidov). - يدعم محرك الجداول
Aliasالآن القراءة باستخدام النسخ المتماثلة المتوازية عندما يكون الجدول الهدف من عائلةMergeTree. #107830 (Kai Zhu). - أُضيف نوع إحصاءات الأعمدة
uniq_v2— وهو بديل خفيف الوزن لإحصاءاتuniq، ويستند إلىuniqCombined64sketch. #107863 (Han Fei). كما اعتُبر نوع إحصاءات الأعمدةminmaxمهملًا، وتغيّرت القيمة الافتراضية لـauto_statistics_typesإلىbasic, uniq_v2. #108680 (Han Fei). - أصبحت دوال الذكاء الاصطناعي (
aiGenerate,aiEmbed,aiClassify,aiExtract,aiTranslate) تعيد المحاولة الآن عند حدوث أعطال شبكية عابرة (إعادة تعيين الاتصال، وإخفاقات اتصال TLS، وحالات timeout، والعناوين غير القابلة للوصول) عندما يكونai_function_max_retriesمضبوطًا، بما يطابق سلوك إعادة المحاولة في table function url. في السابق، كانت إعادة المحاولة تقتصر على استجابات أخطاء HTTP من جهة المزوّد. #107927 (Alexey Milovidov). - أصبحت عملية
INSERTإلى جدولMergeTreeتراعي الآن إلغاء الاستعلام وmax_execution_timeأثناء كتابة عدد كبير من الأجزاء، بدلًا من احتمال استمرارها فترةً طويلة بعد إيقافها. #107929 (Michael Kolupaev). - في واجهة الويب (
play.html)، يمكن الآن فتح أيقونة طرفية الويب في tab جديدة بالمتصفح بالنقر بالزر الأوسط أو باستخدام Ctrl/Cmd/Shift+click. #108006 (Alexey Milovidov). - لم يعد توليد SQL بالذكاء الاصطناعي في العميل يرسل المعامل
temperatureما لم يُضبط صراحةً عبرai.temperatureفي التهيئة. ويُصلح هذا توليد SQL بالذكاء الاصطناعي للنماذج التي ترفض المعاملtemperature. #108014 (Alexey Milovidov). - أُضيف الجدول
system.masking_policiesواستبطانSHOW MASKING POLICIESإلى الإصدارات مفتوحة المصدر. وتبقى سياسات الإخفاء نفسها ميزةً في ClickHouse Cloud، لذا يكون الجدول فارغًا في الإصدارات مفتوحة المصدر، لكن استعلامات الاستبطان لم تعد تفشل مع ظهور خطأ. #108030 (Alexey Milovidov). - أصبح مستهلك Kafka المعتمد على Keeper يختار ترتيب الحصول على أقفال الأقسام المؤقتة عبر النسخ المتماثلة عشوائيًا، مما يحسّن عدالة توزيع الأقسام ويقلّل تنازع الأقفال. في السابق، لم يكن للخلط المقصود أي تأثير. #108033 (Alexey Milovidov).
- أُضيف الإكمال التلقائي إلى واجهة الويب (
play.html)، استنادًا إلىsystem.completionsومحلل SQL المعجمي المعتمد على WASM. #108059 (Alexey Milovidov). - يعرض
clickhouse-clientوclickhouse-localالآن تلميحات إكمال تلقائي أثناء الكتابة (نص “شبح” مضمن) لأفضل اقتراح مطابق عندما يكون المؤشر في نهاية الإدخال. وتُرتَّب الاقتراحات الأكثر صلة أولًا (المستخدمة مؤخرًا والمعرّفات الموجودة بالفعل في الاستعلام). تنقّل باستخدام Up/Down (أو Ctrl-Up/Ctrl-Down)؛ واقبل تلميحًا واحدًا أو التلميح المحدد باستخدام Tab أو Right، واقبل التلميح المحدد باستخدام Enter؛ كما يفتح Tab أيضًا قائمة الإكمال الكلاسيكية. يتحكم في ذلك الخيار الجديد--hints(مفعّل افتراضيًا؛ ويتطلب--highlight). #108070 (Alexey Milovidov). - دعم الدالة
lengthلنوع البياناتQBit— إذ تُرجع بُعد المتجه كثابت. #108071 (Alexey Milovidov). ودعمCASTمنQBitإلىArray، مع إعادة تكوين المتجه الأصلي — أي عكس التحويل الحالي منArrayإلىQBit. #108072 (Alexey Milovidov). - تتضمن الطلبات المرسلة إلى كتالوجات بحيرات البيانات عبر REST (مثل OneLake) الآن ترويسة ClickHouse
User-Agent. #108117 (Konstantin Vedernikov). - أصبح
arrayFoldالآن يراعي إلغاء الاستعلام وmax_execution_time. سابقًا، كان الطي على مصفوفة طويلة جدًا يُنفَّذ بالكامل داخل استدعاء دالة واحد ولا يمكن مقاطعته، لذا كان يتم تجاهلKILL QUERYوالحدود الزمنية حتى يكتمل الطي. #108192 (Groene AI). - يقوم
MVTEncodeGeomالآن بمواءمة الأشكال الهندسية مع شبكة البكسلات الصحيحة قبل القص، ويقص المضلعات باستخدام مكتبةwagyu، بحيث يكون الناتج المقصوص صالحًا (تُصلَح الحلقات ذاتية التقاطع) ومحاذيًا للحواف، بما يطابق PostGISST_AsMVTGeom. #108248 (Saarthak Gupta). - أُضيفت
ProfileEventsلكل مرحلة قبل تنفيذ الاستعلام: QueryParseMicrosecondsوQueryAnalysisMicrosecondsوQueryPlanBuildMicrosecondsوQueryPipelineBuildMicroseconds. وهي توضّح أين يُستهلك الوقت قبل تنفيذ الاستعلام (التحليل النحوي، والتحليل، وبناء خطة الاستعلام، وبناء الـ pipeline)، وهي متاحة فيsystem.query_logوsystem.events. #108282 (Jordi Villar). - أصبحت عمليات
ALTER TABLEالتي قد تؤدي إلى إنتاج بيانات وصفية للجدول تتجاوزmax_query_sizeتُرفَض مسبقًا، مما يمنع الجداول من أن تصبح غير قابلة للتحميل بواسطة مكوّنات مثل توزيع DDL واستعادة النسخ المتماثلة. #108283 (Andrew Kravchuk). - أُضيفت الأعمدة
settingsوengine_settingsإلىsystem.backupsوsystem.backup_log. يكشفsettingsإعدادات النسخ الاحتياطي/الاستعادة المطلوبة لعملية ما (مثلallow_s3_native_copyوdeduplicate_filesوstructure_only)، بينما يكشفengine_settingsالإعدادات المستخدمة فعليًا من قِبل قارئ وكاتب محرك النسخ الاحتياطي (مثل إعدادات طلبات S3 مثلallow_native_copy، التي قد تختلف عما طُلِب بعد دمج تهيئة الـ endpoint). وهذا يتيح معرفة الإعدادات التي نُفِّذت بها فعليًا عمليةBACKUP/RESTORE. #108334 (Julia Kartseva). - أُضيف عمود
sourceإلىsystem.documentationيحتوي على مسار الملف المصدر الذي يُعرَّف فيه توثيق كل كيان. ويوثّق الجدول الآن أيضًا ترميزات الضغط، وأحداث profile، والمقاييس الحالية، والمقاييس غير المتزامنة، وجداول النظام نفسها (مع أعمدتها)، كما يتضمن توثيق الإعدادات الآن نوعها وقيمتها الافتراضية. #108346 (Alexey Milovidov). كما أصبحت القيمة الافتراضية الفارغة للإعدادات تُعرَض الآن على أنها سلسلة فارغة بدلًا من علامتَي backticks فارغتين. #108708 (Alexey Milovidov). - دعم عمليات القراءة غير المتزامنة من النسخ المتماثلة البعيدة (
async_socket_for_remote) على MacOS عبر تنفيذ بدائيات polling المعتمدة على epoll فوقkqueue. ويتيح هذا للاستعلامات الموزعة قراءة الشظايا بالتوازي على MacOS بدلًا من قراءتها تسلسليًا. #108403 (Raúl Marín). - دعم
BFloat16في دوال الرياضيات الثنائية. #108442 (Zhang Yifan). - أصبح بإمكان
MergeTreeالآن قراءة تدفق مضغوط تستخدم كُتله ترميزات مختلفة. وهذا هو المتطلب المسبق على جانب القراءة لاختيار codec التكيفي (#105404). #108592 (Raufs Dunamalijevs). - أصبحت القيمة التلقائية لـ
max_threadsوالإعدادات المشابهة تُعرض الآن فيsystem.settingsعلى أنهاauto(8)بدلًا من'auto(8)'؛ إذ كانت علامات الاقتباس المفردة المحيطة بها أثرًا قديمًا مضمَّنًا في القيمة. وقد جرى الحفاظ على التوافق بين الإصدارات: فما تزال الصيغة القديمة المحاطة بعلامات اقتباس مقبولة عند تحليل الإعدادات المستلمة من الخوادم الأقدم. #108657 (Alexey Milovidov). - عدة إصلاحات لتحسين سهولة الاستخدام في Web UI الخاصة بـ
/schema: تحميل المخطط عند الضغط على Enter، وأشرطة تمرير تراعي السمة، وأسماء جداول أكثر وضوحًا، وتجميع متسق للجداول المستقلة على مستوى كل database، ومنع تحديد النص أثناء السحب، ونموذج authentication بأسلوبplay(Credential Management API، وبيانات الاعتماد الممرَّرة عبر URL مع إزالة كلمة المرور، والتحقق المباشر من بيانات الاعتماد). #108724 (Alexey Milovidov). - لم يعد وضع التطبيق الكسول لقائمة الترحيل في فهرس النص تجريبيًا، ويمكن اختياره باستخدام
text_index_posting_list_apply_mode = 'lazy'من دونallow_experimental_text_index_lazy_apply. كما أُعيدت تسمية إعداد عتبة الكثافة منtext_index_density_thresholdإلىtext_index_lazy_intersection_density_threshold. #108814 (Anton Popov). - أُضيف نوع كتالوج باسم
delta_sharingإلىDataLakeCatalogمن أجل REST endpoint الخاصة بـ Iceberg في Databricks Delta Sharing، والتي تكون فيها مساحات الأسماء مسطحة وتتجاهل مرشح السردparent. استخدمه بدلًا منcatalog_type = 'rest'لمثل نقاط النهاية هذه، إذ قد يتعطلSHOW TABLESبخلاف ذلك. #108865 (Seva Potapov). - أُضيف خيار جديد إلى
clickhouse-client/clickhouse-localباسم--echo-query-separatorيطبع فاصلًا مخصصًا قبل الاستعلام المعروض بعد تنسيقه، مما يسهّل تمييز الاستعلام المكتوب عن نسخته المعاد تنسيقها. وهو معطّل افتراضيًا. #108888 (David Meng). - تحسينات على لوحة قواعد البيانات في واجهة الويب: يُعرض عدد الجداول بين قوسين بجوار اسم قاعدة البيانات عند توسيعها. #108891 (Alexey Milovidov). كما يعيد زر التحديث المجاور لقاعدة البيانات الموسَّعة تحميل قائمة جداولها. #108958 (Alexey Milovidov). وعند إعادة فتح اللوحة، تُستعاد قواعد البيانات التي كانت موسَّعة سابقًا. #108964 (Alexey Milovidov).
- أصبح بالإمكان حساب الفائدة المجمّعة لفهارس التخطي في
EXPLAIN WHATIF: إذ يعرض نسبة البيانات عند تقاطع جميع الفهارس الافتراضية المناسبة الموجودة. #108934 (Yarik Briukhovetskyi). - تم إصلاح مشكلة إعادة تعيين موضع التمرير الأفقي في جدول النتائج في واجهة الويب عند النقر على رابط داخل خلية ثم الرجوع إلى الصفحة. #108941 (Alexey Milovidov).
- أصبح محرك قاعدة البيانات
MySQLومحرك الجدول ودالة الجدول يربطون الآن أنواع الأعمدة المكانية في MySQL (LINESTRINGوPOLYGONوMULTILINESTRINGوMULTIPOLYGONوGEOMETRYالعامة) بالأنواع الهندسية المناظرة في ClickHouse بدلًا منString. ويتحكم في ذلك الخيار الجديدgeometryضمن الإعدادmysql_datatypes_support_level، وهو مفعّل افتراضيًا. ولا يزالPOINTيُحوَّل دائمًا إلىPoint. ويُربط العمود العامGEOMETRYبالنوع الشاملGeometry؛ وتؤدي قراءة قيمة لا يوجد لنوعها الفرعي مقابل في ClickHouse (MULTIPOINTوGEOMETRYCOLLECTION) إلى طرح استثناء وقت القراءة. #108944 (Alexey Milovidov). - واجهة الويب (
play.html): تنقّل كامل بلوحة المفاتيح — تنقّل بمفاتيح الأسهم داخل لوحة قواعد البيانات وجدول النتائج، وإمكانية الوصول إلى أزرار شريط الأدوات ومبدّل السمة وقائمة التنزيل عبر لوحة المفاتيح، مع مؤشرات تركيز مرئية. #108972 (Alexey Milovidov). - واجهة HTTP: عند تقديم بيانات الاعتماد عبر معلمات URL (
user/password) وكذلك عبر ترويسةAuthorization، أصبحت معلمات URL الآن هي التي لها الأولوية بدلًا من رفض الطلب. ويُصلح ذلك مشكلة فشل تنزيل النتائج من واجهة الويب (play.html) معAUTHENTICATION_FAILED(الخطأ 516) عندما يكون المتصفح قد تذكّر بيانات اعتماد Basic. #108980 (Alexey Milovidov). - أُعيدت
show_data_lake_catalogs_in_system_tablesلتكون الإعداد الذي يتحكم فقط في ظهورDataLakeCatalogفيsystem.tablesوsystem.columnsوsystem.completions. كما أُضيفshow_remote_databases_in_system_tables، وهو مفعّل افتراضيًا، لإتاحة إخفاء قواعد بياناتMySQLوPostgreSQLمن جداول النظام تلك بشكل منفصل. #109082 (Pablo Marcos). - استخدام خوارزمية parsing دقيقة لـ float (الأقرب تمثيلًا) افتراضيًا، وتطبيق الإعداد
precise_float_parsingعلى input formats (CSVوTSVوJSONوVALUESو…) وعلى القيم الحرفية الرقمية، وليس فقط علىtoFloat*/CAST. اضبطprecise_float_parsing = 0للحصول على السلوك السابق، وهو أسرع في بعض الحالات لكنه أقل دقة. يُغلق #60146. يُغلق #74647. يُغلق #68914. #109086 (Raúl Marín). - أصبح الاستعلام الذي يحتوي على تعبير الجدول الشائع واحدًا يُنسَّق الآن بنفس فواصل الأسطر والمسافات البادئة المستخدمة في الاستعلامات التي تحتوي على عدة تعبيرات جدول شائعة. سابقًا، كان
WITH a AS (...)يُبقي تعبير الجدول الشائع في السطر نفسه معWITH، بينما كانت حالتا وجود تعبيرين أو أكثر تضعانWITHفي سطر مستقل مع إزاحة كل تعبير جدول شائع. #109092 (Groene AI). - واجهة مستخدم الويب: عندما يكون الإكمال المميز مطابقًا للكلمة المكتوبة بالفعل، أو لنفس الكلمة مع اختلاف حالة الأحرف (مثل عرض
HASHللكلمة المكتوبةhash)، فإن الضغط على Right/Tab/Enter لم يعد يعيد كتابة الكلمة أو تلتهمه ميزة الإكمال التلقائي — بل ينقل موضع المؤشر أو يُدرج سطرًا جديدًا كما هو متوقع. #109106 (Alexey Milovidov). #109384 (Alexey Milovidov). - أُضيف إلى واجهة مستخدم الويب (
play.html) تمييز الأقواس المتداخلة بالألوان، وتمييز الأقواس المتطابقة، وتمييز المعرّفات المتطابقة، وتمييز مجموعات الأرقام، بما يتوافق معclickhouse-client. #109108 (Alexey Milovidov). - في واجهة مستخدم الويب، أصبح
TabوShift+Tabالآن يزيدان ويقللان المسافة البادئة للأسطر المحددة بمقدار 4 مسافات. #109110 (Alexey Milovidov). - واجهة مستخدم الويب: يُميَّز موضع خطأ الصياغة في محرر الاستعلام بخلفية حمراء. ويُزال هذا التمييز بمجرد أن يعيد المستخدم التركيز إلى المحرر. #109112 (Alexey Milovidov).
- أصبح
clickhouse-compressor --statواكتشافcodecالافتراضي للأجزاء القديمة يُبلغان عن تلف رؤوسblockعلى أنه تلف، بدلًا من الإبلاغ المضلل عن خطأ نهاية الملف. #109157 (Raufs Dunamalijevs). - أصبح ClickHouse Keeper يراعي الآن الإعداد
os_collect_psi_metricsويتخطى جمع PSI metrics عندما يكون معطّلًا. #109179 (Maxim Orlovsky). - في واجهة مستخدم الويب، عند عرض علامات تبويب الاستعلام، تُخفى معلمات الاتصال (host، user، password) خلف زر على شكل مفتاح في الزاوية العلوية اليمنى، وتُعرض في قائمة منسدلة عند الطلب. #109243 (Alexey Milovidov).
- واجهة مستخدم الويب: تُعرض النتيجة ذات القيمة الواحدة (صف واحد، عمود واحد، مثل
SHOW CREATE TABLE) بارتفاع كامل بدلًا من تقييدها بثلاثة أسطر. #109245 (Alexey Milovidov). - في واجهة مستخدم الويب، يؤدي الآن النقر على جدول في لوحة قواعد البيانات بزر الفأرة الأوسط، أو مع Shift، أو باستخدام مُعدِّل فتح علامة تبويب جديدة الخاص بالمنصة (Cmd على MacOS، وCtrl في غيره) إلى فتح استعلامه في علامة تبويب جديدة في واجهة مستخدم الويب. #109246 (Alexey Milovidov).
- أصبح مفتاح query condition cache لملفات
Parquetالبعيدة (في object storage) يعتمد على ETag بالإضافة إلى المسار، بحيث لم يعد استبدال كائن في موضعه يؤدي إلى تقديم نتائج مخزنة مؤقتًا قديمة. #109310 (Alexey Milovidov). - في واجهة مستخدم الويب، لم تعد السلاسل النصية الفارغة وقيم NULL تُلوَّن في وضع التلوين
categorical. #109342 (Alexey Milovidov). - واجهة الويب: يؤدي النقر على أيقونة جدول في لوحة قاعدة البيانات الآن إلى عرض قائمة أعمدته، مع أيقونات للأنواع، وشريط حجم يتناسب مع الحجم المضغوط، وتلميح يعرض الحجم المضغوط/غير المضغوط ونسبة الضغط. #109346 (Alexey Milovidov).
- واجهة الويب: يُعرَض الآن عنوان علامة التبويب كاملًا كتلميح عند المرور فوقه إذا كان مقتطعًا. #109354 (Alexey Milovidov).
- في واجهة الويب، يؤدي الآن النقر بالزر الأوسط على عنوان علامة التبويب (أو Ctrl/Shift/Cmd+النقر عليه) إلى تكرار علامة التبويب. #109357 (Alexey Milovidov).
- واجهة الويب: غيّر حجم منطقتَي التقدم النهائي وإحصاءات الاستعلام بشكل متناسق حتى لا تلتفّا بصورة غير ملائمة عندما تكون نافذة المتصفح ضيقة. #109363 (Alexey Milovidov).
- واجهة الويب: يؤدي الآن تحديد قاعدة بيانات في لوحة قواعد البيانات إلى استخدامها كقاعدة البيانات الافتراضية للاستعلامات التي تُشغَّل من المحرر. #109372 (Alexey Milovidov).
- دعم
reinterpretلـArrayمن عناصر ثابتة الحجم على أنهString، وهو عكسreinterpretالحالي لـString/FixedStringعلى أنهArray. #109383 (Alexey Milovidov). - في واجهة الويب، لا تعرض مفاتيح تبديل الترميز اللوني لكل عمود عندما لا تحتوي النتيجة إلا على صف واحد كحد أقصى. #109385 (Alexey Milovidov).
- السماح باستخدام
CASTبين أنواعQBitالتي تختلف في نوع العنصر و/أوstride، ما دام البعد يبقى نفسه (على سبيل المثالCAST(x AS QBit(Float64, N))انطلاقًا منQBit(Float32, N)). التغييرات التي تقتصر علىstrideفقط لا تؤدي إلى فقدان للبيانات؛ أما تغييرات نوع العنصر فتتبع دلالات تحويلArrayالمقابلة (فعلى سبيل المثال قد يؤدي التحويل منFloat32إلىBFloat16إلى فقدان في الدقة، كما أنaccurateCast/accurateCastOrNullيرفضان الصفوف التي لا يمكن تمثيلها بدقة تامة). #109387 (Alexey Milovidov). - أصبحت الدالتان
quantizeBFloat16ToInt8وdequantizeInt8ToBFloat16تقبلان الآن أيضًا وسيطات من نوعArrayوQBit، مع تطبيق codec Lloyd-Max على المتجه بالكامل (وإرجاعArray/QBitمن نوع العنصر المقابل)، بالإضافة إلى الأشكال scalar المتاحة سابقًا. #109398 (Alexey Milovidov). - واجهة الويب: يتضمن رابط Documentation الآن اسم المستخدم الحالي في عنوان URL. #109419 (Alexey Milovidov).
- دعم
arraySumوarrayAvgوarrayProductللمصفوفات منBFloat16. #109420 (Alexey Milovidov). - يَقبل الآن محدِّد
formatعلى نمط MySQL وهو%fفيparseDateTime/parseDateTime64(ومتغيراتهماOrZero/OrNull) ما بين 1 و6 منازل كسرية، وتُفسَّر على أنها ميكروثوانٍ بمحاذاة لليسار مثلSTR_TO_DATEفي MySQL، بدلًا من اشتراط 6 بالضبط. كما أُصلِح أيضًا عدم محاذاة جداولPrettyCompactفي أمثلة توثيق الدوال المضمنة. #109421 (Alexey Milovidov). - واجهة الويب: أصبحت علامات تبويب الاستعلامات دائمة الآن — إذ يحتفظ كل تبويب بنتيجته المعروضة (بما في ذلك الصور والمخططات) وباستعلامه قيد التشغيل عند الانتقال عنه ثم العودة إليه، كما تواصل الاستعلامات الطويلة العمل في الخلفية. وتعرض عناوين علامات التبويب مؤشر تحميل وشريط تقدم وعلامة إكمال لاستعلامها. #109425 (Alexey Milovidov).
- واجهة الويب: يُعرَض الخطأ الآن بشكل صحيح عند فشل الاستعلام بعد أن يكون جزء من نتيجته قد بُث بالفعل، بدلًا من إظهار
SyntaxError: Unexpected end of JSON inputمن جهة العميل (أو، عند استخدامhttp_write_exception_in_output_format، وسم الاستعلام الفاشل على أنه ناجح). #109430 (Alexey Milovidov). - أُضيفت الأعمدة المثبتة إلى واجهة الويب: يمكن تثبيت عمود من ترويسته بحيث يظل مرئيًا (ملتصقًا بالحافة) أثناء التمرير الأفقي لجدول النتائج. #109439 (Alexey Milovidov).
- في لوحة المعلومات المتقدمة (
/dashboard)، أصبح بالإمكان الآن إضافة مخططات لمقاييس محددة مباشرةً باستخدام اسم المقياس كما يظهر في الشيفرة المصدرية أو الوثائق، مما يسهّل إضافة عدة مقاييس أثناء جلسات استكشاف الأخطاء وإصلاحها. #109449 (Mikhail Artemenko). - واجهة الويب: أُصلحت مشكلة إغلاق القائمة المنسدلة لإعدادات الاتصال عند تحديد نص بالفأرة وسحبه إلى خارج حدودها. #109451 (Alexey Milovidov).
- واجهة الويب: يؤدي المرور فوق ترويسة عمود في جدول النتائج الآن إلى إظهار اسم العمود الكامل ونوعه كتلميح، بحيث يمكن قراءة الترويسات المقتطعة كاملةً. #109463 (Alexey Milovidov). كما أُصلحت مشكلة اقتطاع عناوين ترويسات الأعمدة بعلامة حذف حتى عندما يكون العمود عريضًا بما يكفي لعرض العنوان كاملًا. #110397 (Alexey Milovidov).
- دعم قواميس ssd_cache (بتخطيط
SSD_CACHE) ومحرك الجداولFileLogفي إصدارات macOS. #109493 (Raúl Marín). - واجهة الويب: عدم استعادة علامات التبويب ذات الاستعلامات الفارغة عند فتح الصفحة. #109529 (Alexey Milovidov).
- إصلاح تلميحات الإكمال التلقائي غير المقروءة أثناء الكتابة والألوان الساطعة في العميل التفاعلي على الطرفيات التي لا تحتوي قيمة
TERMفيها على256(مثل Ghostty و kitty و Alacritty و foot): إذ أصبحت الألوان الساطعة الآن تُخرَج دائمًا كرموز ألوان aixterm الساطعة بدلًا من الرجوع إلى الغامق + اللون الداكن، وهو ما تعرضه الطرفيات الحديثة كلون داكن يصعب قراءته على الخلفيات الداكنة. #109622 (Alasdair Brown). - تمكين ساحات jemalloc لكل CPU وتوصيف التخصيص في إصدارات macOS. #109684 (Raúl Marín).
- السماح بتعديل بعض إعدادات المصادقة لقاعدة بيانات كتالوج بحيرة البيانات من نوع
OneLakeباستخدامALTER DATABASE ... MODIFY SETTING. #110019 (alesapin). - أصبح محرك
Hiveالآن يقرأ البيانات الوصفية لملفاتORC(فهارس الحد الأدنى/الحد الأقصى، وعدد الصفوف) باستخدام قارئORCالأصلي في ClickHouse بدلًا من مهايئORCالخاص بـ Apache Arrow. #110086 (Alexey Milovidov). - تم تقليل حجم الملف التنفيذي بنحو ~10.5 MB عبر تنفيذ عمليات المقارنة والعمليات الحسابية على أزواج الأنواع المختلطة قليلة الاستخدام (
Decimalمقابل عدد صحيح بعرض مختلف، والأزواج التي تتضمنInt128/UInt128/Int256/UInt256) من خلال التحويل إلى نوع مشترك بدلًا من نواة مُصرَّفة مخصّصة لكل توليفة من الأنواع. وتبقى الأزواج من النوع نفسه، والأزواج شائعة الاستخدام، وعملياتplus/minus/multiplyالمقيّدة بالذاكرة محتفظةً بنواها المخصّصة؛ كما تظل النتائج وأنواع النتائج والحالات الاستثنائية دون تغيير. #110131 (Alexey Milovidov). - أصبح الاستعلام الفرعي الموجود على الجانب الأيمن من
IN، والذي يكون عموده الوحيد مصفوفة أعمق ببعد واحد من الوسيطة اليسرى، يُفسَّر الآن على أنه مجموعة عناصر المصفوفة (مثل قيمة حرفية لمصفوفة أو دالة تُرجع مصفوفة)، بدلًا من أن يفشل بخطأ مُربِك بسبب عدم تطابق الأنواع. على سبيل المثال، أصبحx IN (SELECT groupArray(x) FROM ...)يعمل الآن. #110169 (Alexey Milovidov). - لم تعد القراءة من محرك الجدول
SQLiteأو دالة الجدولsqliteتدخل في دوران مشغول يستهلك نواة CPU كاملة عندما تكون قاعدة بيانات SQLite مقفلة بواسطة اتصال آخر. أصبحت القراءة الآن في وضع خمول أثناء انتظار القفل، مع بقائها قابلة للإلغاء. #110248 (Groene AI). - قَرِّب قيم Elapsed والمعدل والنسبة في رسائل السجل ورسائل الاستثناء إلى ثلاثة أرقام، بحيث لا تعود الأرقام مثل
1.345844286 sec.تُطبع بالدقة الكاملة. #110277 (Alexey Milovidov). - في واجهة الويب (Play)، أصبح
BFloat16الآن يُتعرَّف عليه كعدد بفاصلة عائمة، وتُحاذى أعمدته إلى اليمين وتُلوَّن وفقًا لذلك. #110433 (Alexey Milovidov). - دعم عبارة
SETTINGSفي محرك الجدولPostgreSQLودالة الجدولpostgresql(على سبيل المثالSETTINGS postgresql_connection_pool_size = 50)، بما يحقق تكافؤ الميزات مع المحركMySQL. #110614 (Alexey Milovidov). - أصبح
SHOW CREATE TABLE(وكذلكSHOW CREATE VIEW/SHOW CREATE DICTIONARY) يقترح الآن جدولًا باسم مشابه في رسالة الخطأ عندما لا يكون الجدول المطلوب موجودًا، بالطريقة نفسها التي تفعلها استعلاماتSELECT. #110633 (Alexey Milovidov). - تم تفعيل الإعداد
merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_onceافتراضيًا: إذ يقوم محدد الدمج الآن بخفض الحد الأقصى لعدد الأجزاء التي يمكن دمجها دفعةً واحدة تلقائيًا بناءً على مدى امتلاء القسم. راجع #91163. #110726 (Mikhail Artemenko). - اقبل أوامر التنظيف الخاصة بـ PostgreSQL وهي
RESETوUNLISTENوDISCARDباعتبارها عمليات بلا تأثير ضمن بروتوكول PostgreSQL السلكي، بدلًا من إرجاع خطأ في الصياغة لها. وهذا يحسّن التوافق مع برامج التشغيل مثل Skunk التي ترسلRESET ALLوUNLISTEN *أثناء إعداد الاتصال وتنظيفه. #110780 (Alexey Milovidov). - تم تغيير القيمة الافتراضية للإعداد
auto_statistics_typesمنbasic, uniqإلىbasic, uniq_v2. #110878 (Han Fei). - أصبح
randomHadamardTransformيحسب الآن تحويلًا دقيقًا يحافظ على الطول لأي طول متجه لا يزيد أكبر عامل فردي فيه على 64 (على سبيل المثال3584 = 512 * 7، وهو شائع في نماذج embedding)، ما يوسّع العائلات المدعومة سابقًا2^Nو2^k * {12, 20}و2^k * 9. وأصبح تنفيذ تحويل كامل لطول لا يمكن تمثيله بدقة يطلق استثناءً الآن بدلًا من إضافة أصفار بصمت إلى متجه أطول؛ مرّرoutput_dimsلحساب إسقاط مقتطع بطول اعتباطي. #111006 (Alexey Milovidov). - تم إصلاح استثناء
LOGICAL_ERRORأثناء إنشاء نسخة احتياطية لقاعدة بياناتReplicatedيجري حذفها وإعادة إنشائها بالتزامن؛ وأصبحت مثل هذه النسخ الاحتياطية تفشل الآن بوضوح معCANNOT_GET_REPLICATED_DATABASE_SNAPSHOT. #100651 (Alexey Milovidov). - أصبح النظام يعرض الخطأ الحقيقي الأساسي عندما يتعذر فك أرشيف zip (على سبيل المثال، عند قراءة الأرشيف من S3 ورفض read buffer تنفيذ seek). سابقًا، كان الخطأ الفعلي مخفيًا خلف الرسالة العامة
Couldn't unpack zip archive: Code = -100/Couldn't open zip archive. #105103 (Groene AI). - تم إصلاح تلميح مربك من نوع “Maybe you meant X?” بعد إعادة تشغيل server (أو
DETACH DATABASE/ATTACH DATABASE): إذ كان حذف جدول سبق حذفه قد يقترح الاسم الذي حُذف للتو كبديل. #106238 (Groene AI). - تم إصلاح logical error (
Logical error: 'removed'، وكان يؤدي إلى إيقاف server في builds الخاصة بالتصحيح) في queue الخلفية الخاصة بحذف الجداول، وكان يُحفَّز عند إعادة استخدام معرّف UUID صريح نفسه عبر عدة استعلاماتCREATE OR REPLACE TABLE، ما يؤدي إلى إدراج أكثر من جدول محذوف واحد يشترك في معرّف UUID نفسه ضمن queue. #107031 (Groene AI). - تم إصلاح logical error من نوع
Inconsistent AST formattingكان يمكن أن يؤدي إلى إيقاف server في builds التصحيح وsanitizer عند استخدام lambda ذات اسم مستعار كمعامل لعامل وصول (عنصر tuple.Nأو عنصر المصفوفة[]) في موضع غير أول ضمن قائمة expression، مثلSELECT 1, ((p0, p1) -> p0 AS a7).4[3] FROM t. #107092 (Groene AI). - أصبحت cluster table function (
urlCluster,fileCluster,s3Cluster, …) المتداخلة داخل distributed query أخرى، مثلclusterAllReplicas(..., urlCluster(...))، تُرفض الآن بخطأBAD_ARGUMENTSبدلًا من الفشل مع logical error (Distributed task iterator is not initialized). #107107 (Groene AI). - إذا تمت مقاطعة
OPTIMIZE ... DRY RUNبسبب query timeout (max_execution_timeمعtimeout_overflow_mode = 'break')، فإنها تعيد الآنTIMEOUT_EXCEEDEDبدلًا من logical error متعلق بـrows_sources(والذي كان يؤدي إلى إيقاف server في builds التصحيح/sanitizer). #107114 (Groene AI). - لم يعد يُسجَّل الخطأ غير الضار
Net Exception: Socket is not connectedأثناء إنهاء جلسةZooKeeperعلى macOS. كما لم يعدclickhouse keeper-clientيطبع هذا الخطأ الزائف إلى stderr عند الخروج. #107438 (Groene AI). - تم إصلاح overflow في عدد صحيح موقّع عندما يعيد refreshable materialized view محاولة refresh فاشلة مع ضبط
refresh_retriesعلى قيمة كبيرة جدًا (قريبة من الحد الأقصى لـInt64). وكان هذا overflow قد يؤدي إلى إيقاف server في builds التي تستخدم undefined behavior sanitizer. #108005 (Groene AI). - إصلاح
LOGICAL_ERROR(توقّف الخادم في إصدارات debug/sanitizer) عندما يستخدمJOINعامل المقارنة الآمن مع null (<=>/IS NOT DISTINCT FROM) ويكون أحد المفاتيح استعلامًا فرعيًا قيَميًا، مثل... JOIN t2 ON (SELECT x FROM t1) <=> t2.k، مع analyzer القديم (enable_analyzer = 0). يُرجع هذا الاستعلام الآن الخطأ العاديNOT_FOUND_COLUMN_IN_BLOCKبدلًا من logical error. #108123 (Groene AI). - أصبحت استعلامات vector search التي تحدد العمود
_distanceتُرجع خطأً مناسبًا بدلًا من الفشل بسبب logical error. #108423 (Robert Schulze). - إصلاح
std::future_error(The associated promise has been destructed prior to the associated state becoming ready) الذي كان قد يظهر ويتسبب في توقّف الخادم في إصدارات debug وsanitizer عند فشل جدولة مهمة الإكمال النهائية غير المتزامنة لرفع الأجزاء المتعددة إلى S3/Azure (على سبيل المثال عند استنفاد مجمع الخيوط). أصبح الآن يُبلَّغ عن خطأ الجدولة الفعلي بدلًا من ذلك. #108730 (Groene AI). - تجنّب الإفراط في مخرجات server log ورسالة خطأ ضخمة عند compile regular expression كبيرة جدًا (على سبيل المثال، نمط
LIKEأوmatchيحتوي على مئات الآلاف من wildcards)؛ إذ تفشل هذه الأنماط الآن بخطأ واضح هوCANNOT_COMPILE_REGEXP. #108821 (Raúl Marín). - إصلاح سلوك غير معرّف عند تحويل packet type في protocol إلى سلسلة نصية عندما تكون خارج النطاق (مثلًا في رسائل الخطأ
Unexpected packet from server/Received ... packet) في حالة connection غير متزامنة أو خاضعة للاختبار العشوائي. #108885 (Groene AI). - إصلاح خطأ داخلي مُربك (
Method getResultType is not supported for TABLE query tree node) عندما كان يُستخدم تعبير table بوصفه الـ argument الأيسر لعامل التشغيلIN؛ وتنتج هذه الاستعلامات الآن رسالة خطأ واضحة. #109412 (Alexey Milovidov). - إصلاح قراءة Iceberg table مع ملف البيانات الوصفية يكون رقم الإصدار فيه مكوّنًا بالكامل من أرقام، لكنه يتجاوز نطاق الأعداد الصحيحة ذات 32 بت (مثل
v99999999999999999999.metadata.json). كان هذا الاسم يُنتج سابقًا الخطأ الغامضstd::out_of_range(STD_EXCEPTION) بدلًا من الخطأ الواضحBAD_ARGUMENTS. #109619 (Groene AI). - إصلاح احتمال ظهور
Logical error: 'ReadBuffer is canceled. Can't read from it.'عندما يفشل input format قائم على الصفوف (مثلTSV/CSV) في parse الإدخال، وتكون عملية القراءة الأساسية قد أُلغيت بالفعل (على سبيل المثال، جزء HTTP غير صحيح أو body مقتطع). ولم يعد إنشاء تشخيصات parse المفصلة يقرأ من buffer أُلغي. #109708 (Groene AI). - أصبحت تعبيرات filter expression في سياسات الصفوف التي تستخدم
arrayJoin(أو الاسم المستعارunnestلها) تُرفض الآن بخطأ واضح؛ إذ كانت هذه policies تتسبب سابقًا في logical error من النوعcolumn->size() == num_rowsأثناء query time. #109753 (Raúl Marín). #109973 (Raúl Marín). - أصبحت قراءة Paimon table التي يحتوي مخططها على Nested type غير مدعوم (مثل حقل
ROW) تُبلّغ الآن عن خطأ واضحBAD_ARGUMENTSيذكر النوع غير المدعوم، بدلًا منDB::Exception. (OK)مجرد مع رمز الخطأ 0 ومن دون رسالة. #109762 (Groene AI). - تم إصلاح
LOGICAL_ERROR (std::length_error) عند استخدام استعلام مع الإعداد التجريبيmake_distributed_plan = 1لقيمة كبيرة جدًا فيdistributed_plan_default_reader_bucket_countأوdistributed_plan_default_shuffle_join_bucket_count. تُرفَض هذه القيم الآن بالخطأINVALID_SETTING_VALUE. #109770 (Groene AI). - تم إصلاح
LOGICAL_ERROR (query tree node does not have valid source node) عندما كان تعبير الجدول الشائع التعاودي يحلّ معرّفًا من نطاق خارجي باعتباره عمودًا مترابطًا (معallow_experimental_correlated_subqueries = 1). تُرجِع مثل هذه الاستعلامات الآن خطأUNSUPPORTED_METHODواضحًا. #109863 (Groene AI). - تم إصلاح تجاوز سعة لعدد صحيح موقّع عندما يتجاوز
ORDER BY ... WITH FILLفجوة كبيرة جدًا في عمودInt64/UInt64(مثل خطوة مقدارها 2 عبر فجوة قريبة من 2^63). كان هذا التجاوز سلوكًا غير معرّف في أدوات sanitizer، وكان يلتفّ بصمت في إصدارات الإصدار. #109937 (Groene AI). - تم إصلاح خطأ منطقي
Bad cast from type DB::FunctionNode to DB::ConstantNode(يتسبب في إنهاء الخادم في إصدارات debug/sanitizer) عند تشغيلSELECT ... ORDER BY ... WITH FILLعلى جدولDistributedمع قيمة منخفضة لـoptimize_const_name_size. #109938 (Groene AI). - تم إصلاح خطأ منطقي
Invalid number of rows in Chunkعندما يكون هدفINTERPOLATEاسمًا مستعارًا لعمودWITH FILLمع المحلل القديم (enable_analyzer = 0). تُرفَض مثل هذه الاستعلامات الآن بخطأINVALID_WITH_FILL_EXPRESSIONواضح. #110103 (Groene AI). - تم إصلاح خطأ منطقي (يتسبب في إنهاء الخادم في إصدارات debug/sanitizer) عندما تُمرَّر إلى الدوال
indexHint/ignore/isZeroOrNullوسيطة يُحَلّ نوعها إلىNothing، مثل داخل تعبيرات من قبيلindexHint(assumeNotNull(materialize(NULL))). #110192 (Groene AI). - تم إصلاح خطأ منطقي
Too large size (...) passed to allocatorكان يمكن أن يحدث عند ضبط قيمة خارج النطاق لإعداد حجم مخزن القراءة المؤقت مثلmax_read_buffer_sizeأوmax_read_buffer_size_local_fs. تُقيَّد هذه القيم الآن إلى 256 MiB عبر فحص سلامة الإعدادات، وكذلك في موضع الاستخدام لـINSERT ... FROM INFILE، الذي يقرأ الملفات داخلclickhouse-clientحيث لا ينطبق فحص السلامة. #110207 (Alexey Milovidov). - يُبلّغ
CHECK TABLEالآن عن التلف الفعلي في جزء الإسقاط الذي فشل في تحميل بياناته الوصفية، بدلًا من الخطأ المضللColumns doesn't match ... Expected: 0 columns. #110262 (Raúl Marín). - يُبلَّغ الآن عن عدم تطابق النوع الذي يحدث عندما يتعذر تحليل قيمة مقروءة من مصدر PostgreSQL (مثل
postgresqltable function أوPostgreSQLtable engine) إلى نوع العمود المصرَّح به (على سبيل المثال، عمودtextمصرَّح به كـInt32) على أنه خطأ استعلام صحيح؛ بينما كان سابقًا يؤدي إلى إنهاء الخادم في إصدارات debug وsanitizer. #110264 (Groene AI). - دعم query profiler وmemory profiler وtrace profiler، وكذلك ترميز الرموز لـ
system.trace_logعلى macOS. #109825 (Raúl Marín). - تحديث
chdigإلى v26.7.1: ضغط تتبعات المكدس لأغراض المشاركة، وأنماط الاستعلامات، ودعم ذاكرة Arena المنفصلة، وتحسينات Perfetto، وإصلاحات التوافق. #110938 (Azat Khuzhin). - إصلاح الاستدلال غير الصحيح على الرتابة لـ
intDivعند استخدام مفتاح غير موقّع مقسوم على ثابت موقّع، وهو ما كان قد يعطّل تشذيب فهرس المفتاح الأساسي لشروطIN/NOT INالتي تتجاوز الحدّ الموقّع لنوع النتيجة؛ كما كانت إصدارات Debug تصطدم أيضًا بالخطأLOGICAL_ERRORInvalid binary search result in MergeTreeSetIndex. #107586 (Groene AI). - تمت إضافة الإعداد
allow_lossy_numeric_supertype(وهو معطّل افتراضيًا). عند تفعيله، فإنifوmultiIfوcoalesceوifNullوarrayوmapعند استخدامها مع وسائط رقمية لا تملك نوعًا مشتركًا من دون فقدان (مثلDecimalوFloat64، أوInt64وFloat64) يُحسم نوعها إلىFloat64بدلًا منVariant، بحيث يمكن استخدام النتيجة مع الدوال التجميعية مثلsumوavgوminوmax. وتذكر رسائل الخطأ ذات الصلة بالدوال التجميعية الآن اسم الإعداد صراحةً. يُغلق #106707. #107236 (Groene AI). - بدء تشغيل نقطة نهاية Prometheus (للتكوينات المخصّصة للمقاييس فقط) وجمع المقاييس غير المتزامن قبل تحميل الجداول، بحيث تصبح المقاييس مرئية أثناء مرحلة تحميل البيانات الوصفية التي قد تطول. #108402 (Christoph Wurm).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- إصلاح فشل
TRUNCATE TABLEوDROP PARTITIONعلى الجداول التي تحتوي على عدد كبير من كتل deduplication، إذ إن حذفها ضمن طلب ZooKeeper واحد قد يتجاوز الحد الافتراضيjute.maxbufferالبالغ 1 ميغابايت. #105991 (Clayton McClure). لا يؤثر هذا عليك إلا إذا كنت تستخدم Apache ZooKeeper (وهو غير موصى به) بدلًا من ClickHouse Keeper. - إصلاح استخدام أسماء الأعمدة المؤهلة (
database.table.column) في عبارةWHEREالخاصة بالـ mutations، مثلDELETE FROMوALTER TABLE ... UPDATE/DELETE، على جداول عائلةMergeTree؛ إذ كانت هذه الاستعلامات تفشل سابقًا بسبب خطأ missing-columns. يغلق #71760. #109491 (Mikhail Artemenko). - إصلاح ذاكرة التخزين المؤقت لنتائج الاستعلام لاستعلامات PromQL. كانت dialect
promqlتتجاوز فحص الدوال غير الحتمية، وكان من الممكن أن تعرض نتائج قديمة مرتبطة بـnow()؛ كما أن Prometheus HTTP API (/api/v1/query,/api/v1/query_range) لم يكن يخزن أي cache entries على الإطلاق. #110887 (Nikita Mikhaylov). - إصلاح فشل بدء تشغيل الخادم عندما يكون متغير البيئة
TZفارغًا. يغلق #68920. #68921 (Ardenwick). - تم إصلاح فشل بدء تشغيل الخادم عندما يشير محرك قاعدة البيانات
Backupإلى نسخة احتياطية أصبحت غير متاحة (على سبيل المثال، عند حذف ملفاتها أو تعذر الوصول إلى طبقة التخزين الأساسية). تُحمَّل قاعدة البيانات الآن بدون جداول بدلًا من منع الخادم بالكامل من بدء التشغيل. #83188 (Vitaly Orlov). - عند استخدام inserts في الخلفية إلى جداول بمحرك
Distributed، فإن التأخيرات الناتجة عن الأخطاء المتكررة عند إرسال البيانات إلى shards البعيدة تبدأ الآن في الانخفاض بمجرد حل تلك الأخطاء. سابقًا، كان التأخير يزداد فقط ولا يُعاد ضبطه مطلقًا. #87378 (Andrei Kochemirovskii). - إصلاح
broken_data_filesفيsystem.distribution_queue، وكذلك إصلاح كون Metric BrokenDistributedFilesToInsertتُبلغ دائمًا عن0للملفات التالفة التي يُعثر عليها عند فحص queue الخاصة بـ async-insert لمحركDistributedأثناء بدء التشغيل. #92124 (KG.Xu). - إصلاح تعافي logging بعد خطأ امتلاء القرص. سابقًا، عندما يمتلئ قرص السجل، كان ClickHouse يدخل في حالة فشل ويواصل إغراق syslog برسائل error (بما قد يصل إلى أكثر من 100 غيغابايت/ساعة)، من دون أن يتعافى حتى بعد تحرير مساحة على القرص. الآن يتعافى نظام logging تلقائيًا بمجرد توفر مساحة على القرص، من دون الحاجة إلى إعادة تشغيل الخادم. #93127 (jaehanbyun).
- تمرير بيانات اعتماد S3 الثابتة إلى عمليات قراءة جدول Unity
DataLakeCatalogعند تعطيلvended_credentials، مما يمنع حالات فشل الوصول المجهول إلى تخزين الكائنات. #96910 (kgeg401). - إصلاح انهيار في شيفرة parsing الخاصة بالمخطط في محرك الجدول
DeltaLake. #97112 (Kseniia Sumarokova). - إصلاح مشكلة أمنية كان يمكن من خلالها لعميل TCP غير موثَّق الاستعلام عن وجود جدول وحالة replication عبر منفذ interserver. #99854 (Shaohua Wang).
- إصلاح خطأ نحوي عند ورود اسم مستعار بعد استعلام فرعي في
DESCRIBE TABLE. يُصلح #100031. #100205 (Yarik Briukhovetskyi). - إصلاح استثناء في استعلام فرعي مترابط عندما تصبح الأعمدة الخارجية
Nullableتحتgroup_by_use_nullsمعROLLUP/CUBE. #100365 (Alexey Milovidov). - إصلاح توقّف للخادم (في بنى sanitizer) وفقدان صامت للبيانات أثناء بدء تشغيل الجدول عندما يتقاطع جزء
MergeTreeمعاملاتي تم التراجع عنه مع جزء مُثبّت. #100992 (Tuan Pham Anh). - إصلاح مشكلة في
indexOfAssumeSortedكانت تؤدي إلى إرجاع نتائج غير صحيحة لأعمدةArray(LowCardinality(String))في جداولMergeTree. #101771 (Yash ). - إصلاح pruning غير صحيح للمفتاح الأساسي عندما يغلّف مفتاح الفرز في الجدول عمود
DateداخلtoDateTime(على سبيل المثال،ORDER BY toDateTime(date_column)) ويطبّق استعلام شرط تصفية على العمود الأصلي بمقارنة مثلWHERE date_column >= '...'. يحدث overflow فيtoDateTime(Date)لقيمDateالتي تتجاوز نطاقDateTime(بعد2106-02-07)، لذلك يصبح المفتاح المخزَّن غير رتيب؛ ولم يعد ClickHouse يستخدم pruning للمفتاح الأساسي لهذا الجمع بين المفتاح والشرط لأن ذلك قد يستبعد granules تحتوي على صفوف مطابقة. يُغلق #101744. #101814 (Nihal Z. Miaji). - إصلاح
intDivOrNullوmoduloOrNullوpositiveModuloOrNullالتي كانت تُرجع0بدلًا منNULL، وكذلكintDivOrNullوintDivOrZeroاللتين كانتا تثيران استثناءً بدلًا من إرجاعNULL/0، عندما تؤدي القسمة إلى floating-point exception (القسمة على صفر أوINT_MIN / -1)، بما في ذلك الوسائط المختلطة signed/unsigned. #101976 (Yarik Briukhovetskyi). - إصلاح استثناءات
LOGICAL_ERRORعند قراءة جداولIcebergأوDeltaLakeفي حالات طرفية مثل تحديثات metadata المتزامنة فيIcebergأو عمليات القراءة عبرmergetable function فوق جداولDeltaLake. #102033 (Groene AI). - إصلاح فشل طلبات HTTP الصادرة (مثل الدالة
aiGenerate، وurltable function، وS3) برسالةNo route to hostعلى المضيفات التي تعلن عن عنواني IPv4 وIPv6 معًا عندما تكون عائلة عناوين واحدة فقط قابلة للتوجيه. وأصبح HTTP connection pool الآن ينتقل إلى العنوان التالي الذي تم حلّه عندما يفشل العنوان الأول بخطأ شبكة، بدلًا من تمرير الخطأ مباشرةً من أول طلب. #103786 (Alexey Milovidov). - إصلاح توقّف للخادم أثناء
RESTOREللنسخ الاحتياطية التي تحتوي على جداول ذات dependencies دورية. #103824 (Konstantin Bogdanov). - أصبح schema inference لأعمدة Arrow
time32/time64(مثلSELECT * FROM file(..., 'Arrow')) يستنتج الآنTime64بدلًا منDateTime64؛ وأي مكوّن لاحق يعتمد على النوع المستنتَج السابق سيلاحظ النوع الجديد بعد الترقية. كذلك، يمكن الآن تصدير قيمTime/Time64إلى Arrow مع اختيار نوع الوقت المناسب في Apache Arrow بحسب precision. يُصلح #104038. #104316 (/bin/cat). - تم إصلاح حالة تسابق بين
ALTER TABLE ... RENAME COLUMNوOPTIMIZE TABLE ... FINALمتزامن (أو أي merge في الخلفية) فيMergeTree، كانت قد تؤدي بصمت إلى استبدال بيانات العمود المُعاد تسميته بقيم default. #104822 (Groene AI). - تم إصلاح خطأ منطقي
Block structure mismatchأثناء تنفيذINSERTمتزامن بينما تكونALTER TABLE ... RENAME COLUMNقيد التنفيذ، في database من نوعAtomicمعlazy_load_tables = 1بعدDETACH DATABASE/ATTACH DATABASE. #104852 (Groene AI). - تم إصلاح
groupConcatعند خلط الصياغة المعلَّمية والصياغة ذات الوسيطين، مثلgroupConcat(',', 2)(x, '/'): كان parameter الخاص بحدّ الصفوف يُهمَل بصمت، لذا كانت كل row تُعاد بدلًا من العدد المطلوب؛ والآن يطغى Delimiter من الوسيط الثاني على parameter بشكل صحيح. #104882 (Yarik Briukhovetskyi). - تم إصلاح خطأ
LOGICAL_ERROR(Expected one block from input stream) الذي كان يُطرَح بواسطةKILL QUERY/KILL MUTATION/KILL PART_MOVE_TO_SHARD/KILL TRANSACTIONعندما تحتوي عبارةWHEREالخاصة بها على subquery لكل row، أو عندما يكونmax_block_sizeصغيرًا بما يكفي بحيث يُصدرSELECTالداخلي على جدولsystem.*ذي الصلة أكثر من block واحد. #104927 (Groene AI). - تم إصلاح
CASTمن وحدات interval الأصغر إلى الأكبر، والذي كان يعيد نتائج خاطئة (على سبيل المثال، كانCAST(toIntervalSecond(60) AS IntervalMinute)يعيد0بدلًا من1). يُغلق #104986. #105058 (Yarik Briukhovetskyi). - تم إصلاح خطأ منطقي (
Assertion 'row < chunk.getNumRows()' failed) في queries من نوعLIMIT ... WITH TIESالتي تعمل مع pipeline القراءة بالترتيب (optimize_read_in_order = 1وread_in_order_use_virtual_row_per_block = 1). #105102 (Groene AI). - تم إصلاح تسرّب في refreshable materialized views (
MATERIALIZED VIEW ... REFRESH ...): إذ كان يتعذر تنفيذ drop للـ table الداخلية المؤقتة التي يستبدلها refresh عبرEXCHANGE TABLESإذا كان حجمها أكبر منmax_table_size_to_drop، لذلك كان كل refresh لاحق ينشئ table داخلية مؤقتة إضافية، ما يؤدي إلى نمو directory بيانات الـ view حتى امتلاء القرص. وأصبح drop الداخلي لمهمة refresh الآن يتجاوزmax_table_size_to_dropوmax_partition_size_to_drop؛ فيما تظل وسائل الأمان هذه مطبّقة علىDROP TABLEالصادر من المستخدم للـ view نفسها. يُغلق #104900. #105106 (Groene AI). - تم إصلاح خطأ غير متوقع
DATA_TYPE_CANNOT_BE_USED_IN_KEYفي queriesALTERالتي لا تغيّر sorting key (مثل تغيير settings أو comments أو codecs أو إضافة column غير مفتاحي، إلخ) لجداولMergeTreeالتي تحتوي علىSimpleAggregateFunction(أو نوع آخر مسموح فقط معallow_suspicious_primary_key = 1) في sorting key. #105111 (Groene AI). - تم إصلاح حالة use-after-free عند الاستعلام عن أعمدة حالة النسخ المتماثلة في
system.clusters(مثلis_activeوunsynced_after_recoveryوrecovery_time) أثناء إسقاط قاعدة بياناتReplicatedأو فصلها. كذلك، أصبحت استثناءات Keeper غير الضارة التي كانت تُبتلع في هذا المسار من الشيفرة (إذ تُعامَل قاعدة البيانات المتأثرة على أنها غير متاحة مؤقتًا ويتم تخطيها) تُسجَّل الآن عند المستوىInformationبدلًا منError، لذلك لم تعد تصل إلى العملاء مع الإعداد الافتراضيsend_logs_level = 'warning'. #105149 (Groene AI). - تم إصلاح مشكلة كانت تؤدي عند تشغيل عدة statements في
clickhouse-local --ignore-errorإلى إعادة طباعة كل statement لاحقة داخل رسالة الخطأ عند كل خطأ lexical أو خطأ ناتج عن عدم تطابق الأقواس. #105480 (Groene AI). - تم إصلاح تعطل نادر في الخادم عند إسقاط refreshable materialized views أو استبدالها بالتزامن مع جدولة تحديثها. #105588 (Groene AI).
- أصبح
ALTER TABLE ... DELETEوALTER TABLE ... UPDATEعلى جداولIcebergالتي لا يكون تنسيق ملف البيانات فيهاParquetمرفوضَين الآن برسالة الخطأ الواضحةNOT_IMPLEMENTEDبدلًا من تعطل الخادم أو إفساد الجدول بصمت. #105893 (Groene AI). - تم إصلاح نتائج غير صحيحة من view معرّف باستخدام
EXCEPTأوINTERSECTعندما يكون أحد المعاملات سلسلةUNION، وذلك بعدDETACH/ATTACHأو إعادة تشغيل الخادم. كان الـ formatter يفتقد إلى الأقواس حول عناصرUNIONالتابعة لـINTERSECT/EXCEPT، لذلك أُعيد parse لـ SQL المخزن بأسبقية معكوسة. #105935 (Groene AI). - تم إصلاح اكتشاف بيانات
JSONبالخطأ على أنهاTSKVأثناء الاكتشاف التلقائي للتنسيق. يُغلق #100797. #106009 (Pavel Kruglov). - تم منع إنشاء skip index من نوع
minmaxمباشرة على columns من نوعJSON— إذ كان ذلك قد يؤدي لاحقًا إلى فشل عمليات insert مع الاستثناءNO_COMMON_TYPEعند إدراج arrays مختلطة الأنواع. أنشئ الـ index على subcolumns محددة النوع بدلًا من ذلك (مثلINDEX idx json.field TYPE minmax). #106094 (linhaojie). - تم إصلاح خطأ منطقي (
Parsed partition value ... doesn't match partition value for an existing part with the same partition ID) كان يطرحهOPTIMIZE TABLE ... PARTITION ...واستعلامات أخرى تحل قيمة partition، في الجداول التي تستخدم مفتاح partition من النوعTime. #106202 (Groene AI). - تم إصلاح حالة كان فيها data part يُعلَّم خطأً على أنه يحتوي على projection معطوب بعد أن لا تترك lightweight delete أي projection part — سواء عند إعادة بناء الـ projection من دون أي rows ناتجة أو عند إسقاطه (
lightweight_mutation_projection_mode = 'rebuild'/'drop'). وكانت هذه الحالة المعطوبة تعطل سابقًا optimization الخاصة بالـ projection للاستعلامات على ذلك الـ part. #106273 (Shaohua Wang). - تم إصلاح
removeDirectoryعلى أقراص object storage من نوعplain(مثلs3_plain)؛ إذ كان يحذف كل الملفات داخل directory غير فارغ كما لو أن الحذف تعاودي. أما الآن، فيفشل حذف directory غير فارغ بالخطأCANNOT_RMDIR، بينما يتعامل الحذف التعاودي مع المحتويات صراحةً. #106281 (RinChanNOW). - تم إصلاح خطأ منطقي (
Part ... doesn't exist) كان يمكن أن يؤدي إلى توقف الخادم أثناء recovery لعمليةINSERTباستخدام quorum بعد خطأ عتادي في Keeper، عندما كان الـ quorum يُعلَّم في الوقت نفسه على أنه فشل. #106424 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERRORالمتعلق بتكرار أسماء الأعمدة عند تطبيق سياسات الصفوف. #106438 (János Benjamin Antal). - إصلاح مشكلة في
CREATE OR REPLACE TABLEوREPLACE TABLEكانت تتسبب في ترك جدول_tmp_replace_*عالقًا على القرص واستبدال الجدول الأصلي بجدول فارغ عندما يتجاوز الهدف الحاليmax_table_size_to_drop. أصبح فحص الحجم يُجرى الآن قبل التبديل، بحيث يؤدي تجاوز الحد إلى إجهاض العملية بشكل سليم مع إظهار اسم الجدول الظاهر للمستخدم في رسالة الخطأ. #106782 (Groene AI). - إصلاح مشكلة في
JSON_QUERY/JSON_VALUE/JSON_EXISTSكانت تُرجعDynamicبدلًا منString/UInt8عند استخدام وسيطاتDynamic. يُغلق #106461. #106877 (Pavel Kruglov). - إصلاح نتائج غير صحيحة عند الاستعلام من جدول
ReplacingMergeTreeباستخدامFINALومرشح على فهرس نصي بينما كانquery_plan_optimize_lazy_finalمفعّلًا. كان تحسينFINALالكسول ينشئ خطوات قراءة لا تعكس القراءة المباشرة من الفهرس النصي، ولذلك كان المرشح يستبعد جميع الصفوف المطابقة. #106894 (Jimmy Aguilar Mena). - تطبيق
query_masking_rulesعلى الرسائل الملحقة بالاستثناءات، حتى لا تتسرّب بيانات الاعتماد المرمّزة بعنوان URL في اللواحق(in file/uri ...)الخاصة بالأخطاء الصادرة من table functionsjdbc/odbcعند تهيئة قواعد الإخفاء. #106916 (Gaurav Dubey). - إصلاح مشكلة كانت تؤدي إلى وسم الأجزاء بأنها تالفة وفصلها عند أي إعادة تحميل للجزء (إعادة تشغيل الخادم،
DETACH/ATTACH) في الجداول التي تحتوي على عمودLowCardinality(Nullable(...))في مفتاح partition. منذ 26.5، لم يكن ملف فهرس minmax لكل جزء يُكتب عندما تكون القيمتان الدنيا والعظمى لمثل هذا العمود هماNULL، بينما كان فحص اتساق الجزء لا يزال يتطلب هذا الملف. الأجزاء المكتوبة بالإصدارات المتأثرة تفتقر إلى ملف فهرس minmax، وما تزال بحاجة إلى إعادة إرفاقها يدويًا. يُغلق #106837. #106945 (Pedro Ferreira). - إصلاح
LOGICAL_ERRORنادر (Unexpected expression in JOIN ON section. Expected boolean (UInt8), got 'Nothing') عندما يُشير predicate غير قائم على المساواة فيJOIN ... ONإلى عمود من النوعNothing، مثل عمود ناتج عنARRAY JOIN []. #106981 (Groene AI). - إصلاح
LOGICAL_ERRORنادر (Attempt to release query context that does not exist) والانهيار المصاحب للخادم عند قراءة جداولMergeTreeعبر cache disk لنظام الملفات أُنشئ باستخدامenable_filesystem_query_cache_limit = 1. #107028 (Groene AI). - إصلاح تعطل الخادم عند نقل جزء فارغ إلى قرص
plain_rewritable(على سبيل المثال، باستخدامALTER TABLE ... MOVE PARTITION ... TO DISKلجزء فارغ تم الاحتفاظ به بسببremove_empty_parts = 0). #107040 (Groene AI). - إصلاح ترتيب صفوف غير صحيح في استعلامات
ORDER BYعلىUNION ALLمع تفعيلoptimize_read_in_orderوread_in_order_use_virtual_row. يُغلق #106879. #107053 (Vladimir Cherkasov). - تم إصلاح
LOGICAL_ERROR(Unsupported argument types) في الدالةgeohashesInBoxعندما كانت وسائط الإحداثيات تخلط بين القيم الثابتة وغير الثابتة، أو عندما كانت إحدى الإحداثيات من النوعBFloat16. وأصبحت الآن وسائطFloat32المختلطة بين الثابت وغير الثابت تعمل، بينما تُرفض وسائطBFloat16برسالة خطأ واضحة. #107063 (Groene AI). - تم إصلاح نتائج خاطئة (صفوف مكررة) في
SELECT DISTINCTفوقGROUP BYمعWITH CUBEأوWITH ROLLUPأوGROUPING SETSعلى المفاتيح نفسها. ولم تعد آلية التحسينquery_plan_remove_redundant_distinctتزيلDISTINCTفي هذه الحالات، لأن مُعدِّلات التجميع تُنتج صفوفًا إضافية مع ضبط أعمدة المفاتيح على القيم الافتراضية، ما قد يؤدي إلى تعارض مع قيم المجموعات الفعلية. #107072 (Groene AI). - تم إصلاح نتيجة خاطئة في
OUTER JOINعندما يكون عامل التصفيةWHEREاقترانًا يتضمن حدًا ثابتًا (مثلp AND 1، أوWHERE p QUALIFY NULLحيث يُدمجQUALIFY NULLفيWHERE). إذ كان يمكن دفع الحد الثابت إلى الجانب غير المحفوظ من الوصلة وإزالته من عامل التصفية بعد الوصلة، فتُنتج الوصلة صفوفًا غير متطابقة مع ضبط أعمدة ذلك الجانب على القيم الافتراضية، ثم تمر هذه الصفوف عبر عامل التصفية على نحو غير صحيح. #107084 (Groene AI). - تم إصلاح مشكلة عدم التقاط الدوال المعرفة من قبل المستخدم
executable_poolالمُهيأة باستخدام<lifetime>للتغييرات التي تطرأ على البرنامج النصي الأساسي. سابقًا، كانSYSTEM RELOAD FUNCTIONSوحده يعيد قراءة برنامج نصي عُدِّل؛ أما عمليات إعادة التحميل الدورية لـ<lifetime>فكانت تواصل تنفيذ الإصدار القديم. #107087 (Groene AI). - تم إصلاح استثناء
LOGICAL_ERROR(Cannot find input column ... on its position in inputs of expression actions DAG) في استعلام فرعي قيَمي مترابط فوق مصدر يُسقِط معرّف العمود نفسه مرتين (مثلSELECT number, *) عندما يكونcorrelated_subqueries_default_join_kind = 'left'. #107112 (Groene AI). - تم إصلاح حالة تسابق بيانات في مجمّع التتبّع العام على مستوى الخادم بين خيط عمل يبدأ أداة التحليل الخاصة به وعملية إيقاف الخادم. #107307 (Groene AI).
- لم تعد النسخ الاحتياطية التزايدية تخزّن بيانات اعتماد
S3في محدِّد<base_backup>داخل ملف البيانات الوصفية.backup. فالنسخ الاحتياطية المُنشأة باستخدامuse_same_s3_credentials_for_base_backup = 1، أو باستخدام بيانات اعتماد صريحة للنسخة الاحتياطية الأساسية تطابق هذا المحدِّد، تخزّن علامة غير سرية ويمكن استعادتها من دون إعدادات إضافية وقت الاستعادة؛ أما النسخ الاحتياطية المُنشأة ببيانات اعتماد صريحة مختلفة للنسخة الاحتياطية الأساسية أو بوسائط مصادقة أساسية إضافية، فيجب تمريرها إلىRESTOREباستخدام الإعدادbase_backup. وتظل النسخ الاحتياطية التي أنشأتها الإصدارات الأقدم باستخدام بيانات اعتماد مضمّنة قابلة للاستعادة. #107357 (Pablo Marcos). - تم إصلاح مشكلة في
CSVWithNamesوCSVWithNamesAndTypesحيث كانت الترويسة تحتوي على أعمدة أقل من البيانات عند تفعيلoutput_format_csv_serialize_tuple_into_separate_columns(وهو الإعداد الافتراضي). وتقوم الترويسة الآن (وكذلك صف الأنواع) بتسطيح أعمدةTupleإلى حقولها الطرفية بأسماء منقوطة (مثلt.aوt.b)، بحيث يطابق عدد أعمدة الترويسة عدد أعمدة البيانات. ويتحكم إعداد جديد هوoutput_format_csv_header_serialize_tuple_into_separate_columns(القيمة الافتراضية1) في هذا السلوك، ويمكن ضبطه على0لاستعادة الترويسة السابقة ذات الاسم الواحد. #107371 (Groene AI). - تم إصلاح قراءة جداول
Icebergv3 التي تحتوي ملفات بياناتParquetفيها أعمدة row-lineage محجوزة (مثل_row_id)؛ ولم يعد قارئParquetالأصلي يطلقICEBERG_SPECIFICATION_VIOLATIONبسبب معرّفات الحقول المحجوزة التي ليست جزءًا من مخطط الجدول. #107377 (Greg Maher). - تم إصلاح توقّف نادر للخادم أثناء الإغلاق (
std::future_error:The associated promise has been destructed prior to the associated state becoming ready) كان سببه إسقاط مهمة مجدولة من قائمة انتظار مجمّع الخيوط قبل تنفيذها. #107383 (Groene AI). - تم إصلاح محركي الجدول وقاعدة البيانات
MaterializedPostgreSQLبحيث يمكن إجراء replication لجدول واحد أو قاعدة بيانات واحدة من schema غير افتراضي في PostgreSQL (materialized_postgresql_schema)، بما في ذلك الحالة التي توجد فيها جداول بالاسم نفسه في عدة schema ضمن قاعدة البيانات نفسها (إذ كانت سابقًا تتشارك publication وreplication slot ويحدث تداخل بينها). #107425 (Alexey Milovidov). - تم إصلاح توقّف
MaterializedPostgreSQLعن replication لقاعدة بيانات كاملة (معLOGICAL_ERROR: Columns number mismatch) عندما يتغير structure لجدول replicated واحد أثناء توقف الخادم. الآن يُتخطى الجدول المتأثر فقط، ويمكن استعادته باستخدامDETACH/ATTACH. #107427 (Alexey Milovidov). - لم يعد
BACKUPلقاعدة بياناتMaterializedPostgreSQLيتعطل إلى الأبد معTable ... were created or changed its definition during scanning، وأصبح الآن ينسخ بيانات الجدول احتياطيًا فعليًا (ويُفوَّض ذلك إلىReplacingMergeTreeالأساسي)، ويمكن استعادتها بعد ذلك كـReplacingMergeTreeمستقل. #107433 (Alexey Milovidov). - تم إصلاح تراجع كان فيه تعيين
compatibility = '26.6'(الذي يفعّل ضمنيًا partition strategyhive) يقبل بصمت{_partition_id}في مسارات جداول S3/object storage بدلًا من إطلاقBAD_ARGUMENTS. #107437 (Lefteris). - تم إصلاح تسرّب للذاكرة في
mongo-c-driverالمضمّن، وكان يمكن أن يحدث عند القراءة من MongoDB (على سبيل المثال، عبر MongoDB Dictionary أوmongodbtable function) إذا أعقب خطأ قراءة قابل لإعادة المحاولة فشلٌ في اختيار الخادم أثناء إعادة المحاولة. #107448 (Groene AI). - تم إصلاح استثناء عند إدراج البيانات في جدول
Icebergأُنشئت metadata الخاصة به بواسطة external engine وكانت تُهمل المصفوفات الاختياريةsnapshotsأوmetadata-logأوsnapshot-log. أصبحت عمليات insert هذه تنجح الآن بدلًا من أن تفشل. #107473 (Shaohua Wang). - تم إصلاح اشتراط
DELETE FROM(lightweight delete) لامتيازALTER UPDATEبالإضافة إلىALTER DELETE. يمكن الآن للمستخدم الذي مُنحALTER DELETEفقط تشغيلDELETE FROM، كما هو موثق. #107491 (Shaohua Wang). - تم إصلاح
NOT_FOUND_COLUMN_IN_BLOCKعند قراءة ملفات مقسّمة بأسلوب Hive معuse_hive_partitioning = 1وعبارةWHERE/PREWHEREتُرشّح column حقيقيًا (غير افتراضي) مع تحديد column partition خاص بـ Hive أيضًا. #107505 (Groene AI). - تم إصلاح
LOGICAL_ERROR(Different order of columns in UNION subquery) عندما يقرأ analyzer القديم (enable_analyzer = 0) مجموعة فرعية من columns من subquery تكون فيه فروعUNIONالتابعة عمليات set operations من نوعINTERSECT/EXCEPT. #107511 (Groene AI). - تم إصلاح تحويل قيم
NULLبصمت إلى سلاسل فارغة عند إدراج بياناتArrow/ORCفي column من النوعLowCardinality(Nullable(...)). وكان هذا تراجعًا أُدخل في الإصدار 26.5. #107532 (Jimmy Aguilar Mena). - إصلاح خطأ منطقي (
Stream ... variant_discr ... is not found) كان يمكن أن يحدث عند دمج أو قراءة جزءMergeTreeناتج عن mutation لجدول يحتوي على عمودDynamic. #107562 (Alexey Milovidov). - تم إصلاح خطأ منطقي (
WhichDataType(const_type).isArray()) أثناء تحليل المفتاح الأساسي عند استدعاءpointInPolygonباستخدام وسيطة polygon ثابتة من نوع مغلف مثلVariantأوDynamic(على سبيل المثال،pointInPolygon((x, y), if(c, [(0, 0), ...], NULL))). #107589 (Groene AI). - تم إصلاح خطأ منطقي (
Last stored last_written_position in meta file ... is bigger than current last_written_pos) في محركFileLogكان يمكن أن يحدث عند حذف ملف خاضع للمراقبة ثم إعادة إنشائه مع إعادة استخدام نفس inode. #107617 (Groene AI). - إصلاح إيقاف نادر للخادم (
std::future_error:The associated promise has been destructed prior to the associated state becoming ready) أثناء معالجة طلبات عميل ZooKeeper، عندما أُسقط Keeper request غير متزامن أثناء إرساله، على سبيل المثال تحت memory pressure. #107647 (Groene AI). - تم إصلاح
RESTOREلجداولReplicatedMergeTreeبحيث يتم الاحتفاظ بالأجزاء ذات المحتوى المكرر من النسخة الاحتياطية بدلًا من إزالة تكرارها بصمت. #107652 (Pablo Marcos). - إصلاح مرشح الربط وقت التشغيل الذي كان ينتج نتائج خاطئة لأعمدة
JSON. يغلق #107646. #107663 (Pavel Kruglov). - تم إصلاح نتائج غير صحيحة من distributed queries التي تحدد أعمدة
ALIASتشترك في expression فرعي واحد: إذ كان يمكن أن تصبح الأعمدة غير متطابقة وتُعاد القيم تحت العمود الخطأ. #107675 (Vladimir Cherkasov). - أصبحت الحصص المرتبطة بـ
normalized_query_hashتحتسب الآن جميع الموارد (read_rows,read_bytes,result_rows,result_bytes,execution_time,written_bytes,errors) لكل query pattern، مثل عدادات عدد الاستعلامات، بدلًا من احتسابها ضمن حاوية مشتركة واحدة لكل مستخدم. #107681 (Alexey Milovidov). - تم إصلاح خطأ منطقي من نوع
Block structure mismatch in UnionStep stream(إيقاف للخادم في builds الخاصة بـ debug/sanitizer، وCode: 49في builds الإصدار) كان يحدث عندما كانت branches الشقيقة فيUNION/INTERSECT/EXCEPTتختلف فقط فيWHEREpredicate، وتم طي predicate الخاص بأحد الفروع كثابت إلى عمودConst. #107719 (Groene AI). - إصلاح أخطاء منطقية (
Bad cast) ناجمة عن إزالة غير متسقة لـLowCardinalityالمتداخلة داخل أعمدةVariantوDynamic، على سبيل المثال فيconcatوformatوتحليل المفتاح الأساسي. يغلق #107598. #107773 (Pavel Kruglov). - تم إصلاح اختلال شديد في توزيع العمل مع parallel replicas عندما تحتوي الـ cluster على replicas غير نشطة (على سبيل المثال، entries قديمة متروكة بعد autoscaling). لم تعد هذه replicas تُحتسب من قبل coordinator القراءة، لذلك يُوزَّع العمل على replicas المتصلة بدلًا من تكدسه على واحدة فقط. #107805 (Alexey Milovidov).
- إصلاح الاستثناء
Not-ready Set is passed as the second argumentالذي كان يمكن أن يحدث إذا فشل بصمت إنشاء مجموعة استعلام فرعيINأثناء تحليل المفتاح الأساسي (على سبيل المثال، عند انتهاء مهلة استعلام فرعي معoverflow_mode = 'break')، ما كان يترك المجموعة غير مُنشأة نهائيًا ضمن مسار تنفيذ الاستعلام. #107924 (Alexey Milovidov). - إصلاح تعطل الخادم في predicate pushdown (
enable_optimize_predicate_expression، المحلّل القديم) عندما يظهر استعلام فرعيUNIONداخل شرطJOIN ... ON. #107930 (Groene AI). - إصلاح أخطاء
CHECKSUM_DOESNT_MATCHوأخطاء قراءةParquetالزائفة (وكذلك، لبعض formats، نتائج خاطئة بصمت) عندما يُستبدل كائن في S3 أو S3-compatible (مثل GCS) في مكانه أثناء قراءته. أصبحت هذه القراءات الآن تفشل بخطأ واضح قابل لإعادة المحاولة بدلًا من إرجاع بيانات مركبة من إصدارين مختلفين للكائن؛ ويتحكم في ذلك الإعداد الجديدs3_validate_etag_on_read(مفعّل افتراضيًا). #107934 (Shaohua Wang). - إصلاح فشل
SELECTمعNOT_FOUND_COLUMN_IN_BLOCKعلى جدول يحتوي على skipping index من نوع البياناتsetعندما تقومROW POLICYبتصفيته باستخدام شرط صحيح دائمًا مع تحقق من عمود غير مفهرس. #107971 (Shaohua Wang). - إصلاح parsing لمعاملات أمر executable user-defined function بحيث لا تُقبل placeholders ذات الأسماء الفارغة أو غير الصالحة كمعاملات. #107983 (Goutam Adwant).
- إصلاح تراجع الأداء في subcolumns الخاصة بـ
MapمعPREWHERE. يغلق #107912. نتج عن #99200. #107988 (Pavel Kruglov). - إصلاح كتابة خارج الحدود عند قراءة عمود
Variantمن blockNativeتالف تشير فيه discriminators إلى فهرس variant غير موجود. #107991 (uwezkhan). - إصلاح نتائج استعلام خاطئة بسبب pruning غير الصحيح للمفتاح الأساسي وpartition عند تطبيق
toStartOfDayأوtoStartOfISOYearأوtoDaysSinceYearZeroأوtoRelativeSecondNumأوtoRelativeMinuteNumأوtoRelativeHourNumأوtoRelativeWeekNumأوtoRelativeDayNumأوtoMonthNumSinceEpochأوtoYearNumSinceEpochعلى Key column من نوعDate32يحتوي على تواريخ خارج النطاق الذي يمكن للدالة تمثيله (وخاصة التواريخ السابقة لـ1970-01-01). كانت هذه الدوال تُعرّف نفسها على أنها monotonic بالنسبة إلى primary index، لكنها كانت سابقًا تلتف مع مثل هذه الوسيطات، ما كان قد يؤدي إلى استبعاد الفهرس granules تحتوي فعليًا على صفوف مطابقة؛ أما الآن فهي تتشبع عند حدود نوع النتيجة الخاص بها وتبقى monotonic على كامل نطاقDate32. #108018 (Nihal Z. Miaji). - إصلاح
accurateCastOrNullلـTupleيكون أحد عناصره من النوعDynamic/Variant: كانNULLالحقيقي من المصدر يُعامَل على أنه فشل في التحويل. بالنسبة إلى عنصر هدف من النوعNullable، يبقىNULLمن المصدر الآن عنصرًاNULL(بما يتوافق مع مصدر عادي من النوعTuple(Nullable(...)))؛ أما بالنسبة إلى عنصر هدف غيرNullable، فإنNULLمن المصدر يجعل الـ tuple بالكاملNULLبدلًا من إنتاج القيمة الافتراضية للعنصر؛ بينما تظل حالات فشل parse/overflow تجعل الـ tuple بالكاملNULL. #108023 (Groene AI). كما تم إصلاح خطأ منطقي عند تحويل column من النوعDynamicأوVariantمتداخل داخلTupleإلى element type غيرNullableباستخدامaccurateCastOrNullأوaccurateCastOrDefault. #108061 (Alexey Milovidov). - إصلاح
numericIndexedVectorPointwiseMultiplyالذي كان يعيد نتيجة فارغة عند الضرب في متجه كل قيمه واحد وله إعداد BSI (bit-sliced index) مختلف. #108027 (Alexey Milovidov). - إصلاح
toTime64وCAST(... AS Time64)اللذين لم يكونا يقيّدان القيم الخارجة عن النطاق إلى نطاقTime64في وضعي overflow saturateوignore، مما قد ينتج عنه قيم تظهر بشكل متطابق ولكن تُقارَن على أنها مختلفة. #108028 (Alexey Milovidov). - أصبح
getClientHTTPHeaderالآن يُعامَل بشكل صحيح على أنه non-deterministic، ولذلك لم تعد نتيجته تُعاد استخدامها بشكل غير صحيح بواسطة query result cache. #108029 (Alexey Milovidov). - أصبح
clickhouse-client --port 9440يفعّل تلقائيًا مرة أخرى connection آمنًا (TLS)؛ وكان هذا معطّلًا بسبب إعادة هيكلة توقفت معها عملية تمرير المنفذ إلى آلية التحقق من الاتصال الآمن. #108032 (Alexey Milovidov). - لم يعد error عابر أثناء refresh data parts الخاصة بـ table في وضع read-only يوقف نهائيًا مهمة refresh التي تعمل في background. #108034 (Alexey Milovidov).
- إصلاح تأخر warnings الخاصة بفرط الحمل في memory/CPU/mutation داخل
system.warningsبمقدار دورة واحدة عن asynchronous-metrics cycle (وغيابها في الدورة الأولى). #108035 (Alexey Milovidov). - أصبحت
mongodbtable function تقبل الآنoid_columnsعند تمريره بوصفه argument مُسمّى (مثلoid_columns='_id') بدلًا من رفضه معBAD_ARGUMENTS. #108039 (Alexey Milovidov). - إصلاح استثناء
Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>(خطأ منطقي) عندما يختار asterisk مؤهَّل (t.*) مفتاحJOIN USINGويكون ذلك الـ join متداخلًا تحت join من نوعPASTE/CROSS/الفاصلة أو join خارجي من نوعON، معjoin_use_nulls = 0. #108043 (Groene AI). - إصلاح التعامل غير الصحيح مع تأكيدات العرض الصفري (
\b,^,$) في دوال regexp “match all” وهيextractAll,extractAllGroupsVertical,extractAllGroupsHorizontal,countMatchesوsplitByRegexp. على سبيل المثال، يعيدextractAll('new york is the greatest', '\b(\w)')الآن بشكل صحيح الحرف الأول من كل كلمة بدلًا من كل حرف. #108047 (Alexey Milovidov). - تم إصلاح
CREATE TABLE ... AS SELECTعلى قواعد بياناتAtomic، إذ كان يترك جدولًا فارغًا عند فشل الاستعلام — على سبيل المثال، عندما لا يملك المستخدم صلاحية الوصول إلى جدول مُشار إليه منsubquery. سابقًا، كانت إعادة المحاولة تُبلغ بأن الجدول موجود بالفعل بدلًا من إظهارerrorالأصلي. يُنشأ الجدول الآن عبرtemporary tableولا يظهر إلا بعد اكتمال تعبئته بالكامل. #108048 (Alexey Milovidov). - أصبح من الممكن الاستعلام عن قاموس
range_hashedأوcomplex_key_range_hashedيستخدم نطاقDateTime64أوDecimalأو نطاق أعدادfloating-pointباستخدامargumentمطابق لـdictGet/dictHas. سابقًا، كانت مثل هذهqueriesتفشل برسالةmust be convertible to Int64، وكانتintervalsالمفتوحة النهاية في نطاقاتDecimal/DateTime64تُرجعdefault valueبشكل غير صحيح. #108052 (Alexey Milovidov). - تم إصلاح استثناء (
CANNOT_PARSE_TEXT) عند تحميل قاموس ذي مفتاحcompositeتكون فيهkey columnsليست أولcolumnsفي تعريف القاموس، وذلك معsourceمحلي منClickHouseيستخدمqueryصريحًا. تُطابقsource columnsالآن معstructureالقاموس حسبnameبدلًا من ترتيبها. #108053 (Alexey Milovidov). - تم إصلاح فشل
table functionvaluesمعARGUMENT_OUT_OF_BOUNDعند استخدام literal عشري لا يمكن تمثيله بدقة فيcolumnذي نوعfloating-pointمحدود الدقة (مثل0.1معcolumnمن نوعFloat32)، مثلSELECT * FROM values('x Float32', 0.1). أصبحت مثل هذهvaluesالآن مقبولة وتُحوَّل إلى أقرب قيمة قابلة للتمثيل، بما يتوافق معCASTوINSERT ... VALUES. #108055 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERROR(No available columns) عند تنفيذSELECT count()(أو غيره منqueriesالبسيطة) علىtableمُنح فيه المستخدم صلاحيةSELECTعلىALIAScolumnفقط. #108056 (Alexey Milovidov). - تم إصلاح
mapFilterوmapSort(وvariantsالخاصة به) وmapConcatالتي كانت تُسقطLowCardinalityمن نوعَي المفتاح والقيمة فيMap. سابقًا، كانmapFilterعلىcolumnمن النوعMap(LowCardinality(String), String)يُرجعMap(String, String)، ما قد يُفسدmetadataالخاصة بـtableأُنشئ عبرCREATE TABLE ... AS SELECTويتسبب في فشلCHECK TABLE. #108057 (Alexey Milovidov). - تم إصلاح نتائج غير صحيحة عند استخدام
hasTokenعلىtext indexesمعtokenizerغيرsplitByNonAlpha. #108066 (Robert Schulze). - تم إصلاح تجمّد
SYSTEM RELOAD DICTIONARIES(وكذلكRELOAD DICTIONARY) عند مشاركة عدد كبير من قواميس MySQL المعرّفة في XML لمجموعةconnection poolواحدة عبرshare_connection. أصبحت هذه المجموعات الآن تلتزم بـconnection_pool_sizeوconnection_wait_timeout(القيمة الافتراضية 5seconds) منconfiguration، بما يتوافق مع القواميس المعرّفة عبرnamed collections. #108083 (Alexey Milovidov). - أصبح استخدام
EXISTS <dictionary>مسموحًا للمستخدم الذي يملك فقطprivilegeSHOW DICTIONARIESعلى القاموس (وكان ذلك يتطلب سابقًاSHOW TABLES). #108084 (Alexey Milovidov). - تم إصلاح مشكلة في
CREATE TABLE dst AS src SETTINGS ...(والصيغ المشابهة معORDER BY/PARTITION BYولكن من دونENGINEصريح) كانت تؤدي بصمت إلى إسقاط محرك الجدول المصدر، وعبارات التخزين (مثل tableTTLوالمفاتيح) والإعدادات. وأصبح الآن محرك الجدول وعبارات التخزين التي لم يجرِ تجاوزها تُورَّث من الجدول المصدر، كما تُدمَج الإعدادات المحددة فوق إعدادات الجدول المصدر. #108085 (Alexey Milovidov). - تم إصلاح فشل
INSERTفي جداولMergeTreeمع الخطأfilesystem error: in rename: Permission deniedعلى أنظمة الملفات المعتمدة على Windows (WSL وCIFS/SMB وDocker Desktop bind mounts)، وكان السبب أن كاتب الجزء يترك واصفات الملفات مفتوحة أثناء إعادة تسمية دليل الجزء. #108089 (Alexey Milovidov). - تم إصلاح انهيار (إلغاء مرجعية مؤشر فارغ) عند الاستعلام عن جدول
Hiveمن دون عبارةWHERE، مثلSELECT * FROM hive_table. #108094 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERROR(“Unexpected return type from if”) عند قراءة عمود معapply_mutations_on_fly = 1بعد تنفيذALTER UPDATE col = ... WHERE <cond>بشرط غير ثابت أو غير محقق، يتبعهALTER MODIFY COLUMN col <new type>. #108128 (Groene AI). - تم إصلاح
toStartOfIntervalوdateTruncاللتين كانتا تعيدان قيمة مقربة بدلًا من بداية الفاصل الزمني الذي تقع ضمنه القيمة عندما تكون دقة الإدخال أعلى من وحدة الفاصل، مثلًاtoStartOfInterval(toDateTime64('2023-10-09 10:11:12.000999', 6), INTERVAL 1 millisecond)كانت تعيد10:11:12.001بدلًا من10:11:12.000. كما تأثر أيضًا التحميل الزائد الذي يستخدم origin صريحًا. يُغلق هذا #103535. #108186 (Yarik Briukhovetskyi). - تم إخفاء المعلومات الحساسة في العمود
view_queryضمنsystem.query_views_log. #108214 (Valerii Mordovskii). - تم إصلاح حالة تعطل في جدول
MergeTreeمرفق بفهرس تخطٍّ قديم من نوعhypothesis(وهو نوع فهرس أُزيل وأُبقي عليه فقط من أجل توافقATTACH). سابقًا، كانت عملية lightweightDELETEأوOPTIMIZEأوINSERTعادي أوSELECTمفلتر على مثل هذا الجدول تفشل معILLEGAL_INDEX(“Index of type ‘hypothesis’ is no longer supported”)، وكانت mutation الخاصة بـDELETEتعيد المحاولة إلى ما لا نهاية. أما الآن فيُعامل هذا الفهرس الميت على أنه خامل: يُمرَّر كما هو من دون تغيير أثناء merge/mutation، ويُتخطى عند insert وأثناء تخطيط الاستعلام، ولا يزال بالإمكان حذفه باستخدامALTER TABLE ... DROP INDEX. #108217 (Groene AI). - تم إصلاح عدم عمل الإعداد
type_json_allow_duplicated_key_with_literal_and_nested_objectمع المسارات محددة النوع فيJSON. #108218 (Pavel Kruglov). - تم إصلاح
LOGICAL_ERROR(Different list of shards in child plans) عند تشغيل استعلام معmake_distributed_plan = 1على جدولMergeTreeيحتوي على projection عادي أو تجميعي. #108256 (Groene AI). - تم إصلاح
replaceRegexpOneوreplaceRegexpAllبحيث أصبحت.تطابق محارف السطر الجديد افتراضيًا، بما يتوافق مع بقية دوال regular expression. #108265 (linjiayu1025-collab). - إصلاح خطأ منطقي عند تحويل
Array(Dynamic)أوArray(Variant)إلىQBitباستخدامaccurateCastOrNull، مثلaccurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (Groene AI). - أصبح
index_granularity_bytesالآن مطبَّقًا على أعمدة حالةAggregateFunction. سابقًا، كان الحد الأقصى لبايتات الـ granule يُتجاهَل لهذه الأعمدة (مثل حالاتuniqExactفي جداولAggregatingMergeTreeوprojections التجميعية)، ما كان ينتج granules أكبر بكثير من الحد المضبوط ويزيد من تضخيم القراءة واستهلاك الذاكرة وقت الاستعلام. #108297 (Groene AI). - إصلاح مشكلة تقييم شروط
UPDATE/DELETEخفيفة الوزن مرتين، ما قد يؤدي إلى سلوك غير صحيح مع الشروط غير الحتمية وإلى عمل إضافي مع الشروط الحتمية. يغلق #86032. #108323 (ofeliacode). - إصلاح Exception في معالج HTTP معرّف مسبقًا عند غياب header من الطلب، رغم أن التعبير النمطي
headers_regexpالخاص به يسمح بقيمة فارغة. #108324 (Vitaly Baranov). - إصلاح
arrayPartialSortعند استخدام argument للحد غير ثابت. #108327 (Vitaly Baranov). - إصلاح مشكلة استمرار تنفيذ
INSERTمُلغى أو تمKILLله لفترة طويلة أثناء بناء skip index (مثل فهرسset(0)غير محدود على عمود عالي الكاردينالية). أصبح بناء الفهرس الآن يتوقف سريعًا عند إلغاء الاستعلام. #108351 (Shaohua Wang). - إصلاح عدم استجابة
SELECTمن table functionprimesللإلغاء: عند استخدامstepكبير (أوlimit) كان الاستعلام قد يستمر في العمل لفترة طويلة بعدKILL QUERYأو انتهاء المهلة. وهو الآن يتوقف سريعًا. #108353 (Shaohua Wang). - إصلاح تحليل أسماء type names التي تتضمن substring
INTضمن الاسم (مثل اسم يشبه الدوال مثلquantileInterpolatedWeightedعند استخدامه في موضع نوع بيانات). كان يجري التعامل مع هذه الأسماء خطأً على أنها Integer types في MySQL، كما كانت أول مجموعة argument فيها(...)تُستهلك بصمت باعتبارها معدِّلًا لعرض العرض، ما قد يفسد round-trip لتنسيق الاستعلام. #108354 (Groene AI). - إصلاح حالة عدم اتساق كان فيها
ARRAY JOINغير صحيح متبوعًا بفاصلة وقائمة جداول بين قوسين يُفسَّر خطأً على أنه cross join بدلًا من رفضه. #108365 (Raúl Marín). - إخفاء arguments السرية للدوال مثل
encryptوdecryptوHMACفي مخرجاتEXPLAIN actionsوEXPLAIN headerوEXPLAIN PIPELINEعندما يكونformat_display_secrets_in_show_and_selectمعطّلًا (وهو الوضع الافتراضي). #108386 (Raúl Marín). - إصلاح
CREATE OR REPLACEلعرض materialized view قابل للتحديث مع هدفTO: كان يُرفَض خطأً لأن الجدول الهدف مملوك بالفعل للعرض الجاري استبداله. #108392 (Nikolay Degterinsky). - أُصلِح تعطل في الخادم (
Received signal 4، تعليمة غير قانونية) كان يمكن أن يحدث بسبب دفق بروتوكولnative TCPغير صالح أو غير متزامن. وأصبح الآن يُتحقق من أن العنوان الأولي الذي يرسله العميل هوhost:portرقمي قبل تحليله، بدلًا من السماح بوصول منفذ غير رقمي إلى دالةgetservbynameالمحصورة في libc. #108410 (Groene AI). - أُصلِح تعطل في الخادم أثناء الإيقاف عند إيقاف قاعدة بيانات تُلقي استثناءً (على سبيل المثال، عندما تصطدم عملية
flushلجدول بمهلة ZooKeeper). ولم يعد ما تبقى من تسلسل الإيقاف يُتخطى، بحيث تُفرَّغ الآن سجلات النظام وتُنضم خيوطها قبل خروج الخادم. #108417 (Groene AI). - أُصلِحت دوال regular expression (
match,extract,extractAll,replaceRegexpOne,replaceRegexpAll، إلخ) التي كانت تُرجع بصمت نتائج خاطئة عندما كان النمط يحتوي على بايت NUL (\0). ويُعامَل NUL الآن على أنه بايت حرفي عادي، بما يتسق مع RE2. #108427 (Alexey Milovidov). - أُصلِح سلوك
clickhouse-localالذي كان يُرجع ردًا فارغًا لطلبات HTTPOPTIONSعندما لا يكونhttp_options_responseمُهيأً، مما كان يجعل واجهة الويب (/play) تعرض الاتصال على أنه معطّل رغم أن الاستعلامات كانت تعمل. #108428 (Alexey Milovidov). - أُصلِح استثناء
LOGICAL_ERROR(“Invalid action query tree node …”) عند تنفيذ distributed query كانت تزيل التكرار من أعمدةALIASالمكررة والمتطابقة بنيويًا، وتشير في الوقت نفسه إلى table function تحتوي على وسيطة named-collection بصيغةkey = value(على سبيل المثالoss(s3_conn, filename = '...')). #108435 (Groene AI). - أُصلِح تعطل في الخادم (
LOGICAL_ERROR: 'Unexpected exception in refresh scheduling') كان يمكن أن يحدث عند بدء التشغيل عندما تكون refreshable materialized view منسقة في قاعدة بياناتReplicatedقد أُرفقت على Keeper لا يدعم علامة الميزةMULTI_READ(على سبيل المثال بعد خفض إصدار Keeper). وأصبح العرض الآن يتوقف بسلاسة بدلًا من إجهاض الخادم. #108441 (Groene AI). - أُصلِح خطأ
NOT_FOUND_COLUMN_IN_BLOCK(مثلColumn _part not found) عند تحديد الأعمدة الافتراضية من جدولMergeTreeفي وضع parallel replicas، بما في ذلك عبرSELECT *معasterisk_include_virtual_columns = 1. #108451 (Groene AI). - يتطلب
SYSTEM RESET DDL WORKERالآن امتيازSYSTEM RESET DDL WORKERالجديد. في السابق، كان بإمكان أي مستخدم موثَّق الهوية (بمن فيهم مستخدموreadonly) تشغيله وإعادة تعيين حالة عامل DDL مرارًا، مما كان يحجب DDL الخاصة بـON CLUSTER. #108460 (Groene AI). - قُيِّد مسار النموذج الخاص بـ
catboostEvaluateبدليلuser_files، مثل table function fileوdictionary sources. في السابق، كانت الدالة تقبل أي path في filesystem من دون التحقق من بقائه ضمن هذا النطاق، مما كان يتيح اختبار وجود ملفات خارجuser_filesوالتسبب في reads لها. ويجب الآن أن تكون النماذج موجودة داخلuser_files. #108463 (Groene AI). - تتطلب الدالة
hasColumnInTableالآن امتيازSHOW COLUMNSعلى الجدول الهدف، وهو نفس الامتياز المطلوب لكل منDESCRIBEوSHOW CREATE TABLE. في السابق، كان بإمكان أي مستخدم استدعاءhasColumnInTableلاختبار أسماء الأعمدة والتحقق من وجود جدول وقاعدة بيانات من دون أي فحص لصلاحيات الوصول. #108464 (Groene AI). - تم إصلاح التخصيص المفرط للذاكرة عند إلغاء تسلسل حالات aggregate function الوسيطة المُصاغة لـ
mannWhitneyUTestوrankCorrوlargestTriangleThreeBucketsوquantileGKوsequenceMatch/sequenceCountوgroupArrayIntersect. كان بإمكان حالة غير سليمة أن تعلن عددًا هائلًا من العناصر، فتجعل الخادم يحاول تخصيص عشرات الجيجابايتات انطلاقًا من بضع بايتات من الإدخال؛ وتُرفض هذه الحالات الآن بالخطأTOO_LARGE_ARRAY_SIZE. #108465 (Groene AI). - التحقّق من هدف إعادة التوجيه في استجابة S3
301 Moved Permanentlyبمقارنته معremote_url_allow_hosts(RemoteHostFilter). سابقًا، كانت معالجة AWS SDK للرمز 301 تتبع endpoint الذي يورّده المهاجم في الاستجابة (ترويسةLocationأو العنصر<Endpoint>) من دون التحقق من المضيف، ما كان يتيح لخادم S3-compatible خبيث أو مخترَق إعادة توجيه ClickHouse إلى مضيف عشوائي (SSRF). وكان مسار إعادة التوجيه 307 يُجري هذا التحقق بالفعل؛ وأصبح المساران الآن متسقين. #108466 (Groene AI). - تم إصلاح تسرّب لبيانات الاعتماد، إذ كانت الإعدادات القديمة
storage_aws_access_key_idوstorage_aws_secret_access_keyوstorage_catalog_credentialوstorage_auth_headerالخاصة بـ database engine DataLakeCatalogتظهر بنص واضح فيsystem.databases.engine_fullوSHOW CREATE DATABASE. وأصبحت الآن تُحجب على شكل[HIDDEN]. #108470 (Groene AI). - تم إصلاح تحديد هوية المستخدم
ssl_certificateبحيث يطابق حرف البدل المفرد*مكوّن اسم واحدًا فقط بدقة (RFC 6125 6.4.3). سابقًا، كان حرف البدل في الموضوعCNأوDNS:SAN (على سبيل المثال*.corp.example.com) يطابق أيضًا الأسماء متعددة الأجزاء مثلevil.deep.corp.example.com، مما يتيح لحامل شهادة لنطاق فرعي أعمق أن يصادق بصفته مستخدم حرف البدل. ولم يتغير تطابقURI:SAN. #108472 (Groene AI). - تم إصلاح ثغرة SQL injection في MySQL wire protocol: إذ أصبحت وسيطة
SHOW TABLE STATUS LIKEوقيمةSET <mysql_setting>المُرسلتان عبر MySQL interface (المنفذ 9004) تُحلَّلان وتُعاد صياغتهما بين علامتَي اقتباس بدلًا من دمجهما حرفيًا في query المعاد كتابته. كما تم إصلاح تجاهلKILL QUERY <id>عبر MySQL interface بصمت لمعرّفات الاتصال متعددة الأرقام. #108474 (Groene AI). - لم تعد القيم الحساسة التي تُمرَّر كمعلمات query string في HTTP (على سبيل المثال ربط معلمات
param_*مثلparam_secret_key/param_aws_secret_access_key، أو المعلمةpassword، أو معلماتsignatureبأسلوب S3) تُكتب حرفيًا فيsystem.text_logأو OpenTelemetry spans. ويقوم سطر السجلRequest URIالآن بحجب قيم المعلمات التي تبدو أسماؤها حساسة، مع استبدالها بـ[HIDDEN]. #108475 (Groene AI). - تم فرض configuration
http_forbid_headersأثناء schema inference للدالة الجدوليةurlوstorage engine URL. سابقًا، كانت ترويسة محظورة لا تزال تُرسل عبر الشبكة أثناء استنتاج المخطط (على سبيل المثال مع التنسيقRegexpأوDESCRIBE)، وكان يمكن أن ينعكس جسم الاستجابة الخاص بها في خطأ parse، مما يسرّب الأسرار. ويجري الآن التحقق من عامل تصفية الترويسات قبل أي وصول إلى الشبكة في مسار الاستنتاج، بما يطابق السلوك الحالي لـurlCluster. #108476 (Groene AI). - تم إصلاح النتائج الخاطئة عند استخدام
SELECT ... SAMPLE ...مع query condition cache (الإعدادuse_query_condition_cache، المفعّل افتراضيًا). #108488 (Groene AI). - تم إصلاح تعطل في الخادم (فيض في المكدس) كان يحدث بسبب التعبيرات المتداخلة بعمق مثل
[[[ ... ]]]أوarray(array( ... ))عندما تكونmax_parser_depthمضبوطة على قيمة كبيرة. #108493 (Raúl Marín). - تم إصلاح تعليق محرك الجدول
RabbitMQإلى أجل غير مسمى عند تنفيذDROP TABLEأو إيقاف الخادم، وذلك عندما يغلق الوسيط اتصال AMQP بسبب فقدان نبضات القلب من دون إرسال TCP RST. وأصبحت جميع استدعاءات حلقة الأحداث الحاجبة تملك الآن مهلة قدرها 30 ثانية، بحيث يكتمل الإيقاف دائمًا. #108497 (Aly Ayman). - ستُسجَّل الآن الاستعلامات الثانوية التي تُنفَّذ كجزء من الاستعلامات الداخلية على أنها استعلامات داخلية. #108506 (Miсhael Stetsyuk).
- أصبح محرك الجدول
ArrowFlightوtable function arrowFlightيلتزمان الآن بقائمة السماح<remote_url_allow_hosts>. في السابق، لم يكن يجري التحقق من المضيف والمنفذ الخاصَّين بالاتصال، لذا كان يمكن للاستعلام الوصول إلى مضيفين غير موجودين في قائمة السماح. #108507 (Groene AI). - تفرض أوامر MySQL wire protocol
COM_FIELD_LIST(mysql_list_fields) وCOM_INIT_DB(USE database) الآن نفس آلية access control المطبقة على مكافئاتها في SQL (SHOW COLUMNS/DESCRIBEوUSE). في السابق، كان يمكنها كشف أسماء أعمدة الجداول التي لا يملك المستخدم عليها سوى صلاحيات جزئية على الأعمدة، وكذلك تبديل قاعدة البيانات الحالية من دون امتيازSHOW DATABASES. #108508 (Groene AI). - أصبحت
http_forbid_headersتُطابَق الآن دون اعتبار لحالة الأحرف. وأسماء HTTP header غير حساسة لحالة الأحرف، لذا فإن حظرAuthorizationيمنع الآن أيضًاauthorizationوAUTHORIZATIONوغيرها من اختلافات حالة الأحرف. كما أصبحت أنماطheader_regexpالمُعدّة تُطابَق الآن دون اعتبار لحالة الأحرف من دون الحاجة إلى الراية الصريحة(?i). #108509 (Groene AI). - تم إصلاح تعطل في الخادم (خطأ تجزئة) كان يمكن أن يحدث عندما كان استعلام موزع يشير إلى
MATERIALIZEDCTE لم يُمثَّل ماديًا بعد بوصفه جدولًا خارجيًا، وكان المصدر البعيد يُنشأ عند الطلب. #108547 (Groene AI). - تم إصلاح نتائج خاطئة عندما كانت query condition cache (
use_query_condition_cache = 1) تعيد استخدام استبعاد العلامات المشتق من skip index لاستعلام شغّل مجموعة مختلفة من skip indexes، على سبيل المثال معuse_skip_indexes = 0أوignore_data_skipping_indicesأو وضع مختلف لـuse_skip_indexes_for_disjunctions. وأصبحت cache entries المشتقة من skip index تُفهرس الآن وفق المجموعة الفعلية من skip indexes التي شُغِّلت. #108548 (Groene AI). - تم إصلاح عدة أخطاء في
changeYearوchangeMonthوchangeDayوchangeHourوchangeMinuteوchangeSecondمع وسائطDateTime64: كان عمود النتيجة يُنشأ بالمقياس الافتراضي المضمّن 3 بدلًا من مقياس الوسيط، مما أدى إلىLOGICAL_ERROR(writeSlice expects same column types) عند تمرير النتيجة إلىarrayPushBack/arrayPushFront/arrayConcat؛ وكانت المدخلات بدقة النانوثانية (المقياس 9) تُطلقDECIMAL_OVERFLOW؛ وكانت المدخلات ذات الأجزاء دون الثانية قبل epoch تُرجع ثانية تقويمية غير صحيحة. كما تم أيضًا إصلاحtimeSlotsمعDateTime64، إذ كان يتجاهل مقياس وسيطSizeالاختياري في نوع الإرجاع المعلن ويُرجع timestamps غير صحيحة لأكبر مقياس فيSize. #108551 (Groene AI). #108681 (Takumi Hara). #108994 (Groene AI). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند استخدام اسم مستعار لـ compound predicate فيGROUP BYثم الرجوع إليه مرة أخرى، مع تفعيلenable_identifier_resolve_cache(وهو الإعداد الافتراضي). #108553 (Groene AI). - إصلاح خطأ منطقي (
Equal values are not contiguous within the range assumed to be sorted) عند تشغيلDISTINCTعلى قراءةSTREAM(SELECT DISTINCT ... FROM table STREAM). لم تعد تحسينات القراءة بالترتيب تُطبَّق على قراءاتSTREAM، لأنها تُنتج الصفوف وفق ترتيب الالتزام لا وفق ترتيب مفتاح الفرز. #108568 (Groene AI). - إصلاح مشكلة كانت تؤدي إلى أن تُرجع projections القيمة الافتراضية لنوع العمود (مثل
0) بدلًا من قيمةDEFAULTالمعلنة له (مثل-1) في حالتين: عند قراءة عمود أُضيف باستخدامALTER TABLE ... ADD COLUMN ... DEFAULTبعد إنشاء الـ projection (وكانت القراءات من base table صحيحة بالفعل)، وبعد انتهاء صلاحيةTTLالخاصة بالعمود على Wide part. #108569 (Shaohua Wang). #109013 (Shaohua Wang). - إصلاح الخطأ
ReadBuffer is canceled. Can't read from it.الذي كان قد يحدث عند إعادة محاولة الرفع إلى S3 (مثل نسخة احتياطية) بعد خطأ قراءة عابر. #108573 (Groene AI). - إصلاح مشكلة كانت تجعل
ATTACH PARTITION ... FROMيرفض الجداول التي تكون primary keys فيها متكافئة ولكن مُعلنة بصيغ مختلفة (إحداهماPRIMARY KEYصريحة، والأخرى ضمنية منORDER BY). #108590 (Jordi Orihuela). - إصلاح فشل direct read من text index عند وجود عدة text indexes ممثلة ماديًا جزئيًا. يُصلح هذا #108530. #108607 (Anton Popov).
- إصلاح كشف metadata، حيث كانت
DESCRIBE loop('db', 'table')وDESCRIBE loop(<inner table function>)تتجاوزان فحص الوصول إلىSHOW COLUMNS/ المصدر، مما يتيح لمستخدم غير مخوّل قراءة مخطط أعمدة الجدول. #108624 (Groene AI). - إصلاح العمود الافتراضي
_etagفي محركي الجدولS3QueueوAzureQueue: إذ كان مُعلنًا لكنه لم يكن يُملأ مطلقًا، لذلك كانSELECT _etagيُرجع دائمًا سلسلة فارغة. وهو الآن يُرجع ETag الخاص بالكائن، مثل محركS3و table function s3. #108625 (Groene AI). - إصلاح قراءة ملفات
ArrowوArrowStreamوملفاتORCالمعتمدة على Arrow عندما كان عمود timestamp فيها يحمل إزاحة UTC رقمية ثابتة (مثل+05:30و-08:00و00:00) أو الوسم غير التابع لـ IANA وهوfixedبوصفه timezone له، إذ كان ذلك يفشل سابقًا معCannot load time zone ...(BAD_ARGUMENTS). #108633 (Groene AI). - إصلاح استثناء (
LOGICAL_ERROR: Join is supported only for pipelines with one output portأوNOT_IMPLEMENTED: MergeJoinAlgorithm is not implemented for strictness Semi) عند استخدامjoin_algorithm = 'full_sorting_merge'مع join من نوعSEMI/ANTI، بما في ذلك عمليات join الناتجة عن فك الارتباط في correlated subquery من نوعEXISTS. وأصبحfull_sorting_mergeالآن يرفض تراكيب strictness/kind التي لا يمكنه تنفيذها، بحيث يعود المخطط إلى استخدام خوارزمية أخرى مفعّلة أو يُبلغ بأن join لا يمكن تنفيذه. #108658 (Groene AI). - تم إصلاح تجاوز سعة مخزن مؤقت في heap عند بناء فهرس نصي باستخدام
positions = 1على عدد كبير من الرموز القصيرة المختلفة. #108659 (Groene AI). - أصبح الآن يُبلَّغ عن أي استعلام يقرأ من S3 أو يكتب إليه ويُلغى (مثلًا بواسطة
KILL QUERY) أثناء وجود طلب S3 قيد التنفيذ على أنه مُلغى، بدلًا من الإبلاغ عنه كخطأ مضلل في الشبكة أو S3. وعلى وجه الخصوص، أصبح أي نسخ احتياطي أو استعادة إلى S3 يتم إلغاؤه يُبلَّغ عنه الآن على أنهBACKUP_CANCELLED/RESTORE_CANCELLEDفيsystem.backups. #108673 (Julia Kartseva). - تم إصلاح حالة فشل عند بدء التشغيل، حيث كانت قاعدة بيانات
DataLakeCatalogالتي أُنشئت بإصدار أقدم (25.12 أو ما قبله) معauth_headerغير صحيح التنسيق، تتعذر تهيئتها بعد الترقية إلى 26.2 أو أحدث، مما كان يمنع الخادم من البدء. أصبحauth_headerالآن يُتحقق منه فقط عندCREATE، وعندATTACHيُنشأ الكتالوج بشكل كسول عند أول استخدام بدلًا من إنشائه أثناء بدء التشغيل، لذا لم تعد قاعدة بيانات كتالوج واحدة سيئة الإعداد أو غير قابلة للوصول تمنع بدء تشغيل الخادم. #108674 (Groene AI). - تم إصلاح خطأ منطقي (
Sort order of blocks violated) أثناء الدمج، إلى جانب قراءات غير صحيحة، عندما يُستخدم عنصرLowCardinalityغير قابل لـNULLمن عمودNullable(Tuple(...))كعمود فرعي، مثل استخدامه كمفتاح فرز. #108679 (Groene AI). - تم إصلاح تعطل محتمل (use-after-free) عندما يعمل
SYSTEM FLUSH DISTRIBUTEDبالتزامن معDROP TABLEللجدولDistributedنفسه. #108684 (Groene AI). - تم إصلاح تعطل في فك ترميز Base64 لمفتاح حساب Azure، ويمكن الوصول إليه عبر
azureBlobStorage(ودوال الجداول ووحدات التخزين المرتبطة بـ Azure) عندما لا يكون المفتاح Base64 صالحًا: إذ كانت قيمة بايت>= 0x80تتسبب في قراءة خارج الحدود، وكان أي بايت غير صالح يؤدي إلى سلوك undefined. وأصبح الآن يُرفض المفتاح غير الصالح بشكل سليم. #108716 (Groene AI). - تم إصلاح الخطأ
NUMBER_OF_COLUMNS_DOESNT_MATCHعندما يقرأ استعلام فرعي على جدولDistributedعمودَيALIASأو أكثر يتم توسيعهما إلى التعبير نفسه (مثلًاa1 String ALIAS toString(x), a2 String ALIAS toString(x)) ويغذي الاستعلامُ الفرعي استعلامًا خارجيًا، مثلSELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2). #108725 (Groene AI). - تم إصلاح مشكلة في
CREATE OR REPLACE MATERIALIZED VIEW ... POPULATEكانت تترك العرض الجديد غير مشترك مع جدول المصدر الخاص به، مما كان يؤدي بصمت إلى إسقاط كل صف يُدرج بعد الاستبدال. #108728 (Alexey Milovidov). - تم إصلاح استثناء (
Cannot find sharding key column، وفي بُنى debug و sanitizer كان يحدث إيقاف للخادم) عندما يكون مفتاح التجزئة لجدولDistributedتعبيرًا يختزله المحلل إلى ثابت، مثلif(1, toInt32(id), toInt32(id) + 1)، معoptimize_skip_unused_shards = 1. #108737 (Groene AI). - تم إصلاح خطأ منطقي (
Bad cast from type DB::ColumnNullable to DB::ColumnString) واحتمال ظهور نتائج غير صحيحة عند استخدامgroup_by_use_nullsمع مفتاح تجميع ثابت من نوعLowCardinalityفيGROUPING SETS/ROLLUP/CUBE. #108771 (Alexey Milovidov). - تم إصلاح تعطُّل استبعاد partition والمفتاح الأساسي بصمت عندما يكون عمود المفتاح
LowCardinality(FixedString)(أوLowCardinality(Nullable(FixedString))) ملفوفًا داخل دالة في المفتاح، مثلPARTITION BY sipHash64(k) % NمعWHERE k = 'literal'. كانت مثل هذه الاستعلامات تفحص جميع أقسام partition بدلًا من استبعادها. #108777 (Groene AI). - تم إصلاح خطأ منطقي (يؤدي إلى إيقاف الخادم في بنيات debug وsanitizer) عند إلغاء
INSERT ... SELECTعبر جدولAlias، أو إلى جدولTimeSeries، من دون استثناء، مثلًا عند استخدامtimeout_overflow_mode = 'break'. #108783 (Groene AI). #108796 (Shaohua Wang). - تم إصلاح خطأ منطقي من النوع
Bad cast from type DB::ColumnSparse to DB::ColumnString(يؤدي إلى إيقاف الخادم في بنيات debug وsanitizer) عند تطبيقgroupConcatعلىTupleيكون عنصرStringفيه مخزَّنًا بشكل sparse. #108790 (Groene AI). - تم إصلاح
TYPE_MISMATCHفيmapFilterوmapSortوmapReverseSortوmapPartialSortوmapConcatعندما تحتوي قيمةMapعلىMapمتداخل معLowCardinality، مثلmapFilter((k, v) -> 1, map('a'::LowCardinality(String), map('x'::LowCardinality(String), 'y'))). #108798 (Groene AI). - تم إصلاح عدم قيام
insert_quorum = 'auto'برفض inserts مسبقًا عندما يكون عدد replicas الحية أقل من الأغلبية. أصبحت مثل هذه inserts تفشل الآن فورًا برسالةTOO_FEW_LIVE_REPLICASبدلًا من كتابة جزء محلي ثم انتهاء المهلة لاحقًا معUNKNOWN_STATUS_OF_INSERT. #108800 (Gagan Dhakrey). - تم إصلاح bug كان يجعل صف
WITH TOTALSفيJOINيحتوي أحيانًا على قيم default (مثل0) بدلًا من القيم الثابتة القادمة من استعلام فرعي ثابت على أحد جانبي join. كانت النتيجة الخاطئة تظهر فقط مع بعض ترتيبات join أو مع الإعدادquery_plan_join_swap_table. #108807 (Vladimir Cherkasov). - تم إصلاح fault ناتج عن segmentation (إلغاء مرجع مؤشر فارغ) كان يمكن أن يحدث عند تنفيذ إيقاف الخادم بالتزامن مع إيقاف جدول
S3Queue/AzureQueue. #108810 (Miсhael Stetsyuk). - تم إصلاح توقف عند بدء التشغيل (
Cannot allocate ThreadStack,EINVAL) في بنيات glibc التي تعمل على معالجات CPU ذات حجم كبير لمكدس الإشارات (مثل Intel Sapphire Rapids / Granite Rapids مع نواة تدعم AMX)، حيث لم يكن حجم مكدس الإشارات البديل يُقرَّب إلى مضاعف لحجم الصفحة. #108813 (Groene AI). - تم إصلاح فشل الاستعلامات الموزعة أحيانًا برسالة
UNEXPECTED_PACKET_FROM_SERVER(expected TablesStatusResponse, got ProfileInfo) عند إعادة استخدام connection من المجمّع كانت query ملغاة سابقة قد تركتها في حالة عدم تزامن. #108854 (Alexey Milovidov). - تم إصلاح خطأ منطقي (استثناء في إصدارات build النهائية، وإيقاف للخادم في إصدارات debug وsanitizer) كان يمكن أن يحدث عند استدعاء دالة لها أكثر من وسيط
LowCardinalityواحد على distributed table، مثلconcatAssumeInjective((SELECT toLowCardinality('p')), s)عند استخدامها كمفتاحGROUP BYمع table function remote. وكانت الرسائل هيDefault functions implementation for LowCardinality is supported only with a single LowCardinality argumentأوExpected the argument ... to have N rows, but it has M. #108871 (Groene AI). - تم إصلاح
reinterpret(x, 'Decimal128(scale)')(وكذلك الأهدافDecimal32/Decimal64/Decimal256/DateTime64) الذي كان ينتج عمود نتائج يكون فيه scale الداخلي هو scale المصدر بدلًا من scale الهدف المطلوب، عندما كان المصدر والهدف من النوع الفيزيائي نفسه. كانت القيم صحيحة، لكن كائن العمود كان غير متسق بنيويًا مع نوعه المُعلَن. #108878 (Groene AI). - تم إصلاح
LOGICAL_ERROR(New empty part is about to materialize but the directory already exist) كان يمكن أن يؤدي إلى إيقاف الخادم في إصدارات debug وsanitizer عندما تُنفَّذ عمليةDROP/DETACH/MOVE/REPLACE PARTITIONعلى جدولMergeTreeبعد أن تكون عملية سابقة من هذا النوع قد انقطعت (مثل transaction جرى التراجع عنها أو تعطل) وتركت خلفها directory قديمًا باسمtmp_empty_<part>. وأصبح الآن يُستعاد هذا الـ directory القديم بدلًا من الفشل. #108879 (Groene AI). - تم إصلاح ClickHouse Keeper الذي كان يعيد القيمة
dataLength = 0بشكل غير صحيح فيStatضمن استجاباتCreate2، وكذلك عميل ClickHouse ZooKeeper الذي لم يكن يفك تسلسلStatفي استجاباتCreate2. #108909 (unintended). - تم إصلاح
clickhouse-localالذي كان يرفض قيمة خيار فارغة مكتوبة مباشرة بجوار الرمز=(مثل--format_csv_null_representation='')؛ وهو الآن يتصرف بالطريقة نفسها كما في--format_csv_null_representation ""وSET format_csv_null_representation = ''. #108910 (Vismay). - تم إصلاح
LOGICAL_ERROR(Inconsistent AST formatting) كان يؤدي إلى إيقاف الخادم في إصدارات debug وsanitizer عند formatting لنوع البياناتTupleالذي يجمع بين عناصر مسماة وغير مسماة (مثلTuple(a UInt8, UInt16)). #108915 (Groene AI). - تم إصلاح خطأ segmentation fault عند دمج aggregate states الخاصة بـ
uniqExactمعGROUPING SETSأوROLLUPأوCUBEومعmax_threads > 1. #108928 (Raúl Marín). - تم إصلاح احتمال ظهور نتائج غير صحيحة أو reads خارج الحدود عندما يتم التراجع عن
INSERTبعد حدوث خطأ في منتصف الدفعة (مثل جداولBuffer، أو asynchronous inserts، أو محركاتKafka/RabbitMQ/FileLog) أثناء تفعيل lazy replication للأعمدة (enable_lazy_columns_replication). #108935 (Groene AI). - أصبح
join_any_take_last_rowالآن مُطبَّقًا في جميع مسارات join المدعومة والمعتمدة على hash، بما في ذلك عمليات join التي تستخدم spilling to disk تلقائيًا. #108936 (János Benjamin Antal). - تم إصلاح bug في analyzer حيث كان
FINALعلى أحد جداولJOIN(مثلFROM t1 FINAL JOIN t2) يُطبَّق بشكل غير صحيح على الجداول الأخرى المنضمة أيضًا، مما كان قد يجعل مثل هذه الاستعلامات أبطأ. #108979 (Vladimir Cherkasov). - تم إصلاح
LOGICAL_ERROR(“يتعذر العثور على العمود__grouping_setفي ترويسة MergingAggregatedTransform مع grouping sets”، أو “لم يتم تعيين معلومات chunk لـ chunk في MergingAggregatedTransform”) الذي كان يمكن أن يحدث، عند تعطيل المحلل، معUNION ALL/INTERSECT/EXCEPTإذا كان أحد الفروع يستخدمGROUP BY GROUPING SETSمع parallel replicas بينما يستخدم فرع آخرFINAL. #109003 (Groene AI). - تم إصلاح
LOGICAL_ERRORفي مخطِّط parallel replicas التلقائي، والذي كان يمكن أن يحدث عند تمكينautomatic_parallel_replicas_modeمع ضبطparallel_replicas_min_number_of_rows_per_replicaعلى قيمة أكبر من 0. #109011 (Groene AI). - تم إصلاح تخصيص مفرط للذاكرة أثناء استنتاج المخطط لتنسيق
MsgPack: فلم يعد الإدخال التالف الذي يعلن رأس array/map/string/binary فيه عن عدد هائل من العناصر يتسبب في عملية تخصيص واحدة بحجم عدة غيغابايت، بل يُرفض الآن بوصفه إدخالًا غير صالح. ويعالج هذا حالة نفاد الذاكرة في إصدارات build النهائية (وحالة الإنهاءallocation-size-too-bigعند استخدام أدوات sanitizer). #109019 (Groene AI). - تم إصلاح تجاهل
use_client_time_zoneلقيم string الحرفية من نوعDateTime/DateTime64التي تُفسَّر على الخادم (INSERTغير المتزامن، والقيم الحرفية فيSELECT). يمرِّر العميل الآن منطقته الزمنية المحلية باعتبارهاsession_timezoneعند تمكينuse_client_time_zone، بحيث تتطابق المعالجة على جانب الخادم مع مسارINSERTالمتزامن. #109051 (Groene AI). - تم إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند تمكينquery_plan_optimize_lazy_finalمع مرشحWHEREمدفوع جزئيًا إلىPREWHERE(عبرoptimize_move_to_prewhere_if_final). #109073 (Groene AI). - تم إصلاح خطأ عند استخدام النجمة المؤهلة مثل
b.*في استعلام تكون فيهbاسمًا مستعارًا لجدول (أو subquery/CTE) ويتطابق اسمه مع اسم عمود غير مركب في جدول آخر. لم تعد مثل هذه الاستعلامات تفشل، وأصبحت تختار جميع أعمدةbبشكل صحيح. #109078 (Vladimir Cherkasov). - تم إصلاح الخطأ المنطقي
Block structure mismatch in JoinStep(وهو إجهاض للخادم في إصدارات debug وsanitizer) عندما تُحوَّل subquery مترابطة إلى join وتحمل العلاقة المصدرية اسم العمود نفسه أكثر من مرة، مثلWITH t AS (SELECT number, * FROM numbers(3)) SELECT *, (SELECT t.number WHERE t.number >= 0) FROM tمعcorrelated_subqueries_default_join_kind = 'right'. #109114 (Groene AI). - تم إصلاح حالة تعليق كان فيها استعلام يقرأ عبر filesystem cache قد يواصل الانتظار لتنزيل جارٍ حتى بعد إلغائه باستخدام
KILL QUERY، كما كان إسقاط refreshable materialized view أو تنفيذSYSTEM STOP VIEWعليها، إذا كان تحديثها عالقًا في انتظار مماثل، يؤدي إلى الحظر. #109116 (Murphy). - تم إصلاح تجاهل الإعداد
parallel_view_processingعند الإدراج في جدول يحتوي على materialized views — فمنذ الإصدار 25.10، كانت views تعمل دائمًا بالتوازي بغض النظر عن هذا الإعداد. #109170 (Antonio Andelic). - تم إصلاح حالة عدم اتساق في المحلل، إذ كانت قائمة الأعمدة في
INSERTتقبل مطابِق أعمدة مؤهلًا مكتوبًا بصيغةt.* LIKE '<pattern>'/t.* ILIKE '<pattern>'لكنها ترفض صيغته القياسيةt.COLUMNS('<regexp>')، مما كان يكسر إمكانية التحويل ذهابًا وإيابًا لتنسيق الاستعلام (ويتسبب أيضًا في إجهاض الخادم في إصدارات debug وsanitizer). #109176 (Groene AI). - تم إصلاح الزيادات غير الأحادية في
ProfileEvents: إذ كان من الممكن زيادة العدّادينNetworkReceiveBytesوAIOWriteBytesبمقدار سالب (مما يؤدي إلى الالتفاف إلى قيمة ضخمة) عند انتهاء مهلة المقبس أو فشل AIO، كما كانMemoryOvercommitWaitTimeMicrosecondsيُقاس باستخدام ساعة غير أحادية. #109180 (Azat Khuzhin). - تم إصلاح استنتاج المخطط لتنسيقات
ArrowوArrowStreamوAvroولقارئاتORCوParquetالقديمة، إذ كانت تُرجعNullable(Tuple)لأعمدة البنية القابلة لأن تكون فارغة، رغم أن النوعNullable(Tuple)غير مسموح به (عند تعطيلallow_experimental_nullable_tuple_type). كانDESCRIBEيُرجع نوعًا يرفضهCREATE TABLE، لذلك كان إنشاء جدول أو إدراج بيانات باستخدام المخطط المستنتج يفشل مع الخطأNullable Tuple type is not allowed. #109185 (Nihal Z. Miaji). - تم إصلاح نتيجة غير صحيحة لعبارتي
EXISTSالمترابطة والاستعلامات الفرعية ذات القيمة المفردة عندما يظهر الارتباط فقط في إسقاط الاستعلام الفرعي مع وجود عبارةWHEREغير مترابطة (إذ كان من الممكن أن يُقيَّم الاستعلام الفرعي إلى false /NULLلكل صف). يصلح #105760. #109186 (Dmitry Novik). - تم إصلاح
CREATE USER ... HOST LIKE 'a', 'b'(وALTER USERالمكافئ له) الذي كان يحتفظ بصمت بالنمط الأول فقط. تُخزَّن الآن جميع أنماطHOST LIKEالمحددة في قائمة السماح بالمضيفات الخاصة بالمستخدم. #109187 (Groene AI). - تم إصلاح حالة كان فيها فهرس نصي معرّف على
mapValues(map)أوmapKeys(map)لا يُستخدم بصمت عند الاستعلام عن جدول عبر جدول بمحركDistributedباستخدام analyzer. كان الفهرس يُستخدم للجدول المحلي وعبر دوال الجداولcluster/remote، لكن الاستعلام عبر جدول بمحركDistributedكان يتجاوزه (ويفشل معINDEX_NOT_USEDتحتforce_data_skipping_indices). #109188 (Groene AI). - تم إصلاح
LOGICAL_ERRORزائف (There was an error on <host>: Cannot obtain error message (probably it's a bug)) كان يمكن أن يتسبب في إيقاف الخادم في بنى debug وsanitizer عند تشغيل استعلام DDL على قاعدة بياناتReplicatedبعد أن تكون عقدة حالةfinishedالخاصة بكل مضيف في Keeper قد نُظِّفت بالفعل. #109192 (Groene AI). - تم إصلاح نسب
SAMPLEذات الأسّ الذي يتجاوز مقدارُه نطاقInt32(مثلSAMPLE 1e-3000000000) والتي كانت تُعامَل بصمت على أنهاSAMPLE 1. #109197 (Raúl Marín). - تم إصلاح التحقق من صلاحية الوصول لـ
SYSTEM PREWARM PRIMARY INDEX CACHE ... ON CLUSTER، والذي كان يتطلب خطأً صلاحيةSYSTEM PREWARM MARK CACHEبدلًا منSYSTEM PREWARM PRIMARY INDEX CACHE. #109198 (Raúl Marín). - تم إصلاح فشل استعلامات
ALTERلجداولMergeTreeالمُنشأة بإعدادdiskمخصص (SETTINGS disk = disk(...)). يصلح #63019. #109199 (Mikhail Artemenko). - تم إصلاح تعطل في الخادم عند الجمع بين حالات الدوال التجميعية
cramersVوcramersVBiasCorrectedوcontingencyأوtheilsUمن سياق نافذة (OVER ()) ومن تجميع عادي عبر set operations متسلسلة (EXCEPT,INTERSECT) أوUNION ALLمتداخلة، ثم قراءتها، على سبيل المثال عبر المُركِّب-Merge. #109200 (Groene AI). - إصلاح نتيجة غير صحيحة لـ
ANY JOINمع شرطONثابت (مثلt1 ANY INNER JOIN t2 ON 1): إذ كان الاستعلام يعيد حاصل الضرب الديكارتي الكامل بدلًا من ناتجANY JOIN. #109207 (Vladimir Cherkasov). - تم إصلاح تعطل في الخادم عند asynchronous insert مع deduplication عندما يتسبب
optimize_on_insertفي أن تصبح inserted block فارغة (على سبيل المثال، الصفوف التي يكون مجموعها صفرًا فيSummingMergeTree). #109229 (Den Kalantaevskii). - إصلاح
SYSTEM DROP REPLICAوSYSTEM DROP DATABASE REPLICA ... FROM ZKPATHبحيث يرفضان مسارات ZooKeeper الفارغة أو التي تشير إلى الجذر فقط وقت التحليل باستخدامBAD_ARGUMENTS، ويوجِّهان مسارات Keeper المساعدة إلى Keeper المسمى، ويوحِّدان مسارات Keeper بحيث لا تتمكن فحوصات الحماية الذاتية المحلية من استهداف replica المقصودة بالخطأ أو تجاوزها. #109230 (Groene AI). - إصلاح أولوية إعدادات S3 بحيث تكون الأولوية لكتلة نقطة النهاية
<s3>ذات نطاقURLعلى إعدادات<s3>الافتراضية في المستوى الأعلى. #109251 (Bharat Nallan). - تم إصلاح خلل كانت فيه قيم
DEFAULTللأعمدة لا تُطبَّق عندINSERT INTO TABLE FUNCTION(مثلremoteأوfile) مع بياناتVALUESالمضمنة عندما يحلل الخادم هذه البيانات بنفسه (send_table_structure_on_insert_with_inline_data = 0). وكان إدراجNULLصراحةً في عمود غيرNullableولهDEFAULTيتحول إلى0بدلًا من القيمة الافتراضية المعلنة. وأصبح الآن يتصرف مثلINSERTعادي إلى جدول وعبر HTTP protocol. #109258 (Groene AI). - إصلاح فشل
CREATE TABLE ... AS SELECTمنs3Cluster(وسائر cluster table functions مثلfileCluster/urlCluster) معNOT_FOUND_COLUMN_IN_BLOCKداخل قاعدة بياناتReplicated. #109266 (Groene AI). - تم إصلاح
SHOW TABLESوSELECT ... FROM system.tablesاللذين كانا يعيدان نتائج مختلفة لقواعد بيانات Data Lake Catalog: إذ أصبحت الجداول التي لا يستطيع ClickHouse قراءتها مخفيةً الآن بشكل متسق في كلتيهما. #109273 (Smita Kulkarni). - تم إصلاح خلل كان يؤدي فيه دمج جدول
MergeTreeيحتوي على projections، مع تفعيل الإعدادenable_block_number_columnأوenable_block_offset_column، إلى إنتاج projection parts تحتوي على العمود الزائد_block_number/_block_offset. وبعد ذلك لم يعد projection part المدمج يطابق تعريف projection ولا projection parts الناتجة عن الإدراج، لذلك كانCHECK TABLEوOPTIMIZE ... DRY RUNيبلغان عنه على أنه تالف (CORRUPTED_DATA). #109284 (Groene AI). - السماح بقراءة
arrayمن Avro مكوَّنة من سجلات ثنائية الحقول{key, value}إلى عمودMapفي ClickHouse. وهذا هو الترميز الذي ينتجه Iceberg وSpark لـMAP<K, V>ذي مفتاح غير نصي (إذ إن خرائط Avro الأصلية لا تدعم إلا المفاتيح النصية). في السابق، كان يمكن قراءة مثل هذا الملف على أنهArray(Tuple(key, value))، ولكن ليس على أنهMap(K, V)، إذ كان يفشل معType Map(...) is not compatible with Avro array. #109289 (Groene AI). - تم إصلاح تعطل في الخادم عند
CREATE HYPOTHETICAL INDEX ... TYPE set(وكذلكngrambf_v1/tokenbf_v1) عند إغفال وسيطة الفهرس المطلوبة. وتُرفَض هذه العبارات الآن برسالة خطأ واضحة. #109294 (Groene AI). - تم إصلاح
LOGICAL_ERROR(Current component is empty) الذي كان يمكن أن تسببه عمليات mutation مثلKILL MUTATIONعلى جدولMergeTreeيخزّن بياناته الوصفية في Keeper، عند تمكين إعداد الخادمenforce_keeper_component_tracking. #109297 (Groene AI). - تم إصلاح قراءة timestamps من
ORCالتي تتجاوز تقريبًا سنة 2262 إلى عمودDateTime64ذي scale أقل من 9. إذ كان قارئORCالأصلي يحوّل كل timestamp سابقًا عبر قيمة وسيطة ثابتة من نوعDateTime64(9)، مما يؤدي إلى overflow فيInt64عند مستوى النانوثانية ويرفض هذه القيم معVALUE_IS_OUT_OF_RANGE_OF_DATA_TYPE، حتى عندما يكون scale المطلوب لـDateTime64(مثلDateTime64(6)، كما ينتجه Iceberg) قادرًا على تمثيل القيمة. وتُقرأ timestamps الآن مباشرةً وفق scale المطلوب، كما يُراعىdate_time_overflow_behaviorحتى عندما يتعذر على scale الهدف نفسه استيعاب القيمة. #109302 (Groene AI). - أصبح
clickhouse-local، عند تشغيله كخادم (بعدSYSTEM START LISTEN HTTP)، يقدّم HTTP connections باستخدام output format الافتراضيTabSeparated، بما يتوافق معclickhouse-server، بدلًا من الافتراضي التفاعليPrettyCompact. ويعالج هذا مشكلة الاتصال بـclickhouse-localعبر HTTP باستخدام برامج تشغيل مثلclickhouse-connect. وتظل جلسة terminal التفاعلية تعرض النتائج بصيغةPrettyCompact. #109362 (Alexey Milovidov). - تم إصلاح إخفاق عابر من النوع
Code: 499 ... InvalidPart(S3_ERROR) في multipart uploads على S3. فقد قد يُبلغ MinIO، لفترة وجيزة، عن part تم رفعه للتو على أنه مفقود عندCompleteMultipartUpload؛ ويُعاد الآن هذا الخطأ كما هو الحال معNoSuchKeyالذي كانت تتم معالجته مسبقًا، وذلك ضمن الحدود التي يفرضهاs3_max_unexpected_write_error_retries. #109364 (Groene AI). - تم إصلاح الخطأ
UNKNOWN_IDENTIFIERفيALTER TABLE ... DROP COLUMNعندما يحتوي عمود آخر على expression من نوعDEFAULTأوMATERIALIZEDيعرّف alias مضمنًا ويشير إليه. #109374 (Alexey Milovidov). - تم إصلاح data race (وما قد ينتج عنها من تعطل نادر) في الدمج المتوازي لحالات aggregate للدالة
uniqExactمع sets ثنائية المستوى، وهو ما كان يمكن أن يحدث معGROUPING SETSوROLLUPوCUBE. #109389 (Groene AI). - تم إصلاح خطأ (
NOT_FOUND_COLUMN_IN_BLOCK، أوstd::bad_function_callفي الإصدارات الأقدم) عند تشغيلCREATE TABLE ... ON CLUSTER ... AS SELECTمع قراءة جدولDistributedعلى cluster يحتوي على shardين أو أكثر. #109407 (Alexey Milovidov). - تم إصلاح عمليات الدمج للجداول التي تحتوي على
TTL ... GROUP BY(rollup): إذ كان يمكن إعادة جدولة parts التي جرى تجميعها بالكامل مسبقًا للدمج مرة تلو الأخرى إلى ما لا نهاية، كما كانت الجداول التي تحتوي على أعمدةMATERIALIZEDأو persistent virtual columns مفعّلة تُعالَج بشكل غير صحيح — وتُجمَّع هذه الأعمدة الآن باستخدامany. يُغلق #105647. #109410 (Mikhail Artemenko). #109532 (Mikhail Artemenko). - تم إصلاح
INعند استخدام array column مجردة في argument الأيمن، إذ كانت تعيد بصمت نتيجة خاطئة (دائمًا false) أو تطرح استثناءً، بحيث أصبحx IN arrيتصرف مثلhas(arr, x). #109416 (Alexey Milovidov). - تم إصلاح أخطاء
UNKNOWN_IDENTIFIERفي عملياتALTER TABLE(RENAME/ADD/MODIFY COLUMN، وMATERIALIZE INDEXعلى table تحتوي على parts أُدرجت حديثًا) في جداولMergeTreeالتي تتضمن min-max index ضمنيًا على persistent virtual columns _block_number/_block_offset(مفعّل عبرadd_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_column). #109428 (Groene AI). #110236 (Groene AI). - تم إصلاح
LOGICAL_ERRORفيarrayFoldعلى argument غير ثابت من النوعArray(LowCardinality(T))(على سبيل المثالarrayFold((acc, x) -> acc + x, materialize([1, 2, 3]::Array(LowCardinality(Int64))), toInt64(0)))؛ إذ كان يفشل معArguments of 'plus' have incorrect data types(وكان يتسبب في إيقاف server في بنى debug وsanitizer). #109462 (Groene AI). - تم إصلاح
CHECK TABLEعلى table من نوعReplicatedMergeTreeكانت تُبلّغ عن part سليمة على أنها معطوبة عند حدوث خطأ ZooKeeper عابر وقابل لإعادة المحاولة (مثل فقدان connection) أثناء الفحص؛ وتظهر هذه الأخطاء الآن بدلًا من ذلك كخطأ query قابل لإعادة المحاولة. #109465 (Alexey Milovidov). - تم إصلاح أعطال segfault في
groupArrayLastMergeوaggregate function largestTriangleThreeBuckets: إذ أصبح deserialization لحالات aggregate function يُتحقق منه الآن، بحيث لا تؤدي الحالة المعطوبة إلى وصول إلى الذاكرة خارج الحدود. #109485 (Miсhael Stetsyuk). #109492 (Miсhael Stetsyuk). - تم إصلاح عدم فرض الحدّ العام
max_rows_in_join/max_bytes_in_joinعلى join algorithm parallel_hash، إذ كان يمكن لـ query معjoin_overflow_mode = 'throw'أن تنجح بصمت بدلًا من رفعSET_SIZE_LIMIT_EXCEEDED. #109488 (Hechem Selmi). - تم إصلاح قراءة Paimon tables المقسّمة حسب column من نوع
BIGINTلا تتسع قيمته داخلInt32. وكانت قيم partition هذه تُقتطع (فعلى سبيل المثال كانت9223372036854775807تصبح-1)، مما كان ينتج عنه مسار partition خاطئ ويفشل مع خطأ filesystem. #109510 (Groene AI). - تم إصلاح crash عند قراءة Iceberg tables التي تحتوي على equality delete files. فإذا كانت column قابلة لأن تكون nullable في equality delete file لكنها غير nullable في table schema (أو العكس)، كانت values المقروءة من delete file تُدرج في column من نوع مختلف عبر cast غير متحقق منه (التباس في column type)، مما كان يفسد column ويتسبب في تعطل server. #109551 (Miсhael Stetsyuk).
- تم إصلاح عدم سريان
connect_timeoutومهلتَي القراءة والكتابة الخاصة بـ MySQL: إذ كان يمكن لمحاولة connection إلى MySQL server غير مستجيب أن تظل معلّقة لأكثر من دقيقتين حتى معconnect_timeout = 1، لأن الإشارات الدورية الخاصة بـ sampling query profiler كانت تواصل إعادة ضبط مهلة poll الداخلية في MySQL client. #109592 (Shaohua Wang). - تم إصلاح
LOGICAL_ERROR(creation_csn is not set while removal_csn is set to 1) الذي كان يمكن أن يظهر عند تشغيلTRUNCATEغير معاملاتي بالتزامن مع معاملة غير مُعتمدة كانت قد أدخلت بيانات إلى الجدول نفسه. ولم يعدTRUNCATEمن هذا النوع يزيل الأجزاء التي أنشأتها المعاملات التي لم تُعتمد بعد. #109598 (Tuan Pham Anh). - إصلاح أخطاء
TYPE_MISMATCHعند قراءة أعمدة struct فيParquetعندما تختلف قابلية NULL الفعلية عن نوع ClickHouse المطلوب: إذ يمكن الآن قراءة مجموعةParquetغير القابلة لـ NULL على أنهاNullable(Tuple(...))، كما يمكن لقارئParquetالأصلي قراءة struct قابل فعليًا لـ NULL (أي مجموعةOPTIONALفيParquet) على أنهNullable(Tuple(...)). #109615 (Groene AI). #109898 (Groene AI). - تم إصلاح فقدان صامت للبيانات عند إلحاق عبارة
INSERT ... VALUESفي دفق متعدد الاستعلامات بتعليق SQL ختامي (مثلVALUES (1) -- comment) ضمن مسار تحليل الإدراج المضمّن على جانب الخادم (send_table_structure_on_insert_with_inline_data = 0). إذ كان التعليق الختامي يُفسَّر على أنه بيانات صف بعد علامة الإنهاء;، ما كان يؤدي إلى تخطي الاستعلامات التالية في الدفق بصمت. #109643 (Groene AI). - إصلاح خطأ segfault عند وصول استعلام خلال نافذة زمنية ضيقة أثناء إيقاف تشغيل الخادم بعد حدوث خطأ عند بدء التشغيل. #109675 (Miсhael Stetsyuk).
- تم إصلاح فهارس التخطي القديمة (
textوbloom_filterوغيرها) وprojections بعد materializing lightweight updates باستخدامALTER TABLE ... APPLY PATCHES. سابقًا، كانت ملفات الفهرس وprojection التي تعتمد على عمود تم تحديثه عبر patch تبقى دون تغيير، لذلك كان يمكن أن تُرجع الاستعلامات التي تستخدمها نتائج غير صحيحة (مثل أن يفوّتhasTokenصفًا مُحدَّثًا، أو أن تُرجع projection تجميعات قديمة بعد إزالة patch part المستهلَك). #109709 (Groene AI). - إصلاح مشكلة قيام
system.tablesبتخطي قواعد البيانات بصمت للمستخدمين الذين لديهم أذونات على مستوى كل قاعدة بيانات، عندما يقرأ الاستعلام العمودينname/databaseفقط. قُدِّمت في 26.2. #109723 (Samay Sharma). - إصلاح
LOGICAL_ERRORعند كتابة عمودLowCardinality(Time)إلى تنسيقArrowمعoutput_format_arrow_low_cardinality_as_dictionary = 1. #109730 (Groene AI). - إصلاح مشكلة قيام
ObjectStorageQueue/AzureQueue(ودالة الجدولazureBlobStorage) بتخطي الكائنات بصمت عندما تُرجع object storage صفحة سرد فارغة مع token متابعة. يحدث هذا في Azure Blob Storage (على سبيل المثال عند عبور السرد حدًا داخليًا لـ partition)، وكان مكرّر السرد غير المتزامن يتعامل مع الصفحة الفارغة على أنها نهاية السرد ويتجاهل الـ token. أما الآن فأصبح يتبع token المتابعة. #109761 (Gal Ben Moshe). - تم إصلاح مشكلة تسبب partition pruning في عدم إرجاع أي صفوف لِـ Iceberg tables المقسّمة بحسب عمود timestamp (
DateTime64). #109764 (Den Kalantaevskii). - إصلاح استثناء
ILLEGAL_COLUMNفي الدالةconvلوسائطFixedString؛ إذ تُحوَّل الآن بشكل صحيح إلىString. يغلق #109670. #109771 (hp). - أصبحت الدالة
getClientHTTPHeaderتتعامل الآن مع أسماء الترويسات على أنها غير حساسة لحالة الأحرف، وفقًا لـ RFC 9110؛ وعلى وجه الخصوص، باتت ترويسةauthorizationتُستبعَد الآن بغض النظر عن حالة الأحرف. إغلاق #103957. #109791 (Mikhail f. Shiryaev). - إصلاح مشكلة في
max_execution_time(معtimeout_overflow_mode = 'throw') حيث كان أحيانًا لا يُلغي الاستعلام مطلقًا: فعندما يكون مراقب المهلة الداخلي بانتظار استعلام له موعد نهائي لاحق، قد يُغفَل تمامًا استعلامٌ بموعد نهائي أبكر يُسجَّل بعد ذلك، مما يسمح له بالاستمرار بعد حدّه الزمني بمدة طويلة. #109792 (Shaohua Wang). - تم إصلاح اسم الملف لملفات البيانات الوصفية لـ Iceberg المضغوطة بصيغة gzip. كان ClickHouse يكتبها بصيغة
v{N}.gzip.metadata.json(رمز HTTPContent-Encoding)، بينما تتوقع مواصفة Iceberg الامتدادgzأيv{N}.gz.metadata.json. ونتيجةً لذلك، لم يتمكن Spark وغيره من القرّاء المعتمدين على كتالوج Hadoop من العثور على البيانات الوصفية التي كتبها ClickHouse. يكتب ClickHouse الآنv{N}.gz.metadata.json، وما يزال يقرأ الاسم القديمgzipحفاظًا على التوافق مع الإصدارات السابقة. #109812 (Groene AI). - تم إصلاح الخطأ
NOT_IMPLEMENTED(“Method getDataAt is not supported for Nullable(String)”) الذي كان يمكن أن ينشأ عند تنفيذ join معenable_join_runtime_filters = 1(مفعّل افتراضيًا منذ 26.2) عندما يكون مفتاح join في جهة البناء هوLowCardinality(Nullable(...))مع قيمNULL، ويعود runtime filter إلى bloom filter الخاص به. #109824 (Groene AI). - لم تعد محركات قواعد البيانات الخارجية (مثل
PostgreSQL) تدفع مقارنات النطاق (>=,>,<=,<) إلى الأسفل على أعمدةUUID. يرتّب ClickHouse وقواعد البيانات الخارجية معرّفات UUID بطريقة مختلفة، لذا كان دفع هذه الشروط إلى الأسفل يؤدي بصمت إلى إسقاط صفوف من النتيجة؛ وتُقيَّم هذه الشروط الآن داخل ClickHouse بدلًا من ذلك. #109833 (Vismay). - تم إصلاح انهيار في الخادم عند تمرير تعبير لامبدا في موضع تتوقع فيه دالة عالية الرتبة قيمةً فعلية (مثل المُراكِم في
arrayFold، كما فيarrayFold(lambda, arr, another_lambda)). وتُرفَض مثل هذه الاستعلامات الآن بخطأILLEGAL_TYPE_OF_ARGUMENTبدلًا من التسبب في الانهيار عندما يكونenable_analyzer = 0. #109840 (Groene AI). - تم إصلاح تعريف
icebergLocaltable function وIcebergLocalengine لنوع object storage على أنهazureبدلًا منlocal، وهو ما كان يؤدي إلى فشلهما في التحقق من نوع القرص (Disk type doesn't match) عند استخدامهما مع قرص محلي عبرSETTINGS disk = '...'. #109872 (Pedro Ferreira). - إصلاح قراءة جداول Iceberg المُقسَّمة بحسب عمود المصدر نفسه أكثر من مرة (على سبيل المثال
PARTITIONED BY (hours(ts), ts)). وكانت مثل هذه الجداول تفشل سابقًا برسالةCannot add column ...: column with this name already exists (ILLEGAL_COLUMN). #109895 (Groene AI). - إصلاح نتائج استعلام غير صحيحة ناتجة عن قيام فهرس المفتاح الأساسي باستبعاد الحبيبات على نحوٍ خاطئ في الجداول التي تحتوي على عمود مفتاح بترتيب معكوس (
DESC) عندما لا تحتوي الأجزاء على علامة نهائية (granularity غير متكيفة،index_granularity_bytes = 0). #109901 (Nihal Z. Miaji). - تم إصلاح
generateRandomStructureالذي كان يُنتج أحيانًا سلسلة بنية غير صالحة تتضمن نوعَي بيانات ملتصقين (مثلDecimal32(7)IPv4) عندما يتجاوز تداخل الأنواع حد العمق الداخلي، مما يجعل النتيجة متعذّرة التحليل. #109928 (Groene AI). - تم إصلاح الخطأ
NOT_IMPLEMENTED(Method getDataAt is not supported for Nullable(String) in case if value is NULL) عند إنشاء فهرسtextعلىArray(LowCardinality(Nullable(String)))(بما في ذلك حقولNestedالمخزنة بهذه الطريقة) إذا كانت المصفوفة المفهرسة تحتوي على عنصرNULL. أصبحت عناصرNULLفي المصفوفة الآن تُتخطى أثناء إنشاء الفهرس، بما يتوافق معArray(Nullable(String)). #110055 (Groene AI). - تم إصلاح النتائج الخاطئة عند إنشاء skip index من نوع
minmaxعلى عمودLowCardinality(Nullable(...)): إذ كانت predicates من نوعWHERE/PREWHERE/HAVING ... IS NULLالتي تُدفَع إلى طبقة التخزين تستبعد سابقًا كل granule وتُرجع 0 صفوف رغم أن العمود كان يحتوي على قيمNULL. #110061 (Groene AI). - تم إصلاح
distinct_overflow_mode = 'break': أصبحDISTINCTالآن يُرجع النتيجة الجزئية المتراكمة حتى بلوغ الحد ويتوقف عن قراءة المصدر، كما هو موثّق. سابقًا، كانت الـ chunk التي تتجاوزmax_rows_in_distinct/max_bytes_in_distinctتُهمَل (مما يؤدي إلى نتائج مقتطعة أو فارغة)، بينما كان الاستعلام يواصل القراءة والإدراج في مجموعة التجزئة حتى نهاية الإدخال، وقد ينتهي ذلك بـMEMORY_LIMIT_EXCEEDED. #110075 (Sergey Kuznetsov). - تم إصلاح خطأ منطقي
ChunkInfoRowNumbers does not existعند تنفيذOPTIMIZE TABLEعلى Iceberg table يحتوي على ملف بيانات بتنسيق غير Parquet (مثلORC) أحدث من جميع position delete files. #110107 (Alexey Milovidov). - تم إصلاح
max_bytes_in_distinctوmax_bytes_in_set: إذ تُخزَّن مفاتيح السلاسل النصية في arena لم تكن تُحتسب ضمن فحوصات الحدود، لذلك كانDISTINCT/INعلى مفاتيح السلاسل النصية قد يحتفظ بذاكرة تتجاوز حد البايتات بمقدار payload المفتاح بالكامل (من دون حد لطول المفتاح). أصبحت الحدود الآن تحتسب الـ arena، بما يطابق التوثيق؛ وقد تتجاوز الاستعلامات ذات مفاتيح السلاسل النصية القريبة من حد البايتات هذا الحد في وقت أبكر الآن (على نحو صحيح). #110120 (Sergey Kuznetsov). - تم إصلاح خطأ
LOGICAL_ERROR(Bad cast from type ColumnLowCardinality to ColumnString) عندما يُغلّفidentity(أو نتيجة استعلام فرعي قيَمي) قيمةً تحتوي علىLowCardinalityمتداخلة ويستخدم الاستعلامWITH TOTALS/WITH ROLLUP. #110138 (Groene AI). - تم إصلاح قراءة ملفات
Npyذات الأبعاد الداخلية صفرية الحجم: أصبح عدد الصفوف المادية ونتائجcountالمحسّنة وغير المحسّنة متطابقًا الآن. #110146 (Yanjun Qiu). - تم إصلاح تضخّم بزمن تربيعي (وعدم الاستجابة لـ
max_execution_time) في aggregation in order عند التجميع بحسب عدة مفاتيح يكون sort order فيها مجرد بادئة لمفتاح التجميع. #110159 (Alexey Milovidov). - تم إصلاح خطأ منطقي (
Unexpected number of columns in result sample block) عندما يُحسَّن عامل تصفية يحتوي على استعلام فرعي مترابط (مثلexists((SELECT ...))) باستخدامconvert_query_to_cnfأوoptimize_and_compare_chain. #110187 (Alexey Milovidov). - تم إصلاح استثناء (
UNION mode UNION_DEFAULT must be normalized) كان يحدث عندما تستخدم عملية mutation من نوعDELETEأوALTER UPDATEعمليةً على المجموعات (UNION/UNION ALL/UNION DISTINCT/EXCEPT/INTERSECT) داخل استعلام فرعي في شرطWHEREأو في إسنادUPDATE. #110196 (Alexey Milovidov). - تم إصلاح الخطأ المنطقي
ReadBuffer is canceled. Can't read from it.(توقف الخادم في بُنى debug/sanitizer) الذي كان يمكن أن يحدث أثناء قراءة أرشيف zip (مثلًا أثناءRESTOREمن نسخة احتياطية بصيغة zip) بعد فشل قراءة سابقة من الأرشيف نفسه في منتصف التدفق. #110197 (Groene AI). - تم إصلاح بطء إيقاف تشغيل الخادم وعدم استجابة
KILL MUTATIONعندما كانت عملية mutation تحتوي علىx IN (subquery)وتبني مجموعة الاستعلام الفرعي أثناء تحليل المفتاح الأساسي؛ ويُلغى الآن بناء المجموعة فورًا. #110198 (Alexey Milovidov). - يرفض Keeper الآن تعيين إعدادات coordination
max_requests_batch_sizeوmax_requests_append_sizeإلى0بدلًا من أن يعلق في حلقة append-entries لا نهائية في إعداد متعدد العُقد. #110200 (Alexey Milovidov). - تم إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند استخدامGROUP BY ALLعلى تعبير tuple معORDER BY. #110206 (Alexey Milovidov). - تم إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند تنفيذINSERTفي جدول يحتوي على قيدCHECKيشير إلى subcolumn (مثلx.nullلعمودNullableأوarr.size0منArray). #110208 (Alexey Milovidov). - تم إصلاح قراءة Iceberg tables التي يشير فيها sort order الافتراضي إلى عمود يحتاج إلى وضعه بين علامتَي اقتباس (مثل
@timestamp). وكانت هذه الجداول غير قابلة للقراءة لأنORDER BYالمُنشأ للتخزين كان يُبنى من اسم العمود الخام ويفشل تحليله معSYNTAX_ERROR. #110233 (Groene AI). - تم إصلاح
system.tablesلقاعدة بياناتDataLakeCatalog(Iceberg/Glue)، حيث كان يؤدي إلى إيقاف الاستعلام بالكامل أو إسقاط الجداول بصمت عندما يتعذر حل metadata لجدول واحد. ويظل هذا الجدول الآن مُدرجًا بالاسم مع قيم default/NULLللأعمدة التي تحتاج إلى كائن التخزين المفتوح (engineوtotal_rowsوما إلى ذلك)، بغض النظر عنdatabase_datalake_require_metadata_access. ولا يزال الوصول المباشر إلى الجدول المعطوب يُبلغ عن الخطأ. #110242 (Groene AI). - تم إصلاح احتمال حدوث تعطل (heap-buffer-overflow) عندما كان عمود حالة دالة aggregate من عائلة
quantileTDigestيُستخدم كمفتاحGROUP BYويُسلسَل بالتوازي بواسطة عدة threads. #110263 (Groene AI). - تم إصلاح فشل
INSERTفي جدولDataLakeCatalogعلى Microsoft Fabric / OneLake معIncorrectEndpointError(HTTP 400)، وذلك بتوجيه عمليات كتابة ADLS Gen2 (DFS) إلى المضيف ذي نقطة النهاية.dfsبدلًا من المضيف.blob. ملاحظة: عند استخدامremote_url_allow_hosts، يجب إدراج مضيفَي Fabric .blob(للقراءة) و.dfs(للكتابة) في قائمة السماح لتنفيذINSERT. #110290 (Mohammad Lareb Zafar). - تم إصلاح إيقاف للخادم عند تحليل بعض استعلامات PRQL (
SET dialect = 'prql'). كان حدوث panic داخل المصرّفprqlcيؤدي إلى إنهاء العملية بدلًا من الإبلاغ عنها كخطأ في الاستعلام. #110316 (Groene AI). - تم إصلاح نتائج استعلام خاطئة كانت تمر بصمت عندما كان projection part، المكتوب قبل تغيّر مجموعة أعمدة الـ projection (على سبيل المثال، بعد الترقية عبر إصدارات تُجسِّد مصدر عمود
ALIASبشكل مختلف، أو بعد أن يعيدALTER TABLE ... MODIFY COLUMNتوجيه عمودALIASيستخدمه projection)، يُقرأ عبر الـ projection أو يُدمج: إذ كان العمود المفقود يُملأ بقيم افتراضية بدلًا من البيانات الفعلية. تُقرأ هذه الأجزاء الآن من base table، وتعيد عمليات الدمج بناء الـ projection انطلاقًا من البيانات الأساسية. #110328 (Shaohua Wang). - تم إصلاح عدم التزام
ORDER BY ... WITH FILLبـmax_execution_timeوبطئه في الإلغاء عند توليد نطاق fill كبير (خصوصًا معINTERPOLATE). #110332 (Alexey Milovidov). - تم إصلاح logical error (إيقاف للخادم في إصدارات debug/sanitizer) عند تنفيذ
ALTERمتعدد الأوامر مثلUPDATE ..., DELETE ...على Iceberg table. أصبحت مثل هذه mutations تُرفض الآن مع خطأ واضحNOT_IMPLEMENTED. #110347 (Groene AI). - تم إصلاح bug في parser حيث كان
COMMENTيُفسَّر خطأً على أنه alias ضمني عندما ينتهي استعلامSELECTمباشرة بعد معرّف table مجرد (مثل... FROM t COMMENT 'x')، مما كان يؤدي إلى خطأ صياغة مضلل بدلًا من تطبيق التعليق على الـ view/table. #110372 (Aditya Kumar). - تم إصلاح تعطل في الخادم (overflow أصلي في المكدس) عند نسخ أو إتلاف قيمة حرفية متداخلة بعمق من النوع
Array/Tuple/Map/Object، مثل استعلام يحتوي على قيمة حرفية شديدة التداخل عند رفعmax_parser_depth. #110393 (Raúl Marín). - تم إصلاح حالتين كان يمكن فيهما لـ vector search أن يعيد عددًا من rows أقل من المتوقع: إذ كانت قيم
vector_search_index_fetch_multiplierالأقل من 1.0 قد تختزل عدد fetch المحسوب إلى الصفر وتنتج نتيجة فارغة (وأصبحت هذه القيم الآن مرفوضة)، كما يُتخطى الآن optimization الخاص بـ vector search لاستعلاماتLIMIT ... WITH TIES، لأن هذا optimization يقيّد البحث بعدد N من المرشحين بالضبط ويحذف rows المتعادلة مع الصف رقم N. #110452 (Tamish Mhatre). #110453 (Tamish Mhatre). - تم إصلاح logical error
Expected CommonSubplanReferenceStep to reference CommonSubplanStep، والخطأ Subplan cannot be used to build pipeline، وlogical error Trying to extract chunk from ChunkBuffer before all inputs are finishedفيIN (subquery)عندما يحتوي الـ subquery على correlated subquery ويُبنى الـ set أثناء index analysis. #110491 (Alexey Milovidov). - تم إصلاح substitution الخاصة بـ query parameters داخل تعريفات عبارة
WINDOWمسمّاة. سابقًا، كانت parameters هناك تُترك دون substitution بصمت، وكان parameterIdentifierغير المعيَّن قد يؤدي إلى الاستثناءLogical error: '!part.empty()'أثناءEXPLAIN SYNTAX. #110506 (Alexey Milovidov). - تم إصلاح فشل بدء تشغيل الخادم لجداول
MergeTreeعلى object storage disks عندما يكون الملف المتبقيtxn_version.txt.tmpقد أفسد metadata على مستوى disk. #110519 (Alexey Milovidov). - إصلاح خطأ منطقي في filesystem cache (
Expected file ... not to exist) كان يمكن أن يحدث عند فشل تنزيل cache في الخلفية بسبب خطأ غير متعلق بـ filesystem (على سبيل المثال أثناء تشغيلOPTIMIZEعلى Iceberg table)، ما كان يترك ملف cache يتيمًا وفارغًا. #110549 (Groene AI). - تم إصلاح قراءة stream تالف بتنسيق
Nativeعندما يكون عدد الأنواع فيDynamicأو عدد المسارات فيJSON/Objectقريبًا منSIZE_MAX: إذ أصبح هذا الإدخال المشوّه يُرفض الآن برسالة خطأ واضحةINCORRECT_DATAبدلًا منstd::length_errorغير الملتقط. #110590 (Alexey Milovidov). - تم إصلاح تعطل في الخادم ضمن database engine
MaterializedPostgreSQLكان يمكن أن يحدث عندما يكون table في حالة detached (أو يتغير هيكله) بينما لا يزال مُدرجًا في قائمة انتظار المزامنة. #110596 (Alexey Milovidov). - تم إصلاح السلوك غير الصحيح لـ
SET param_<name>في العميل (وأعلام--param_<name>) عندما يطابق اسم parameter اسم setting مضمّنًا مثلlimitأوoffsetأوmax_threadsأوlog_comment. وبحسب setting المتصادم، كان query يفشل معCANNOT_PARSE_QUOTED_STRING، أو كانت value تُطبَّع بصمت (مثلًاmax_threads=0تصبحauto(N))، أو كان اسم alias الخاص بـ setting يُفقد. كما كان هذا النوع من parameter يُعطّل جميع أوامرSET param_*اللاحقة في الجلسة نفسها. #110597 (Raúl Marín). - إصلاح قراءة subcolumns التابعة لـ column يحتوي على expression من نوع
DEFAULTولم يتم materialize له في part (مثلًا بعدALTER TABLE ADD COLUMNأو أثناءALTER TABLE MATERIALIZE COLUMN): إذ كان subcolumn يُملأ بالقيم default الخاصة بالنوع بدلًا من ناتج expressionDEFAULTبعد تقييمه، كما كانت دوال Distance functions للمتجهات المنقولة (cosineDistanceTransposedوغيرها) على أعمدةQBitهذه تفشل بخطأSIZES_OF_ARRAYS_DONT_MATCH. يغلق هذا #110634. #110636 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERRORبعنوانInvalid partition key size: 0كان يمكن أن يتسبب في فشلINSERTإلى table من نوعMergeTreeومقسّم إلى partition مع تفعيلnon_replicated_deduplication_window، وذلك عندما تكون دفعة async insert قد خضعت لإزالة التكرار جزئيًا فقط (كانت بعض قيمinsert_deduplication_tokenمكررة وبعضها جديدًا). #110651 (Groene AI). - أصبحت عملية flush الخاصة بـ asynchronous insert في الخلفية تتوقف سريعًا عند إنهائها باستخدام
KILL QUERY؛ إذ كانت عملية flush لحمولة كبيرة مخزنة مؤقتًا تواصل التحليل حتى النهاية وتتجاهل الإلغاء سابقًا. #110652 (Shaohua Wang). - تم إصلاح نتائج خاطئة من
GROUP BYمعoptimize_aggregation_in_orderوDISTINCTمعoptimize_distinct_in_orderعند وضعهما فوق JOIN من نوعpartial_merge. فقد كان تحسين read-in-order يُمرَّر عبر partial-merge join، الذي يعيد ترتيب الإدخال الأيسر بحسب join key، وبالتالي لا يحافظ على الترتيب الأصلي لـ stream الأيسر، ما أدى إلى تجميع الصفوف بشكل غير صحيح. #110671 (Groene AI). - تم إصلاح overflow لعدد صحيح موقّع في
toStartOfIntervalعند استخدام عدد interval بالغ التطرف منMONTHأوWEEKأوDAYعلى قيمDate/Date32/DateTime64. #110688 (Groene AI). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKفي الاستعلامات التي تحتوي على استعلام فرعي داخلFROMعند تشغيل النسخ المتماثلة المتوازية في وضعcustom_key_sampling/custom_key_range. وكانت هذه الاستعلامات (مثلSELECT * FROM (SELECT id, k, v FROM t WHERE id < 20) ORDER BY k) تفشل سابقًا برسالةNot found column __table2.id in block .... #110690 (Groene AI). - تم إصلاح مشكلة رفض
readWKTلسلاسل WKT التي تبدأ بمسافة بادئة (مثلreadWKT(' POINT(1 2)'))، رغم أن قارئاتreadWKTPoint/readWKTPolygon/… المعرّفة نوعيًا تقبلها، وكذلك قواعد WKT نفسها. #110706 (Groene AI). - إصلاح خطأ منطقي (
Column ... already added for reading، وهو ما يؤدي إلى إيقاف الخادم في buildاتdebug/sanitizer) عند استخدام predicate نفسه لفهرس نصي في كلٍّ منPREWHEREوWHEREضمن استعلام على جدولMergeفوق جدولDistributed. #110710 (Groene AI). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKفي دوال المسافة المنقولة على أعمدةQBit(مثلcosineDistanceTransposed) عند استدعائها باستخدام استعلام فرعي قياسي أو متجه مرجعي ثابت مع تفعيل النسخ المتماثلة المتوازية. وهذا يغلق #110719. #110729 (Alexey Milovidov). - إصلاح خطأ نادر من نوع
LOGICAL_ERROR(Unexpected number of parts to remove from parts_queue؛ وهو ما يؤدي إلى إيقاف الخادم في buildاتdebug/sanitizer) فيReplicatedMergeTreeعندما كانت عمليتا partition (مثل استعلامَيMOVE PARTITION/REPLACE PARTITION، أو عندما يتسابق أحدهما معDROP_RANGEفي الخلفية) تُلغيان فحص الجزء في الخلفية على ranges متداخلة في الوقت نفسه. #110738 (Groene AI). - تم إصلاح خطأ منطقي
Hash is not set for serializationكان قد يحدث عندما يكون عمود ذو codec من نوعQuantized(...)مُغلّفًا داخل serialization أخرى، على سبيل المثال في جدولMergeفوق مصادر يكون فيها العمود ذو الاسم نفسه بأنواع مختلفة (مُدمجة فيVariant). #110776 (Groene AI). - إصلاح تعليق الخادم عند ضرب state الخاصة بـ aggregate function من نوع
median/quantileفي ثابت صحيح ضخم (مثلmedianState(x) * 18446744073709551615). إذ كان الاستعلام يصبح غير مستجيب للإلغاء وقد يستمر في العمل إلى أجل غير مسمى. #110779 (Groene AI). - إصلاح تعطل الخادم (قسمة عدد صحيح على صفر) عند استهلاك quota ذات interval بطول صفري (على سبيل المثال
CREATE QUOTA q FOR INTERVAL 0 SECOND MAX queries = 1000). ويُرفض الآن عند إنشاء quota أي interval للحصة مدته غير موجبة. #110846 (Pedro Ferreira). - تم إصلاح مشكلة
throwIf(notLike(col, pattern))(وغيرها من حالاتthrowIfعلى دالة) التي كانت تتسبب في الرمي دون شرط عندما يكونcolمن نوعLowCardinality. إذ كان التنفيذ الافتراضي لـLowCardinalityيشغّلthrowIfعلى الـ Dictionary بالكامل، والذي يحتوي دائمًا على default value المحجوزة حتى عندما لا يشير إليها أي row، لذا فإن وجود قيمة غير صفرية في ذلك الموضع غير المستخدم كان يؤدي إلى أن يرميthrowIfعلى بيانات لا تستوفي الشرط. #110864 (Groene AI). - تمرير الأدوار النشطة للاستعلام (
SET ROLEأو المعلمةrole) إلى العقد البعيدة عند قراءات النسخ المتوازية وقراءاتDistributedعبر عنقود مؤمَّن بسرّ interserver؛ إذ كانت العقد البعيدة سابقًا تعود إلى الأدوار الافتراضية للمستخدم، ما كان يؤدي إلى تقييم سياسات الصفوف على نحو غير متسق مع العقدة البادئة. #110867 (Nikolay Degterinsky). - إصلاح جداول Iceberg التي كانت تنتج معرّفات حقول مكررة بعد
ALTER TABLE ... ADD COLUMNعندما يحتوي المخطط الأولي على حقول متداخلة (Tuple/Array/Map). يسجّلlast-column-idالآن أكبر معرّف حقل مُسنَد، بما في ذلك الأبناء المتداخلون، لذلك لم يعد العمود المضاف لاحقًا يعيد استخدام معرّف حقل متداخل، ولم تعد القراءات تفشل بسببICEBERG_SPECIFICATION_VIOLATION(Duplicate field id). #110884 (Groene AI). - إصلاح تعطل في builds الخاصة بـ FIPS عند استخدام مفتاح SSH من نوع Ed25519 (
CREATE USER ... IDENTIFIED WITH ssh_key ... TYPE 'ssh-ed25519'، أو مثل هذا المفتاح فيusers.xml). Ed25519 غير معتمد من FIPS؛ لذا تُرفض هذه المفاتيح الآن برسالةLIBSSH_ERRORواضحة. #110891 (Konstantin Bogdanov). - إصلاح النتائج منخفضة الدقة لدوال المسافة المنقولة على أعمدة
QBit(cosineDistanceTransposed,L2DistanceTransposed,dotProductTransposed). كانت القيم المقتطعة إلى مستويات البتprecisionيُعاد بناؤها مع ملء البتات المحذوفة بالأصفار، ما كان يحرّف كل قيمة معاد بناؤها نحو الصفر ويؤدي إلى سلوك متدهور عند الدقة المنخفضة: بالنسبة إلىQBit(BFloat16)عندprecisionيساوي 1 لا يبقى سوى بت الإشارة، لذلك كانت كل قيمة تُعاد بناؤها إلى±0.0وكانت المسافة ثابتة نفسها لكل صف، من دون أي معلومات للترتيب. تُعاد الآن القيم المقتطعة إلى نقطة وسط محدودة ضمن خلية الدقة المتبقية (شيفراتInt8الخام إلى مركز خليتها؛ مع الحفاظ على الأصفار الدقيقة واللانهايات)، بحيث تتيح قيمةprecisionالأصغر مبادلة الدقة بالسرعة من دون نتائج منحازة بشدة. أما النتائج ذات الدقة الكاملة فلم تتغير. هذا يغلق #110898. #110911 (Alexey Milovidov). - إصلاح تعطل في server (use-after-free) أثناء الإيقاف السلس بعد الاستعلام عن جداول Iceberg من جلسات استخدمت أيضًا جداول مؤقتة. #110914 (Miсhael Stetsyuk).
- إصلاح
LOGICAL_ERROR: Cannot sum Bools(إيقاف server في debug/sanitizer builds) عند دمج aggregate states الخاصة بـsumMap/sumMapWithOverflow/sumMapFilteredمع قيمBoolجرى serialize لها بتنسيق الحالة القديم (الإصدار 0). ويصحح الإصلاح نفسه أيضًا حالتين صامتتين لنتائج خاطئة مع حالاتBoolمن الإصدار 0: لم تكن مفاتيح map من النوعBoolتُزال ازدواجيتها عبر الحالات، وكانت عملية compaction للقيم الصفرية تُسقط الإدخالات الخاطئة. #110922 (Groene AI). - إصلاح تعطل عند استخدام aggregate function مع combinator
-TupleمعRESPECT NULLSوإنتاجها حالة وسيطة (-State، أو aggregation موزعة، أوWITH ROLLUP/WITH CUBE). كانت الوظيفة المدمجة تُسمّى باسم متغير الحالة الخاطئ، لذلك كان النوعAggregateFunctionالمُسلسَل يُحلّ مجددًا إلى تخطيط غير متوافق في الذاكرة عند round-trip. #110930 (Groene AI). - إصلاح
PREWHERE(وسياسات مستوى الصف) على عمود في Iceberg أُعيدت تسميته عبر schema evolution، إذ كان يعيد بصمت0rows لملفات البيانات القديمة. تُرجِع مثل هذه الاستعلامات الآن الصفوف الصحيحة، بما يطابقWHERE. #110941 (Groene AI). - إصلاح
LOGICAL_ERROR(LazyMaterializingTransform: Number of rows in lazy chunk N does not match number of offsets M) الذي قد يحدث في استعلامات البحث المتجهي عند استخدامvector_search_with_rescoring = 1مع التجسيد الكسول عندما تتساوى عدة مسافات. #111003 (Groene AI). - إصلاح قراءة بيانات
Arrow/ArrowStreamالتي تحتوي على أعمدةArray/Mapمتداخلة وفارغة، والمولَّدة بواسطة Apache Arrow Java < 19.0.0 (المضمَّن مع Apache Spark)، والتي كان يجري رفضها سابقًا بخطأINCORRECT_DATAيفيد بأن مخزن offsets المؤقت صغير جدًا. #111101 (Raúl Marín). - إصلاح القراءات المتقادمة على أقراص
plain_rewritableعند تمكين ذاكرة تخزين الصفحات المؤقتة. #111105 (Mikhail Artemenko). - إصلاح خطأ
CANNOT_CONVERT_TYPEللثوابت من النوعVariant(بما في ذلكGeometry) في الاستعلامات الموزعة والاستعلامات التي تستخدم النسخ المتماثلة المتوازية. #111136 (Nikita Fomichev). - إصلاح خلل كان قد يتسبب في فشل قراءة الملفات الكبيرة من HDFS أو قراءتها بشكل غير صحيح عندما يتجاوز طلب قراءة واحد حد الحجم 32-بت الخاص بـ
hdfsPread(INT_MAX). #98470 (Arup Chauhan). - إصلاح الاستخدام غير الصحيح لفهرس النص في مقارنات المساواة مع قيمة بحث فارغة. #108340 (Robert Schulze).
- إصلاح حالة تعليق في
SYSTEM SYNC MERGESمع محدد الدمجManualعندما يتعذر وضع دمج مجدول ضمن مجموعة خلفية ممتلئة. #108770 (Alexey Milovidov). - إصلاح
ATTACH TABLE ... AS REPLICATEDالذي كان يتجاهل البيانات المعتمدة ويعيد إحياء الصفوف السابقة لـmutationعند ترك ملفtxn_version.txt.tmpمتقادمًا على جزء بيانات. #108772 (Alexey Milovidov). - إصلاح حالة تسابق محتملة في
ALTER TABLE ... MOVE PARTITION TO TABLEمع جداولMergeTreeغير المتماثلة، والتي كان يمكن أن تنتج أجزاء بيانات متداخلة، لأن اعتماد الأجزاء المنقولة وتخصيص رقم الكتلة لم يكونا تحت القفل نفسه. #108922 (Mikhail Artemenko). - إصلاح قراءة جداول
Icebergالمكتوبة بواسطة Databricks UniForm، الذي يكتب مخططًا شكليًا placeholder (مع قائمة حقول فارغة) في ملفات manifest. #108945 (Konstantin Vedernikov). - إصلاح استخدام ذاكرة بعد تحريرها عند قراءة جدول
Hiveغير مقسَّم إلى partition باستخدام عدة خيوط. #109164 (Alexey Milovidov). - إصلاح عدم إعادة مستوى سجل وحدة التحكم بعد بدء تشغيل الخادم عند تعيين
logger.startup_console_log_level: إذ كان المستوى يُلتقط من مفتاح إعدادات خاطئ، لذلك ظلت وحدة التحكم على مستوى بدء التشغيل المرتفع طوال عمر الخادم. يغلق #103472. #109858 (Garrett Thomas). - إصلاح اختلالات عزل اللقطة في معاملات metadata الخاصة بأقراص
plain_rewritable. يُصلح #92055. #110948 (Mikhail Artemenko). - إصلاح حالة توقّف (
front() called on an empty vector) فيclickhouse-client --loginعندما لا يتم تمرير المضيف كوسيط--hostصريح، مثلًا إذا كان مأخوذًا من--connectionأو ملف الإعدادات أو متغير البيئةCLICKHOUSE_HOST. يغلق #103603. #110279 (Christoph Wurm). - إصلاح خطأ منطقي (
!part.empty()) عندما تكون وسيطة lambda معرّفًا محاطًا بعلامات backtick ويحتوي اسمه على نقطة (مثل__table1.). كان هذا الاستعلام ينتج سابقًا استثناءً مُعالَجًا في إصدارات release، ويتسبب في توقّف الخادم في إصدارات debug وsanitizer أثناء تنسيق رسالة الخطأ. #108735 (Groene AI). - إصلاح
LOGICAL_ERROR(No set is registered for key) فيALTER TABLE ... DROP COLUMN، وmutations الخاصة بـALTER TABLE ... DELETE/UPDATE، وDELETE FROMخفيف الوزن، على الجداول التي تحتوي على عمودALIASيستخدم تعبيره عامل التشغيلIN(بما في ذلك عبر عمودALIASآخر). #111039 (Pedro Ferreira). - إصلاح فقدان صامت للبيانات مع async inserts وإزالة التكرار (
async_insert=1,async_insert_deduplicate=1). فعندما كانت عدة إدخالات async-insert ذات قيمinsert_deduplication_tokenمختلفة تُدمج في عملية flush واحدة وتُكتب إلى partitions منفصلة، كان كل token يُسجَّل في سجل إزالة التكرار لكل partition لمستها عملية flush، وليس فقط في الـ partition التي انتهت فيها صفوفه. ونتيجةً لذلك، كان أي insert لاحق يعيد استخدام أحد هذه tokens في partition لم يسبق أن كتب إليها يُزال تكراره بصمت. والآن لم تعد tokens تُسجَّل إلا في الـ partition التي انتهت فيها صفوفها فعليًا. يغلق #111031. #111049 (Groene AI). - إصلاح استثناء
LOGICAL_ERROR(ScatterExchangeStep should have one source shard, got 8) وظهور صفوف مكررة عند الاستعلام عن جدولMergeفوق جداول أو عروضDistributedمع الإعداد التجريبيmake_distributed_plan = 1. يغلق #107946. #108401 (Groene AI). - إجراء serialize لعمود
Nullable(Tuple(...))كحقلCSVواحد بدلًا من تسطيحه إلى أعمدة منفصلة. سابقًا، كانت القيمة غير NULL تُكتب على شكل عدة حقولCSV، بينما كانNULLيُكتب كحقل واحد\N، مما جعل عدد الأعمدة يعتمد على الصف وأفسد ترويساتCSVWithNames/CSVWithNamesAndTypesوعمليات round-trip. #108959 (Groene AI). - إصلاح خطأ منطقي (
KeyCondition uses PREWHERE output) في قارئParquetv3 عندما يشير شرط المفتاح على مستوى format إلى عمود لا تتم قراءته من ملفParquet. #109267 (Groene AI). - إصلاح نتائج غير صحيحة لعمليات القراءة عبر table function مع
FINALأوSAMPLEعند استخدامserialize_query_plan = 1. وكذلك إصلاح مفتاح ذاكرة التخزين المؤقت لإحصاءات جدول hash الخاص بـ aggregation لِـ table functions، بحيث لم تعد table functions المختلفة تشترك في نفس مُدخل التخصيص المسبق. #109847 (Azat Khuzhin). - إصلاح تنظيف
BACKUP ... TO Memory(...)عند فشله قبل الإنهاء النهائي: إذ كان النسخ الاحتياطي الفاشل يبقى مسجلًا، وبالتالي لا يمكن إعادة استخدام اسمه. #109947 (Julia Kartseva). - إصلاح العمليات الحسابية للحالات القصوى لـ interval في
WITH FILL STEPودوال interval للتاريخ/الوقتadd*/subtract*: لم تعد الفروق الخارجة عن النطاق تعتمد على overflow الموقَّع، ولم يعدWITH FILLمع خطوةYEARكبيرة جدًا يتعطل بسبب إرجاع التقويم إلى الخلف. #110158 (Groene AI). - إصلاح أخطاء
411 Length Requiredمن خدمات Azure: أصبح نقل Azure عبر HTTP المعتمد على Poco يضبطContent-Lengthاستنادًا إلى request body لعملاء SDK الذين لا يضبطونه بأنفسهم، مثل Azure Key Vault. #110299 (Konstantin Bogdanov). - لم يعد يُطبَّق تحسين
FINALالكسول (query_plan_optimize_lazy_final، وهو معطّل افتراضيًا) عندما يقرأ query وفق ترتيب مفتاح sorting، لأن plan الاستبدال الناتجة عنه لا تحافظ على هذا الترتيب وقد تُرجع نتائج بترتيب غير صحيح. كما لم يعد يُطبَّق عندما يُطبَّقLIMITأصغر من عدد rows المطلوب قراءتها مباشرةً على step القراءة، لأن تمريرة بناء المجموعة الإلزامية تُفقد ميزة الإنهاء المبكر. #110576 (Nikolai Kochetov). - إصلاح مشكلة قيام
readWKTوreadWKTPointبإرجاع إحداثيات غير مهيأة (scalar) أو قديمة من row سابقة (vectorized) للقيمةPOINT EMPTY. وأصبحPOINT EMPTYيُرفَض الآن معCANNOT_PARSE_TEXT، لأنPointفي ClickHouse هوTuple(Float64, Float64)ثابت ولا يملك تمثيلًا فارغًا. #110692 (Groene AI). - إصلاح التعامل الخاطئ مع timezone عند materializing أعمدة الجهة اليمنى في hash joins. يغلق #111033. #111074 (Yarik Briukhovetskyi).
- إصلاح نتائج
count()الخاطئة وسقوط rows عند ترشيح مفتاح من نوعString(أوFixedStringأضيق) أو skip index من نوع minmax بمقارنة مع ثابتFixedStringأعرض، مثلtoFixedString('abc', 257) = string_col. كان كل من pruning لمفتاح primary وminmax يبنيان النطاق من الثابت المحشو بـ NUL ويتخطيان granules المطابقة على نحو خاطئ. #111106 (Groene AI). - إصلاح عمليات inserts غير المتزامنة بتنسيق
Nativeبحيث لم يعد إدخال واحد مخزَّن مؤقتًا يصبح غير متوافق بعدALTER ... MODIFY COLUMNيتسبب في فشل الدفعة بالكامل. يغلق #111064. #111108 (Mikhail f. Shiryaev). - إصلاح
CREATE OR REPLACEلقاموس مع كائن من نوع آخر: كان يفشل معCANNOT_DETACH_DICTIONARY_AS_TABLEبعد أن يكون الاستبدال قد committed بالفعل، مما يترك table يتيمة باسم_tmp_replace_*. #111142 (Nikolay Degterinsky). - إصلاح
INCOMPATIBLE_TYPE_OF_JOINلعملية join من نوعANYعلى table بمحركJoinعندما كان filterWHEREعلى عمود من الجهة اليمنى يسمح لـ query planner بإعادة كتابة join إلىSEMIأوANTI. فـ table بمحركJoinلها strictness معلنة وثابتة لا يمكن تغييرها، لذا أصبح هذا التحويل يُرفَض الآن لمثل هذه الجداول. #111362 (Groene AI). - إصلاح table function
formatالتي كانت لا تُرجع أي columns عندما تُحلَّل بيانات الإدخال إلى zero rows (على سبيل المثال، مستند JSON فارغ أوFeatureCollectionمن GeoJSON بلا features). وهي الآن تُرجع نتيجة فارغة مع columns الصحيحة بدلًا من إطلاقNOT_FOUND_COLUMN_IN_BLOCK. يغلق #111390. #111428 (Groene AI).
تحسينات البناء/الاختبار/التغليف
- أصبحت builds الخاصة بـ sanitizer تلتقط الآن تقرير sanitizer في المخزن المؤقت العام
sanitizer_report، بحيث يتمكن محلل core dump من قراءته من core dump. #109333 (Miсhael Stetsyuk). - ابنِ
muslمن المصدر بدلًا من استخدام binaries المضمّنة. #97452 (Konstantin Bogdanov). - استخدام تطبيقات SIMD للدوال
memcmp/memcpy/memmove/memset/bcmp/memmemمن LLVM-libc. #107566 (Konstantin Bogdanov). وإصلاح تلف صامت فيmemmoveفي builds الخاصة بـ Debug عند-O0(-DDEBUG_O_LEVEL=0) على الأجهزة التي تدعم AVX-512. #110904 (Konstantin Bogdanov). - إزالة استخدامات مكتبة
curlمن كامل codebase ومن مكتبات third-party المضمّنة. #108296 (Konstantin Bogdanov). - تم تحديث
mariadb-connector-cإلى 3.4.9. #108328 (Konstantin Bogdanov). - تحديث
libsshإلى 0.12.0. #108329 (Konstantin Bogdanov). - إصلاح تعليق عند تنفيذ
COMMITللمعاملة على MacOS. #108375 (Raúl Marín). - أُضيف خيار CMake باسم
COMPRESS_DEBUG_SECTIONSلضغط أقسام Debug من نوع DWARF في object files (-gz)، ويُفعَّل تلقائيًا حيث يدعمه المصرّف، لتقليص دليل builds الخاصة بـ Debug؛ وتبقى binaries النهائية غير مضغوطة، لذلك لا يتأثر ترميز رموز stack trace وقت التشغيل. #109306 (Murphy). كما تُبنى الآن سلسلة أدوات LLVM المضمّنة مع zlib، بحيث يدعم clang الخاص بها-gz=zlib، وأُضيف أيضًا الرابط الرمزي المفقودclang++-21. #109596 (Murphy). - أصبحت builds الخاصة بـ Debug تُصرِّف الآن Rust crates المضمّنة مع معلومات Debug مخفّضة (
debug = 1، مستوى cargo’slimited) ومن دون incremental cache (REDUCE_RUST_DEBUG_INFO، مفعّل افتراضيًا)، ما يقلّص build artifacts الخاصة بـ Rust (~12 → ~7 GB من الصفر) ويمنع النمو غير المحدود لذاكرة cache الخاصة بـ cargo عبر عمليات إعادة البناء. اضبط-DREDUCE_RUST_DEBUG_INFO=OFFلاستعادة DWARF الكامل وincremental compilation. #109471 (Murphy). - دعم exchange الخاص بـ distributed query المتدفقة وعمليات reads لـ
STREAMعلى MacOS. #109769 (Raúl Marín). - ترقية
libarchiveمن 3.8.7 إلى 3.8.8. #109874 (Robert Schulze). - ترقية
c-aresمن 1.34.6 إلى 1.34.8. #109905 (Robert Schulze). - تحديث
krb5لإصلاح CVE-2026-40355 و CVE-2026-40356. #109910 (Robert Schulze). - أُزيلت التبعية التابعة لجهة خارجية
libpng. ويستخدمFORMAT PNGالآن مُشفِّر PNG صغيرًا مدمجًا بدلًا منه، ويعتمد على zlib المضمَّن. #110051 (Alexey Milovidov). - أُضيف تتبّع لتخصيصات C الخام (التي لا تمر عبر
operator new) فيmemory trackerعلى macOS، وذلك عبر تغليف نطاق malloc الخاص بـ jemalloc، بحيث تُطبَّق عليها حدود الذاكرة. #110370 (Raúl Marín). - تُبنى الآن صور Docker ذات اللاحقة
-distrolessلكلٍّ منclickhouse-serverوclickhouse-keeperانطلاقًا من مرحلة production الخالية من shell؛ بينما كان يجري سابقًا بناؤها من مرحلة debug وكانت تتضمّن/busybox/sh. يُغلق #105677. #105678 (ashishch432). - تحديث
abseil-cppإلى LTS20260526.0. #108991 (Konstantin Bogdanov).
إصدار ClickHouse 26.6، بتاريخ 2026-06-25. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- يزيل هذا التغيير الميزة
allow_experimental_query_deduplication. ظلت هذه الميزة تجريبية لفترة طويلة، ولا توجد لها اختبارات، ولن تحظى بالدعم (إذ كانت الاختبارات الأولية غير مستقرة وقد أُزيلت في #49579). #99398 (Igor Nikonov). - تستخدم ميزة
SYSTEM INSTRUMENTالمستندة إلى XRay الآنargumentsبدلًا منparameters: فقد أُعيدت تسمية العمودsystem.instrumentation.parametersإلىarguments، وأُعيدت تسمية الصياغةSYSTEM INSTRUMENT ADD ... HANDLER PARAMETERS ...إلىSYSTEM INSTRUMENT ADD ... HANDLER ARGUMENTS .... يجب تحديث أي استعلامات أو عمليات أتمتة تستخدم العمود أو الصياغة القديمة لاستخدام الأسماء الجديدة؛ إذ لم تعد الأسماء القديمة مدعومة. #103854 (Pablo Marcos). - أُعيدت تسمية الإعداد
show_data_lake_catalogs_in_system_tablesإلىshow_remote_databases_in_system_tablesمع توسيع نطاقه: عندما تكون قيمته 0 (القيمة الافتراضية)، تُخفى أيضًا قواعد بياناتMySQLوPostgreSQLمنsystem.tablesوsystem.columnsوsystem.completions، بالإضافة إلى كتالوجات بحيرات البيانات. ويظل اسم الإعداد القديم محفوظًا كاسم مستعار. #104416 (Pablo Marcos). - تستهدف بنية x86 الافتراضية الآن x86-64-v3 (AVX2) بدلًا من x86-64-v2 (SSE4.2). ويتطلب ذلك معالج CPU يدعم AVX2 (Intel Haswell أو أحدث، وAMD Excavator أو أحدث). إذا كان معالج CPU لديك لا يدعم AVX2، فاستخدم بنية
amd64compatالتي تستهدف x86-64 العادي. #105019 (Raúl Marín). - أصبح يُرفض استخدام
Dynamic/Variantالمتداخلة في تجميعاتmin/maxوفهارسminmax. سابقًا، كان التحقق يقتصر علىDynamic/Variantفي المستوى الأعلى فقط. يُغلق #104747. #105468 (Pavel Kruglov). - يرفض كل من
icebergHashوicebergBucketالآن وسائطInt128وUInt128وInt256وUInt256وDecimal256مع إظهار خطأ صريح. سابقًا، كانا يقتطعان القيم الأكبر بصمت وينتجان تجزئات متصادمة. لا تعرّف مواصفة Iceberg التجزئة إلا للأعداد الصحيحة ذات 32/64 بت وللأعداد العشرية ذات دقة تصل إلى 38؛ حوِّل إلىInt64أوDecimal128للحفاظ على السلوك السابق للقيم التي تتسع لها هذه الأنواع. #105866 (Raúl Marín). - أُضيف تحكم دقيق في تكرار عرض الاستعلامات في CLI. يقبل الخيار
--echoالآن قيمة منطقية اختيارية ويعمل في كل من الوضع التفاعلي ووضع الدُفعات. ويتحكم الخياران الجديدان--echo-formattedو--echo-query-idفي ما إذا كانت الاستعلامات المعاد عرضها تُنسَّق وما إذا كانquery_idيُطبع، على التوالي. كما يتحكم الخيار--hilite/--highlightالآن أيضًا في تمييز الاستعلامات المعاد عرضها. وكأثر جانبي، أصبح--echoالآن خيارًا يقبل قيمة منطقية، لذا فإن أي استعلام موضعي يأتي مباشرة بعد--echoالمجرد يُعامَل على أنه قيمته؛ استخدم--echo --query "..."أو--echo=falseبدلًا من ذلك. #106191 (Alexey Milovidov). - أُزيلت دوال KQL (Kusto) التجريبية
array_sort_ascوarray_sort_desc، وكذلك الواجهات الخلفية الخاصة بها في SQL وهيkql_array_sort_ascوkql_array_sort_desc. كانت هذه الدوال تجريبية، ومنفذة بجودة منخفضة، وكانت مصدرًا لأخطاء في الصحة والمحلل. وتُرجع الاستعلامات التي تستخدم هذه الأسماء الآنUNKNOWN_FUNCTION. #108101 (Groene AI). - لم يعد
ALTER TABLE ... REPLACE PARTITION ... FROM ...يحذف بصمت بيانات القسم في الوجهة عندما لا يحتوي جدول المصدر على أي أجزاء في القسم المطلوب. سابقًا، كان هذا الطلب يزيل قسم الوجهة ولا يكتب شيئًا بدلًا منه — وهو سلوك قد يتسبب بسهولة في فقدان البيانات. والآن، يُرفض هذا افتراضيًا معBAD_ARGUMENTS. لاستعادة سلوك المسح الصامت السابق، اضبط الإعداد الجديدallow_replace_partition_from_empty_source = 1، أو اضبطcompatibilityعلى26.5أو أقل؛ ولحذف بيانات الوجهة صراحةً، استخدمALTER TABLE ... DROP PARTITION. #104939 (Groene AI). - تتغير القيمة الافتراضية لإعداد الخادم
insert_deduplication_versionمنcompatible_double_hashesإلىnew_unified_hash. تعمل إزالة التكرار عند الإدراج الآن على كتلة الإدراج بالكامل (لكل عملية insert) بدلًا من أن تعمل على مستوى كل جزء/قسم: تظل إعادة محاولة عملية insert نفسها خاضعة لإزالة التكرار، لكن لم تعد عمليتا insert مختلفتان تنتجان جزءًا متطابقًا تخضعان لإزالة التكرار بشكل متبادل، كما أن عمليات insert للصفوف نفسها بعد إعادة ترتيبها لم تعد تخضع لإزالة التكرار. اضبطinsert_deduplication_version = compatible_double_hashesلاستعادة السلوك السابق. ويجب على المثيلات التي تُرقّى مباشرةً من إصدار كان يستخدمold_separate_hashesافتراضيًا أن تعمل أولًا باستخدامcompatible_double_hashesحتى تنقضي أطول نافذة إزالة تكرار ذات صلة قبل الاعتماد علىnew_unified_hash. #107886 (Sema Checherinda).
ميزة جديدة
- تمت إضافة دعم للاستعلامات المستمرة فوق جداول
MergeTree، ويُنفَّذ ذلك عبر سلسلة من قراءات snapshot. وهذه خطوة أولى نحو دعم عام للاستعلامات المتدفقة. #105114 (Mikhail Artemenko). - تمت إضافة فهارس تخطٍّ افتراضية (what-if). استخدم
CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...لتعريف فهرس تخطٍّ افتراضي ضمن نطاق الجلسة، ثمEXPLAIN WHATIF SELECT ...لتقدير نسبة التخطي والتكلفة من دون إنشائه فعليًا. وتظهر الفهارس المعرّفة في الجدول الجديدsystem.hypothetical_indexes. #104608 (Yarik Briukhovetskyi). - أُضيفت واجهة ويب مضمّنة عند
/schemaإلىclickhouse-serverتعرض بصريًا مخطط الاعتماديات بين الجداول، والعروض المادية، والعروض المادية القابلة للتحديث، والقواميس، والجداول الموزعة، والعروض. #105276 (Nikita Mikhaylov). - تمت إضافة دعم تنسيق الإخراج
PNG، مما يتيح عرض نتائج الاستعلام مباشرةً على هيئة صور PNG. #74691 (Maksim Dergousov). - تمت إضافة اكتشاف وكيل البرمجة المعتمد على الذكاء الاصطناعي (Claude Code وCursor وCodex وGemini CLI وGoose وغيرها) الذي استدعى
clickhouse-clientأوclickhouse-local، وذلك استنادًا إلى متغيرات البيئة. ويُبلَّغ عن الوكيل المكتشَف في العمود الجديدclient_agentضمنsystem.query_logوsystem.query_thread_logوsystem.processes. #106619 (Alexey Milovidov). - تمت إضافة جدول نظام جديد باسم
system.documentationيجمع التوثيق المرجعي المضمّن للمكوّنات الموحدة في النظام (الدوال، ومحركات الجداول، وأنواع البيانات، والإعدادات، والتنسيقات، وغيرها) في جدول واحد، مع عرض التوثيق بصيغة Markdown. #107463 (Alexey Milovidov). - أُضيف تنسيق الإدخال
GeoJSONلقراءة مستنداتFeatureCollectionالخاصة بـ GeoJSON، بحيث يُنتج صفًا واحدًا لكل معلم مع الأعمدةid(String) وgeometry(Geometry) وproperties(Nullable(JSON)). وتُقرأ الأشكال الهندسية من الأنواعPointوLineStringوMultiLineStringوPolygonوMultiPolygonإلى النوع الأصليGeometryفي ClickHouse. أماGeometryCollectionوMultiPoint، اللذان لا يستطيع النوعGeometryتمثيلهما، فيُطلقان استثناءً افتراضيًا، أو يمكن تخزينهما على هيئةNULLعبر الإعدادinput_format_geojson_unsupported_geometry_handling. يساهم ذلك في #91533. #98124 (Mark Needham). - تمت إضافة دوال لتقديم Mapbox Vector Tiles مباشرةً من SQL: تقوم
MVTEncodeGeomبإسقاط شكل هندسي إلى فضاء البكسل لبلاطة slippy-map وقصّه، وتقومMVTEncodeبتجميع الأشكال الهندسية المُسقطة لمجموعة ما في البايتات الثنائية لبلاطة أحادية الطبقة، بينما تُرجعMVTBoundingBox/MVTBoundingBoxMercatorالمربع المحيط بالبلاطة لتقييد الصفوف به. ويدعم ذلك الأشكال الهندسية من نوع النقاط والخطوط والمضلعات. كما يتوفر أيضًا تحت الأسماء البديلة الخاصة بـ PostGIS، وهماST_AsMVTGeomوST_AsMVT. #106107 (Saarthak Gupta). - يدعم
clickhouse-localالآن الاستعلامينSYSTEM START LISTENوSYSTEM STOP LISTEN، مما يتيح تحويله إلى خادم يقبل اتصالات TCP وHTTP. #101143 (Alexey Milovidov). - تمت إضافة أمر
helpتفاعلي إلىclickhouse-clientوclickhouse-local. تؤدي كتابةhelp <name>(وأيضًا/helpوmanو/man) إلى عرض توثيق دالة أو محرك جدول أو نوع بيانات أو تنسيق أو إعداد أو أي مكوّن آخر، مع تقديمه من Markdown داخل الطرفية مع تمييز صياغة SQL. وعندما تكون الكلمة ملتبسة، تُعرض جميع المطابقات، وعند عدم العثور عليها، تُقترح أسماء مشابهة. #108042 (Alexey Milovidov). - دعم الكتابة إلى Azure Data Lake Storage Gen2. #105406 (Konstantin Vedernikov).
- إضافة التنسيق
RowBinaryWithNamesAndTypesAndDefaultsلتحسين دعم schema evolution. #105736 (Mark Zitnik). - تنفيذ
ADD ENUM VALUESفي استعلاماتALTER TABLEلتبسيط إضافة قيم جديدة إلى نوعEnumموجود، من دون الحاجة إلى إعادة تحديد جميع قيمEnumالحالية. #93830 (Ilya Golshtein). - أصبح العرض المادي القابل للتحديث يدعم الآن
REFRESH DEPENDS ONلتشغيل عمليات التحديث استنادًا إلى تحديثات RMV آخر بدلًا من جدول زمني قائم على الوقت. (كانتREFRESH EVERY ... DEPENDS ONموجودة بالفعل، لكنها لم تكن قابلة للاستخدام بشكل موثوق لهذا السيناريو.) راجع توثيقCREATE MATERIALIZED VIEW. #104440 (Michael Kolupaev). - إضافة دعم لاختيار الأعمدة بحسب نمط الاسم باستخدام
* LIKE '<pattern>'و* ILIKE '<pattern>'، بما في ذلك الصيغ المؤهلة مثلtable.* LIKE '<pattern>'وtable.* ILIKE '<pattern>'. يطابقLIKEأسماء الأعمدة مع مراعاة حالة الأحرف، بينما يطابقILIKEمن دون مراعاة حالة الأحرف. #104569 (Yue Ni). - تمت إضافة صياغة
ESCAPEالتي تعرّف محرف إفلات مخصصًا في نمطLIKE، ما يتيح التعامل مع%و_كمحارف حرفية بدلًا من wildcards. #99774 (Ilya Yatsishin). - إضافة إعدادي الجدول
materialize_projections_on_insertوmaterialize_projections_on_mergeلـMergeTree. عندما يكونmaterialize_projections_on_insert = 0، تتخطى عملياتINSERTإنشاء projection parts، مما يحسّن throughput الإدراج للجداول التي تحتوي على projections كثيرة. وعندما يكونmaterialize_projections_on_merge = 1، تعيد عملية merge إنشاء projection مفقود من جميع source parts الخاصة به، بحيث يمكن إنشاء projections أثناء merges بدلًا من on insert. وتظل merges تجمع فقط بين parts التي تشترك في المجموعة نفسها من projections. #100993 (Christoph Wurm). - إضافة إعداد
MergeTreeجديد غير قابل للتغيير باسمallow_tuple_element_aggregation، وهو معطّل افتراضيًا. عند تفعيله، تقومSummingMergeTreeوAggregatingMergeTreeوCoalescingMergeTreeبتسطيح أعمدةTupleبشكل متكرر وتجميع كل عنصر نهائي بصورة مستقلة أثناء merges، تمامًا كما لو كان عمودًا من المستوى الأعلى — إذ تقومSummingMergeTreeبجمعه، وتقومAggregatingMergeTreeبدمج حالة دالة التجميع الخاصة به، بينما تحتفظCoalescingMergeTreeبآخر قيمة غيرNULLله. يجب تحديد هذا الإعداد عند إنشاء الجدول، ويُتجاهل بصمت من قِبل المحركات التي لا تدعمه. #98039 (johnjing). - دالتان جديدتان
quantizeBFloat16ToInt8وdequantizeInt8ToBFloat16: codec عددي يضغط مكونات التضمينات إلى 8-bit باستخدام مكمّم Gaussian Lloyd-Max ذي 256 مستوى، ويمكن استخراج شيفرات Int4/Int2/binary منه عبر اقتطاع البتات. #108102 (Alexey Milovidov). - أُضيفت الدالتان
arrayTopKوarrayBottomK: - تُرجِعarrayTopK(k, array)أكبر K عنصرًا بترتيب تنازلي - تُرجِعarrayBottomK(k, array)أصغر K عنصرًا بترتيب تصاعدي. #104563 (Vitaly Baranov). - أُضيف جدول نظام جديد
system.iceberg_filesيعرض البيانات الوصفية لكل ملف في جداولIceberg، بصف واحد لكل ملف بيانات أو حذف في اللقطة الحالية لكل جدول. ويغلق هذا #98777. #104415 (Asya Shneerson). - أُضيف جدول
system.constraintsالذي يوفّر معلومات عن جميع قيودCHECKوASSUMEعبر كل الجداول، بما في ذلك اسم القيد ونوعه والتعبير الخاص به. #105337 (Pedro Ferreira). - أُضيف جدول جديد
system.dictionary_layoutsيسرد تخطيطات القواميس المتاحة مع الوثائق المضمّنة (description,syntax,examples,introduced_in,related). #106182 (Alexey Milovidov). - أُضيف جدول جديد
system.dictionary_sourcesيسرد مصادر القواميس المتاحة مع الوثائق المضمّنة (description,syntax,examples,introduced_in,related). #106184 (Alexey Milovidov). - أُضيف جدول جديد
system.data_skipping_index_typesيسرد أنواع فهارس تخطي البيانات المتاحة مع الوثائق المضمّنة (description,syntax,examples,introduced_in,related). #106186 (Alexey Milovidov). - أُضيف جدول جديد
system.disk_typesيسرد أنواع الأقراص المتاحة مع الوثائق المضمّنة (description,syntax,examples,introduced_in,related). #106187 (Alexey Milovidov). - جرى تنفيذ
SYSTEM RESTART DISK <name>: إذ يعيد الآن تحميل البيانات الوصفية الموجودة في الذاكرة الخاصة بالقرص، ويعيد فحص الأجزاء البيانية لجداول النسخ المتماثلة للقراءة فقط الموجودة عليه. يتيح هذا لنسخة متماثلة للقراءة فقط من جدول على تخزينplain_rewritableمشترك أن ترى، عند الطلب، البيانات التي كتبها خادم آخر، من دون انتظارrefresh_parts_intervalأو إعادة تشغيل الخادم. #106645 (Jordi Villar). - أصبحت صيغة PostgreSQL
expr OP SOME(array)/expr OP ALL(array)(عندما لا يكون الطرف الأيمن استعلامًا فرعيًا) مدعومة الآن، ويُعاد كتابتها إلىhas/NOT hasفي حالة=/<>، أو إلى دوال لامبدا فيarrayExists/arrayAllمع عوامل المقارنة الأخرى. لا يُقبلANYفي صيغة المصفوفة لأنanyهي أيضًا دالة تجميعية؛ استخدمSOMEبدلًا من ذلك. وتستمر صيغة الاستعلام الفرعي لكل منANY/SOME/ALLفي التحويل إلىIN/NOT IN. #105129 (Alexey Milovidov). - أُضيفت استراتيجيتان جديدتان إلى
load_balancing، هماhostname_longest_common_prefixوhostname_longest_common_suffix، وتُفضّلان النسخة المتماثلة التي يشترك اسم مضيفها مع اسم مضيف الجهة المُبادِئة في أطول بادئة مشتركة (أو لاحقة مشتركة، على الترتيب). وهما مفيدتان عندما يكون مركز البيانات مُشفّرًا كبادئة أو لاحقة في أسماء مضيفين تحتوي على مقاطع رقمية متفاوتة الطول، حيث تختار الاستراتيجيتان الحاليتانnearest_hostnameوhostname_levenshtein_distanceالنسخة المتماثلة الخاطئة. #107360 (Denny [DBA at Innervate]). - أُضيفت معلومات شهادة عميل TLS (الموضوعات، والرقم التسلسلي، والجهة المُصدِرة، وفترة الصلاحية) إلى جدول
system.session_logلتحسين الأوبزرفابيليتي للمصادقة المستندة إلى الشهادات. #107679 (Alexey Milovidov). - أُضيف مُعرّف اعتماد اختياري
external_idللوصول المستند إلى الدور فيS3. #106941 (Elian Gidoni). - أُضيف إعداد جديد لـ
S3Queueباسمafter_processing_move_preserve_path. عند تمكينه معafter_processing='move'وafter_processing_move_prefix، تُنقل الكائنات المُعالجة مع الحفاظ على مسار المصدر الكامل ضمن بادئة الوجهة بدلًا من تسطيحها إلى اسم الملف فقط. #105354 (Asya Shneerson). - أُضيف إعداد على مستوى الخادم باسم
message_queue_disable_insertionلتعطيل الإدراج من محركات طوابير الرسائل (Kafka,RabbitMQ,NATS) إلى العروض المادية المرفقة. وهذا مفيد لسيناريوهات النسخ المتماثلة للقراءة فقط. #104911 (JIaQi Tang). - أُضيف
LOCALTIMEوLOCALTIMESTAMP(بصياغة SQL القياسية / PostgreSQL). LOCALTIMESTAMPهو اسم بديل لـnow()(ويُرجعDateTime)؛ ويُرجعLOCALTIMEالوقت الحالي من اليوم بوصفه قيمةTime. #106139 (Thomas Cabral). - أُضيفت
date_part('unit', expr)بوصفها صياغة مختصرة لـEXTRACT(unit FROM expr). جميع أنواع Interval القياسية والإضافات الخاصة بـ PostgreSQL (epoch,dow,doy,isodow,isoyear,century,decade,millennium) مدعومة. #105127 (Alexey Milovidov). - دعم متوافق مع PostgreSQL لـ
EXTRACT(TIMEZONE_HOUR FROM dt)وEXTRACT(TIMEZONE_MINUTE FROM dt)لاستخراج جزأي الساعة والدقيقة من إزاحة المنطقة الزمنية، وكذلكEXTRACT(<unit> FROM INTERVAL n <unit>)/date_part('<unit>', INTERVAL n <unit>)لاستخراج القيمة من interval. #106227 (Vinayak Joshi). - أُضيف اسمان بديلان تجميعيان
min_byوmax_byلـargMinوargMax. #105712 (Joey Yu). هذه الأسماء البديلة غبية، فالمهندسون الحقيقيون يستخدمون أسماء ClickHouse الأصلية. - أُضيف
REGEXP_SUBSTRبوصفه اسمًا بديلًا غير حساس لحالة الأحرف لـregexpExtractلتحقيق التوافق مع Oracle/MySQL/Snowflake. #105122 (Alexey Milovidov). - أُضيف
SESSION_USERبوصفه اسمًا بديلًا غير حساس لحالة الأحرف لـcurrentUser()لتحقيق التوافق مع PostgreSQL / SQL القياسية. #106081 (Takumi Hara). - دعم مُعدِّل لاحق
NULL/NOT NULLفيALTER TABLE ... ADD/MODIFY COLUMN، على غرارCREATE TABLE. #106150 (Takumi Hara). - يمكنك الآن استخدام الدالة
h3PolygonToCellsWithContainmentمن h3 للاستفادة من خوارزميتهم الجديدة، التي تدعم أوضاع الاحتواء المعتمدة على المركز، والاحتواء الكامل، والتداخل. #104455 (Youssef Kadry). - يضيف العلامتين
IPV4_PREFIX_BITS and IPV6_PREFIX_BITSعند إجراء Keying باستخدامIP_ADDRESSأوFORWARDED_IP_ADDRESS. #89270 (Aditya Chopra). - تقبل
formatReadableTimeDeltaالآن تعبيرINTERVALمن نوع غيرMonthوYearكإدخال. #64315 (Francisco J. Jurado Moreno). - يمكن للمستخدم الآن تحديد وسيطة precision اختيارية للدوال
formatReadableSizeوformatReadableDecimalSizeوformatReadableQuantityللتحكم في عدد الأرقام بعد الفاصلة العشرية. القيمة الافتراضية هي 2، مع الحفاظ على السلوك السابق. #104648 (Antonio Filipovic). - يضيف الإعداد
output_format_float_precisionللتحكم في عدد الخانات العشرية في المخرجات النصية للأعداد ذات الفاصلة العائمة. #99721 (phulv94). - أُضيف الإعداد
output_format_always_write_decimal_point_in_float_and_decimalلعرض الفاصلة العشرية دائمًا مع الأعداد ذات الفاصلة العائمة وأعدادDecimalفي التنسيقات النصية، حتى عندما تكون القيمة عددًا صحيحًا. على سبيل المثال، يُخرج1.بدلًا من1. وهو معطّل افتراضيًا. #62614 (Ilya Yatsishin). - يضيف دعمًا لعناصر config الجديدة لمعالجات HTTP:
<url_prefix>و<full_url_prefix>(لمطابقة جميع المسارات تحت مسار أساسي، وهو مفيد مثلًا لمعالجات prometheus)، بالإضافة إلى<url_regexp>و<full_url_regexp>و<headers_regexp>. أما الصيغة القديمة<url>regex:...</url>فأصبحت Obsolete الآن. #107492 (Vitaly Baranov). - يدعم إحصاءات
basic، وهي إحصاءات مدمجة لكل column تخزن الحد الأدنى/الأقصى الرقمي، ومتوسط طول السلسلة النصية، وعدد قيم NULL حيثما ينطبق ذلك. #106048 (Han Fei). - يدعم عقد TTL في ClickHouse Keeper، مع تفعيل اختياري عبر flag الميزة
create_ttl. #100397 (Konstantin Vedernikov). - يقدّم ميزة memory reservation لأحمال العمل. راجع وثائق Workload scheduling. #82414 (Sergei Trifonov).
ميزة تجريبية
- تنفيذ الاستعلامات الموزعة متعددة المراحل: يقسم المُخطِّط خطة الاستعلام إلى مراحل مترابطة عبر تبادلات scatter / broadcast / gather / shuffle، ثم يوزّع أجزاء الخطة على عُقد worker. وتُبث البيانات بين المراحل عبر TCP أو تُمرَّر عبر temporary files في object storage مشتركة. ويدعم هذا المسار distributed shuffle وbroadcast hash joins وshuffle aggregation وdistributed sort. هذه الميزة Experimental وهي معطلة افتراضيًا. #106020 (Alexander Gololobov). ويمكن الآن لمحرك distributed query plan التجريبي (
make_distributed_plan) استخدام منفذ مختلف لكل worker لكل من توزيع المهام وstreaming exchange، ويُضبط ذلك لكل replica في<remote_servers>باستخدامstateless_worker_portوstreaming_exchange_port. وعند عدم تعيينهما، تُستخدم منافذ server السابقة على مستوى الخادم (stateless_worker_client.portوdistributed_query.streaming_exchange_port). وهذا يتيح تشغيل عدة workers على مضيف واحد. #107885 (Alexander Gololobov). - أُضيفت خوارزمية إعادة ترتيب
joinالتجريبيةdphypلعمليات inner joins كخيار للإعدادquery_plan_optimize_join_order_algorithm، وكذلك الإعدادquery_plan_optimize_join_order_max_searched_plans، الذي يضع حدًا لبحث ترتيب join ويعود إلى الخوارزمية التالية في السلسلة عند تجاوز هذا الحد؛ اضبطه على0للحفاظ على سلوك البحث السابق غير المقيّد. #98798 (Alexander Gololobov). - أُضيفت الدالة
aiEmbedلاستخدام واجهات LLM API في توليد embeddings من داخل ClickHouse. #102922 (George Larionov). - أُضيف canary تجريبي لـ Linux OOM: sacrificial child process يستهدفه قاتل نفاد الذاكرة (OOM) في Linux قبل عملية server الرئيسية. وعند تفعيله باستخدام
oom_canary_enable، فإنه يخفف memory pressure عبر تنظيف caches الخاصة بالمُخصِّص، وإلغاء queries، وإلغاء عمليات الدمج، وتسجيل حدث فيsystem.crash_log. وتتطلب الاستجابة لحالة OOM وجود دليل على OOM-kill منmemory.eventsفي cgroup v2. #101942 (Peng). - أصبحت واجهة web terminal عند
/webterminalالآن ميزة جاهزة للإنتاج ومفعّلة افتراضيًا. ويجري التحكم فيها عبر إعداد server الجديدenable_webterminal؛ أما الإعداد السابقallow_experimental_webterminalفقد أصبح deprecated لكنه ما يزال مدعومًا حفاظًا على backward compatibility. ولتعطيل الـ endpoint، اضبطenable_webterminalعلىfalse. #106255 (Alexey Milovidov). - تدعم نقاط نهاية PromQL عبر HTTP الآن تحديد database وtable عبر URL query parameters (
database=,table=, أوtable=db.table). وقد أُزيل fallback الضمني السابق للجدولdefault.prometheus: فإذا لم تُحدِّد لا مواصفة handler ولا URL جدولًا، فسيُرجع handler الآنThe time series table name is not set. وللاحتفاظ بالسلوك السابق، اضبط<table>default.prometheus</table>أو مرِّرtable=...في URL. #107553 (Vitaly Baranov). - أُضيف دعم لدالة PromQL
histogram_quantileفي Table functionsprometheusQueryوprometheusQueryRange. ويتيح ذلك حساب quantiles على buckets الخاصة بـ Prometheus histogram التقليدي والمُعرَّفة بالوسمle. #103477 (Joe Smith). - أُضيف وضع lazy posting list apply mode إلى text index. وعند تفعيله عبر
SET allow_experimental_text_index_lazy_apply = 1وSET text_index_posting_list_apply_mode = 'lazy'، تُفك شيفرة posting lists عند الطلب على مستوى packed-block باستخدام أسلوب قائم على cursor بدلًا من تمثيلها كاملًا في Roaring Bitmaps، مما يقلل استهلاك الذاكرة ووقت CPU في text index queries الانتقائية. #100035 (Peng). - تمت إضافة دعم ABI الخاص بـ AssemblyScript لـ WebAssembly UDFs. يمكنك تجربة ABI الخاص بـ AssemblyScript بدون تثبيت سلسلة الأدوات محليًا باستخدام playground المستند إلى المتصفح، والذي يترجم شيفرة AssemblyScript ويحمّل وحدة WebAssembly الناتجة إلى ClickHouse المحلي. #104606 (Vladimir Cherkasov).
- إتاحة إرفاق معالجات Prometheus على منفذ HTTP الرئيسي مع بادئة اختيارية. #104975 (James Cunningham).
- تمت إضافة إعداد تجريبي في
MergeTreeباسمpacked_skip_index_max_bytesيجمع التدفقات الفرعية الصغيرة لـ skip-index في أرشيفskp_idx.packedواحد لكل جزء، مما يقلل الضغط على inode عند تعريف عدد كبير من فهارس التخطي على جدول. ويُتخذ القرار لكل تدفق فرعي وقت الكتابة: فالتدفقات الفرعية التي يبقى حجمها المتسلسل دون العتبة تُوضَع في الأرشيف، بينما يحتفظ أي شيء أكبر بتخطيطskp_idx_<name>.idx2/.mrk2المستقل. ويمكن لجزء واحد أن يجمع بين التخطيطين. فهارس النص الكامل غير مدعومة وتظل دائمًا لكل ملف. القيمة الافتراضية هي 0 (التجميع معطّل). #105321 (Raúl Marín). - دعم serialization لـ
Buffersفي WebAssembly UDFs باستخدامABI BUFFERED_V1، وإضافةwebassembly_udf_enable_fuelكإعداد persisted لدالة WASM UDF. #105574 (Antonio Andelic). - إضافة إعداد تجريبي باسم
use_reader_executor(معطّل افتراضيًا) يوجّه reads عبرReaderExecutorجديد قائم على pipeline بدلًا من سلسلة read buffers الـ legacy. #106570 (Sema Checherinda). كما أُضيفت metrics خاصة بـ observability لمسار القراءة التجريبيuse_reader_executor، بما في ذلك KPI لتكلفة القراءة المُنمذجة (ReaderExecutorModeledCostMsPerRequestedMiB). #106968 (Sema Checherinda). وتم تقديم المخزن المؤقتChainedBuffersضمن مسار القراءة التجريبيuse_reader_executor، مع metric باسمReaderExecutorChainedBufferBytes. #107210 (Sema Checherinda). - أصبح ترتيب الفرز التنازلي في sorting key الخاصة بـ
MergeTree(مثلORDER BY (time DESC, key)) مدعومًا دائمًا الآن، ولم يعد يتطلب الإعداد التجريبيallow_experimental_reverse_key، الذي أصبح مهملًا. #106440 (Nikita Mikhaylov). - أصبح
Nullable(Tuple(...))الآن في مرحلة Beta. وهو معطّل افتراضيًا؛ اضبطenable_nullable_tuple_type = 1لاستخدامه. #107754 (Nihal Z. Miaji).
تحسين الأداء
- تغييرات متنوعة في Keeper تجعله أسرع إجمالًا بنحو الضعف (تحسين التجميع، وتمرير الرسائل إلى القائد عبر خطوط الأنابيب، وتمرير إلحاقات السجل عبر خطوط الأنابيب). #101757 (Michael Kolupaev).
- تقليل الحمل الإضافي لكل query في استعلامات
SELECTالبسيطة (التحليل النحوي، والتحليل، والتخطيط). على سبيل المثال، أصبحSELECT count() FROM hitsعبر connection واحدة أسرع بنحو 50%. #104513 (Raúl Marín). - تحسين index analysis لـ primary key index في primary keys الطويلة وعالية الكاردينالية. بالنسبة إلى primary key طويل، أصبح زمن تشغيل index analysis يعتمد الآن أساسًا على تعقيد filter الخاص بـ query (أي key columns التي يستخدمها فعليًا)، لا على طول primary key — لذا فإن توسيع sorting key يضيف حملًا إضافيًا ضئيلًا جدًا إلى index analysis في queries التي تُجري filter على عدد قليل فقط من columns الخاصة به. أما في حالة primary key عالي الكاردينالية، حيث يحتفظ ClickHouse في الذاكرة فقط بـ prefix انتقائي من key columns ولا يحمّل الأعمدة اللاحقة، فإن index analysis يعمل الآن على هذا الـ in-memory prefix فقط بدلًا من المفتاح بالكامل. هذا التحسين مفعّل افتراضيًا، ويمكن تعطيله عبر الإعداد الجديد
use_lightweight_primary_key_index_analysis. يغلق #65103. #91836 (Nihal Z. Miaji). - أصبح build الافتراضي لـ x86 يستهدف الآن x86-64-v3 (AVX2) بدلًا من x86-64-v2 (SSE4.2). ويتطلب ذلك CPU يدعم AVX2 (Intel Haswell أو أحدث، AMD Excavator أو أحدث). إذا كان CPU لديك لا يدعم AVX2، فاستخدم build
amd64compatالذي يستهدف x86-64 القياسي. #105019 (Raúl Marín). - استخدام
ipnsortوdriftsort(sorting مستقر) — وهما منفذان بلغة C++ لتنفيذات الفرز في المكتبة القياسية لـ Rust — في عمليات sorts للمقارنة العامة. وهذا يسرّعORDER BYعلى columns غير الرقمية وعمليات الفرز المستقرة، ويزيل إحدى أسوأ الحالات عند الإدخال المفروز عكسيًا. #106650 (Alexey Milovidov). - تحسين جديد لـ
GROUP BYللمفاتيح عالية الكاردينالية والمتوزعة بالتساوي، يوزّع الصفوف عبر threads من خلال hash لمفتاح التجميع، بحيث يجمّع كل thread مجموعة منفصلة من المفاتيح من دون مرحلة merge. اضبطenable_sharding_aggregator = 1لتفعيله. #104233 (Nihal Z. Miaji). - تفعيل prefetching لـ hash table في queries
GROUP BYذات المفاتيح النصية، مما يحسّن أداء aggregation النصية عالية الكاردينالية بنحو 8%. #101007 (Le Zhang). - تقليل Peak memory usage عند merge نتائج two-level aggregation الجزئية ذات aggregate states الكبيرة (مثل
groupArray)، وذلك بتحرير الحالات المصدرية لكل bucket تدريجيًا أثناء الـ merge بدلًا من إبقائها جميعًا نشطة حتى اكتمال الـ merge. #102330 (Yuri Fedoseev). - جرى تحسين التمثيل في الذاكرة لـ
EnumDataType. ويمكن أن يتحسن استهلاك الذاكرة للجداول التي تحتوي على النوعEnumبما يصل إلى 10 أضعاف لمكوّنEnum. كما أن زمن استرجاع name حسب value (الرقم) مماثل أو أسرع. أما البحث حسب الاسم فأبطأ قليلًا، لكن هذا النمط من الوصول أقل شيوعًا. #95668 (Ilya Yatsishin). - إضافة تخزين مؤقت لحلّ المعرّفات لمنع تكرار حلّها أثناء query analysis. #88043 (Max Justus Spransy).
- تحسين أداء تحليل الاستعلامات للاستعلامات التي تعمل على جداول تضم عدداً كبيراً من الأعمدة: إذ جرى تجنّب حساب قيم hash لعُقد الأعمدة (التي تتضمن تعبير الجدول المصدر بالكامل) عند عدم الحاجة إليها. وأصبح تحليل الاستعلامات الفرعية المتداخلة
SELECT *فوق جدول يحتوي على نحو 1200 عمود أسرع الآن بحوالي 50 مرة. #106957 (Dmitry Novik). - تسريع تحليل الاستعلامات التي تتضمن عدداً كبيراً من استدعاءات الدوال أو استدعاءات دوال متداخلة بعمق، وذلك بإزالة قيمة hash زائدة لشجرة الاستعلام من cache تحليل الدوال. #107516 (Dmitry Novik).
- إصلاح حالات التعطل الطويلة عند تسجيل الدخول وبدء الاستعلامات في مخزن الوصول المتماثل عند تغيّر عدد كبير من كيانات الوصول (سياسات الصفوف، والأدوار، والحصص، وملفات تعريف الإعدادات) دفعة واحدة. وأصبحت كل cache على مستوى الكيان تعيد الحساب مرة واحدة لكل Batch من الإشعارات بدلاً من مرة لكل كيان متغيّر، مما يزيل عملاً تربيعياً كان قد يُبقي قفل الوصول محتجزاً لعدة دقائق. #107672 (Azat Khuzhin).
- مشاركة
FixedHashMapالخاصة بـ hash join كعامل تصفية وقت التشغيل للربط على جهة probe. فعندما يكون جدول hash على جهة build من نوعFixedHashMap(أو يمكن تحويله إليه)، يُنشر بوصفه عامل تصفية وقت التشغيل ويستبدلSet/BloomFilterالذي كانBuildRuntimeFilterStepسيُثبّته في الحالة العادية. ويتحكم في ذلك الإعداد الجديدjoin_runtime_filter_from_fixed_hash_table(القيمة الافتراضيةtrue). #105640 (Xiaozhe Yu). - تطبيق lazy لفهارس selector وفهارس replication في حالة وجود
JOINيتبعهLIMITانتقائي أوTopNأوJOINآخر. وللتحكم في عدد أعمدة الحمولة المطلوبة لتفعيل فهارس selector المؤجلة، استخدم الإعدادquery_plan_min_columns_for_join_lazy_indexing(تعني القيمة 0 أن التحسين معطّل). وللتحكم في قيمةLIMITالتي يُطبَّق عندها هذا التحسين، استخدم الإعدادquery_plan_max_limit_for_join_lazy_indexing. #106566 (Hechem Selmi). - أصبح الآن مسموحاً بإعادة ترتيب
JOINباستخدام DP (البرمجة الديناميكية) مع parallel replicas. #105889 (Nikita Taranov). - تحسين query plan عندما يستخدم
JOINعوامل تصفية وقت التشغيل (مع تفعيلenable_join_runtime_filtersافتراضياً): إذ أصبح نموذج تكلفة إعادة ترتيب الربط يتجاوزWindowTransform(وغيره من plan step التي تحافظ على الصفوف) في الشجرة الفرعية اليمنى، ويستخدم عدد الصفوف الأساسي وNDV لكل عمود بدلاً من الرجوع إلى غياب الإحصاءات. #107229 (UnamedRus). - إزالة الافتراضية من عملية إخراج الصفوف غير المنضمّة في RIGHT وFULL join عبر تجميعها على شكل Batch. #105679 (Hechem Selmi).
- دعم طريقتَي
keys32وkeys64المعبأتين فيHashJoin. #107202 (Nikita Taranov). - دعم طريقتَي
keys32وkeys64المعبأتين فيSet. #107564 (Nikita Taranov). - معالجة أكثر كفاءة للأعمدة القابلة للقيم الفارغة في aggregation. #106015 (Nikita Taranov).
- تحسين أداء استعلامات
LIMIT BY. #103349 (Nihal Z. Miaji). - تسريع استعلامات
ORDER BY ... LIMIT BYعبر تنفيذLIMIT BYداخل كل تدفق مرتّب متوازٍ أثناءSortعندما تكون أعمدةLIMIT BYبادئة لـORDER BY. يقلّل ذلك عدد الصفوف التي تمر عبر دمج الفرز النهائي وأي مراحل لاحقة في خط المعالجة. يتحكم في هذا التحسين الإعداد الجديدquery_plan_push_limit_by_into_sort(مُمكّن افتراضيًا). #104000 (Nihal Z. Miaji). - تسريع استعلامات
SELECT ... LIMIT N BY <cols>عندما تكون<cols>بادئة لمفتاح الفرز في الجدول، أو تصبح كذلك بعد أن يثبّتWHERE col = constالأعمدة الأولى. عند تمكين ذلك، يقرأMergeTreeالبيانات بترتيب المفتاح الأساسي، ثم يطبّقLIMIT BYالتصفية أولًا في وضع التدفق مع ذاكرة O(1) لكل تدفق مرتّب، مما يستبعد معظم البيانات، ثم يُنفَّذLIMIT BYالعادي أخيرًا على البيانات المُقلَّصة للحصول على النتيجة النهائية. يتحكم في ذلك الإعداد الجديدoptimize_limit_by_in_order(مُمكّن افتراضيًا). #105135 (Nihal Z. Miaji). - تسريع استعلامات
LIMIT BYعلى جداولMergeTreeالمُقسَّمة إلى partitions عبر تنفيذLIMIT BYداخل تدفق كل partition على نحو متوازٍ، بدلًا من دمج جميع التدفقات في تدفق واحد قبل تطبيق الحد. ينطبق ذلك عندما يكون partition expression دالة حتمية لأعمدةLIMIT BY، بحيث لا يمكن لأي مجموعةLIMIT BYأن تمتد عبر قسمين. يتحكم في ذلك الإعداد الجديدallow_limit_by_partitions_independently(مُمكّن افتراضيًا). #105126 (Nihal Z. Miaji). - تسريع استعلامات
LIMIT BYعبر إزالة key expressions الزائدة: فيُسقَط المفتاح الذي يكون دالة حتمية للمفاتيح الأخرى (مثلًاLIMIT 5 BY x, f(x)تصبحLIMIT 5 BY x)، وتُستبدل الدالة الحقنية للمفتاح بالـ argument الخاص بها (مثلًاLIMIT 5 BY toString(x)تصبحLIMIT 5 BY x). يقلّل ذلك عدد تعبيرات التي تُقيَّم لكل row وتكلفتها. يتحكم في ذلك الإعدادان الجديدانoptimize_limit_by_function_keysوoptimize_injective_functions_in_limit_by، وكلاهما مُمكّن افتراضيًا. #106818 (Nihal Z. Miaji). - تسريع aggregation الموزّع على الشظايا، وتقسيم
grace_hashjoin إلى buckets، وتقسيم window المتوازي، عبر استبدال تجزئة الأعمدة لكل chunk بنواة تستخدم CRC32C العتادي. #106538 (Harikrishnan Prabakaran). - تحسين
L1DistanceوL2DistanceوL2SquaredDistanceوLinfDistanceوcosineDistanceلوسائط Array باستخدام المعالجة المتجهية التلقائية متعددة الأهداف على x86-64-v4/v3. وبالنسبة إلى وسائط Array غير الثابتة، يمكن الآن لجميع هذه الدوال، باستثناءLpDistanceالتي تستخدمstd::powمع exponent وقت التشغيل، الاستفادة من kernels ذات معالجة متجهية من قِبل المصرّف. كما جرى الحفاظ على مسارات التسريع الحالية AVX-512 وSapphire Rapids لوسائطBFloat16الثابتة فيL2DistanceوcosineDistance. #101310 (Peng). - تحسّن أداء الدالة
{Norm}DistanceوdotProduct. #106007 (Nikita Taranov). - تحسّن أداء الدالة
arrayNorm. #106211 (Nikita Taranov). - تحسّن أداء
dotProductفي بعض الحالات. #106210 (Nikita Taranov). - تحسين أداء مسارات AVX-512 ذات المعامل الثابت على اليسار لكل من
L2DistanceوcosineDistanceعلىArray(Float32)وArray(Float64)وArray(BFloat16)عندما يكون طول المصفوفة قابلاً للقسمة تمامًا على عرض المعالجة المتجهية. #104625 (Sergey Kuznetsov). - تمكين توليد شيفرة AVX-512 لمعالجات amd، مع تحسين توليد الشيفرة للدالة
arrayDistance. #106505 (Nikita Taranov). - تحسين أداء الدالتين
L2DistanceTransposedوcosineDistanceTransposedلنوع البياناتQBit. #106701 (Raufs Dunamalijevs). - تحسين أداء الدوال
encryptوdecryptوtryDecryptوaes_encrypt_mysqlوaes_decrypt_mysqlبما يصل إلى عشرة أضعاف، مع استعادة الأداء المفقود نتيجة الترحيل من BoringSSL إلى OpenSSL 3.x (24.4). #107339 (Konstantin Bogdanov). - تحسين أداء الدوال
encryptوdecryptوhalfMD5من خلال تجنب عمليات lookup الضمنية لكل صف على provider في OpenSSL 3.x. #99105 (Konstantin Bogdanov). - إضافة تنفيذ SIMD للدالة
SHA1يحسب قيم hash لعدة مدخلات بالتوازي باستخدام AVX-512، مما يحسن الإنتاجية. #105459 (Joanna Hulboj). - إضافة backend AArch64 ASIMD/NEON لتنفيذ
MD5متعدد المخازن المؤقتة. #105563 (Venkata Vineel ). - دمج blocks المصدر قبل حساب الإسقاط أثناء
MATERIALIZE PROJECTIONلتقليل عدد projection parts المؤقتة وتقليل overhead الدمج. أدى ذلك إلى تسريع بنحو ~3.4x على table تضم 50 مليون صف. #100047 (Amos Bird). - تقليل latency لأوامر
INSERTفي جداولMergeTreeالتي تحتوي على skip indices على columns الخاصة بـORDER BY، وذلك عبر تجنب تبديلات الأعمدة غير الضرورية أثناء كتابة part (بنحو ~17% على workloads بنمط traces). #101101 (Amos Bird). - تمكين مسارات شيفرة SIMD الخاصة بـ Arrow (NEON على ARM، وSSE4.2/AVX2/AVX512 على x86)، واستخدامها لتسريع فك ترميز columns من نوع Parquet
FLOAT/DOUBLEالمرمزة باستخدامBYTE_STREAM_SPLIT. #106376 (Raúl Marín). - تحسين أداء الإدراج لأعمدة
LowCardinalityالتي تحتوي على فهارسbloom_filter. #106410 (Michael Jarrett). - تنفيذ نسخ blob بالتوازي في
DiskObjectStorageTransaction::copyFileباستخدام thread pool مخصص لكل disk. #105089 (Asya Shneerson). - تجنب قراءة محتويات file عند استخدام input format
Oneمع table functions الشبيهة بالملفات مثلfileوs3. #105157 (Yue Ni). - تسريع بدء تشغيل
clickhouseعلى macOS بنحو 3x من خلال عدم تصدير الرموز الديناميكية، التي كان الرابط الديناميكي سيعالجها لولا ذلك عند كل تشغيل. #107768 (Raúl Marín). - تسريع تحميل filesystem cache عند بدء التشغيل من خلال تجنّب فتح directory إضافي لكل مفتاح cache. #107414 (Alexey Milovidov).
- تسريع تحميل filesystem cache عند بدء التشغيل عبر تمكين خيوط سرد directory من المساعدة في تحميل metadata الخاصة بـ cache فور انتهاء السرد، بدلًا من ترك نصف الخيوط في حالة idle. #107416 (Alexey Milovidov).
- تقليل overhead بدء تشغيل عملية
clickhouseمن خلال تحديث مكتبة WasmEdge المضمّنة، التي لم تعد تُنشئ قيمة hash سرية عشوائية في مهيّئ عام عند كل بدء تشغيل. #107869 (Raúl Marín). - أصبح بإمكان المفتاح الأساسي في
MergeTreeوفهارس التخطي الآن استبعاد granules عند تطبيق عامل تصفية يغلّف فيهifNullأوcoalesceشرطًا ما، مثلifNull(key = 0, 0)أوcoalesce(key = 0, 0). وكانت مثل هذه predicates — التي تُنشئها مولدات query غالبًا لتحويل مقارنة قد تكونNULLإلى قيمة منطقية محددة — غير مفهومة سابقًا لتحليل الفهارس، وبالتالي لم يكن ممكنًا تخطي granules. ويُوسّع هذا الإعداد الحاليallow_key_condition_coalesce_rewrite(المُمكَّن افتراضيًا). يغلق #106264. #106272 (Andy Zhao). - ينبغي أن يستهلك تقييم فهرس التخطي على أنواع
DateTime64قدرًا أقل من CPU في 26.6. #107707 (Shankar Iyer). - تحسين أداء تحليل text index في عمليات البحث متعددة token عبر تحسين التعامل مع token النادرة. #98226 (Anton Popov).
- استخدام cache لمقاطع segments المضغوطة لقائمة الترحيل الخاصة بـ text index. #106299 (Anton Popov).
- تحسين أداء generic exclusion search لطلبات query التي تحدد نطاقات متتالية كبيرة من الجدول. #93813 (Michael Jarrett).
- تتشارك clients
S3التي تستخدم endpoint وbucket نفسيهما cache واحدة، مما يتجنب تكرار discovery للمنطقة. يغلق #92482. #96802 (Andrey Zvonov). - إذا احتوت query على
has(<constant array>, <expr>)، فسيقوم analyzer بتحويل العقدة لاستخدام تنفيذinأسرع إذا كان ذلك ممكنًا. #97341 (Shankar Iyer). - عند جدولة job جديدة في
ThreadPool، أيقِظ worker thread التي أصبحت idle مؤخرًا (LIFO) بدلًا من واحدة عشوائية. يقلل هذا من تجزؤ الذاكرة الناتج عن cacheات allocator الخاصة بكل thread. ولا يتغير ترتيب معالجة jobs. #100177 (Alexey Milovidov). - تحسين أداء Runtime Filters التقريبية وفهارس bloom filter. #100201 (Christoph Viebig).
- السماح لـ
ASOF JOINباستخدام خوارزمية join parallel_hash، مع تنفيذ مرحلة البناء بالتوازي عبر قيم مفاتيح المساواة المميّزة. في السابق، كانASOFمستبعدًا دائمًا منparallel_hash. #105375 (Greg Maher). - تجنّب قراءة مدخلات غير محدودة لطلبات query
INTERSECTوEXCEPTعندما تجعل مدخلة فارغة النتيجة معروفة مسبقًا بأنها فارغة. #105393 (Yue Ni). - إضافة
constinitلمجموعة متنوعة من مانعاتMemoryTracker. #105490 (Azat Khuzhin). - تحسين أداء
bitmapContainsلحالاتgroupBitmapغيرUInt64عبر تجنّب استدعاءاتrb_maxالمتكررة أثناء التحقق من النطاق. #105960 (Yue Ni). - تسريع الاستعلامات غير المتصلة لأعمدة
LowCardinalityالمعتمدة على قاموس واحد. #103662 (Ivan Babrou). - إضافة مسار سريع لمرحلة probe في
HashJoinعندما تحتوي الكتلة على صف واحد. #106008 (Nikita Taranov). - أصبحت predicates في استعلامات مثل
SELECT ... FROM view(SELECT ... FROM remote(...)) WHERE ...تُدفَع الآن إلى الاستعلام المُرسَل إلى الـ shard البعيد. وكان التحسينallow_push_predicate_ast_for_distributed_subqueriesيفتقر إلى حالة خاصة بـ table functions. #105986 (Nikolai Kochetov). - تفعيل
enable_join_transitive_predicatesافتراضيًا. #103724 (Alexander Gololobov). - إضافة دعم للدوال
multiSearchAnyوmultiSearchAnyUTF8وmultiMatchAnyفي text indexes. كما جرى تحسين index analysis في text indexes للدالةmatch، بحيث يمكن الآن للأنماط التي تحتوي على مجموعات بديلة تخطي المزيد من granules. #106279 (Anton Popov). - السماح بدمج عوامل التصفية التي تُضاف بعد اختيار PREWHERE الأولي (predicate pushdown، أو Runtime Filters، أو PREWHERE صريح مع WHERE يحدده المخطط) في PREWHERE الحالي خلال تمريرة ثانية للمحسّن، بدلًا من بقائها كخطوة Filter منفصلة فوق قراءة
MergeTree. #105445 (Yarik Briukhovetskyi). - يسجّل
QueryConditionCacheالآن granules التي تُستبعَد بالتصفية بشكل منفصل، حتى داخل دفعات القراءة التي تجتاز PREWHERE جزئيًا، مما يقلّل عدد العلامات التي تعيد الاستعلامات اللاحقة قراءتها عند استخدام condition نفسه. #105335 (Han Fei). - إضافة إعداد Keeper وهو
nuraft_use_bg_thread_for_snapshot_io، والمفعّل افتراضيًا، بحيث يقرأNuRaftكائنات snapshot من خيط خلفي بدلًا من worker threads الخاصة بـ Raft. #106285 (Antonio Andelic). - تقليل ذروة استخدام الذاكرة عند تطبيق snapshots المستلَمة في ClickHouse Keeper باستخدام
KeeperMemoryStorage. #105851 (Antonio Andelic). - توجيه allocations الخاصة بـ LLVM/JIT إلى arena مخصّص في jemalloc. ويؤدي ذلك إلى تقليل تجزئة RSS الناتجة عن تداخل عمليات التتبّع طويلة العمر الخاصة بـ JIT مع allocations قصيرة العمر الخاصة بالاستعلامات. كما تُضاف مقاييس غير متزامنة جديدة هي
jemalloc.jit_arena.active_bytesوjemalloc.jit_arena.dirty_bytesوCompiledExpressionCacheBytesMaxوCompiledExpressionCacheCountMaxلأغراض الرصد. وأصبحSYSTEM DROP COMPILED EXPRESSION CACHEالآن يحذف أيضًا مثيلات CHJIT الأساسية ويفرّغ JIT arena. #104113 (Raúl Marín). - إصلاح الزيادة المفرطة في حجز الذاكرة عند قراءة أعمدة
Nullable(String)المتناثرة والمشفّرة بالقاموس منParquetباستخدام القارئ native V3. #102805 (Francisco). - تم إصلاح
CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)على الأقراص المشفّرة بحيث لم يعد ينسخ البيانات بدلًا من إنشاء روابط صلبة إليها. #106731 (Nikita Mikhaylov). - تم تحسين تقدير cardinality في مُحسّن plan للاستعلام: فالعمود الناتج عن دالة حتمية أحادية الوسيط (مثل
toYear(date)) يرث الآن عدد القيم المميزة لوسيطه باعتباره حدًا أعلى، بدلًا من تركه بلا إحصاءات، مما يؤدي إلى إعادة ترتيب أكثر دقة لعمليات join. #107757 (Alexander Gololobov). - تم تقليل الحمل الإضافي على CPU الناتج عن logging غير المتزامن عند ارتفاع معدلات السجلات، وذلك عبر إخطار consumer السجل فقط عند انتقال queue من فارغة إلى غير فارغة بدلًا من كل رسالة. #107352 (Nikita Mikhaylov).
- تمت إزالة العمليات الحسابية المكررة أثناء query execution في مزيد من السيناريوهات. #106113 (Yarik Briukhovetskyi).
- تمت موازاة معالجة نتيجة تعبير الجدول الشائع التعاودي: لم يعد
GROUP BYأو أي إجراء آخر على نتيجةWITH RECURSIVEكبيرة الحجم مقصورًا على thread واحد. #107694 (Alexey Milovidov). - تم تحسين أداء البحث غير الحساس لحالة الأحرف عن substring (
positionCaseInsensitiveUTF8وILIKEوmultiSearchAnyCaseInsensitiveUTF8والدوال ذات الصلة) عبر إضافة مسار NEON SIMD على ARM ونواة AVX2 أوسع على x86. #107882 (Raúl Marín). - تم إصلاح تراجع في throughput بنسبة تقارب 16% لبرنامج الترميز
FPCذي الفاصلة العائمة على ARM، وكان قد أُدخل عندما بدأت جداول التنبؤ الخاصة به تستخدمVectorWithMemoryTracking. #108182 (Groene AI).
تحسينات
- يُحدِّث
MemoryWorkerالذي يعمل في الخلفية الآن الحد الصارم للذاكرة في الخادم بشكل دوري استنادًا إلى استخدام الذاكرة الحالي ومقدار الذاكرة الذي تُبلغ النواة بأنه متاح، بحيث يترك ClickHouse هامشًا للعمليات الأخرى التي تعمل على المضيف نفسه. الصيغة هي(resident memory + system MemAvailable) * max_server_memory_usage_to_ram_ratio. ويتحكم إعداد الخادم نفسهmax_server_memory_usage_to_ram_ratioفي كلٍّ من الحد الأقصى عند بدء التشغيل والضبط الديناميكي؛ اضبطه على0لتعطيلهما معًا. وللاحتفاظ فقط بالحد الثابت عند بدء التشغيل/إعادة التحميل (وهو سلوك الإصدارات السابقة)، اضبط إعداد الخادم الجديدmemory_worker_dynamic_hard_limitعلى0. #104964 (Alexey Milovidov). - دعم PostgreSQL client لـ C# في بروتوكول
PostgreSQL. يُغلق هذا #18611. #80785 (Konstantin Vedernikov). - تستخدم mutations الآن analyzer. #98884 (Nikolai Kochetov).
- أُضيف تحكم دقيق في إظهار الاستعلامات في CLI. وأصبح الخيار
--echoيقبل الآن قيمة Boolean اختيارية، ويعمل في كلٍّ من الوضع التفاعلي وbatch mode. وتتحكم الخيارات الجديدة--echo-formattedو--echo-query-idفي ما إذا كانت الاستعلامات المعروضة ستُنسَّق، وما إذا كان سيتم طباعةquery_id، على التوالي. كما يتحكم الخيار--hilite/--highlightالآن أيضًا في تمييز الاستعلامات المعروضة. وكنتيجة جانبية، أصبح--echoالآن خيارًا ذا قيمة Boolean، لذا فإن الاستعلام الموضعي الذي يأتي مباشرة بعد--echoبدون قيمة صريحة يُعامَل على أنه قيمته؛ استخدم--echo --query "..."أو--echo=falseبدلًا من ذلك. #106191 (Alexey Milovidov). - دعم تطور المخطط مع عمليات التحقق المتزامنة من الاتساق لكتالوجات بحيرة البيانات. #106102 (Konstantin Vedernikov).
- السماح باستخدام cache disk لمحركات جداول بحيرة البيانات. #102017 (RinChanNOW).
- إصلاح قراءة بيانات الجداول في قواعد بيانات
DataLakeCatalogالتي تستخدمcatalog_type = 'onelake'عبر استخدام endpoint الخاص بـ OneLake Blob (.blob.fabric.microsoft.com) افتراضيًا. اضبطonelake_use_blob_endpoint = falseللإبقاء على السلوك السابق لنقطة نهاية DFS (.dfs.fabric.microsoft.com). #106843 (Konstantin Vedernikov). - تحديث القيمة الافتراضية للإعداد
persistent_processing_node_ttl_secondsفيS3(Azure)Queueمن1 hourإلى6 hours(وهو ما يمثل وقت التنظيف الناتج عن إعادة تشغيل غير نظيفة للخدمة، وما إلى ذلك). كانت القيمة الافتراضية السابقة مناسبةً لـ ttl لعُقد المعالجة، لكنها تُستخدم أيضًا لـ ttl لقفل bucket، الذي قد يبقى محتفَظًا به لمدة أطول، لذلك لم تكن ساعة واحدة كافية. #106838 (Kseniia Sumarokova). - خُفِّض الحجم الافتراضي لـ metadata cache الخاصة بـ
Icebergمن 1 GB إلى 128 MB. #106492 (Konstantin Vedernikov). - تمرير
query_idلمهمة streaming فيS3Queueإلى عمليات insert في الجداول التابعة. #106494 (Christoph Wurm). - تعبئة
used_storagesفيsystem.query_logباسم محرك التخزين عند الاستعلام عن الجداول عبرDataLakeCatalog. #100706 (Melvyn Peignon). - يمكنك التحقق من قيمتي
operationوsummaryالموجودة في snapshots الخاصة بـ Iceberg. يفيد ذلك في الاختبار وتصحيح الأخطاء. #106246 (Den Kalantaevskii). - أصبح طلب الرفع النهائي متعدد الأجزاء إلى
S3يُستكمَل الآن بشكل غير متزامن عبر متتبّع المهام، بحيث يمكن أن يتداخل مع رفع الجزء الأخير بدلًا من تشغيله تسلسليًا في مرحلة الإنهاء. #105487 (Asya Shneerson). - أُضيفت أربعة إعدادات جدول جديدة إلى
MergeTreeللتحكم في المعلمات الافتراضية للفهارس النصية:text_index_dictionary_block_sizeوtext_index_dictionary_block_frontcoding_compressionوtext_index_posting_list_block_sizeوtext_index_posting_list_codec. تتيح هذه الإعدادات ضبط سلوك الفهرس النصي على مستوى الجدول من دون الحاجة إلى تحديد معلمات في كل تعريف فهرس. وتظل الوسيطات الصريحة لكل فهرس لها الأسبقية. #100626 (Anton Popov). - أصبح بإمكان projections تجاوز إعدادات
MergeTreeإضافية (الضغط، وتنسيق الأجزاء، والتسلسل) إلى جانبindex_granularity، مع قائمة سماح للإعدادات المسموح بها والتحقق منها. #101170 (Amos Bird). - أُضيفت الأعمدة
current_projectionوcurrent_projection_progressوprojections_completedوprojections_remainingإلىsystem.mergesلعرض تقدّم دمج projections. #102611 (Amos Bird). - أُصلحت مشكلة في
PREWHEREمع استعلامINالفرعي على أعمدة المفتاح الأساسي، إذ لم يكن يستخدم فهرس المفتاح الأساسي في Granule pruning، ما كان يؤدي إلى فحص كامل للجدول بدلًا من قراءة granules ذات الصلة فقط. #102570 (Nikita Mikhaylov). - تفرض الدالة
h3PolygonToCellsالآن الحد الأقصى لحجم المصفوفة عبر جميع المضلعات فيMultiPolygon، وتتحقق من رموز الإرجاع الخاصة بمكتبة H3 الأساسية، وترفض وسائطMultiLineStringبدلًا من إرجاع نتيجة فارغة بصمت. #106399 (Raúl Marín). - أُضيف جدول جديد مخصّص لـ Keeper فقط باسم
system.keeper_snapshots، ويحتوي على معلومات عن snapshots المحلية في ClickHouse Keeper. #105571 (Miсhael Stetsyuk). - أُضيف جدول جديد مخصّص لـ Keeper فقط باسم
system.keeper_changelogs، ويحتوي على معلومات عن ملفات changelog المحلية في ClickHouse Keeper (سجل Raft). #105617 (Miсhael Stetsyuk). - أُضيف جدول
system.keeper_clusterمخصّص لـ Keeper فقط. ويحتوي على صف واحد لكل عضو في cluster الخاص بـ Raft كما يراه Keeper الحالي. #105646 (Miсhael Stetsyuk). - أُضيف المزيد من أحداث ملف تعريف Keeper (من جهة الخادم + جهة العميل) الخاصة بـ watches. يُغلق #97703. #105336 (Konstantin Vedernikov).
- أُضيفت إعدادات
coordination_settingsفي Keeper لـNuRaftلتقييد قبول log entries غير المُعتمدة، ولتقييد الاستقصاء العكسي لـ append-entries. #106108 (Antonio Andelic). - أُضيف الإعداد
enable_compressionإلى table function mysql، وtable engine MySQL، وdatabase engine MySQL، وDictionary SOURCE(MYSQL)، وnamed collections. وعند تفعيله، يفاوض ClickHouse على Compression على مستوى بروتوكول MySQL لكل البيانات المنقولة عبر connection. #103229 (Bernard Lim). - تم تقليل زمن استجابة الإلغاء للاستعلامات التي تعمل عبر PostgreSQL wire protocol: إذ أصبح
KILL QUERYالآن يوقف تسلسل الإخراج داخل chunk واحد بدلًا من انتظار إرسال الـ chunk بالكامل إلى العميل. #106535 (Roman Vasin). - تم تقليل زمن استجابة الإلغاء للاستعلامات التي تعمل عبر MySQL wire protocol: إذ أصبح
KILL QUERYالآن يوقف تسلسل الإخراج داخل chunk واحد بدلًا من انتظار إرسال الـ chunk بالكامل إلى العميل. #107228 (Roman Vasin). - تم إصلاح قراءة طول
auth_responseفي MySQL handshake، إذ كانت قيمة بايت الطول>= 128تُفسَّر على أنها قيمة بحجم عدة غيغابايت لأنه كان يُقرأ كـcharموقَّع. #107384 (uwezkhan). - أصبح
MaterializedPostgreSQLالآن يربط أعمدة PostgreSQL من النوعnumeric(p, 0)ذات precision الأكبر من 76 (مثلnumeric(78, 0)المستخدمة للأعداد الصحيحة بعرض 256 بت) معInt256في ClickHouse بدلًا من الفشل برسالة “Precision too big”. وتُرفَض القيم التي لا تتسع داخلInt256مع رسالة error واضحة. #107431 (Alexey Milovidov). - إرسال Exception إلى العميل عند فشل إعداد TCP connection. #107317 (Nikolai Kochetov).
- يمكن للمستخدمين الآن insert حقول
FixedمنAvroلمتغيرات الأعداد الصحيحة 8 بت و16 بت و32 بت و64 بت. #98139 (Patrick Pichler). - أصبح format
AvroConfluentالآن يعيد المحاولة في Confluent Schema Registry HTTP client عند الإخفاقات المؤقتة (مهلات النقل، ورفض connection، وأخطاء DNS، وأخطاء HTTP5xx/408/429) باستخدام backoff أُسِّي، بدلًا من إيقاف عملية INSERT عند أول خلل شبكي. ويتحكم الإعدادان الجديدانformat_avro_schema_registry_max_retries(القيمة الافتراضية5) وformat_avro_schema_registry_retry_initial_backoff_ms(القيمة الافتراضية100) في هذه السياسة. وتظل validation error الخاصة بـ schema (HTTP409أو Avro JSON غير صالح) قاتلة. #106661 (Groene AI). - تُسجَّل الآن الامتيازات في
system.query_log.used_privilegesلجميع عمليات التحقق من الوصول الممنوح، بما في ذلك تلك التي تمر عبر المسارisGrantedغير المُطلِق للاستثناءات (checkAccessWithFilter). في السابق، كانت تُسجَّل فقط الامتيازات التي جرى التحقق منها عبر نقاط الدخول المُطلِقة للاستثناءات (checkAccess/checkGrantOption)، مما جعلREAD ON FILE/READ ON S3/READ ON AZURE/READ ON URLغير مرئية في سجل التدقيق بالنسبة إلى استعلاماتDESCRIBEوCREATE TABLE ASوالاستعلامات المشابهة التي تستخدم table functionsfile/s3/azure/url. ولم يتغير فرض الوصول. #104693 (Alexey Bakharew). - أُضيفت المقاييس Asynchronous
TotalUncompressedBytesOfMergeTreeTablesوTotalUncompressedBytesOfMergeTreeTablesSystem، وتعرضان إجمالي uncompressed size للبيانات المخزنة في جداول MergeTree-family. #106364 (Alexey Milovidov). - أُضيف حدث profile باسم
GlobalMemoryLimitExceededلكي يتمكن Operators من مراقبة وقت بلوغ memory limit على مستوى الخادم بالكامل. #106466 (Sacheendra Talluri). - تمّ ملء العدّادات
ProfileEventsالخاصة بـExecutableUserDefinedFunction*لوظائف UDF من النوعexecutable_pool. وأصبحت الآن قيمة عدد مرات الاستدعاء لكل نداء، ووقت التنفيذ الفعلي ووقت انتظار المجمّع، واستهلاك CPU للعمليات الفرعية وذروة الذاكرة، وبايتات stdin/stdout، مرئية فيsystem.query_log.ProfileEvents. #105010 (Xu Jia) #105618 (Ilya Andreev). - أُضيفت المقاييس غير المتزامنة
ExecutableUserDefinedFunctionMemoryResidentBytesوExecutableUserDefinedFunctionProcesses، وهما يبلّغان عن الذاكرة المقيمة (VmRSS) وعدد العمليات الحية لوظائف user-defined function من النوعينexecutableوexecutable_pool، بما في ذلك العمليات التابعة وعمّال المجمّع الخاملون. #107300 (Hanzi Jiang). - أُضيفت ثلاثة مقاييس غير متزامنة تعمل على Linux فقط —
MemoryThreadStacksCountوMemoryThreadStacksVirtualوMemoryThreadStacksResident— وتبلّغ عن ذاكرة مكدسات pthread بشكل منفصل عن بقية الذاكرة المجهولة. ويجري تفعيلها عبرasynchronous_metrics_enable_heavy_metrics. ويتطلب ذلك Linux 5.17+ (prctl(PR_SET_VMA_ANON_NAME)) وإمكانية قراءة/proc/self/smaps؛ وإلا فلن تظهر هذه المقاييس وسيُبلّغ عن هذا القيد فيsystem.warnings. #106230 (Raúl Marín). - أُتيحت المقاييس غير المتزامنة
MemoryThreadStacks*(الحجم المقيم/الافتراضي وعدد مكدسات الخيوط) على macOS. #107752 (Raúl Marín). - أصبحت table engines تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.table_engines. #106177 (Alexey Milovidov). - أصبحت database engines تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.database_engines. #106178 (Alexey Milovidov). - أصبحت data types تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.data_type_families. #106180 (Alexey Milovidov). - أصبحت تنسيقات الإدخال/الإخراج تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة
descriptionوexamplesوintroduced_inوrelatedفي جدولsystem.formats. #106181 (Alexey Milovidov). - أصبحت combinators الخاصة بالدوال التجميعية تتضمن وثائق مضمّنة يمكن فحصها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.aggregate_function_combinators. #106185 (Alexey Milovidov). - أُضيف خيار سطر الأوامر
--chimeإلىclickhouse-clientوclickhouse-localوالعميل المضمّن. عند انتهاء الاستعلام (سواء بنجاح أو بخطأ) بعد تشغيله لمدة لا تقل عن N ثانية، يكتب العميل المحرف التحكمي ASCIIBEL(\x07) إلى stderr. وتحدّد بيئاتterminalما إذا كانت ستصدر صوتًا أو وميضًا مرئيًا وفقًا لتفضيلات المستخدم. ويكون هذا مفعّلًا افتراضيًا بعتبة قدرها 5 ثوانٍ؛ مرّر--chime Nلتحديد عتبة مخصّصة أو--chime 0للتعطيل. يغلق #92718. #104545 (Groene AI). - في
clickhouse-client، عندما لا تدعم الطرفية اللصق بين الأقواس، تُدمَج الآن فواصل الأسطر المضمَّنة في الاستعلام متعدد الأسطر الملصَق داخل مخزن التحرير نفسه بدلًا من الانتقال إلى موجّه المتابعة لكل سطر. ويبقى الاستعلام الملصَق ضمن موجّه واحد، كما تتيح مفاتيح الأسهم التنقّل بين أسطره. وهذا تحسين يُقدَّم على أساس أفضل جهد ويعتمد على سلوك اللصق المعتاد المخزَّن مؤقتًا في TTY. #104299 (Alexey Milovidov). ويعمل الآن أيضًا عند تعطيل تمييز بناء الجملة (--highlight 0). #106665 (Alexey Milovidov). - أُضيفت آلية للتحكم في مقسّم الصفحات وقت التشغيل بأسلوب MySQL لكل من
clickhouse-clientوclickhouse-local. #105706 (Azat Khuzhin). - أصبح
clickhouse-clientالآن يراعي الطرفيات غير UTF-8: فعندما لا يكون ترميز محارف الطرفية هو UTF-8 (مثلًا عند استخدامLANG=C)، تعود تنسيقاتPrettyإلى حدود شبكية ASCII بدلًا من طباعة محارف Unicode الخاصة برسم الصناديق، والتي قد تُفسد عرض الطرفية. #106213 (Alexey Milovidov). - جرى تنظيف سلاسل العرض التي يزوّد بها server عند معالجة packet
Helloفيclickhouse-client(اسم server، وtime zone، واسم العرض، وأنماط ورسائل قواعد password) بحيث لا يتمكن server خبيث من حقن بايتات يعرضها client حرفيًا، مع تقييد حجمها أيضًا للحماية من allocation غير المقيّد. #105243 (Raúl Marín). - تعرض واجهة الويب الآن النتيجة على هيئة image عندما يستخدم query تنسيق output format للصور مثل
FORMAT PNG، بدلًا من عرض raw bytes كجدول. #107638 (Alexey Milovidov). - أُضيف الإعداد
output_format_pretty_use_nbsp_for_paddingلعرض padding الخاص بتخطيط الجدول في تنسيقاتPrettyذات نمط الجدول باستخدامU+00A0NO-BREAK SPACE عندما تكونoutput_format_pretty_grid_charsetهيUTF-8. ويساعد ذلك على احتفاظ مخرجاتPrettyالمنسوخة بمحاذاة الجدول في الأدوات التي تطوي المسافات العادية. ويكون هذا الإعداد معطّلًا افتراضيًا، بينما يحتفظ خرج مجموعة المحارفASCIIبالمسافات العادية. #103559 (Ashrith Bandla). - يقوم برنامج التثبيت النصي universal الآن أيضًا بتثبيت
clickhousectlفي~/.local/binعلى Linux وmacOS، مع وصلة رمزيةchctl. اضبطCLICKHOUSE_ONLY=1لتخطي ذلك. #105399 (Alasdair Brown). - تم إصلاح الخطأ العارض
Syntax error: Unterminated quoted stringالذي كان قد يظهر بشكل متقطع عند تثبيت ClickHouse عبرcurl https://clickhouse.com/ | shبينما كان الملف التنفيذيclickhouseموجودًا بالفعل في الدليل الحالي. #106417 (Alexey Milovidov). - تم إصلاح ارتفاع اللوحة اليسرى في صفحة
play.htmlعند فتح web terminal، بحيث يبقى زر toggle الخاص بالطرفية في الأسفل مرئيًا. #105087 (Alexey Milovidov). - تجنّب تحديد الاستعلام الوحيد في واجهة الويب بعد تشغيله. #105711 (Joey Yu).
- توسّع واجهة SQL على الويب الآن محرر الاستعلام عندما لا يزيد ارتفاع الاستعلام على 30% من ارتفاع المحرر الحالي. #105713 (Joey Yu).
- في واجهة الويب، رتّب أيقونات القائمة السفلية (طرفية الويب وGitHub) أفقيًا عند توسيع اللوحة اليسرى، مما يمنح قائمة قواعد البيانات والجداول مساحة رأسية أكبر. #106427 (Alexey Milovidov).
- في واجهة الويب (
play.html)، يؤدي الضغط علىEscapeالآن إلى إلغاء تنشيط الخلية المحددة حاليًا في جدول النتائج. #107777 (Alexey Milovidov). - تحسينات على لوحة قاعدة البيانات في واجهة SQL على الويب (Play): تلميح عند أيقونة قاعدة البيانات، وزر لإخفاء اللوحة، وإتاحة النقر على أسماء قواعد البيانات والجداول بعرض كامل، وإصلاح تغيّر عرض اللوحة عند ظهور شريط التمرير. #108013 (Alexey Milovidov).
- إضافة إعداد خادم (
min_allocation_size_to_throw_on_memory_limit) للسماح لأي عملية تخصيص بأن تُطلقMEMORY_LIMIT_EXCEEDED، مما يساعد على منع حالات نفاد الذاكرة (OOM). #105265 (Azat Khuzhin). - السماح بمصادقة
NONEمع SSH (لمنع طلب كلمة المرور لمستخدميno_password). #105476 (Azat Khuzhin). - إعادة تعيين قائمة المجموعات الإضافية في
clickhouse suقبل إسقاط الامتيازات، بما يطابق سلوك/bin/suوsudo. سابقًا، كانت العملية التي أُسقطت امتيازاتها ترث المجموعات الإضافية للمستدعي. #105247 (Raúl Marín). - إضافة دعم
BFloat16إلى دوال predicate العددية (isFinite,isNaN). #105391 (Mohamed Hussain S). - تقليل استخدام الذاكرة في polygon dictionaries (
polygon_index_cell,polygon_index_each) وجعلsystem.dictionaries.bytes_allocatedيعكس بشكل صحيح فهرس البحث الذي تنشئه. #105431 (Raúl Marín). - إصلاح مستهلكي Kafka table engine الذين استمروا في استخدام فترة استطلاع قصيرة بعد تعيين partition، بحيث يعودون إلى القيمة المضبوطة
kafka_poll_timeout_msويتجنبون عمليات استطلاع فارغة مفرطة، وأجزاءً مُدرجة أصغر، وعبئًا إضافيًا على الدمج بعد إعادة التوازن. #100431 (sugaf1204). - تحديد الأعمدة بحسب الموضع (بدلًا من الاسم) عند إزالة الأعمدة غير المستخدمة في query plan. يتيح ذلك إزالة الأعمدة غير المستخدمة عند وجود أسماء أعمدة مكررة. #100586 (János Benjamin Antal).
- يُطلق ClickHouse استثناءً مناسبًا عند محاولة استخدام
table_readonlyمع المحركات المكررة، مع تحسين معالجة الاستثناءات لاستعلامات DDL (وDatabaseReplicated) المرتبطة بهذا الإعداد. #100950 (alesapin). لم يعدOPTIMIZE TABLE ... ON CLUSTERوعمليات DDL الأخرى تتعطل عندما يكونtable_readonly = 1في الجدول الهدف. ويُطلق الإعداد الآن رمز خطأ مخصصًا جديدًا هوTABLE_IS_PERMANENTLY_READ_ONLY، ويتعامل معهDDLWorkerعلى أنه غير قابل لإعادة المحاولة (وهو مختلف عنTABLE_IS_READ_ONLYالمؤقت الذي يظهر أثناء انقطاع ZooKeeper المؤقت فيReplicatedMergeTree). كما يُرفَض إعدادtable_readonlyالآن صراحةً معReplicatedMergeTree، سواء عند الإنشاء أو عبرALTER MODIFY SETTING. متابعة لـ #97652. #105109 (Alexey Milovidov). - تم إصلاح تحديثات العرض المادي القابل للتحديث التي كان يمكن أن تفشل بخطأ
UNKNOWN_TABLEبعد استبدال الجدول الهدف (على سبيل المثال عبرEXCHANGE TABLESأو الحذف ثم إعادة الإنشاء): إذ أصبح التحديث الآن يحدّد الجدول الهدف بالاسم بدلًا من الاعتماد على UUID قديم. #102724 (Seva Potapov). - أُضيف إعداد
wait_for_part_commit_in_dependent_materialized_views(القيمة الافتراضيةfalse). عندما يقرأSELECTفي عرض مادي مرة أخرى من جدول المصدر الخاص به (على سبيل المثال عبرINNER JOINمع المصدر)، كان التنفيذ المتسلسل قد يفوّت الصف الذي يُدرج حاليًا، لأن الجزء المُدرج لا يُعتمَد إلا بعد تشغيل العروض التابعة. يؤدي تفعيل هذا الإعداد إلى اعتماد الجزء قبل تشغيل العروض التابعة، بحيث تتمكن من رؤية الصف قيد الإدراج، لكن على حساب تقليل insert parallelism. #105943 (Elmi Ahmadov). - عدم تجاهل الأخطاء الفادحة (مثل
MEMORY_LIMIT_EXCEEDED) فيtryDeserialize. #106808 (Azat Khuzhin). - التحقق من امتياز
CREATE TEMPORARY TABLEعند الحاجة فيInverseDictionaryLookupPass. #107098 (Azat Khuzhin). - إصلاح خطأ
ILLEGAL_TYPE_OF_ARGUMENTفي distributed queries معserialize_query_plan = 1التي تحتوي على lambda ذات argument ثابت (مثلarrayMap(t -> t.2, ...)). أصبحت الأعمدة الثابتة لعُقدINPUTفيActionsDAGمحفوظة الآن أثناء serialization لـ query plan. #107124 (Alexey Milovidov). - أصبحت عملية إلغاء تسلسل حالات الدوال التجميعية
contingencyوcramersVوcramersVBiasCorrectedوtheilsUتتحقق من أن الأعداد المخزنة تشكّل جدول contingency متسقًا، وتطرح استثناءCORRUPTED_DATAبخلاف ذلك. يُغلق #106899. #107185 (Nihal Z. Miaji). - الحفاظ على رموز الخطأ الأصلية للاستثناءات المغلّفة داخل
arrow::Status. #107267 (Azat Khuzhin). - دعم
keyed_by_normalized_query_hashللحصص المُعرّفة في إعدادات الخادم الثابتة (users.xml)، بما يطابق صياغة DDL الحاليةCREATE QUOTA ... KEYED BY normalized_query_hash. #107654 (Alexey Milovidov). - لم يعد إعداد compatibility يطبّق الإعدادات المهملة، لذلك لم يعد يضع عليها علامة بأنها تغيّرت أو يُصدر تحذيرات بشأن الإعدادات المهملة. #107737 (Maxim Orlovsky).
- لم تعد async inserts تسجّل القائمة الكاملة لـ
query_ids عند مستوىtrace/debug، وهو ما كان يمكن منذ 26.2 أن يتسبب في تضخّمtext_logعلى الخدمات ذات حركة async insert الكثيفة. أصبحت الأسطر التفصيلية الآن عند مستوىtest. #107852 (Sema Checherinda). - تحسين filesystem cache: منع إدخالات priority غير الصالحة من تثبيت
KeyMetadata. متابعة لـ #106387. #107903 (Kseniia Sumarokova). - تحسين مقاييس
FileCache. #106116 (Kseniia Sumarokova). - لا تطبع المقدمة “Stack trace (when copying this message, always include the lines below):” في رسائل الاستثناء عندما يكون تتبّع المكدس فارغًا فعلًا. #106524 (Alexey Milovidov).
- إصلاح احتمال حدوث overflow في
roundUpToMultipleعند حساب محاذاة حدود filesystem cache لإزاحات كبيرة جدًا. #92579 (Bharat Nallan). - أصبح
EXPLAIN SYNTAXالآن ينسّق Operators على هيئة استدعاءات دوال بشكل متّسق في مخرجات الشرح (على سبيل المثالplus(1, 2)بدلًا من1 + 2). #94681 (Mohamed Abdelhalim ). - تحسين التلميحات الخاصة بأسماء الجداول في رسائل الخطأ: لم تعد تقترح الاسم نفسه حرفيًا، وأصبحت تتضمن اسم قاعدة البيانات في الاقتراح (مثلًا: “Maybe you meant
other_db.my_table?”). #95116 (Mathuranath Metivier). - تحسين رسالة الخطأ الخاصة بالمعرّفات غير المحلولة في الاستعلامات التي لا تحتوي على عبارة
FROM، بحيث تقترح إضافتها. #101769 (Yash ). - إضافة خيار
EXPLAIN PIPELINEلضغط سلاسل المعالجات المتكررة. #104662 (Yue Ni). - إصلاح قراءة heap-buffer-overflow أثناء إنشاء رسالة خطأ الصياغة (
UTF8::computeWidthImplعبرparseQuery.cpp) كانت تحدث عندما يتراجع parser إلى ما قبل أول فاصلة منقوطة / رمز نهاية الدفق؛ إذ كانت إصدارات release تُدرج بايتات من ذاكرة الكومة المجاورة ضمن الخطأ المعروض، بينما كانت إصدارات ASan تُوقف التنفيذ. #105086 (Groene AI). - جعل استراتيجية partition الخاصة بـ hive هي الافتراضية ضمن إعداد التوافق
file_like_engine_default_partition_strategy. #86746 (Kseniia Sumarokova). - استخدام مكدس thread أكبر (8 MiB) على macOS لمطابقة القيمة الافتراضية في Linux، ما يعالج حالات تعطل server النادرة الناتجة عن stack overflow أثناء ترجمة JIT. #107033 (Raúl Marín).
- لم يعد حد حجم التخزين المؤقت لـ
clickhouse-localمضبوطًا برمجيًا على 1 GiB. وقد رُفعت القيمة الافتراضية إلى 1 TiB، ويمكن ضبطها عبر server setting max_temporary_data_on_disk_size. #106689 (Alexey Milovidov). - إضافة الأمر
read-checksumsإلىclickhouse-disks. يقرأ ملفchecksums.txtالخاص بـMergeTreeDataPartويطبعه كجدول مقروء للبشر ومفصول بعلامات الجدولة. #106901 (Asya Shneerson). - تمت إضافة الأمر
read-bitmapإلىclickhouse-disks. #107834 (murphy-4o). - Chdig: تمكين TLS للاتصالات الآمنة (إذ كان الوضع السابق يؤدي إما إلى “unknown setting
skip_verify” أو “connection reset by peer”). #105864 (Azat Khuzhin). chdigv26.5.1. #105918 (Azat Khuzhin).chdigv26.6.1 -{asynchronous_,}metric_log، وأنماط الاستعلامات، والخرائط الحرارية، والسجلات/التتبعات المخزنة على القرص (إذ كان قد يستهلك سابقًا >40GiB لساعة واحدة من التتبعات). #107678 (Azat Khuzhin).- تضبط إعدادات الخادم (
programs/server/config.xml) الآنkeep_alive_timeoutعلى 30 (بدلًا من 10 سابقًا)، بما يتوافق مع القيمة الافتراضية الفعلية الموثقة والمطبقة. #107779 (Dan Checkoway). - تغيّرت القيمة الافتراضية لإعداد الخادم
disk_connections_rcvbufمن0(الضبط التلقائي لـ TCP في النواة) إلى204800(200 كيلوبايت)، مما يضع حدًا أقصى لذاكرة التخزين المؤقت لاستقبال TCP لكل مقبس في اتصالات الأقراص الخاصة بتخزين الكائنات (S3/Azure/GCS). #107859 (Sema Checherinda). - يجمع مُحسِّن
PREWHEREالآن المقترنات التي تشير إلى مجموعة الأعمدة نفسها قبل تقدير الانتقائية، بحيث تُقيَّم شروط مثلa > 2500 AND a < 2502معًا كنطاق واحد بدلًا من معاملتها كمسندين مستقلين، مما ينتج عنه تقدير أكثر دقة للانتقائية. #106337 (Han Fei). - تمت إضافة تطبيقات للمقابس الآمنة والعادية تراعي silk fiber. #107680 (Miсhael Stetsyuk).
- تم إصلاح رسالة خطأ مشوشة (بسبب تبديل الوسيطات) وخطأ مطبعي في الدالة
nested. #108031 (Alexey Milovidov). - تمت إضافة أمر
sedإلىclickhouse-disksيطبّق تعبير sed على مسار معيّن مباشرةً في مكانه. #107131 (Asya Shneerson). - تمت إضافة الإعداد
materialized_postgresql_use_extended_date_and_time_typesالخاص بوقت الإنشاء إلى محرك قاعدة البياناتMaterializedPostgreSQL. افتراضيًا (عند تمكينه)، يُستدل على أعمدة PostgreSQL date/timestampعلى أنهاDate32/DateTime64؛ أما ضبطه على0وقتCREATE DATABASEفيؤدي إلى استنتاج النوعين الأضيقDate/DateTime. #107428 (Alexey Milovidov).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- إتاحة حذف detached parts ذات اللاحقة
tryN. #58957 (János Benjamin Antal). - إصلاح استثناء
MULTIPLE_EXPRESSIONS_FOR_ALIASفي الاستعلامات التي تحتوي على أسماء مستعارة مكررة للإسقاط (مثلSELECT *, day + 365 AS day) داخل الاستعلامات الفرعية المتداخلة عند التشغيل باستخدام النسخ المتماثلة المتوازية. #80310 (Alexey Milovidov). - إصلاح خلل في
splitMultipartQueryكان يتسبب في ظهور خطأ “Empty query” في الاستعلامات التي تنتهي بتعليق بعد الفاصلة المنقوطة. #85491 (Yarik Briukhovetskyi). - إصلاح استثناء في
ARRAY JOIN:Function writeSlice expects same column types for GenericArraySlice and GenericArraySink، ويحدث ذلك عند استخدام الأنواع الرقميةLowCardinality(المشكلة #57243). #91784 (Jimmy Aguilar Mena). - إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند استخدامLIMIT BYمع الأعمدة الثابتة إلى جانبDISTINCTوORDER BYمع المحلل الجديد. #93195 (Ashrith Bandla). - إصلاح مشكلة إنشاء أعمدة
NOT NULLبصمت على أنهاNullableعندما تكونdata_type_default_nullable = 1ويُنشأ الجدول في قاعدة بياناتReplicatedأو عبرON CLUSTER. #97572 (xiaohuanlin). - إصلاح استقرار الاتصال بـ HiveCatalog من خلال إضافة آلية إعادة محاولة تلقائية ومنطق لإعادة الاتصال للتعامل مع أخطاء TTransportException عند التواصل مع Hive Metastore. #98471 (Dmitriy Borisenko).
- إصلاح الدالة
nested(المستخدمة داخليًا بواسطةARRAY JOIN) التي كانت تزيلLowCardinalityمن أنواع الأعمدة، مما يؤدي إلى تحوّلArray(LowCardinality(String))إلىArray(String)في المخرجات. يغلق #95582. #98974 (Yash ). - إصلاح استثناء “Distributed task iterator is not initialized” عند استخدام
urlأوs3أو table functions مشابهة في الاستعلامات مع تفعيل النسخ المتماثلة المتوازية. #100146 (Alexey Milovidov). - إصلاح استثناء logical error عند قراءة Iceberg tables التي رُقِّي إصدار التنسيق الخاص بها بواسطة أداة خارجية (مثل Spark). #100407 (Alexey Milovidov).
- أصبحت الدوال
likeوilikeوnotLikeوnotILikeوmatchتدعم الآن haystack ثابتًا مع needle غير ثابت (مثل'foo' LIKE pattern_column)، بعدما كان ذلك يؤدي سابقًا إلىILLEGAL_COLUMN. #100479 (Yash ). - إصلاح عدد الصفوف غير الصحيح الذي يعيده استعلام
MaterializedViewمعquery_plan_enable_optimizations = 0عندما يربط العرض عمودًا صحيحًا بعمودBool. #100692 (Maksim Moisiuk). - إصلاح استثناء (
LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') عند قراءة Iceberg tables التي تحتوي على data files بتنسيق ORC مع تفعيل PREWHERE optimization. #101206 (Groene AI). - إصلاح حالة سباق في RestCatalog. #101216 (Smita Kulkarni).
- إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند تنفيذ select من VIEW فوق table تحتوي على projection عادي. #101218 (Amos Bird). - إصلاح البيانات الوصفية القديمة في FileLog عند حذف ملف ثم إعادة إنشائه. #101408 (Azat Khuzhin).
- إصلاح إعادة ترتيب join التي كانت تؤدي بصمت إلى إسقاط الصفوف غير المتطابقة في
RIGHT/LEFT JOINعند ضمّها بفاصلة (cross) مع table أخرى، مثلt1 RIGHT JOIN t2 ON t1.c = t2.c, t3. كان query يعيد سابقًا نتيجة inner-join بدلًا من outer-join. #101684 (Groene AI). - إصلاح استهلاك clause
FORMATمن قِبلINSERTبدلًا من تطبيقها على مخرجاتEXPLAINفيEXPLAIN INSERT INTO ... SELECT ... FORMAT .... #101772 (Yash ). - إصلاح الاختيار غير الصحيح لـ compression codec لأجزاء
MergeTreeعندما يكون workload setting default_compression_codecعلى مستوى table مُعدًّا صراحةً. كانت الأجزاء المكتوبة on insert، وأثناء merges، ولـ projections تستخدم الـ codec الافتراضي على مستوى server بدلًا من الإعداد على مستوى table (ويشمل ذلك الآن أيضًا الجزء الفارغ الناتج عن mutation تحذف كل البيانات). #101784 (Yash ). - رفض قيم
Float64السالبة (مثل-100.5) في workload settings مثلmax_bytes_per_secondوmax_cpusوغيرها. سابقًا كان التحقق يقتصر على الأعداد الصحيحة السالبة، ما سمح للقيم العشرية السالبة بإنشاء عُقد scheduler معطوبة بصمت. يُغلق #101825. #101842 (Groene AI). - إصلاح
LOGICAL_ERROR(“Port is not connected”، الرمز 49) التي كان يمكن أن تحدث عند تنفيذ queries تتضمن VIEW فيها aggregation داخل JOIN. #102574 (Jimmy Aguilar Mena). - إصلاح عدم اتساق البيانات الوصفية للجزء بعد mutations على columns ذات serializations غير الافتراضية. #102817 (Eduard Karacharov).
- إصلاح تحديث البيانات الوصفية قبل تنفيذ mutation، ما يحل #96806. #102882 (Smita Kulkarni).
- إصلاح بطء queries من نوع SELECT بشكل ملحوظ عند تشغيل عمليات INSERT متزامنة. سابقًا كانت pipeline الخاصة بـ INSERT تحجز CPU slots حتى
max_threadsعند بدء query حتى عندما لا تُستخدم معظم الـ slots مطلقًا، مما كان يحرم عمليات SELECT المتزامنة من الموارد. أصبح تخصيص CPU slot الآن قائمًا على الطلب: لا تطلب pipeline الـ slots إلا عند دفع عمل قابل للتوازي فعليًا. ينطبق ذلك على كلٍّ من التحكم في Concurrency والـ scheduler الاستباقي للـ CPU الخاص بـ workloads. ويعمل server setting الجديدconcurrent_threads_lazy_allocation(القيمة الافتراضيةtrue) كآلية تراجع. #102928 (Seva Potapov). - إصلاح تمرير
NULLعند قراءة الأعمدة الفرعية المستخرجة من أعمدةNullable(Tuple(...)). على سبيل المثال، فيtup Nullable(Tuple(s Nullable(String)))، يُرجِعSELECT tup.sالآنNULLبشكل صحيح في الصفوف التي تكون فيها الـ tuple الخارجيةNULLبدلًا من قيم المهملات. ويشمل ذلك جميع أنواع العناصر التي يمكنها تمثيلNULL: NullableوDynamicوVariantوLowCardinality(Nullable(...)). يُغلق #105356. #102942 (Nihal Z. Miaji). - إطلاق
INCORRECT_DATAبدلًا منLOGICAL_ERRORعندما تكون البيانات التي يرسلها العميل بتنسيق Native format مقتطعة أو غير سليمة. #102975 (János Benjamin Antal). - إضافة فحص للإلغاء إلى عملية القراءة في ObjectStorage. يُغلق #98165. #103016 (Smita Kulkarni).
- مراعاة
input_format_binary_max_type_complexityعند فك ترميز معاملات aggregate function. يُغلق #102903. #103026 (Pavel Kruglov). - إصلاح استنتاج nullable لأعمدة geo في Parquet reader المستند إلى Arrow. يُغلق #101845. #103032 (Pavel Kruglov).
- إصلاح
recursiveRemoveLowCardinalityالذي كان يمحو أسماء أنواع geometry المخصصة (مثلLineStringمقابلRing، وMultiLineStringمقابلPolygon)، مما كان يؤدي إلى تفسير نوع geometry بشكل خاطئ. يُغلق #103207. #103041 (Joanna Hulboj). - إصلاح تجاهل
input_format_max_block_size_bytesبصمت أثناء parsing لـINSERTعندما تكونmax_insert_block_size_bytesمساوية لـ0(القيمة الافتراضية). يقيّد هذا الإعداد الآن بشكل صحيح حجم blocks الناتجة عن row input formats. #103068 (Kirill Kopnev). - إصلاح قيام ClickHouse أحيانًا بإنتاج tokens غير صالحة لـ GSSAPI بسبب إزالة غير صحيحة للـ null byte اللاحقة. #103114 (Michael Jarrett).
- إصلاح طيّ الثوابت في وقت analyzer للدوال ذات short-circuit (
ifوmultiIfوandوorوغيرها)، بحيث لم تعد branches غير القابلة للوصول إحصائيًا تثير استثناءات أثناء التحليل. على سبيل المثال، يُرجِعWITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))الآن0بشكل صحيح بدلًا من الفشل بخطأ قسمة على الصفر. #103157 (Peng). - يوسّع
EXPLAIN SYNTAXparameterized views. #103263 (Jordi Villar). - إصلاح تلف البيانات عند كتابة Parquet (وصيغ أخرى تحتوي على trailer مثل ORC وArrow) إلى HDFS عبر
INSERT INTO FUNCTION hdfs(...). منذ الإصدار 26.1، لم يكنWriteBufferFromHDFSيفرّغ buffer العمل الخاص به عندfinalize()، لذا كانت آخرDBMS_DEFAULT_BUFFER_SIZEبايت — أو أقل — من كل ملف تُفقَد بصمت، بما في ذلك footer الخاص بـ ParquetPAR1. وكانت قراءة مثل هذه الملفات تُرجِعNot a Parquet file (wrong magic bytes at the end of file). #103268 (Groene AI). - إصلاح نتائج غير صحيحة وخطأ منطقي محتمل في الاستعلامات الفرعية المترابطة عند ضبط حدّ لحجم join (
max_rows_in_join/max_bytes_in_join) معjoin_overflow_mode = 'break'. إذ أصبح join المُنشأ داخليًا لتقييم الاستعلام الفرعي المترابط يتجاهل حدود المستخدم هذه، لذلك لم يعد يتوقف مبكرًا ويتسبب في إسقاط صفوف. #103322 (Groene AI). - إصلاح خلل كان يؤدي إلى أن
ALTER TABLE ... MODIFY SETTINGعلى جدولEmbeddedRocksDBقد يحفظ قيمة إعداد غير صالحة في ملف البيانات الوصفية للجدول حتى عندما يرفض الخادم الاستعلام. وعند إعادة تشغيل الخادم في المرة التالية، كان الجدول يفشل في الإرفاق معCANNOT_PARSE_BOOL(أو خطأ parsing مشابه)، وفي قواعد البيانات التي تكون فيها إخفاقات التحميل قاتلة، كان الخادم يرفض البدء. وأصبحت قيم الإعدادات غير الصالحة تُرفض الآن قبل كتابة أي بيانات وصفية. #103417 (Groene AI). - إصلاح إجهاض للخادم عند إنشاء جدول باستخدام محرك تخزين كائنات (
AzureBlobStorage,DeltaLakeAzure,S3,HDFS) مع عدد غير مدعوم من الوسائط. يُرجع الخادم الآن الخطأNUMBER_OF_ARGUMENTS_DOESNT_MATCHبشكل واضح بدلًا من الإجهاض في بنيات debug/sanitizer. #103544 (Groene AI). - إصلاح انهيار في الخادم أثناء parsing لمعاملات نوعَي البيانات
JSONوDynamicعندما تكون شجرة البنية المجرّدة (AST) مشوّهة بنيويًا (على سبيل المثال عند إنشائها بواسطة AST fuzzer): إذ كان يمكن أن يبقى تعبير المعاملequals(name, value)بأقل من عنصرين فرعيين، ثم يقومDataTypeObjectوDataTypeDynamicبفكّ الإشارة إليه من دون التحقق من الحدود. #103545 (Groene AI). - إصلاح أخطاء منطقية في المحلل عند تصادم أسماء الأعمدة داخل lambda مستخدمة في
PREWHERE. يغلق #103584. #103627 (Pavel Kruglov). - إصلاح الخطأ المتقطع
Logical error: 'Database <name> not found'منDataLakeConfiguration::getCatalogعند تحميل جدول بمحركIcebergداخل قاعدة بيانات عادية أثناء التحميل غير المتزامن للبيانات الوصفية. #103775 (Groene AI). - إصلاح أخطاء
MULTIPLE_EXPRESSIONS_FOR_ALIASالتي كانت تُصدِرها النسخ المتماثلة البعيدة عند تشغيل استعلامات تشير إلى الأسماء المستعارة للإسقاط داخلPREWHERE/WHERE/HAVING/QUALIFY(مثلSELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) أو عند تنفيذSELECT *على self-join مع تداخل في أسماء الأعمدة، مع parallel replicas وparallel_replicas_local_plan = 0. يغلق #74324. #103806 (Groene AI). - إصلاح إجهاض للخادم عندما يستخدم استعلام مقارنات
coalesce/ifNullمتداخلة (مثلWHERE coalesce(a, b, coalesce(c, d), e) = const) على جدولMergeTreeمع عدة skip indexes من نوعminmaxوuse_skip_indexes_for_disjunctions = 1. وأصبحت الآن إعادة كتابة skip index للتعبير<op>(coalesce(...), const)تُطبَّق بشكل تعاودي على وسائط coalesce الداخلية، بحيث يطابق RPN الخاص بكلKeyConditionقالب RPN كما يفترضه بالفعل كود تتبّع الفصل. #103929 (Groene AI). - إصلاح تجاهل
max_rows_to_transferوmax_bytes_to_transferبصمت في استعلاماتGLOBAL INوGLOBAL JOINضمن analyzer الجديد. ترفع هذه الإعدادات الآن الخطأSET_SIZE_LIMIT_EXCEEDED(أو تتوقف، بحسبtransfer_overflow_mode) عندما يتجاوز external table المُجسَّد الحد المُعدّ، بما يطابق سلوك analyzer القديم. يغلق #103333. #104119 (Groene AI). - إصلاح القراءات المفرطة لـ metadata الخاصة بـ catalog/S3 عندما يشير
INSERTأو DDL statement إلى table غير موجود في database من نوع DataLake catalog مع تفعيلshow_data_lake_catalogs_in_system_tables. كان مسار اقتراح تصحيح الخطأ المطبعي يحمّل metadata الكاملة لكل table في Iceberg على مستوى catalog بأكمله، مما قد يستنفد الذاكرة في catalogs الكبيرة. #104124 (DQ). - إصلاح انهيار (
LOGICAL_ERROR“Columns are assumed to be of identical types, but they are different in Nullable” في builds التنقيح، وSIGSEGV بسبب مؤشر فارغ فيColumnString::compareAtفي builds الإصدار) ونتيجة غير صحيحة كان يمكن أن تحدث في queries التي تستخدمdirectjoin_algorithmمع table على الجانب الأيمن من نوعMergeTreeعندما كانت query plan الخاصة بالبحث تعيد ترتيب columns أثناء optimization. كان يمكن أن تنتهي columns الخاصة بالجانب الأيمن في مواضع تحمل أسماء خاطئة، بحيث يرى عامل تصفية أو مقارنة على join key عمودًا من type غير صحيح. كُشف عنها بواسطة AST fuzzer تحت STID 2139-5111 وتم الإبلاغ عنها في #107272. #104174 (Groene AI). - رفض partition ID من نوع integer إذا كان خارج النطاق لـ
Dateبدلًا من حدوث overflow بصمت أوLOGICAL_ERRORفيALTER. #104250 (Azat Khuzhin). - تعطيل
additional_table_filtersمع parallel replicas وanalyzer من دون serialization لـ query plan. كان هذا قد يؤدي سابقًا إلى نتائج غير صحيحة. #104296 (Azat Khuzhin). - إصلاح قيام
dictGetOrNullبالكتابة فوق columns الأخرى في إسقاطSELECTبالقيمةNULLبصمت عند استدعائه باستخدام Key column من نوعNullableتكون قيمه Missing في Dictionary. كانت الدالة تُعدّل خريطة null المرتبطة بالإدخال في موضعها؛ وهي الآن تنشئ نسخة عميقة من result column قبل mutation. يغلق #73633. #104327 (Groene AI). - إصلاح patch part معطوب بعد
ALTER TABLE ... DROP PARTITION ID 'patch-...'متبوعًا بـDETACH/ATTACH TABLE. سابقًا كان part المغطي الفارغ يُكتب من دونpartition.datوsource_parts.dat، مما يؤدي إلى ظهور الإدخالbroken-on-start_patch-...فيsystem.detached_partsبعد attach التالي أو إعادة تشغيل الخادم. يغلق #93132. يغلق #102103. #104353 (Groene AI). - إصلاح
INSERTالمتدفق معinput_format_max_block_wait_msلواجهةHTTPولـINSERT SELECT FROM input، بحيث تُكتب كتل الإدخال الجزئية إلى التخزين قبل انتهاء request. #104534 (Alexey Milovidov). - أُصلِح خلل كان يؤدي إلى أن تُرجِع الاستعلامات التي تجمع بين
arrayJoinوORDER BY ... LIMITبعدJOINصفر صفوف بصمت. ولم يعد تحسين مخطط الاستعلام الذي يرفع تقييم الدالة فوقSortingStepيُطبَّق عندما يحتوي التعبير المرفوع علىarrayJoin، لأنarrayJoinقد يغيّر عدد الصفوف. يغلق #82279. #104558 (Groene AI). - إصلاح حالة إجهاض نادرة للخادم أثناء إتلاف جدول من عائلة
MergeTree. كان ذلك قد يحدث عندما يطلقshutdownاستثناءً قبل توقف مجدول المهام الخلفية بالكامل: فإذا نُفِّذت مهمة في الخلفية خلال تلك النافذة الضيقة، فقد ترسل نداءًvirtualعبر كائن تخزين مُتلف جزئيًا وتصطدم بـ__cxa_pure_virtual. #104561 (Groene AI). - إصلاح نتيجة غير متسقة في subcolumn المجمّع
JSONعند استخدام type hint يحتوي على قيمة null. #104584 (Pavel Kruglov). - إصلاح نتائج خاطئة أو projection مفقود عندما يحتوي aggregate projection على عدة تجميعات
sumIfبشروطIN (...)مختلفة. #104765 (Jimmy Aguilar Mena). - إصلاح عدد صفوف خاطئ ناتج عن
arrayJoin()المستخدم داخلJOIN ON: إذ كانت النتيجة تُضرَب في طول المصفوفة مرة إضافية. #104785 (Shaohua Wang). - إصلاح
deltaSumTimestampالذي كان يُرجع نتائج خاطئة لأنواع الأعداد الصحيحة الموقعة عند عبور الصفر. يحل #104750. #104830 (Konstantin Bogdanov). - إصلاح عدم تطابق بنية الكتلة في UnionStep بعد دفع عامل التصفية إلى الأسفل مع ثوابت NULL. يغلق #104821. #104853 (Pavel Kruglov).
- إصلاح الخطأ
Logical error: 'Metadata is not initialized'الذي كان يظهر عند تنفيذDELETE FROMعلى جدولIcebergأوDeltaLakeأوHudiمُرفَق حديثًا إذا كان ملف البيانات الوصفية تالفًا أو يتعذر تحميله. ويُبلَّغ الآن بدلًا من ذلك عن استثناء عادي موجه للمستخدم، مع استمرار الخادم في العمل. يغلق #104891. #104917 (Groene AI). - أُصلِح عدم تحديث
max_memory_usage_soft_limitآنيًا عند تغيّر الإعدادات. كان حد الذاكرة المرن يُحتسَب مرة واحدة عند بدء التشغيل ويُخزَّن مؤقتًا، لذلك لم تكن لإعادات تحميل الإعدادات اللاحقة أي فاعلية. وبعد هذا الإصلاح، يُعاد حساب الحد ويُطبَّق فورًا مع كل إعادة تحميل للإعدادات، من دون الحاجة إلى إعادة تشغيل Keeper. #104940 (Kai Zhu). - إصلاح تحليل الرموز في JIT على macOS بحيث لم يعد التجميع الفوري لـ sort وexpression وaggregate يفشل مع
CANNOT_COMPILE_CODE: Could not find symbol _<name>. #104946 (Alexei Fedotov). - إصلاح استثناء (
Received signal 6 (abort)في تقوية المتجهات، ويظهر على هيئةTuple::back()على متجه فارغ) عند تنفيذ استعلام بالصيغةSELECT ... FROM <Distributed table> WHERE/HAVING/GROUP BY ... (sharding_key_column IN tuple())مع تفعيلoptimize_skip_unused_shards_rewrite_inضمن analyzer الجديد. #104966 (Alexey Milovidov). - إصلاح توقّف الخادم بسبب
Logical error: 'Inconsistent AST formatting'(STID 1941-1bfa) في استعلامات مثلCREATE TABLE t (c0 Int CODEC(not((not(materialize(1), materialize(2)))), ZSTD)) ENGINE = Memoryضمن بنى debug / sanitiser. لم يعد المنسّق يُصدر أقواسًا خارجية زائدة حول استدعاء الدالةtuple(...)متعددة الوسائط عندما يظهر داخل قوائم وسائطCODEC/STATISTICS/BACKUP_NAME(حيث تكون الصيغة العاملية(a, b)معطّلة)، مما يحافظ على استقرار دورة format-parse-format ذهابًا وإيابًا. #104991 (Groene AI). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKالذي يطرحهALTER TABLE ... MATERIALIZE INDEXعلى الأجزاء التي أُنشئت في 25.8 وتحتوي على skip index على column أُضيف عبرALTER TABLE ... ADD COLUMNمنفصل. أصبحت mutation الآن تقرأ بصورة صحيحة كل column مطلوب من كل skip index وprojection موجودَين مسبقًا على الجزء أثناء إعادة الحساب القسرية. يغلق #104872. #105039 (Groene AI). - إصلاح حالتين من
LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materializedكانت تطرحهما الاستعلامات التي تستخدمenable_materialized_cte: (1) materialized CTE مُعاد استخدامه ومُرشَّح بواسطةIN (subquery)فوق materialized CTE آخر، و(2) materialized CTE يُشار إليه مباشرةً وداخل مرشحWHERE ... IN (...)يصل إلى primary key في MergeTree عبر IN-subquery متداخل. كما تأثرEXPLAINللاستعلامات نفسها أيضًا لأن العيوب كانت تظهر أثناء optimization للخطة. يغلق #101940، ويغلق #102320. #105041 (Dmitry Novik). - إصلاح تقدير selectivity الخاص بـ
PREWHEREلإحصاءاتcountminفي columns من نوعFloat32. تسبّب عيبان في أن تُنتج إحصاءاتcountminتقديرات خاطئة بصمت لـcolumns من نوعFloat32: إذ كانConditionSelectivityEstimatorيتخطّى الإحصاءات بالكامل عندما يكون column type (Float32) أضيق من literal type (Float64)، فيعود إلى selectivity الافتراضية ويتجاهل sketch؛ كما أنStatisticsCountMinSketch::estimateEqualكان يُجري hash على أول N بايت من الكائنField، لكنFieldيخزّنFloat32على أنهFloat64(NearestFieldType<Float32>=Float64)، لذلك كان نمط البايتات المستخدم عند query time مختلفًا عن بايتاتFloat32الفعلية المخزنة أثناء build. #105047 (Han Fei). - أصبحت استعلامات
ATTACH TABLE name <clauses>;التي توفّر clauses للتخزين (ORDER BYوPARTITION BYوPRIMARY KEYوSAMPLE BYوTTLوUNIQUE KEYأوSETTINGSالخاصة بالـengine) من دونENGINEتطرح الآنBAD_ARGUMENTSبدلًا من إعادة Attach للـtable بصمت باستخدام تعريفها المخزَّن وتجاهل clauses التي قدّمها المستخدم. وما تزالSETTINGSالخاصة بالجلسة على مستوى query (مثلlog_comment) تُطبَّق. استخدمATTACH TABLE t;لإعادة Attach باستخدام metadata المخزَّنة، أوALTER TABLE t MODIFY SETTING ...بعدATTACHلتغيير settings. #105068 (Groene AI). - إصلاح use-after-free في
runningAccumulateعند استدعائها على column تُرجع aggregate function الخاصة به حالتها الخاصة (مثلuniqStateOrDefaultStateوsumStateOrDefaultStateوuniqStateForEachState). #105085 (János Benjamin Antal). - إصلاح خطأ في Web UI (
play.html): كان تشغيل query بينما يكون المؤشر بعد;الختامية الوحيدة يُبلغ عن “empty query” بدلًا من تشغيل الاستعلام. #105107 (Alexey Milovidov). - إصلاح
LOGICAL_ERROR: 'No user in current context, it's a bug'عند تنفيذCREATE TABLE ... AS SELECTداخل قاعدة بياناتReplicatedمع القراءة منsystem.current_rolesأوsystem.enabled_roles. ينجح الاستعلام الآن ويُرجع مجموعة نتائج فارغة في سياق عامل DDL الداخلي هذا. #105150 (Groene AI). - تم إصلاح
ILLEGAL_TYPE_OF_ARGUMENTعند دمج حالات التجميعquantileExactWeightedInterpolatedأوquantileDDأوquantilePrometheusHistogramمع نظائرها بصيغة الجمعquantilesXxxMerge(والعكس صحيح). تشترك الصيغتان المفردة والجمع لهذه العائلات الثلاث من quantile في حالة التجميع الداخلية نفسها، لكنها لم تكن مُدرجة في جدول ربط الأسماء الداخلي، لذلك كان يُرفض دمج الحالة بين الدوال — وكذلك تحسين دمج الدوال لهذه العائلات. #105189 (Groene AI). - إصلاح النتائج غير الصحيحة للدوال
toStartOfWeekوtoLastDayOfWeekوtoMondayوtoStartOfMonthوtoLastDayOfMonthوtoStartOfQuarterوtoStartOfYearعند استخدام وسائطDate32وDateTime64التي تقع نتيجتها خارج نطاقDate: فبدلًا من تجاوز السعة إلى تواريخ عشوائية، أصبحت النتائج قبل1970-01-01الآن مقيَّدة إلى1970-01-01، والنتائج بعد2149-06-06مقيَّدة إلى2149-06-06. ويُصلح هذا أيضًا نتائج الاستعلام الخاطئة (استبعادpartsوgranulesبشكل غير صحيح) عند استخدام مثل هذه الدوال فيWHEREعلى مفتاحDate32أوDateTime64يحتوي على قيم خارج النطاق. #105244 (Yarik Briukhovetskyi). - إصلاح خطأ منطقي في
arrayRemoveعندما تكون الوسيطة الأولى مصفوفة منVariantوكانت جميع بدائلها غير متوافقة مع نوع الوسيطة الثانية وكانvariant_throw_on_type_mismatchمعطّلًا. تتعامل الدالة الآن مع المقارنة على أنها “لا تتساوى مطلقًا” وتُرجع المصفوفة كما هي بدلًا من التسبب في فشلassertTypeEqualityعلى جانب الخادم. #105248 (Groene AI). - يمكن الآن تنفيذ الاستعلام بنجاح حتى إذا فشل
FileCacheفي إنشاء بعض الأدلة على القرص لأغراض التخزين المؤقت. #105250 (Den Kalantaevskii). - إصلاح توقّف الخادم مع
Assertion 'px != 0' failedفيExtremesTransformعندما يواجه استعلام فيهextremes = 1استثناءً (مثلMEMORY_LIMIT_EXCEEDED) بينما كان التحويل يبني أعمدةExtremesمن أول chunk. يتلقى العميل الآن الاستثناء الأصلي بدلًا من تعطل الخادم. #105264 (Groene AI). - أصبح
LEFT ANTI JOINالآن يُرجع بشكل صحيح عمود مفتاحjoinمن الجانب الأيمن بالقيم الافتراضية للصفوف غير المطابقة، بدلًا من تكرار قيمة المفتاح الأيسر. سابقًا، كانSELECT a.x AS l, b.x AS r FROM a LEFT ANTI JOIN b ON a.x = b.xقد يُرجعr = a.xللصفوف غير المطابقة، بينما كان ينبغي أن يُرجع القيمة الافتراضية (0لـInt32، و''لـString، وNULLلـNullable). كان التأثير مقتصرًا على عمود مفتاحjoinفقط؛ أما الأعمدة اليمنى غير المفتاحية فكانت تُضبط بالفعل على القيم الافتراضية بشكل صحيح. وظهر الخطأ نفسه فيRIGHT ANTI JOINكلما بدّل المُحسِّن الجانبين. يُغلق #99959. #105278 (Groene AI). - إصلاح فقدان البيانات في
clickhouse-localعند تشغيله بشكل متكرر باستخدام--default_databaseغيرdefault(على سبيل المثالclickhouse-local --path X -- --default_database=mydb): كان البحث عن معرّف UUID لقاعدة البيانات المحفوظة مُثبتًا علىmetadata/default، لذلك كان كل إعادة تشغيل تُنشئ معرّف UUID جديدًا وتُخفي جداول التشغيل السابق. يغلق #101831. #105284 (Groene AI). - إصلاح الخطأ المنطقي
Mutation ofMemorytable produced incomplete outputالذي كان يظهر عند تشغيلALTER TABLE <memory_table> APPLY PATCHESأوALTER TABLE <memory_table> APPLY DELETED MASK. لا تمتلك جداولMemorypatch parts أو أقنعة حذف، لذا يُعامَل الأمران الآن بشكل صحيح على أنهما بلا تأثير. #105286 (Groene AI). - إصلاح الاستعلامات طويلة التشغيل مع Unity Catalog عبر تمرير معلمة
table_idفي طلب الاستعلام. #105303 (Konstantin Vedernikov). - إصلاح
CANNOT_CONVERT_TYPEفيMergeفوقMergeفوقDistributedمعdistributed_group_by_no_merge=1. #105330 (Azat Khuzhin). - إصلاح تجاهل
clickhouse localوclickhouse clientللخيار--query/-qبصمت عند تمرير وسيطة موضعية لملف أيضًا. كلا الشكلين يُنتجان الآنBAD_ARGUMENTSبصورة متسقة. #105334 (Raúl Marín). - إصلاح قيام
REPLACE TEMPORARY TABLEبإنشاء جدول جديد بصمت عندما لا يكون الهدف موجودًا. الآن يُصدرUNKNOWN_TABLE، بما يطابق دلالاتREPLACE TABLE. استخدمCREATE OR REPLACE TEMPORARY TABLEللحفاظ على سلوك الإنشاء أو الاستبدال. #105373 (Groene AI). - إصلاح فشل عمليات القراءة طويلة التشغيل (مثل
INSERT ... SELECT) من قاعدة بياناتDataLakeCatalogمعcatalog_type = 'glue'بخطأExpiredTokenبمجرد انتهاء صلاحية بيانات اعتماد جلسة AWS STS التي جرى التقاطها عند وقت تحميل البيانات الوصفية للجدول. تُحدَّث بيانات اعتماد AWS STS الآن أثناء تنفيذ الاستعلام، لذا تستمر هذه القراءات بعد انتهاء صلاحية الرمز المميز. #105381 (Pratima Patel). - إصلاح خطأ منطقي في
LIMIT BYالسالب في بعض الحالات عند استخدامه معARRAY JOIN. #105403 (Nihal Z. Miaji). - إصلاح تضخم
read_bytes(وكذلك البايتات/الثانية المشتقة المعروضة فيsystem.query_logوشريط التقدم وما إلى ذلك) عند قراءة ملفات Parquet. كان التنفيذ السابق يبلّغ عن الحجم المضغوط الإجمالي لـ row group عند كل chunk، لذا كانت قراءة K من أصل N من الأعمدة تؤدي إلى احتساب زائد بمقدارN / K. والآن لا يُجمَع إلا عبر الأعمدة المحددة. كما يُصلح أيضًا تتبع التقدم على مستوى الملف لجداول Iceberg، والذي لم يكن يبلّغ سابقًا عن حجم ملف البيانات مطلقًا. #105413 (Groene AI). - إصلاح احتمال حدوث segfault في الخادم في cluster table functions (
s3Cluster,urlCluster,fileCluster, …) عندما يُنتج المخطِّطSELECTمع تعيين العلامةrecursive_withولكن من دون تعبيرWITH. يغلق #105370. #105433 (Groene AI). - إصلاح النتيجة الخاطئة لـ
countDistinct/uniqExactعلى الأعمدة من النوعNullableعندما يكونcount_distinct_optimization = 1(كانت مجموعة NULL تُحتسب على نحو غير صحيح). #105439 (Raúl Marín). - تم إصلاح heap-buffer-overflow عند قراءة ملفات Arrow أو ArrowStream التي تحتوي على offsets وسيطة تالفة في عمود ثنائي أو نصي، وكذلك إلغاء مرجعية لمؤشر NULL عند قراءة أعمدة Arrow الموسومة جغرافيًا. #105449 (Raúl Marín).
- التحقق من أنواع
Dynamic/Variantفي windowPARTITION BY، إذ لم يكن يُتحقق منها سابقًا عندما يكونallow_suspicious_types_in_group_byمعطّلًا. يُغلق #105028. #105450 (Pavel Kruglov). - إصلاح عدم عمل
input_format_json_empty_as_defaultفي تنسيقات JSONStrings*. يُغلق #104913. #105453 (Pavel Kruglov). - إصلاح إدراج
NULLفي عمودVariantعبر تنسيقVALUESأثناء parsing للتعبيرات. يُغلق #104909. #105455 (Pavel Kruglov). - إصلاح قيام
dictGetOrDefaultبإطلاقCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNعندما تكون الوسيطة الافتراضية تعبيرًا من نوعNullableويكونshort_circuit_function_evaluationمفعّلًا مع مزيج من مفاتيح Dictionary الموجودة وغير الموجودة. #105461 (Raúl Marín). - إصلاح اقتطاع القيم بصمت في أعمدة
Dynamicعندما يعود قارئ النصQuoted(Values) إلىStringللأنواع المستنتجة غير المكتملة مثلMap(Array(Nothing), ...). سابقًا، كان مسار fallback يغلّف الحقل الخام بربط بسيط على شكل'...'، لذا كان وجود علامة اقتباس مفردة داخلية (وهي موجودة دائمًا في مثل هذه الحالات) يُنهي السلسلة المقتبسة مبكرًا، فتُفقد بقية القيمة. #105463 (Groene AI). - إصلاح SIGSEGV عند قراءة subcolumns لـ
Dynamicمن جدولMemoryمضغوط بعدALTER. يُغلق #104901. #105464 (Pavel Kruglov). - إصلاح تجاهل
toFloat64/toUInt32/toString/إلخ. علىDynamicللإعدادcast_keep_nullable. يُغلق #104789. #105467 (Pavel Kruglov). - تضمين
skip_first_linesفي مفتاح cache الخاص بالمخطط لتنسيقاتWithNames. يُغلق #104527. #105469 (Pavel Kruglov). - إصلاح segfault في server داخل
uniqStateOrNull/uniqStateOrDefault/uniqOrNullState(وسلاسل combinator مشابهة فوقuniq) عند استخدامها معGROUP BY ... WITH ROLLUPأوWITH CUBEأوWITH TOTALSومع وسيطةNullable. #105470 (Groene AI). - إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند الجمع بينORDER BY ... WITH FILL INTERPOLATEوLIMIT N BYمع تفعيل analyzer. يُغلق #103474. #105481 (Yakov Olkhovskiy). - إصلاح
toStartOfMillisecondوtoStartOfMicrosecondاللتين كانتا تعيدان نتيجة منحرفة بنحو ثانية تقريبًا لقيمDateTime64السالبة (ما قبل الحقبة الزمنية)، وإصلاح مشكلة signed-integer-overflow التي يرصدهاUndefinedBehaviorSanitizerفيtoStartOfSecondوtoStartOfMillisecondوtoStartOfMicrosecondلمدخلاتDateTime64القريبة منINT64_MIN. #105482 (Groene AI). - إضافة إعداد توافق جديد
analyzer_compatibility_prefer_alias_over_subcolumn(معطّل افتراضيًا). عند تفعيله، يفضّل المحلّل الجديد تفسير بادئة الاسم المستعار على مطابقة العمود الفرعي فيTuple/ الأعمدة المنقوطة للمعرّفات متعددة الأجزاء، مما يعيد سلوك المفسّر السابق. وهذا يتجنب أخطاءAMBIGUOUS_IDENTIFIER(وما يتصل بها) عندما يُجري استعلام عملية join مع جدول يطابق اسمه جدولًا داخليًا ضمن تعبير الجدول الشائع/استعلام فرعي يستخدمSELECT *فوق join، حيث كان يمكن بخلاف ذلك أن تؤدي الأعمدة المعاد تسميتها بواسطة النجمة (مثلb.id) إلى تسرّب معرّفات الجدول الداخلي إلى النطاق الخارجي. #105491 (Vladimir Cherkasov). - أصبح استعلام بحث المتجهات الذي يُنفَّذ باستخدام تحسين index only يعيد الآن القيمة الصحيحة للدالة
L2Distance()إذا كانت ضمن قائمةSELECT. إذ كانت الدالة تعيد بشكل غير صحيح قيمة المسافة L2-squared. لاحظ أن استعلام بحث المتجهات كان يعيد النتائج بالترتيب الصحيح، وأن التطبيقات التي تسترجع قيمةL2Distance()وتفسّرها صراحةً هي فقط التي كانت سترى القيمة المربعة. #105495 (Shankar Iyer). - إصلاح مشكلة نادرة في Kafka table engine الجديد، حيث كان يمكن التعامل مع الرسائل بشكل غير صحيح أثناء إعادة تعيين partition للموضوع، مما قد يؤدي إلى تخطي رسائل بعد التراجع عن الإزاحة. #105500 (János Benjamin Antal).
- إصلاح استثناء (
Trying to execute PLACEHOLDER actionlogical error) عند استخدام تعبير جدول شائعMATERIALIZEDيكون جسمه استعلامًا فرعيًا مترابطًا كطرف أيمن لـIN. ويُرفض هذا النوع من التعبيرات الآن في وقت التحليل، اتساقًا مع رفض النمط نفسه بالفعل عند الإشارة إلى تعبير الجدول الشائع مباشرةً فيFROM. #105518 (Groene AI). - إصلاح عدم تطبيق الضغط على stdout/stdin عند تحديد format صراحةً. يغلق #104441. #105528 (Pavel Kruglov).
- إصلاح SEGFAULT في إلغاء التسلسل لـ
singleValueOrNullللنوعJSON. يغلق #103630. #105535 (Pavel Kruglov). - إصلاح قيام
clickhouse-format --backslashبإسقاط بياناتINSERTVALUESبصمت. يغلق #103533. #105536 (Pavel Kruglov). - إصلاح عدم قيام
variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=falseبالتقاط الاستثناءات أثناء تنفيذ الدالة. يغلق #103484. #105543 (Pavel Kruglov). - إصلاح تجاهل
input_format_try_infer_datetimesأثناء الإدراج في البيانات المشتركة فيJSON. يغلق #103221. #105544 (Pavel Kruglov). - إصلاح
histogramالذي كان يُنتج نتائج غير صحيحة مع المدخلات الصغيرة غير المرتبة. يغلق #103109. #105548 (Pavel Kruglov). - إصلاح التفاف
DateTimeعند القيم الخارجة عن النطاق فيJSONExtractوعمليات إلغاء التسلسل النصية. يغلق #103094. #105551 (Pavel Kruglov). - إصلاح استخدام جدول الإدراج في دوال الجداول عند تفعيل
optimize_trivial_insert_select. يغلق #103083. #105555 (Pavel Kruglov). - إصلاح تعبير
CASEالذي كان يعيد الفرعELSEبدلًا منTHENالمطابق عندما كانت كلٌّ من قيمة التعبير وقيمةWHENتساويNULL. #105556 (Raúl Marín). - إصلاح تعطل في
replxxناتج عن بلوغ حدFD_SETSIZEالخاص بـselect(وقد استُبدل الآن بـpoll). سابقًا، كان هذا قد يؤدي إلى تعطل الخادم عند تمكين SSH أو واجهة الويب الطرفية. #105559 (Azat Khuzhin). - تحويل الأعمدة الفرعية إلى صورة مادية في
executePartitionByExpressionقبل تنفيذ التعبير. يغلق #103057. #105573 (Pavel Kruglov). - إصلاح الاستثناء
NOT_FOUND_COLUMN_IN_BLOCKعندما يشير تعبيرTTLإلى عمود فرعي. #105578 (Pavel Kruglov). - إصلاح تعطل في الخادم (SIGSEGV) يمكن لأي مستخدم لديه صلاحيات
CREATE TABLEالتسبب فيه عند إرسالCREATE TABLE ... TO INNER UUID '...'من دون clause ENGINEعبر HTTP أو البروتوكول الأصلي. وكان الخطأ نفسه يؤدي أيضًا إلى تعطل client. يُبلغ parser الآن عن خطأBAD_ARGUMENTSمناسب بدلًا من إلغاء مرجعية مؤشر null. #105579 (Groene AI). - إصلاح الدالة النافذية
estimateCompressionRatioالتي كانت تفقد البيانات المتراكمة بين الصفوف. يغلق #101738. #105581 (Pavel Kruglov). - إصلاح تعطل عند إدراج tuples بأحجام مختلفة في clause VALUES نفسها داخل عمود
String. يغلق #101727. #105582 (Pavel Kruglov). - أصبح استخراج قيمة partition في Hive يراعي الآن الإعداد
cast_string_to_date_time_modeويقبل طوابع زمنية بتنسيق ISO 8601 مع لواحق timezone (مثل+0000و+00:00وZ) في مفاتيح partition افتراضيًا. #105584 (Alexey Milovidov). - إصلاح الخطأ
NOT_IMPLEMENTEDفيtoStringمنDateTimeمع Timezone يحتوي على قيمةNULL. يغلق #103712. #105587 (Yarik Briukhovetskyi). - إصلاح قراءة OOB في إلغاء التسلسل
NativeلعمودDynamicالمسطّح. #105666 (Pavel Kruglov). - إصلاح الخطأ
LOGICAL_ERROR(Unexpected return type from if) الذي كان يظهر أثناء تخطيط الاستعلام لتعبيراتifالتي يكون نوع نتيجتهاVariant، ويكون فيها الفرع الثاني أو الثالث عبارة عنifذي شرط ثابت على قيمةUInt64حرفية يمكن أن تلائمInt64. يغلق #105649. #105680 (Groene AI). - إصلاح نتائج غير صحيحة عند قراءة جدول Iceberg مع
iceberg_use_version_hint = 1بعد أن يقوم writer آخر (مثل الدالة الجدوليةicebergLocal/icebergS3) من دون هذا الإعداد بتحديث الجدول. أصبح الآنversion-hint.textيُزامَن بواسطة كل writer بمجرد وجود الملف، بحيث يرى القرّاء اللاحقون الذين يستخدمون هذا التلميح أحدث snapshot. #105682 (Groene AI). - إصلاح نقص صامت في العدّ في استعلامات
SELECTعندما يكونuse_query_condition_cache = 1(الإعداد الافتراضي). كان استعلام بالنمطPREWHERE pk_prefix = X WHERE non_pk IN (...)على عمود يحتوي على bloom-filter skip index يفسدQueryConditionCacheللمسندpk_prefix = X، بحيث إن استعلامًا لاحقًا وبسيطًا من نوعSELECT count() ... WHERE pk_prefix = Xكان يعيد نتيجة غير صحيحة بعدد أقل من الواقع. تأثرت بذلك جميع إصدارات 26.x. #104781. #105686 (Groene AI). - إصلاح
singleValueOrNullMergeالذي كان يعيد قيمة فعلية بدلًا منNULLعند دمج حالة كانت قد رصدت مسبقًا عدة قيم مميزة. #105734 (Minh Vu). - إصلاح استعادة التعافي من الأخطاء في input format
Templateبعد الصفوف غير الصالحة. #105735 (Yue Ni). - إصلاح تعطل في الدالة الجدولية
mongodb، وتخزين MongoDB، وdictionary source الخاصة بـ MongoDB عندما يكون اسم collection فارغًا أو يحتوي على بايتات NUL. #105776 (Raúl Marín). - إصلاح تنظيف snapshot في
Keeperبعد فشل عمليات writes، بحيث تُنظَّف snapshots الجزئية بأمان ويمكن إعادة محاولة writes الفاشلة من دون تقديمlatest_snapshot_meta. #105779 (Antonio Andelic). - إصلاح رفض
ALTER TABLE ... CLEAR COLUMNلأعمدةcolumns_to_sumالصريحة فيSummingMergeTreeوCoalescingMergeTree. #105785 (Antonio Andelic). - إصلاح assertion في
DatabaseCatalog::tryGetDatabase(وما ينتج عنه من الخطأUNKNOWN_DATABASEفي إصدارات release) عند إنشاء parameterized view يكون اسم database فيها مُمرَّرًا عبر query parameter، على سبيل المثالCREATE VIEW {db:Identifier}.v AS SELECT {p:UInt64}. تُستبدل الآن Parameters في أجزاء DDL من عبارةCREATEوقت الإنشاء، بينما تبقى Parameters في متنSELECTمتاحة للاستبدال وقت استدعاء العرض. #105799 (Groene AI). - إصلاح الخطأ
Bad get: has Decimal32, requested Decimal128فيsumMapوsumMapWithOverflowعلى عمودNested(... Nullable(Decimal(P, S)))عندما تكون aggregate state مُسلسلة (مثل parallel replicas، أوsumMapStateعبر formatter للحالة الثنائية، أو external aggregation). #105816 (Groene AI). - إصلاح الخطأين
Expected ColumnLowCardinality, got String/Bad cast from type DB::ColumnString to DB::ColumnLowCardinalityعند استخدامapply_mutations_on_fly = 1على جدول يحتوي على عمليات mutation معلّقة أثناء التنفيذ من نوعUPDATE/DELETEكانت قد أُدرجت في الطابور قبل عملية mutation من نوعALTER MODIFY COLUMN ... LowCardinality(...). #105847 (Raúl Marín). - أصبحت عمليات الكتابة في Iceberg تحافظ على قيم NULL في أعمدة partition من النوع
Nullable(T). سابقًا، كانت قيمة NULL التي يكتبها ClickHouse تظهر كأنها القيمة الافتراضية للنوع الداخلي (0في حالةint) عند قراءتها مرة أخرى بواسطة Spark أو قارئات Iceberg الأخرى. يُغلق #105852. #105862 (Groene AI). - إصلاح pushdown للمرشحات في
ParquetوORCلمرشحاتIN (subquery)، مما يتيح لعملية pruning على مستوى row-group/page/bloom-filter أن تعمل مع قراءاتfileوurlوs3وobject storage. #105863 (Arsen Muk). - إصلاح القراءة بالترتيب لجداول
Merge(باستخدام المحلّل الجديد). #105867 (Nikolai Kochetov). - إصلاح مشكلة إرجاع صفوف غير صحيحة في عمليات حذف المواضع merge-on-read في Iceberg v2 عندما يشير ملف حذف واحد إلى عدة data files وتُطبَّق عدة ملفات حذف من هذا النوع على ملف البيانات نفسه. أصبح القارئ المتدفق (
use_roaring_bitmap_iceberg_positional_deletes = 0) الآن يرشّح صفوف ملفات الحذف بحسبfile_pathفي C++ بدلًا من الاعتماد على pruning لمجموعات صفوف Parquet، مما يعيد الحفاظ على invariant الخاص بترتيب المواضع التصاعدي. #105888 (Groene AI). - إصلاح الخطأ
Cannot find columnفي distributed queries التي تستخدم مرشحIN Array(...)مع المحلّل الجديد. #105894 (Nikolai Kochetov). - إصلاح SIGSEGV في
ALTER TABLE ... MODIFY COLUMN ... Nullable(...)على جداولMergeTreeعندما يُحذف، بالتزامن، عمود يحتوي علىSTATISTICSبواسطة أمرALTERآخر. يُغلق #105912. #105917 (Groene AI). - إصلاح تعطل في الخادم كان قد يحدث عند إلغاء استعلام يقرأ من PostgreSQL — عبر postgresql table function، أو PostgreSQL table engine، أو dictionary بمصدر PostgreSQL — (على سبيل المثال باستخدام KILL QUERY)، إذا فشل إلغاء استعلام PostgreSQL البعيد. #105949 (Rory Shanks).
- إصلاح تنسيق
SYSTEM INSTRUMENT ADDبحيث تُفصل arguments الخاصة بالمعالج بمسافة واحدة، ورفض قوائم arguments غير الصالحة لـSLEEPinstrumentation التي تحتوي على أكثر من قيمتين أو على نطاق يكون فيه الحد الأدنى أكبر من الحد الأقصى. #105984 (Pablo Marcos). - إصلاح نتائج قد تكون غير صحيحة للاستعلامات التي تجمع بين outer join وinner join لاحق يشير إلى الجانب المزوِّد بقيم NULL في outer join. كان من الممكن أن تؤدي إعادة ترتيب join إلى اختيار خطة تسحب شروط inner join إلى عبارة ON الخاصة بـ outer join. #105992 (Vladimir Cherkasov).
- إصلاح تعطل محتمل بسبب إرسال literal نصي كبير جدًا داخل الاستعلام. #105996 (Nikita Taranov).
- إصلاح استثناء
INVALID_WITH_FILL_EXPRESSIONعند استخدامINTERPOLATE ()(الفارغة) مع بادئة ترتيب فيORDER BYومع تفعيلuse_with_fill_by_sorting_prefix. تُستبعَد الآن أعمدة بادئة الترتيب بشكل صحيح من مجموعة الاستيفاء الضمنية، بما يطابق سلوكINTERPOLATE (col)عند تسمية العمود صراحةً. #106001 (Yakov Olkhovskiy). - إصلاح فشل عمليات partition في
ALTER TABLEبصمت عند استخدام مفاتيح partition من النوعBool. يغلق #101722. #106004 (Pavel Kruglov). - إصلاح
JSONExtractRawوJSONHasلمساراتJSONالمعرّفة بأنواع والتي تتضمن قيمًا افتراضية. يغلق #101721. #106005 (Pavel Kruglov). - إصلاح إضافة البادئة ’/’ بشكل غير صحيح إلى basepaths الفارغة في إعدادات بحيرة البيانات. يغلق #105989. #106013 (thewisenerd).
- إصلاح تحوّل محرك الجدول
IcebergLocalإلى وضع القراءة فقط بعد دورةDETACH+ATTACHأو إعادة تشغيل الخادم، مما كان يؤدي إلى فشل كل عمليةINSERTلاحقة معLocal object storage Local is readonly. (READONLY). #106016 (Groene AI). - إصلاح أعطال
Keeperأثناء catch-up على العقدة follower عندما كان من الممكن أن يمتلئ طابور استجابات request dispatcher الجديد قبل بدء خيط الاستجابة. #106049 (Antonio Andelic). - تحسين التوافق مع المحلل القديم. إذا كان الجدول يحتوي على أعمدة مثل
x.a Array, x.b Array, x String، فستُفضَّل المصفوفات عندARRAY JOIN x. #106069 (Nikolai Kochetov). - إصلاح تعطيل ذاكرة التخزين المؤقت لنظام الملفات بصمت مع Azure Blob Storage (مثل جداول Delta Lake على Azure)، لأن البيانات الوصفية للكائن لم تكن تتضمن blob ETag. #106091 (thewisenerd).
- إصلاح قيام
system.dictionariesبإرجاع 0 صفوف عند وجود سحب جزئي لصلاحيةSHOW DICTIONARIES. #106105 (Pavel Kruglov). - إصلاح تعطل الخادم عند الاستعلام عن جداول DeltaLake مع تفعيل
allow_experimental_delta_kernel_rsووجود بيانات اعتماد أو خيار يحتوي على بايتات غير صالحة (حدث panic في Rust FFI عبر الحدextern "C"). #106109 (Raúl Marín). - إصلاح النتائج غير الصحيحة للاستعلامات على الجداول التي يحتوي
ORDER BYفيها على دالة متناقصة رتيبًا مثل(c0 / -42)أوintDiv(c0, -42). كان من الممكن أن تؤدي predicates على العمود الأساسي (مثلc0 < 0) إلى استبعاد granules تحتوي على صفوف مطابقة بشكل خاطئ، مما ينتج عنه نتائج ناقصة. يغلق #106084. يغلق #106124. يغلق #106080. #106136 (Nihal Z. Miaji). - إصلاح دعم استخدام
WASMSQL UDFs في تعريفاتMATERIALIZED VIEW. #106161 (Yue Ni). - أصبح Iceberg partition pruning يتعامل الآن بصورة صحيحة مع عوامل التصفية
WHERE partition_col = (SELECT ... FROM ...)عندما يغلّف analyzer نتيجة الاستعلام الفرعي القيَمي داخليًا في_CAST(Const, 'TargetType')مع تطابق نوعَي المصدر والهدف. سابقًا، كانت مثل هذه العوامل تعطّل Iceberg partition pruning وتؤدي إلى full table scan. #106204 (Groene AI). - إصلاح المعامل
--query_idفي clickhouse local للسماح بتحديد معرّف استعلام مخصص. #106205 (Yue Ni). - تم إصلاح تجاهل فئة تخزين S3 (
s3_storage_class/s3_storage_class_name) للكائنات المكتوبة عبر multipart upload على أقراصS3وobject storage، مما كان يؤدي إلى إنشاء الكائنات الكبيرة بالفئة الافتراضيةSTANDARD. وأصبح اسم الخيار الآن مقبولًا بصيغتَيs3_storage_classوs3_storage_class_nameللأقراص وobject storage والنسخ الاحتياطية. #106214 (Alexey Milovidov). - تم إصلاح مشكلة تعلّق Keeper أحيانًا عند بدء التشغيل عندما يكون الإعداد
nuraft_max_log_gap_in_streamمضبوطًا على قيمة غير افتراضية (القيمة الافتراضية هي 0، أي تعطيل pipelining لطلباتappend_entries). #106220 (Michael Kolupaev). - التحقق من سلامة حالة دالة التجميع
DDSketchالتالفة (مفاتيح bin) عند الإدراج بدلًا من قبول البيانات غير الصالحة. #106236 (Yarik Briukhovetskyi). - تم إصلاح عدم تطابق وضع coordinator عندما تتجاوز الاستعلامات الفرعية إعدادات التنفيذ بالترتيب. #106243 (Nikita Taranov).
- إصلاح مشكلة عدم تطبيق
optimize_skip_unused_shards(وفشلforce_optimize_skip_unused_shardsبشكل خاطئ) عند الاستعلام عن جدولDistributedعبر جدولMergeأو table function merge، مع تطبيق predicate فوقه. #106250 (Nikolai Kochetov). - إصلاح قيام
INTERPOLATE ()بطرح الخطأINVALID_WITH_FILL_EXPRESSIONعندما تكون أعمدةORDER BYمستخدمة بأسماء مستعارة في قائمةSELECTمع analyzer القديم. يغلق #106248. #106252 (Yakov Olkhovskiy). - تم إصلاح حالة abort عند إلغاء تسلسل حالة
AggregateFunction(uniqTheta, ...)غير صالحة من إدخالRowBinaryأو من query parameter. وأصبح الإدخال غير الصحيح يُرفض الآن بخطأCORRUPTED_DATAبدلًا من أن يتسرّب على هيئةstd::exceptionويتسبب في إجهاض العملية عبرabortOnFailedAssertion. #106260 (Groene AI). - رفض بايتات
IntervalKindالخارجة عن النطاق أثناء فك ترميز النوع فيRowBinaryWithNamesAndTypes(input_format_binary_decode_types_in_binary_format = 1) مع إظهار خطأINCORRECT_DATAواضح، بدلًا من إنشاءDataTypeIntervalبنوع غير صالح قد يؤدي لاحقًا إلى سلوك غير معرّف في مسارات hash. #106261 (Groene AI). - إصلاح مشكلة التراجع عند فشل downgrade لـ
SLRUفي26.1+. وإصلاح priority لتقسيم cache بينSystem/Dataمع ميزةkeep_free_space_ratio. #106286 (Kseniia Sumarokova). - قراءة العمود الفرعي
nullكمسارJSONفيNullable(JSON)بدلًا من خريطة القيم null. يُغلق #106085. #106295 (Pavel Kruglov). - إصلاح إرجاع
RestCatalog::emptyنتيجة غير صحيحة عندما يحتوي REST Catalog لـ Iceberg على جداول. #106301 (Lefteris). - تم إصلاح استثناء في استعلامات
INNER JOINمع جدولMergeTreeأيسر فارغ عند تفعيلenable_parallel_replicasوquery_plan_use_new_logical_join_stepوquery_plan_optimize_join_order_algorithm = 'greedy'. #106338 (Nikolai Kochetov). - تم إصلاح تحويل غير صحيح لقيم
Float16دون العادية إلىFloat32(مثلًا عند قراءتها من ملفات Numpy.npy) بسبب إزاحة زائدة بمقدار واحد في المانتيسا. #106343 (Joanna Hulboj). - إصلاح تعطل وخطأ محتمل
NOT_FOUND_COLUMN_IN_BLOCKعند استخدام التحسين المعتمد على القيود (optimize_using_constraints) مع الاستعلامات الفرعية المترابطة. #106349 (Raúl Marín). - تم إصلاح قراءة خارج الحدود في
sipHash64KeyedوsipHash128KeyedوsipHash128ReferenceKeyedعند إجراء hash لعمود تكون جميع مصفوفاته فارغة ولا يكون المفتاح ثابتًا. #106355 (Raúl Marín). - تم إصلاح قيام
SYSTEM RELOAD CONFIGبإسقاط إعدادات Azure Blob Storage الخاصة بكل نقطة نهاية (مثلuse_native_copy)، ما كان يؤدي إلى تجاهل الإعدادات المهيأة للقرص فيBACKUP/RESTOREإلى أن يُعاد تشغيل الخادم. #106357 (Julia Kartseva). - إصلاح
regexpExtract(haystack, pattern)بحيث تُرجع الأنماط التي لا تحتوي على مجموعة التقاط المطابقة كاملةً بدلًا من إطلاقINDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE. #106374 (Groene AI). - إصلاح استثناء
LOGICAL_ERRORأثناء التنزيل المسبق لذاكرة التخزين المؤقت عندما يُستبدل كائن S3 بعيد بمحتوى أقصر بين الإدراج والقراءة. #106375 (Nikita Fomichev). - إصلاح ازدياد استخدام الذاكرة في ذاكرة التخزين المؤقت لنظام الملفات. #106387 (Kseniia Sumarokova).
- إصلاح عدة حالات قراءة خارج حدود الكومة في قارئ تنسيق Arrow IPC (
ArrowColumnToCHColumn). كان يمكن لملف Arrow غير صالح أن يعلن عن عدد صفوف أكبر مما تحتويه مخازنه المؤقتة، أو يعلن عن أطوال child في list/struct/map غير متسقة مع الأصل، أو يوفّر offsets غير رتيبة للقوائم، أو يقتطع bitmap صلاحية child، مما يؤدي إلى قراءات تتجاوز نهاية تخصيصات الكومة. يمكن الوصول إلى هذا من أي مستخدم لديه صلاحيةSELECTعبرfile()أوformat()أو table functions أو مدخلات ArrowFlight. ويجري الآن التحقق من جميع مخازن البيانات وoffsets وview-struct وvalidity-bitmap قبل أي وصول إلى مؤشرات خام، كما يجري التحقق من اتساق أشكال وoffsets الخاصة بـ list/struct/map. #106395 (Raúl Marín). - تم إصلاح فشل النسخ الاحتياطية مع
FILE_DOESNT_EXISTعندما يُجمَع هدف REPLACE الخاص بـ refreshable materialized view على قاعدة بيانات Replicated أو Shared، بينما لم تكن الـ materialized view قد أُنشئت بعد على الـ replica التي بدأت النسخ الاحتياطي. #106411 (Julia Kartseva). - إصلاح خطأ منطقي
Column identifier ... is already registeredعندما يحتوي الشرط فيmutation(DELETE/UPDATE) على استعلام فرعيIN/EXISTSيقرأ من تعبير جدول افتراضي متداخل داخل استعلام فرعي آخر. #106414 (Alexey Milovidov). - إصلاح خطأ منطقي (
Left and right columns have same names) في مُحسِّن ترتيبjoinكان قد يحدث في عملياتjoinالمنفَّذة باستخدام النسخ المتماثلة المتوازية عندما تشترك علاقتان في مخطط الربط في أسماء الأعمدة نفسها. #106418 (Alexey Milovidov). - إصلاح خطأ منطقي عند إنشاء قاموس مضلعات من بيانات مصدر تحتوي على إحداثيات نقاط
NaNأو لا نهائية. تُرفَض هذه الإحداثيات الآن برسالة خطأ واضحة. #106423 (Alexey Milovidov). - أُصلِح خلل كان يؤدي إلى احتواء العمودين
used_privilegesوmissing_privilegesفيsystem.query_logعلى سلاسل امتيازات متسرّبة من استعلامات سابقة غير مرتبطة تعود إلى مستخدم أو قاعدة بيانات أو جلسة مختلفة. #106425 (Alexey Milovidov). - أصبحت الدوال
base58Encodeوbase58DecodeوtryBase58Decodeتراعي الآنmax_execution_timeوإلغاء الاستعلام عند التعامل مع مُدخلات كبيرة، كما ترفض المُدخلات التي يزيد حجمها على 10 كيلوبايت بدلًا من الاستمرار في التنفيذ لفترة طويلة جدًا. ويمكن ضبط هذا الحد عبر الإعداد الجديدfunction_base58_max_input_size(تعطِّله القيمة0). #106428 (Alexey Milovidov). - إصلاح نتائج غير صحيحة متقطعة لاستعلامات
ORDER BY ... DESCعند قراءة الأجزاء العريضة بترتيب عكسي معread_in_order_use_virtual_row_per_block = 1وقيمة صغيرة لـmax_block_size. #106429 (Vladimir Cherkasov). - أُصلِح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند الاستعلام عن جدول Iceberg أو S3 باستخدامWHEREمركّبة تحتوي علىIS NOT NULLلعمود غير موجود في قائمةSELECT، وذلك عند استخدام القارئ الأصلي لـ Parquet V3. #106443 (Shaohua Wang). - يتيح للمستخدم تحديد ترويسات لـ
HTTPDictionaryباستخدام المجموعات المسماة. #106459 (Jan Rada). - إصلاح حالة كان يمكن أن يبقى فيها خيط عامل مرتبطًا بمجموعة خيوط قديمة بعد فشل
CurrentThread::attachToGroupفي منتصف العملية، مما يؤدي إلى فشل المهام اللاحقة على الخيط نفسه برسالةThread is already attached to a group. #106462 (Mikhail f. Shiryaev). - أُصلِح استثناء كان يحدث عندما يستخدم استعلام بحث متجهي فهرسًا متجهيًا، ويستخدم أيضًا فهرس تخطٍّ آخر مثل
minmaxمعuse_skip_indexes_on_data_read = 1. #106473 (Shankar Iyer). - أصبحت قيم enum غير الصالحة في
Avroتُتحقَّق الآن وتُرفَض بخطأ بدلًا من التسبب في قراءة خارج الحدود وإنهاء التنفيذ عند إلغاء تسلسل بياناتAvroالتالفة. #106476 (Miсhael Stetsyuk). - إصلاح تضخُّم تقارير التقدّم عند القراءة من جداول Iceberg باستخدام عوامل التصفية
_fileأو_path. سابقًا، كان تقدّمtotal_bytes_to_readيتضمن جميع الملفات من الـ manifest بغضّ النظر عن التصفية. #106491 (Pedro Ferreira). - تم إصلاح الاستثناء
Bad cast exceptionفي قواميس Redis التي تستخدمSTORAGE_TYPE 'simple'مع تخطيطcache/directومفتاح سلسلة نصية واحد (معقّد)؛ وتعمل هذه القواميس الآن كما ينبغي، كما تُظهر المفاتيح المركبة فوق تخزينsimpleرسالة خطأ واضحة. #106501 (Vladimir Cherkasov). - تم إصلاح خلل كان يؤدي إلى نتائج خاطئة، إذ كان
WHERE c0 = constلا يعيد أي صفوف للجداول التي تحتوي علىORDER BY f(c0)عندما يُقيَّمf(const)إلى NaN، مثلORDER BY sqrt(c0)مع ثابت سالب. وكان تحليل المفتاح الأساسي يستبعد كل granule بشكل غير صحيح ويفسد query condition cache للاستعلامات اللاحقة. #106507 (Groene AI). - تم إصلاح عدم التزام
LIMIT WITH TIESوLIMIT WITH TIESالكسري بـ Collation منORDER BY ... COLLATEعند تحديد الصفوف المتعادلة. كانت الصفوف المتساوية وفقًا لـ Collation (على سبيل المثال'1'و'01'ضمن Collation رقمي) تُقارَن على مستوى البايتات، لذلك كان يجري إسقاط بعض الصفوف المتعادلة من النتيجة بشكل خاطئ. #106539 (Nihal Z. Miaji). - تم إصلاح تحسينات
DISTINCTin order وLIMIT BYin order (بما في ذلكLIMIT BYالسالب) التي كانت تُرجع نتائج خاطئة عندما يكون الإدخال مرتبًا باستخدام Collation (ORDER BY ... COLLATE). فالصفوف المتساوية وفقًا لـ Collation (على سبيل المثال'a'و'A'ضمن Collation غير حساس لحالة الأحرف) تُرتَّب بحسب مفتاح Collation ولا تكون متجاورة من حيث القيمة، لذلك يُتخطّى الآن تحسين in order عند استخدام collator. #106564 (Nihal Z. Miaji). - تم إصلاح النتائج الخاطئة للاستعلام
SELECT c, count() FROM t WHERE c GROUP BY cعلى الجداول التي تحتوي على_minmax_count_projectionضمني، أو projection تجميعي صريح، أو projection عادي: إذ كانت كل مجموعة تنهار سابقًا إلى صف واحد بمفتاح ثابت وإجمالي عدد الصفوف. #106590 (Groene AI). - تم إصلاح خلل كان يمنع المستخدمين من استخدام استعلامات فرعية ذات قيمة مفردة في الوسيطة الأولى لـ
INعندما تكون الوسيطة الثانية tuple غير ثابتة. #106610 (Yarik Briukhovetskyi). - تم إصلاح الاستثناء
Mutation ofMemorytable produced incomplete outputالذي كان يظهر عند تشغيل أوامرALTER TABLE <memory_table>التي لا تؤثر في بيانات أي صف داخل محركMemory، وهيAPPLY PATCHESوAPPLY DELETED MASKوMATERIALIZE STATISTICSوMATERIALIZE INDEXوMATERIALIZE PROJECTIONوREWRITE PARTS. لا تملك جداولMemoryهذه البُنى، لذا تُعامل هذه الأوامر الآن على أنها عمليات لا تفعل شيئًا. #106621 (Groene AI). - تم إصلاح تجاهل
session_timezoneعند تسلسل أعمدةLowCardinality(DateTime)إلى text formats (CSV وTSV وJSONEachRow وغيرها). سابقًا، بعد أول عملية كتابة لعمودLowCardinality(DateTime)على server، كان كل query لاحق يكتب هذا النوع من الأعمدة يعرض سلسلة الوقت المحلي وفق أي timezone صودفت أولًا، بغض النظر عنsession_timezone. #106634 (Groene AI). - تم إصلاح
LOGICAL_ERROR“Trying to get name of not a column:ExpressionList” الذي كانت تثيره queries تمرّر علامة النجمة داخلmultiIfإلى وسيطة table function، مثلnumbers(multiIf(*, ...), 2). ويرفض query الآن هذا المطابق غير القابل للحل باستخدامUNSUPPORTED_METHOD. #106647 (Groene AI). - إصلاح فشل الخادم في بدء التشغيل مع الخطأ
Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)عندما يحتوي جدولMergeTreeعلى جزء skip-index بعدد صفري من granules وملف marks غير فارغ على القرص. #106675 (Groene AI). - رفض أنماط glob الخاصة بـ
fileالشاذة التي قد تتسبب في تكرار غير محدود عند سرد محتويات الدليل. يُفرَض الآن حد أقصى لعمق التكرار يبلغ 1000؛ وأي query يتجاوزه سيؤدي إلى الخطأTOO_DEEP_RECURSIONبدلًا من تعطل الخادم بسبب stack overflow. #106676 (Groene AI). - إصلاح توقف الخادم بسبب الخطأ
Bad cast from type DB::ColumnNothing to DB::ColumnVector<char8_t>فيFunctionIf::executeForConstAndNullableConditionعندما يُطوى شرطif/multiIfكثابت إلىConst(Nullable(Nothing))(على سبيل المثال، استخدام فهرس خارج النطاق على مصفوفة فارغة مثلarraySort(x -> x, [])[toNullable(1)]). #106678 (Groene AI). - إصلاح الاستثناء
'Trying to read from input() twice.'الذي كان يظهر عند تغليف table functioninputداخل تعبير جدول شائع غير MATERIALIZED ثم الإشارة إليه من أكثر من موضع في query. أصبح query يُرفَض الآن بخطأ واضحINVALID_USAGE_OF_INPUTفي مرحلة التخطيط. فـinputعبارة عن تدفق client أحادي الاستخدام، ولا يمكن استهلاكه إلا من source واحد في query plan. #106682 (Groene AI). - جعل
FORMATيُطبَّق أيضًا على مخرجاتEXPLAINفيEXPLAIN ... INSERT ... SELECT ... FORMAT ...حتى عندما تسبقSETTINGSقيمةFORMATأو عندما يكون output format هوValues. متابعة لـ #101772. #106686 (Alexey Milovidov). - إصلاح خطأ نادر زائف من نوع
RESOURCE_ACCESS_DENIED(“Scheduler queue with resource request is about to be destructed”) لاستعلام كان قد مُنح بالفعل حق الوصول إلى مورد workload، وكان السبب إعادة استخدام كائن طلب محلي للخيط احتفظ بحالة فشل من طلب سابق. #106690 (Alexey Milovidov). - إصلاح حالة تسابق بين تدمير كائنات
INATSConsumerواستدعاءINATSConsumer::onMsgعليها عبر callbacks في مكتبة NATS. #106692 (Miсhael Stetsyuk). - إصلاح
matchوextractوextractAllوcountMatchesالتي كانت تُرجع نتائج غير صحيحة للتعبيرات النمطية التي تتضمن محارف هروب ست عشرية أو ثمانية. #106709 (ofeliacode). - أصبحت طبقة TLS الداخلية لـ Raft في Keeper تحترم الآن الإعداد
openSSL.client.verificationMode. في السابق، كان التحقق من certificate الخاصة بالنظير مفعّلًا دائمًا لاتصالات Raft بين عقد Keeper بغض النظر عن هذا الإعداد، لذا كانت القيمةnoneتُتجاهل بصمت. الآن، تؤديnoneصراحةً إلى تعطيل certificate verification الخاصة بنظير Raft، بينما يؤدي غياب الإعداد إلى الإبقاء على السلوك السابق الآمن افتراضيًا. أما configuration التي تضبطnoneصراحةً فستتوقف بعد upgrade عن التحقق من certificates الخاصة بنظراء Raft، بما يتوافق مع السلوك المقصود من الإعداد. #106726 (Antonio Andelic). - إصلاح خطأ منطقي في نصوص البدء البرمجية في
SYSTEM RELOAD CONFIG. بالإضافة إلى ذلك، أصبح يتم تحميل نصوص البدء البرمجية عندSYSTEM RELOAD CONFIGأيضًا (وظيفة متاحة حاليًا بشكل خاص فقط). #106727 (Miсhael Stetsyuk). - التراجع عن تغيير كان يجعل
sumMap/ المُركِّب-Mapيرفضان أنواع القيم الرقمية ذات الأسماء المخصّصة (مثلSimpleAggregateFunction(sum, T)وBool) مع ظهور الخطأILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed، مما أدى إلى تعطيل عمليات التجميع التي كانت تعمل سابقًا. #106729 (Nikita Fomichev). - أُصلحت عدة مشكلات تتعلق بسلامة الذاكرة واستنزاف الموارد في قارئات التنسيقات التي يمكن الوصول إليها عبر مدخلات غير موثوقة: قراءة خارج حدود الكومة في معالجة أطوال مستويات التعريف/التكرار ضمن
DataPageV2في قارئ Parquet الأصلي، وفيض في المكدس في ملفات Parquet ذات البُنى شديدة التداخل، وعمليات تخصيص تجاهلتmax_memory_usageعند تحليل هندسة GeoParquet بصيغ WKB/WKT وسلاسل/بايتات Avro. #106739 (Raúl Marín). - أُصلح فيض المخزن المؤقت في الكومة (تعطل server) في
decodeHTMLComponentعند فك ترميز السلاسل التي تحتوي على كيانات HTML الموسَّعة≫⃒أو≪⃒، ويمكن لأي مستخدم الوصول إليه عبر تنفيذSELECTواحد. #106741 (Raúl Marín). - أصبحت أوامر
CREATE TABLEوALTER TABLE ADD INDEXوCREATE INDEXالتي تستخدمGRANULARITY 0مع skipping indexes تُرفض برسالةBAD_ARGUMENTSواضحة. سابقًا، كان هذا يؤدي إلى استثناءInconsistent AST formattingفي إصدارات التصحيح. #106783 (Groene AI). - أُصلح تجاهل Azure BACKUP/RESTORE لإعدادات endpoint في أقراص
azure_blob_storageذات الصيغة القديمة. #106784 (Julia Kartseva). - أُصلح استثناء
Bad castأثناء تقليم الأجزاء استنادًا إلى إحصاءاتMinMaxعندما يكون Key column من النوعLowCardinalityويكون ثابت predicate من النوعLowCardinality(Nullable(...)). #106793 (Groene AI). - إصلاح الأعمدة غير المتسقة (التي تؤدي لاحقًا إلى
LOGICAL_ERROR) عند حدوث استثناء (مثلMEMORY_LIMIT_EXCEEDED) أثناء parsing. #106802 (Azat Khuzhin). - إصلاح المشكلة التي كانت تتسبب في أن يعيد server استجابة HTTP عند إرسال طلبات من عملاء HTTPS بعد ضبط
keeper_server.http_control.secure_port. #106822 (linjiayu1025-collab). - إصلاح logical error في
parseDateTimeعند وجود بايتات إدخال غير ASCII. #106856 (Pavel Kruglov). - إصلاح
SHOW CREATE ROW POLICYبحيث لم يعد يُخرجrestrictive/permissiveبأحرف صغيرة بدلًا من الأحرف الكبيرة، خلافًا لما هو متبع مع الكلمات المفتاحية الأخرى. #106865 (Valery Petrov). - إصلاح الحالة التي لم يكن فيها وضع parallel replicas يُطبَّق على view يحتوي على
UNIONبسبب وجود table فارغ داخلUNION. #106900 (Igor Nikonov). - إصلاح تعطل server (SIGSEGV) عند قراءة بيانات
Protobufمقتطعة معinput_format_allow_errors_num > 0. #106905 (Andrey Tsarevskiy | Андрей Царевский ). - إصلاح استثناء
THERE_IS_NO_COLUMNفي distributed queries التي تتضمن optimization optimize_rewrite_aggregate_function_with_ifعندما تتطلب وسيطة الدالة التجميعية تحويلاً إلى النوعNullable. #106908 (Yakov Olkhovskiy). - إصلاح استثناء (
LOGICAL_ERROR) في عامل تصفية وقت التشغيل لـ JOIN عندما يحتوي مفتاح JOIN على نوعVariantأوDynamicمتداخل داخلTupleأوArrayأوMap، ويكون في الجانب الأيمن من JOIN قيمة مميزة واحدة فقط. #106931 (Groene AI). - تم إصلاح تجاوز سعة عدد صحيح موقّع (سلوك غير معرّف) في
arrayLevenshteinDistanceWeightedوarraySimilarityعندما تحتوي مصفوفات الأوزان على قيم صحيحة كبيرة. وأصبحت المسافة الموزونة الآن تتراكم في عدد صحيح أوسع عند استخدام الأوزان الصحيحة، لذا لم تعد الأوزان الصحيحة الكبيرة تتسبب في تجاوز السعة وتظل النتائج دقيقة. #106934 (Groene AI). - إصلاح تعطل في الخادم (إلغاء مرجعية مؤشر فارغ) عند تنفيذ
TRUNCATEأوDROPعلى جدولEmbeddedRocksDBبعد تحرير مقبض RocksDB الخاص به، مثل جدولread_onlyالذي أُفرغ دليل بياناته بواسطةTRUNCATEسابق. #106940 (Groene AI). - إصلاح استثناء (
std::length_errorيُبلَّغ عنه على أنهLOGICAL_ERROR) عند القراءة من table function*ClusterمثلurlClusterمع إعدادmax_streams_for_files_processing_in_cluster_functionsكبير جدًا. وأصبح عدد التدفقات الآن مقيّدًا بقيمة معقولة. #106946 (Groene AI). - إصلاح تعطل في الخادم (إلغاء مرجعية مؤشر فارغ لـ
DB::IConnections) فيRemoteQueryExecutorعندما يُلغى استعلام موزّع مباشرة قبل إرساله إلى shard. #106950 (Groene AI). - تم إصلاح مشكلة بقاء
elapsed_usمساويًا للصفر دائمًا، واحتسابread_rows/read_bytesبأقل من قيمتهما الفعلية، فيsystem.processors_profile_logوsystem.query_logلاستعلامات flush الخاصة بعمليات insert غير المتزامنة (AsyncInsertFlush). #106982 (Christoph Wurm). - إصلاح تعطل (
Source column is not Map/SIGSEGV) عند دمج blocks مرتبة تحتوي على عمودVariantمع متغيرMapيختلف ترتيب تخزينه المحلي عن ترتيبه العام. #107011 (Groene AI). - إصلاح خطأ منطقي
conflicted_part_name.has_value()كان يظهر أثناء insert متزامن إلى جدولReplicatedMergeTreeعندما تكون inserted block قد خضعت لإزالة تكرار بالكامل، وكانت عقدة إزالة التكرار الخاصة بالجزء المتعارض قد أُزيلت بالفعل (على سبيل المثال بسببDROP PARTITIONمتزامن). #107026 (Groene AI). - تم إصلاح استثناء (خطأ منطقي
this->visited_views == right->visited_views) عندINSERTعندما تكتب materialized views اثنتان على source table نفسه إلى target table نفسه، بينما يقرأ view تابع ذلك الهدف، مع تفعيلmaterialized_views_squash_parallel_inserts. #107027 (Groene AI). - تم إصلاح الخطأ المنطقي
Block structure mismatch in UnionStep stream(توقف الخادم في builds التصحيح/sanitizer، وCode: 49في builds الإصدار) الذي كان يحدث عندما يقرأ أحد فروعUNION/INTERSECT/EXCEPTعمودًا مُسلسَلًا بصيغةSparse، بينما يقرأ الفرع المقابل العمود نفسه باعتباره عمودًا كاملًا (على سبيل المثال عند الدفع إلى materialized view). #107041 (Groene AI). - تم إصلاح استثناء
LOGICAL_ERRORعند الإدراج في جدول DeltaLake يحتوي على أعمدة لا تطابق مخطط الكتابة الخاص به (على سبيل المثال، عمودNestedيُفك إلى أعمدة فرعية، أو table function مع مجموعة أعمدة صريحة). أصبحت عمليات الإدراج هذه الآن تفشل بخطأINCOMPATIBLE_COLUMNSظاهر للمستخدم بدلًا من ذلك. يغلق #87402. #107058 (Groene AI). - تم إصلاح خطأ
TYPE_MISMATCH(“Cannot convert string … to type …”) في استعلاماتORDER BY <numeric column> ... LIMIT nعندما كانت lazy materialization تضع عمودًا آخر قبل عمود الفرز. تُقرأ الآن عتبة top-K من عمود الفرز الصحيح. #107060 (Groene AI). - تم إصلاح خطأ نحوي عندما تأتي عبارة
FORMATأوSETTINGSأوINTO OUTFILEبعدSHOW ROW POLICIESأوSHOW MASKING POLICIES(مثلSHOW ROW POLICIES FORMAT TabSeparated). #107061 (Groene AI). - تم إصلاح العبارة المركبة
ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO aالتي تعيد استخدام اسم عمود تم تحريره (أي “تبديل”) بين أعمدة من أنواع مختلفة. كان الجزء materialized يسجّل نوع عمود غير صحيح، لذلك كانSELECTلاحقًا يفشل برسالةConversion between numeric types and IPv6 is not supported(أو يتوقف عند تحميل الجزء في debug builds). #107064 (Groene AI). - تم إصلاح النتائج غير الحتمية للدالة
roundDownعندما تحتوي مصفوفة الحدود علىNaN. فقد كانت قيمة الإدخال نفسها قد تُرجِع حدًا finite أوNaNبحسب الصفوف المحيطة في الدفعة. يتم الآن تجاهل حدودNaN، لذا تعتمد النتيجة فقط على الحدود finite. #107065 (Groene AI). - تم إصلاح إطلاق
quantileTDigestوquantileTDigestWeightedللخطأDECIMAL_OVERFLOWمع الوسيطاتDateوDateTimeعندما تكون quantile المستوفاة كسرية لكنها ضمن النطاق (على سبيل المثالquantileTDigestWeighted(date, weight)على قيم تقع كلها ضمن النوع). تُقتطع النتيجة الكسرية الآن إلى نوع النتيجة، بما يتوافق معquantilesTDigestWeighted؛ أما القيم الفعلية خارج النطاق فما زالت تؤدي إلى خطأ. يغلق: #106722. #107066 (Groene AI). - تم إصلاح إطلاق
trimLeftوtrimRightوtrimBoth(وكذلك الأسماء البديلةltrimوrtrimوtrim) للخطأTOO_LARGE_STRING_SIZEعندما تكون character set المخصصة للتشذيب أطول من 16 محرفًا. أصبحت مجموعات التشذيب بأي طول مدعومة مجددًا. #107071 (Nikita Fomichev). - تم إصلاح الاقتطاع الصامت لقيم الأعداد الصحيحة الخارجة عن النطاق في تعريفات النوع
Enum8/Enum16. أصبحEnum8('a' = 200)الآن يطلقARGUMENT_OUT_OF_BOUNDبدلًا من إنشاءEnum8('a' = -56)بصمت. #107081 (Groene AI). - تم إصلاح الترتيب غير الصحيح للصفوف (وظهور
LOGICAL_ERRORبرسالة “Rows are not sorted with permutation” في debug builds) في استعلاماتORDER BY ... LIMITمتعددة الأعمدة التي تُفرَز حسب أعمدةNullableعندما تتساوى عدة صفوف في الأعمدة الأولى. #107094 (Groene AI). - إصلاح
LOGICAL_ERROR(Expected the argument N to have X rows, but it has Y) عند تنفيذ دالة على عمودDynamicناتج عن JOIN علىDynamic(على سبيل المثال، الصفوف غير المنضمّة فيRIGHT/FULL JOIN، أو استعلامEXISTSفرعي مترابط جرى فكّ ترابطه إلى join). #107095 (Groene AI). - إصلاح إعادة إنشاء جلسة ZooKeeper دون داعٍ عند إعادة تحميل الإعدادات. #107096 (Azat Khuzhin).
- عدم الاحتفاظ بالـ mutex أثناء قراءات ZooKeeper عند تحديث كيانات الوصول. #107097 (Azat Khuzhin).
- إصلاح استثناء
Logical error: Too large size passed to allocatorعند تنفيذINSERTفي جدولMergeTreeعندما تكونadaptive_write_buffer_initial_sizeمضبوطة على قيمة كبيرة للغاية. ويُقيَّد الآن الحجم الابتدائي التكيفي لمخزن الكتابة المؤقت بالحد الأقصى للمخزن المؤقت. #107104 (Groene AI). - إصلاح
LOGICAL ERROR(Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) عند مقارنة ثابتVariantيحتوي على عضوLowCardinalityبعمود مفتاح تكون فيه key expression دالة deterministic غير رتيبة (على سبيل المثال، skip index من نوعminmaxعلىsipHash64(col)). #107111 (Groene AI). - إصلاح الخطأ المنطقي
Bad cast from type DB::IColumn const* to DB::ColumnNullable const*عندما يُمرَّر asterisk مؤهل (t.*) على مفتاحJOIN ... USINGإلى aggregate function، ويكون على الجانب الآخر من OUTER JOIN مفتاحNullable(معjoin_use_nulls = 0). #107129 (Groene AI). - إصلاح دفعات
ALTER TABLE ... ON CLUSTERالتي تمزج بينMODIFY SETTING/RESET SETTINGوتغيير comment (على سبيل المثالMODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) إذ كان يجري تطبيقها فقط على replica القائدة، مما يترك replicas الأخرى غير متطابقة. كما أُصلحت أيضًا حالةMODIFY COLUMN ... COMMENTالموضعية أو الخاصة بكل عمود عبرSETTINGS، التي كانت تُصنَّف خطأً على أنها تغيير محلي في metadata يقتصر على comment فقط، مما كان يستبعد إعادة ترتيب الأعمدة من metadata المكرّرة وقد يسببINCOMPATIBLE_COLUMNSعند إعادة تشغيل replica. #107142 (Groene AI). - إصلاح
LOGICAL_ERROR(“Table expression … data must be initialized”) الذي كان يظهر عندما يشير matcher asterisk مؤهل (على سبيل المثالx.*) إلى CTE تعاودي بالاسم داخل جزئه التعاودي نفسه. وتُوسِّع هذه المطابقات الآن أعمدة الجدول التعاودي، بالطريقة نفسها التي يفعلها فيها العمود المؤهل (x.a) أو matcher غير المؤهل (*) بالفعل في ذلك الموضع. #107144 (Groene AI). - إصلاح query results غير صحيحة تسببت فيها query condition cache عندما كانت mutations الفورية (
apply_mutations_on_fly) أو patch parts تُرشّح الصفوف قبلPREWHERE. كان يمكن لاستعلام يقرأ باستخدامapply_mutations_on_fly = 1أن يفسد cache، بحيث يؤدي إلى أن يتخطى استعلام لاحق معapply_mutations_on_fly = 0ونفس predicate علاماتٍ كان ينبغي قراءتها، ومن ثم يُرجع عددًا أقل من الصفوف. ويشمل هذا الإصلاح أيضًا سياسات الأمان على مستوى الصفوف، التي تُضاف مسبقًا كـ filter قبلPREWHERE: إذ كان يمكن لاستعلام يُشغَّل تحت row policy مقيِّدة أن يفسد cache لاستعلام لاحق يستخدم predicate نفسه من دون تلك policy. #107145 (Groene AI). - تم إصلاح
BACKUPإلىAzureBlobStorage: كان نسخ ملف بيانات داخل نسخة احتياطية يكتب الكائن الهدف خارج دليل النسخة الاحتياطية. كما أصبحت عمليات التحقق من وجود كائنات النسخ الاحتياطي على وجهاتS3تستخدم طلباتHeadObjectدقيقة بدلًا من السرد بحسب البادئة، مما يمنع المطابقات الخاطئة للمفاتيح ذات البادئات المتشابهة. #107153 (Pablo Marcos). - تم إصلاح تجاوز سعة عدد صحيح موقّع في
quantileExactExclusiveوquantilesExactExclusiveوquantileExactInclusiveوquantilesExactInclusive، كان يمكن أن يؤدي إلى نتيجة خاطئة لمدخلاتInt64التي تمتد عبر نطاق كبير. #107154 (Groene AI). - تم إصلاح
LOGICAL_ERROR(“Unexpected exception in refresh scheduling”) كان يمكن أن يُدخل الخادم في حلقة تعطل عند إعادة التشغيل عندما يكون للعرض المادي القابل للتحديث تبعيةREFRESH ... DEPENDS ON <name>ويطابق اسمها غير المؤهل اسم جدول مؤقت أو اسم تعبير جدول شائع. #107156 (Groene AI). - تم التأكد من عدم تشغيل سكربتات بدء التشغيل عند إعادة تحميل الإعدادات، لأن ذلك غير صحيح دلاليًا وغير متوقع للمستخدمين، وقد عُرف بأنه عرضة للأخطاء. #107187 (Miсhael Stetsyuk).
- وُضع حد أقصى للقيمة القصوى لـ
queue_sizeللحجز المسبق. #107205 (Elian Gidoni). - تم إصلاح الخطأ
Argument ... of GROUPING function is not a part of GROUP BY clauseفي الاستعلامات التي تستخدم الدالةgroupingمع تمكين الإعدادgroup_by_use_nulls. #107206 (Nikolai Kochetov). - تم إصلاح الترتيب غير الصحيح للنتائج في
ORDER BYفوقUNION ALLعند تمكينoptimize_read_in_order، وذلك عندما جرى تضييق مسار union بسبب إعداداتmax_streams_for_union_step؛ ويتم الآن تخطي هذا التضييق عندما تعتمد الخطة على تدفقات إخراج UNION المرتبة. يغلق #106880. #107208 (Vladimir Cherkasov). - تم إصلاح احتمال فكّ إشارة مؤشر فارغ أثناء تحليل إعدادات الوكيل خلال المراحل المتأخرة من إيقاف الخادم. #107231 (Pedro Ferreira).
- تم إصلاح استعلامات
UPDATEخفيفة الوزن مع تمكين parallel replicas القديمة لجداولMergeTreeغير المكررة. #107246 (Groene AI). - تم إصلاح توقف للخادم (
std::out_of_rangelogical error) عند الإدراج في جدولIcebergلا تتطابق فيه أسماء أعمدة كتلة الكتابة مع معرّفات الحقول في أحدث مخطط (على سبيل المثال، بعد أن يعيد كاتب متزامن تسمية عمود ضمن نافذةiceberg_metadata_staleness_ms). أصبح الإدراج الآن يفشل بخطأ استعلام واضح بدلًا من تعطل الخادم. #107279 (Groene AI). - تم إصلاح خلل تعذّر الإيقاف في الخادم ووضع local بسبب احتفاظ مجمّعات الخيوط الثابتة بالخيوط الخاملة إلى أجل غير مسمى إذا كان
max_*_thread_pool_free_size > 0. #107291 (Miсhael Stetsyuk). - تم إصلاح تجاهل دالة الجدول
s3بصمت لقيمةpartition_strategyالموضعية المكتوبة بأحرف صغيرة (مثلhive). #107297 (Julia Kartseva). - تم إصلاح التعامل مع
low_cardinality_allow_in_native_format=0في تجهيز الكتل المتوازية. #107319 (Azat Khuzhin). - إصلاح النتائج الخاطئة (وغالبًا الفارغة) من
ORDER BY <col> LIMIT nعند تفعيل تحسينuse_skip_indexes_for_top_kووجود part يحتوي على skip index من نوعminmaxعلى عمود الفرز بعد إزالة rows منه باستخدام lightweightDELETE. لم يعد التحسين يقدّم minmax القديم للأجزاء التي حُذفت منها rows باستخدام lightweightDELETEعلى الأجزاء التي تحتوي على أعلى rows الحية. #107320 (Groene AI). - إصلاح bug في ClickHouse Keeper حيث كانت metadata الخاصة بـ snapshot، والمبلّغ عنها عبر
last_snapshot(وكذلكzk_latest_snapshot_sizeفيmntr)، قد تتراجع بعد تثبيت snapshot قديم أو مكرر. وكان هذا قد يسمح أيضًا لـ snapshot محلي يحمل الفهرس نفسه بأن يستبدل snapshot file مسجّلًا في مكانه بينما كان لا يزال يُبث إلى peer أو يُرفع إلى S3. #107321 (Antonio Andelic). - إصلاح احتمال حدوث server stack overflow (crash) عند قراءة schema أو Value متداخل بعمق في formats
MsgPackوBSONوORCوParquetوJSONوDeltaLakeوIcebergوPaimon. ويُرفض الآن هذا الإدخال شديد التداخل مع إرجاع exception. #107341 (Raúl Marín). - إصلاح احتمال حدوث logical error في
SYSTEM SYNC DATABASE REPLICA ... STRICTوجعل المُعدِّلSTRICTيُطبَّق فعليًا على database replicas. #107344 (Pedro Ferreira). - إصلاح توقف server في builds الخاصة بـ debug/sanitizer عند قراءة table من نوع
DeltaLakeتكون فيها أسماء schema في ClickHouse تشير إلى column غير موجود في Delta column mapping، على سبيل المثال بعد إعادة تسمية column أو إسقاطه في Delta log. يفشل query الآن بدلًا من ذلك بخطأINCORRECT_DATAيمكن التقاطه. #107347 (Groene AI). - إصلاح توليد
ORDER BY ... WITH FILLلصفوف إضافية عندما يستخدم column فيORDER BYيسبق عمود الملء ترتيب Collation عبرCOLLATE. وتُجمَّع rows الآن بحسب sorting prefix باستخدام ذلك الترتيب، بما يطابق sort order. #107365 (Groene AI). - إصلاح crash (
LOGICAL_ERRORفي builds الخاصة بـ debug) وbug صامت يؤدي إلى نتائج خاطئة (في builds الخاصة بالإصدار) عند قراءة Iceberg table تعيد فيها metadata ربطschema-idموجود مسبقًا بـ schema مختلفة عبر إصدارات metadata. وتُرفض مثل هذه metadata الآن معICEBERG_SPECIFICATION_VIOLATION. #107370 (Groene AI). - إصلاح
LOGICAL_ERROR(Variant N (T) has size X, but expected Y) عند تطبيق function مثلtoStringأوconcatعلى column من نوعVariantأوDynamicيحتوي على variant واحد غير فارغ إلى جانب قيم NULL، وتُرجِع function column الإدخال الخاص بها دون تغيير. #107374 (Groene AI). - إصلاح
Logical error: 'Duplicate announcement received for replica number N'الذي كان يمكن أن يحدث مع parallel replicas عندما يحتوي استعلام فرعي قيَمي على subqueries متداخلة تقرأ table نفسها. #107381 (Groene AI). - إصلاح
getServerSettingلكي يعيد القيمة الفعلية السارية لـ server settings القابلة للتغيير أثناء runtime (مثلmax_server_memory_usageوmark_cache_sizeوmax_concurrent_queriesوأحجام thread pool وغيرها)، بما يطابق ما يبلّغ عنهsystem.server_settings. #107388 (Alexey Milovidov). - إصلاح
arrayResizeعند استخدام وسيط حجم من النوعDecimal: يُفسَّر الحجم الآن وفقًا لقيمته الفعلية (على سبيل المثال،arrayResize([1, 2, 3], 1.5::Decimal(2, 1))يعيد عنصرًا واحدًا) بدلًا من التمثيل الخام غير المُحجَّم. #107389 (Alexey Milovidov). - إصلاح
LOGICAL_ERROR(block.rows() == getRows()) الذي كان يظهر عند تنفيذINSERTغير متزامن إلى جدول من نوعAliasعندما يكونuse_strict_insert_block_limitsمفعّلًا. #107400 (Groene AI). - إصلاح خطأ منطقي (
Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) عندما يدفع تحسين إنزال شرط الفصل (المسند الجزئي) شرطًا فوق مفتاحUSINGالذي يوسّعJOINنوعه. كما أُصلح تعطّل في الخادم (segmentation fault) في المُحلِّل عند حلّ المعرّفات في استعلاماتJOIN ... USINGالتي تحتوي على فروعif/multiIfقابلة لطيّ الثوابت وتشير إلى معرّفات غير معروفة. #107407 (Groene AI). - إصلاح heap buffer overflow (تعطّل في الخادم) في
windowFunnelعند إنهاء حالة دالة تجميع مُشكّلة خصيصًا مع نوع حدث خارج النطاق، ويمكن لأي مستخدم الوصول إلى ذلك عبرSELECTواحد. #107412 (uwezkhan). - إصلاح سلوك غير معرّف عند تمرير قيمة فاصلة عائمة غير منتهية (مثل
nanأوinf) كوسيط طابع زمني/مدة إلى دوال الجداولprometheusQuery/prometheusQueryRange. يرفع هذا الوسيط الآنBAD_ARGUMENTSبدلًا من إنتاج طابع زمني غير صالح. #107417 (Groene AI). - إصلاح توقّف
MaterializedPostgreSQLبصمت عن نسخ التغييرات متماثلًا عندما يحتوي اسم قاعدة البيانات أو الجدول في PostgreSQL على أحرف كبيرة (إذ كان مستهلكpgoutputيطلب اسمpublicationغير موضوع بين علامتَي اقتباس ومحوّلًا إلى أحرف صغيرة، ما لا يطابقpublicationالتي تحتفظ بحالة الأحرف). #107423 (Alexey Milovidov). - إصلاح استثناء (
Logical error: Not-ready Set is passed as the second argument for function 'in') عندما كان تعبير مفتاح (ORDER BYأوPRIMARY KEYأوPARTITION BYأوINDEXللتخطي) يحتوي على عامل التشغيلINمع جدول في الجهة اليمنى، مثلORDER BY (x IN some_table). تُرفض تعبيرات المفاتيح هذه الآن وقت إنشاء الجدول. #107424 (Groene AI). - إصلاح نتائج غير صحيحة ناتجة عن التحسين
optimize_rewrite_aggregate_function_with_ifلدوال التجميع التي تحتفظ بقيم حمولةNULL(عائلة*_respect_nulls: anyRespectNullsوfirst_value_respect_nullsوanyLast_respect_nullsوlast_value_respect_nulls). لم يعد التحسين يعيد كتابةf(if(cond, x, NULL))إلى صيغة-Ifلمثل هذه الدوال. #107430 (Groene AI). - إصلاح استثناء زائف من النوع
filesystem error: in last_write_time: No such file or directoryعند سرد دليل تخزين الكائنات على قرص محلي (مثل جدول Iceberg على قرصlocal) بينما تُستبدل الملفات بالتوازي. وأصبح الآن يتم تجاهل الإدخال الذي يُزال بالتوازي بدلًا من إيقاف عملية السرد. #107432 (Groene AI). - إصلاح الخطأ
THERE_IS_NO_COLUMNعندما يكونoptimize_if_transform_strings_to_enum = 1ويكون التعبير المُحسَّن لـif/transformفوق قيمstringالحرفية مفتاحًا فيGROUP BYأوORDER BYعلى جدول Distributed أو parallel replicas. #107455 (Groene AI). - تم إصلاح تعطل نادر في الخادم أثناء معالجة
DISTINCTكان قد يحدث عند فشل تخصيص للذاكرة (على سبيل المثال، عند بلوغ حد الذاكرة) أثناء تهيئة مجموعة المفاتيح المميزة. #107467 (Groene AI). - تم إصلاح الخطأ
LOGICAL_ERROR: Unexpected return type from materialize(وأخطاء عدم تطابق الأنواع المشابهة) عند استخدامapply_mutations_on_fly = 1على جدول يحتوي علىUPDATEمعلّق يُطبَّق أثناء التنفيذ، وكان العمود المستهدف فيه يُقرأ أيضًا كمدخل لدالة بواسطةUPDATEسابق يُطبَّق أثناء التنفيذ، وذلك قبل mutation من نوعALTER MODIFY COLUMN ... LowCardinality(...). #107475 (Groene AI). - تم إصلاح تقادم بيانات اعتماد AWS STS عند قراءة جداول
DeltaLakeعبرS3: إذ يحتفظ المحرك الآن بعميلS3المزوَّد ببيانات الاعتماد المُحدَّثة عند تحديث اللقطة snapshot، لذلك لم تعد عمليات القراءة طويلة التشغيل تفشل بعد انتهاء TTL لرمز STS. كما أصبح موفّر بيانات اعتماد assume-role الخاص بـ STS يراعي أيضًا تحديث بيانات الاعتماد لأي وصول إلىS3باستخدام STS. #107480 (Elmi Ahmadov). - تم إصلاح قيام
SELECT ... FINALوOPTIMIZE TABLE ... FINALبإرجاع صفوف مكررة بعدCREATE TABLE ... CLONE ASأوATTACH PARTITION ... FROMأوMOVE PARTITION ... TO TABLEعند اعتماد أجزاء منMergeTreeعادي إلىReplacingMergeTreeأوSummingMergeTreeأوAggregatingMergeTree. ويُعاد الآن ضبط merge level للجزء المُعتمَد إلى 0 عندما تختلف محركات المصدر والوجهة، بحيث تُزيل الوجهة التكرار عنه في عملية الدمج التالية. #107481 (Groene AI). - تم إصلاح underflow عددي صحيح في parser الخاص بـ PostgreSQL wire protocol، حيث كانت رسالة ذات حقل طول أقل من 4 تتسبب في التفاف
size - 4وحدوثresize/ignoreبحجم مفرط. #107485 (uwezkhan). - أصبح تتبع إلغاء query أفضل أثناء انتظار quorum في ReplicatedMergeTree. #107513 (Nikita Taranov).
- تم إصلاح الخطأ
Not-ready Set is passed as the second argument for function 'in'(LOGICAL_ERROR) عند الاستعلام عن جدول يحتوي على مفتاحPARTITION BYمع استعلام فرعي من نوعIN/NOT INملفوف داخل expression أكبر، مثلWHERE (c0 IN (SELECT ...)) != 0. #107515 (Groene AI). - تم إصلاح تقييم
currentUser()وuser()وSESSION_USERوauthenticatedUser()إلى سلسلة فارغة في مسار تفريغ asynchronous insert (معasync_insert = 1). وقد أثّر ذلك في تعبيرات الأعمدةDEFAULT/MATERIALIZEDوmaterialized views التي تشير إلى هذه الدوال، إذ كانت تخزّن بصمت سلسلة فارغة بدلًا من المستخدم الذي قام بعملية الإدراج. #107541 (Groene AI). - مع
enable_analyzer = 1(وهو الإعداد الافتراضي)، أصبح الاستعلام عن جدول باسمه فقط، عندما لا يكون موجودًا إلا في قاعدة بيانات أخرى، يقترح الجدول الصحيح؛ فعلى سبيل المثال، يعرضSELECT * FROM functionsالرسالةMaybe you meant system.functions?. سابقًا كان analyzer الجديد يعرض الخطأUnknown table expression identifierمن دون أي تلميح، بينما كان analyzer القديم يقدّم هذا الاقتراح المفيد بالفعل. #107550 (Groene AI). - أصبحت الذاكرة التي تستخدمها مكتبة rapidjson (في
prettyPrintJSONوJSONMergePatchوparser JSON الخاص بـ rapidjson) تُحتسب ضمن memory tracker، بحيث تُرفَض المدخلات الشاذة بخطأMEMORY_LIMIT_EXCEEDEDبدلًا من الاستمرار في التخصيص بلا حدود. #107555 (Raúl Marín). - إصلاح
LOGICAL_ERROR(updateFormatPrewhereInfo called more than once) الذي كان يظهر عند الاستعلام عن مصدرfile()أوurl()أو مصدر تخزين كائنات عند استخدامPREWHEREصريح وWHEREمعًا، بينما كانoptimize_prewhere_after_pushdownمفعّلًا. #107568 (Groene AI). - إصلاح تعطل (إلغاء مرجعية مؤشر فارغ) كان يمكن أن يحدث عند تنفيذ خطة استعلام موزعة محليًا (
make_distributed_plan+distributed_plan_execute_locally) معlog_formatted_queries = 1. #107570 (Groene AI). - إصلاح توقف للخادم (
std::terminate، الإشارة 6) أثناء تفكيك استعلام ذي خطة موزعة (make_distributed_plan = 1) عندما يفشل فحص حالة العامل في إعادة جدولة الفحص التالي (مثلCANNOT_SCHEDULE_TASKعند الإيقاف أوMEMORY_LIMIT_EXCEEDED). أصبح الاستعلام الآن يفشل بشكل سليم مع استمرار الخادم في العمل. #107575 (Groene AI). - إضافة فحوصات حدود مفقودة أثناء تحليل Elf وDWARF. #107579 (Michael Kolupaev).
- إضافة فحوصات حدود مفقودة في قارئ ORC. #107580 (Michael Kolupaev).
- إصلاح استثناء (
Digest does not matchخطأ منطقي) كان يمكن أن يحدث معRENAME TABLEأوRENAME DATABASEأوCREATE OR REPLACE TABLEعند التعامل مع جدولTimeSeriesداخل قاعدة بياناتReplicated. وأصبحت إعادة تسمية جدولTimeSeriesمدعومة الآن. #107583 (Groene AI). - إصلاح ثغرة حجب خدمة بسبب استنفاد الذاكرة من دون مصادقة على منفذ بروتوكول MySQL. #107599 (Shaohua Wang).
- إصلاح
DROP TABLEلجدولTimeSeriesفي قاعدة بياناتReplicated، والذي كان سابقًا يسرّب الجداول الداخلية ويترك مهمة الإسقاط في الخلفية تعيد المحاولة بلا نهاية (وكانDROP TABLE ... SYNCيعلّق). #107604 (Groene AI). - إصلاح مشكلتين لاجتياز المسار في بروتوكول جلب الأجزاء المكرّرة، وكان من الممكن أن تسمحا لنسخة متماثلة خبيثة بكتابة ملفات خارج مجلد الجزء. #107606 (Antonio Andelic).
- إصلاح الخطأ ‘Account must be specified error’ عند قراءة جدول Delta Lake عبر Azure. #107620 (Smita Kulkarni).
- إصلاح
ALTER TABLE ... REPLACE PARTITIONعلى جدولMergeTreeعادي، إذ كان يعيد إحياء الأجزاء التي تم استبدالها بعد إعادة تشغيل الخادم، مما يجعل الجدول يعيد كلًا من الصفوف البديلة والصفوف القديمة المستبدلة. #107623 (Groene AI). - إصلاح تعطل الخادم عند قراءة materialized view يكون هدفها جدول
Distributedبينما يعمل الاستعلام معenable_analyzer = 0. #107653 (Groene AI). - عند تعيين عدة quotas للمستخدم أو الدور نفسه، أصبحت تُفرَض جميعها معًا الآن (ويُرفَض الاستعلام إذا تم تجاوز أي منها)، بدلًا من فرض حصة واحدة فقط واختيارها بصورة غير حتمية. ويعرض
SHOW QUOTAوsystem.quota_usageالآن جميع الحصص المفروضة على المستخدم الحالي. #107664 (Alexey Milovidov). - تم إصلاح قيام
s3ودوال الجداول الأخرى الخاصة بتخزين الكائنات بإطلاقLOGICAL_ERRORبدلًا منBAD_ARGUMENTSعند تكرار وسيطة من نوع مفتاح-قيمة، مثلs3('http://...', format = 'CSV', format = 'TSV'). #107670 (Groene AI). - تم إصلاح مشكلة عدم قابلية استخدام واجهة MySQL مع
MySQL Connector/J8.2.0 والإصدارات الأحدث (بما في ذلك 9.x). أصبح الحقلinfoفي الحزمةOKالآن مُرمَّزًا بالطول، بما يتوافق مع MySQL server، بحيث يتمكن JDBC driver من الاتصال. #107693 (Alexey Milovidov). - تم إصلاح
LOGICAL_ERROR(“Input nodes size mismatch in dag”) عند تنفيذ استعلام معmake_distributed_plan = 1يجري ربطًا على مفتاح ملفوف بدالة، عندما لا يكون للطرفين نوع مشترك (على سبيل المثالON intDiv(-1, t1.key) = t2.keyمع مفتاح أيمن من النوعUInt64). #107701 (Groene AI). - لم تعد قراءة بيانات Arrow/ArrowStream ذات الأعمدة
String/Binaryالفارغة، التي ينتجها Apache Arrow Java < 19.0.0 (بما في ذلك Apache Spark)، تؤدي إلى إطلاقINCORRECT_DATA. #107764 (Raúl Marín). - تم إصلاح استثناء
BAD_GET(“Bad get: has String, requested UInt64”) في تقدير column statistics الخاصة بـcountminعندما يقارن استعلام عمودًا بقيمة حرفية من نوع مختلف لم تُحوَّل مسبقًا، مثلnumeric_col IN (SELECT '5')أوstring_col IN (SELECT 5). #107793 (Groene AI). - تم إصلاح تعليق دوال الجداول
odbcوjdbcلعدة دقائق وتجاهلها إلغاء الاستعلام (KILL QUERY,max_execution_time) عندما يصبح الجسر غير مستجيب أثناء استنتاج بنية الجدول البعيد. #107809 (Alexey Milovidov). - تم إصلاح استثناء (
Logical error: 'index >= result.start') عند تنسيق استعلام غير صالح يمزج بين الصيغتين الموضعية والمسمّاة للوسيطة السرية في دوال الجداولs3/gcs، مثلs3('url', 'a', 'b', secret_access_key = 'c'). #107818 (Groene AI). - تم إصلاح عدم قيام فهرس التخطي set بعملية pruning للحبيبات على أعمدة
LowCardinality. #107868 (Konstantin Bogdanov). - تم إصلاح قيام إزالة تكرار الإدراج بحساب قيم hash خاطئة لأعمدة
StringوArrayمع إعداد الخادمinsert_deduplication_version = new_unified_hash: إذ كان يمكن أن تفشل عمليات الإدراج المتطابقة في إزالة التكرار لأن hash إزالة التكرار كان يعتمد على موضع الصف داخل كتلة الإدراج. #107915 (Sema Checherinda). - تم إصلاح النتائج غير الصحيحة لـ
ORDER BYعلى أعمدةNullableمع مفاتيح فرز متعددة على macOS (Apple Silicon)، والناجمة عن غياب توسيع الإشارة في مقارن الفرز المُصرَّف آنيًا (JIT). #107973 (Raúl Marín). - تم إصلاح تراجع الأداء عند قراءة أعمدة
Dynamicباستخدام عدة خيوط. وكان السبب #100730. ويغلق #107942. #107997 (Pavel Kruglov). - أصبح إعداد data lake المهمل
storage_catalog_urlيُرفَض الآن بشكل صحيح بواسطة حارس الكتالوج (إذ كان التحقق سابقًا يقتصر علىstorage_catalog_typeوstorage_aws_access_key_id)، كما أصبحت رسالة الخطأ تسرد جميع الإعدادات المهملة. #108040 (Alexey Milovidov). - إصلاح logical error
Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>عند قراءة query من نوعLIKEمن indextextعبر مسار fallback للقراءة المباشرة من column مخزّن بشكل sparse. #108068 (Groene AI). - شغّل دائمًا handlers الخاصة بانتهاء batch لذاكرة التخزين المؤقت للوصول، حتى إذا كانت الـ batch فارغة. #108124 (Azat Khuzhin).
- إصلاح
LOGICAL_ERROR(Column identifier is already registered) في بعض queries التي تستخدمUNION ALL. #100770 (Shaohua Wang). - إصلاح حالة use-after-free على mutex الخاص بـ workload storage أثناء إيقاف تشغيل server. #101447 (Tuan Pham Anh).
- إصلاح حالة deadlock في
ALTER DATABASE MODIFY COMMENTمع catalogShared. #103683 (Nikolay Degterinsky). - أصبح المعرّف الفارغ المحاط باقتباس Unicode يُطلق الآن
SYNTAX_ERRORبدلًا منCANNOT_PARSE_QUOTED_STRING. #104173 (leonard9893). - الحفاظ على أنواع parameter الأصلية لدوال التجميع
timeSeries*بحيث تُحفَظ أنواعAggregateFunctionبشكل صحيح في round-trip عبر إعادة إرفاق الجداول وparallel replicas. #104812 (Vitaly Baranov). - إصلاح
LOGICAL_ERRORفي materialized CTE تحتserialize_query_planمع parallel replicas. #104896 (Igor Nikonov). - إصلاح overflow للأعداد الصحيحة الموقعة في الدوال
timeSeries*ToGridعندما تكون parameter التقادم (window) قريبة منINT64_MAX. #105319 (Groene AI). - لم تعد قيمة setting
compatibilityتعيدapply_row_policy_after_finalإلىfalse، لذا تُطبَّق row policies دائمًا بشكل صحيح معFINAL. #105637 (Yarik Briukhovetskyi). - إصلاح
clickhouse chdig clientمن خلال مراعاةSETPGROUP/RESETIDS/SETSIGDEFفي stub الخاص بـposix_spawn. #105858 (Azat Khuzhin). - إصلاح Exception أثناء فحوصات السلامة في merge-tree على projections عندما لم يكن executor الخاص بالدمج/التحوير مهيأً. #105919 (Mikhail Artemenko).
- أثناء index analysis على projections، أصبح index
minmaxيُحمَّل الآن من projection نفسه بدلًا من الجزء parent، ما ينتج نتائج صحيحة. #105940 (Mikhail Artemenko). - إصلاح Exception في
addMonotonicChainلـmaterialize(monotonic_chain(...)). #106050 (Nikolai Kochetov). - تم إصلاح فشل
RESTOREعلى النسخ الاحتياطية التي تتضمن عناصر تابعة لـMASKING POLICY. #106086 (Julia Kartseva). - تم إصلاح احتمال تلف الذاكرة عند توسيع دوال SQL المعرّفة من قبل المستخدم مع تفعيل
prefer_column_name_to_alias. #106121 (Nikolai Kochetov). - أصبح القاموس الذي يستخدم اتصال الجسر يُعاد تحميله الآن بعد إعادة تشغيل الخادم، مع إعادة إنشاء الاتصال. يُغلق #106151. #106152 (Pedro Ferreira).
- تم إصلاح filesystem cache لـ
LocalObjectStorage. #106239 (Kseniia Sumarokova). - تم إصلاح المصدر البعيد المؤجل لدوال الجداول عند استخدام
use_delayed_remote_source. #106470 (Nikolay Degterinsky). - تم إصلاح
timeSeriesLastToGridللطوابع الزمنية السابقة لبداية الشبكة وللطوابع الزمنية الواقعة خارج النافذة. #106504 (Vitaly Baranov). #106577 (Vitaly Baranov). - تم إصلاح
LOGICAL_ERROR(Inconsistent AST formatting) عند احتواء اسم الدالة على query parameters. #106635 (Vitaly Baranov). - تم إصلاح خطأ منطقي عند حذف جدول قبل إلغاء تسلسل مهمة distributed plan. #106944 (Alexander Gololobov).
- استخدم مقارنةً دقيقةً لمفاتيح
GROUP BYمن النوعNullable. #107050 (Nikolai Kochetov). - تم إصلاح
LOGICAL_ERROR(Trying to get name of not a column) الذي كان يظهر عندما لا تكون وسيطة table function تعبير عمود (على سبيل المثال، مطابقة*غير محلولة منmultiIf/CASE). #107411 (Alexey Milovidov). - تم إصلاح النمو غير المحدود لذاكرة التخزين المؤقت للمنطقة الزمنية (
DateLUT) عند معالجة عدد كبير من أسماء المناطق الزمنية غير الصالحة والمختلفة. #107464 (Alexey Milovidov). - اكتب إدخال
part_logقبل الإبلاغ عن اكتمال mutation عادي فيMergeTree. #107741 (Azat Khuzhin). - أصبح
arrayFoldالآن يتحقق من سلامة وسيطة Array الخاصة به في مواجهة الإدخال غير السليم. #107932 (Michael Kolupaev). - تم إصلاح حالة نادرة من data race واحتمال استخدام بعد التحرير في قارئ أرشيف skip-index المخزّن مؤقتًا لجزء
MergeTree، وقد يحدث ذلك عندما يقرأ استعلام فهارس التجاوز بينما يكون الجزء قيد النقل أو إعادة التسمية. #107995 (Raúl Marín). - تم إصلاح تراجع الأداء في subcolumns الخاصة بـ
MapمعPREWHERE. #107988 (Pavel Kruglov). - إصلاح
parseDateTimeBestEffortعند استخدام منطقة زمنية، إذ كان يُطلقCANNOT_PARSE_DATETIMEعلى الصفوف التي تحتوي على NULL فيtoString(Nullable(DateTime64)). #108310 (Yarik Briukhovetskyi). - تم إصلاح table function وengine
ArrowFlightاللذين كانا يرفضان named collection التي لا تتضمن المفتاح الاختياريdatasetمع ظهور الخطأNo such key 'dataset'. #108041 (Alexey Milovidov). - تم إصلاح logical error بعنوان
Inconsistent AST formattingلوظيفة window function بلا argument داخل تعريفCODECأو engine (مثلCODEC(cume_dist() OVER (...)))؛ إذ تحتفظ هذه الوظيفة الآن بأقواسها بحيث ينجح الاستعلام في round-trip للتنسيق/التحليل. #107806 (Alexey Milovidov). - إصلاح
hasTokenعندما تحتوي الإبرة على فاصل، إذ كانت تُرجع النتائج بصمت عبر text index بدلًا من إطلاقBAD_ARGUMENTS. #108189 (Jimmy Aguilar Mena). - يمكن الآن إعادة الإعداد
use_skip_indexes_on_data_readإلى قيمتهdefaultالسابقة لما قبل 26.1 (false) عبر الإعدادcompatibility، ما يوفّر مخرجًا من تراجع في الأداء حيث يُفشل مسار القراءة من البيانات تقليم نطاقات علامات skip-index الخاصة بـminmax/set/bloom_filter. #108330 (egor romanov). - تم إصلاح crash محتمل (إلغاء مرجعية مؤشر فارغ) عندما لا يكون تجاوز
database/dbفي named collection المُمرَّرة إلىremote/remoteSecureاسم database ثابتًا، مثلremote(nc, database = (SELECT 1)). ويفشل الاستعلام الآن برسالة error واضحة بدلًا من الانهيار. #108271 (Groene AI). - تم إصلاح refreshable materialized view التي كانت تعلق إذا فُقد اتصال ZooKeeper في لحظة غير مناسبة. #108234 (Michael Kolupaev).
- إصلاح
Bad cast from type DB::ColumnVector<...> to DB::ColumnTupleعند قراءة column من النوعArray(Tuple(...))تكون قيمتها مملوءة بالقيم الافتراضية، مثلًا بعدALTER TABLE ... ADD COLUMNأو بعد mutation غير مكتملة منALTER TABLE ... CLEAR COLUMNطُبقت أثناء التشغيل. #107232 (Groene AI). - إصلاح logical error من نوع
Bad cast from type DB::ColumnDynamic to DB::ColumnNullableعندما يُمرَّر مرجع صريح إلى مفتاحJOIN ... USINGيكون common supertype الخاص بهDynamicإلى aggregate function، مثلcount(t.key) IGNORE NULLS. #107289 (Groene AI). - إصلاح فقدان بيانات صامت على
MergeTreeالعادي (non-replicated) عند تشغيلREPLACE PARTITIONأوMOVE PARTITIONأوDETACH PARTITIONأوDETACH PARTعلى partition لا تزال تحتوي على تصحيحات lightweightUPDATEلم تُطبّق بعد. وترفض هذه العمليات الآن الأمر، كما يفعلReplicatedMergeTreeبالفعل. #107386 (Groene AI). - إصلاح crash (SIGSEGV في إصدارات release، وassertion لعدم تطابق النوع في إصدارات debug) في
hasعلىMapبمفتاحDynamicعندما تكون argument الخاصة بالبحث من نوعLowCardinality، مثلhas(map('a'::Dynamic, ...), toLowCardinality('b')). #107956 (Groene AI). - تم إصلاح
LOGICAL_ERROR(“عدم تطابق بنية block … بينConvertingTransformوRemovingReplicatedColumnsTransform”) عند الإدراج في materialized view يكون جدولTOالهدف فيها يعرّف عمودًا من نوعEnumأوسع مما ينتجهSELECTالخاص بالعرض. ويُطبَّق الآن توسيعEnumالصحيح. #107648 (Groene AI). - تم إصلاح الخطأ
NUMBER_OF_COLUMNS_DOESNT_MATCHعند الاستعلام عن جدولDistributed(أو عند استخدام parallel replicas) يحتوي على عدة أعمدةALIASتتوسع إلى التعبير نفسه، مع الإشارة إليها معًا فيORDER BY/GROUP BY/HAVING. #107913 (Yakov Olkhovskiy). - تم إصلاح سلوك غير معرّف (تمرير مؤشر NULL إلى
memcpy) في الدالتينdetectCharsetوdetectLanguageUnknownعندما تكون سلسلة الإدخال أكبر من 32768 بايت ولا يمكن اكتشاف أي character set. #108250 (Groene AI). - تم إصلاح
signed integer overflow(سلوك غير معرّف) فيdateDiffمع الوحدتينhourوminuteعند قيمDateTime64القصوى القريبة من حدود نطاقInt64. #108229 (Groene AI). - تم إصلاح
Too many marksفي text index على merged part فارغ. #106867 (Azat Khuzhin). - تم إصلاح
LOGICAL_ERROR(“نوع إرجاع غير متوقع من if”) عند قراءة عمود معapply_mutations_on_fly = 1بعدALTER UPDATE col = ... WHERE <cond>مع condition غير ثابت أو false، يتبعهALTER MODIFY COLUMN col <new type>. #108128 (Groene AI). - تم إصلاح إيقاف server (
Logical errorفيIColumn::insertFrom) عند تحويلArray(Dynamic)أوArray(Variant)إلىQBitباستخدامaccurateCastOrNull، مثلaccurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (Groene AI). - تم إصلاح خطأ نحوي عند ورود alias بعد subquery في
DESCRIBE TABLE (...) AS .... #100205 (Yarik Briukhovetskyi). - يُعامَل
getClientHTTPHeaderالآن بشكل صحيح على أنه non-deterministic، لذلك لم تعد نتيجة استعلامه تُعاد الاستفادة منها بشكل غير صحيح بواسطة query result cache. #108029 (Alexey Milovidov).
تحسينات البناء/الاختبار/التغليف
- ابنِ
delta-kernel-rsباستخدام الميزةdefault-engine-native-tlsلكي يتمكن عميل HTTP الخاص به (reqwest) من إعادة استخدام OpenSSL المرتبط مسبقًا بـ ClickHouse. وهذا ليس سوى تفعيل جزئي لـnative-tls: إذ لا يزالobject_storeيفرضreqwest/rustls-tls-native-roots، لذا ينتهي الأمر بـreqwestباستخدام الواجهتين الخلفيتينnative-tlsوrustlsمعًا. ويظلdelta-kernel-rsمعطّلًا تحت MSan في الوقت الحالي لأنringلا يزال يُصرَّف عبرobject_store(سواءً بصورة غير مباشرة عبرrustlsأو مباشرةً لتوقيع HMAC لطلبات AWS)، كما أن شيفرة التجميع المكتوبة يدويًا فيه لا تُنشئ الرموز التي يتطلبها MSan (ويجري تتبّع ذلك في المشروع الأصلي على arrow-rs-object-store#585). #96856 (Austin Bonander). - أضف تحسين PGO (التحسين الموجَّه بملفات التعريف) وBOLT (أداة تحسين الثنائيات وتخطيطها) بعد الربط للملف التنفيذي
clickhouse. تُجمَع ملفات التعريف من أعباء عمل CI وتُطبَّق كخطوة بأفضل جهد أثناء إصدارات البناء — وتعود كلتا المرحلتين إلى مخرجات غير مُحسَّنة إذا كان ملف التعريف قديمًا أو غير متوافق. وحتى الآن، لا توجد فوائد من PGO. #100938 (Alexey Milovidov). - أضف وضع
--storageإلىclickhouse keeper-benchلإجراء اختبارات الأداء علىKeeperStorageداخل العملية (in-process) (من دون شبكة، ومن دون raft، ومن دون state machine)، باستخدام قسمي الإعدادsetupوgeneratorنفسيهما كما في وضع الشبكة. #103081 (Michael Kolupaev). - أصلِح البناء مع
ENABLE_AWS_S3=OFF. #105390 (Yue Ni). - حدِّث
mongo-cxx-driverإلى r4.3.0. #105522 (Konstantin Bogdanov). - أصلِح البناء مع RapidJSON. #105674 (Ilya Golshtein).
- سرِّع البناء بإزالة التضمينات غير المباشرة من ترويسات
base/واسعة الاستخدام، وحذف الشيفرة غير المستخدمة منPoco/Logger.hالمضمَّن. #105702 (Raúl Marín). - تم تحديث
libxml2من 2.15.1 إلى 2.15.3. #105985 (Konstantin Bogdanov). - استخدم
expat2.8.1 داخل Poco. #105988 (Konstantin Bogdanov). - ارفع
thriftإلىv0.23.0. #105993 (Konstantin Bogdanov). - استخدم الوسم
REL_18_4الخاص بـpostgres. #105994 (Konstantin Bogdanov). - رقِّ
krb5إلى 1.22.2. #106076 (Konstantin Bogdanov). - حدِّث نسخة
curlالمضمَّنة إلى 8.20.0. #106077 (Konstantin Bogdanov). - رُقِّي
mariadb-connector-cإلى 3.1.29. مع الحفاظ على جميع التصحيحات ذات الصلة بـ ClickHouse. #106287 (Nikita Mikhaylov). - رُقِّيَت بصمات base image الخاصة بـ distroless لمعالجة ثغرات CVE في libssl3t64. #106360 (Rahul Nair).
- استخدام
wasmtimeبالإصدار 45.0.1. #106836 (Konstantin Bogdanov). - رُقِّي
opensslإلى 3.5.7. #106844 (Konstantin Bogdanov). - أصبح build الخاص بـ Distroless Docker يحدّث أيضًا الوسوم العائمة
:X.Y-distrolessو:X.Y.Z-distroless، وليس وسم الإصدار الكامل فقط. #106932 (Rahul Nair). - تعطيل ميزات
curlغير المستخدمة، مثل مصادقة NTLM وملفات تعريف الارتباط و alt-svc و HSTS و DNS-over-HTTPS و netrc و MIME و AWS SigV4. #107226 (Konstantin Bogdanov). - جرى تحديث
NuRaftبإصلاح لحالة livelock أثناء تثبيت snapshot كانت تحدث عند تنفيذ snapshot IO على الخيط الخلفي. ويظل إعداد Keeper nuraft_use_bg_thread_for_snapshot_ioمعطّلًا افتراضيًا؛ ويقوم CI الآن بتعيين قيم عشوائية له لتغطية كلا الوضعين. #107338 (Antonio Andelic). - إصلاح build
abseilعندما يحتوي مسار checkout الخاص بـ ClickHouse على substring تطابق extension لترويسة. #107349 (zhiqiang). - تحديد cache size لذاكرة L2 من
CPUIDعلى x86_64 بدلًا منsysconf(_SC_LEVEL2_CACHE_SIZE)الخاص بـ glibc، إذ لا يتوفر تحت musl libc. #107469 (Konstantin Bogdanov). - زيادة حجم stack في builds الخاصة بـ musl إلى 8 MiB لدعم queries المتداخلة بعمق. #107470 (Konstantin Bogdanov).
- اشتقاق مجموعة رموز مكتبة C المترجَمة محليًا في مكتبات Rust الثابتة من المكتبات المرجعية الفعلية بدلًا من قائمة سماح تُدار يدويًا، بحيث تشمل جميع builtins الخاصة بـ compiler-rt ودوال libm الخاصة بالمنصة. #107571 (Raúl Marín).
- تحويل imageَي server و Keeper من distroless إلى
gcr.io/distroless/base-nossl-debian13بحيث لا يضمّان إلا المكتبات التي يرتبط بها ClickHouse فعليًا، مع التوقف عن pulling المكتبات التي نربطها نحن ربطًا ثابتًا. #107837 (Rahul Nair). - إعادة تفعيل 50 من الاختبارات عديمة الحالة على macOS (
arm_darwin) التي كان يجري تخطيها لأنها stale، واستخدامfsyncبدلًا منF_FULLFSYNCلمزامنة directory على macOS. #107887 (Raúl Marín).
إصدار ClickHouse 26.5، 2026-05-21. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- تم تغيير القيم الافتراضية لكلٍّ من
date_time_input_formatوcast_string_to_date_time_modeمنbasicإلىbest_effort. وقد تنجح الآن افتراضيًا الاستعلامات التي كانت تفشل سابقًا في تحليل سلاسل datetime غير الأساسية (مثل2024 April 4وApr 15, 2020 10:30:00). وللاحتفاظ بسلوك التحليل الصارم السابق، اضبط هذين الإعدادين علىbasic(أو استخدمcompatibility). #89334 (Alexey Milovidov). - أصبح اسم عنصر Tuple وهو
nullمحظورًا الآن لأنه يتعارض مع اسم subcolumn المستخدم لخرائط null في Nullable، مما يؤدي إلى التباس في تحديد subcolumn. #98377 (Alexey Milovidov). - تمت إضافة الإعدادات
dynamic_disk_allow_from_envوdynamic_disk_allow_from_zkوdynamic_disk_allow_includeلمنع استخدامfrom_envوfrom_zkوincludeفي dynamic disks. ويُعدّ هذا تغييرًا غير متوافق مع الإصدارات السابقة لأنه يحظر افتراضيًا سلوكًا كان مسموحًا به افتراضيًا من قبل. #99138 (Kseniia Sumarokova). - لم يعد بإمكانك استخدام Parquet reader وwriter القديمين المعتمدين على Arrow. وسيُستخدم التنفيذ native بدلًا من ذلك. #100949 (Alexey Milovidov).
- أصبح
SHOW CREATE TABLE tيفضّل الآن temporary table عندما توجد table دائمة وtemporary table كلتاهما باسمtولم يتم تحديد database، بما يتوافق مع السلوك الحالي لـDESCRIBE TABLE. بالإضافة إلى ذلك، أصبح syntax الخاص بـDESCRIBE TEMPORARY TABLEمدعومًا الآن. #100966 (Alexey Milovidov). - تم خفض القيمة الافتراضية لـ
http_max_fieldsمن 1,000,000 إلى 1,000 وhttp_max_field_name_sizeمن 128 KB إلى 4 KB للحد من memory usage قبل authentication بواسطة HTTP connections. وتمت إضافة الإعدادينhttp_max_request_header_sizeوhttp_headers_read_timeout. ويمكن للمستخدمين الذين يعتمدون على الحدود الأعلى السابقة استعادة هذه القيم عبر الإعدادات. #103285 (Sema Checherinda). - تمت إضافة column متداخلة باسم
histogramsإلىsystem.metric_logتلتقط snapshot لكل مُدرَّج تكراري metric مسجلة في كل row، مع إعداد جديد هوsystem_metric_log_show_zero_values_in_histogramsللتحكم في إخراج القيم الصفرية. وهذا يجعل table system.histogram_metric_logمهملة. #103770 (Miсhael Stetsyuk). - أصبح
CASTإلىDateTimeأوDateTime64من دون time zone صريحة يحافظ الآن على time zone الخاصة بـ argument المصدر (عندما يكون المصدر من نوعDateTime/DateTime64مع time zone صريحة)، بما يتوافق مع سلوك الدالتينtoDateTime/toDateTime64. يُغلق #55072. #104433 (Alexey Milovidov). - أُزيلت table function
kql. استخدمSET dialect = 'kusto'لتشغيل الاستعلامات بلهجة KQL. #105101 (Alexey Milovidov). - أصبحت window functions
RANKوDENSE_RANKترفض arguments وتُطلقNUMBER_OF_ARGUMENTS_DOESNT_MATCH، بما يتوافق مع معيار SQL. في السابق، كانت الاستعلامات مثلRANK(x) OVER (ORDER BY id)تُقبل بصمت مع تجاهل argument. ولاستعادة السلوك المتساهل السابق، اضبطallow_rank_dense_rank_arguments = 1. يُغلق #49526. #104324 (Groene AI).
ميزة جديدة
- أُضيف إعداد جديد
max_bytes_ratio_before_external_join، مماثلًا لـmax_bytes_ratio_before_external_group_byوmax_bytes_ratio_before_external_sort. ويعبّر عن عتبة النقل إلى disk لعمليات hash join كنسبة من الذاكرة المتاحة؛ وعند استخدامه مع القيمة المطلقةmax_bytes_before_external_join، تُطبَّق العتبة الأصغر الناتجة. #103862 (Alexey Milovidov). أصبح الإعدادmax_bytes_ratio_before_external_joinمفعّلًا افتراضيًا الآن بالقيمة 0.5، على غرارmax_bytes_ratio_before_external_group_byوmax_bytes_ratio_before_external_sort. وتنتقل عمليات hash join تلقائيًا إلى grace hash join بمجرد أن تتجاوز بيانات الجانب الأيمن نصف ذاكرة النظام المتاحة (عند تهيئة حدود الذاكرة). #104285 (Alexey Milovidov). - أُضيفت table function
filesystem. وهي تتيح تمثيل بنية directory على شكل table، والاستعلام عن metadata الملفات ومحتوياتها باستخدام SQL. طُرحت في الأصل في #42039 بواسطة @perst20. راجع #42039. وراجع #50208. #53610 (Alexey Milovidov). - أصبح من الممكن تمرير أسماء الدوال مباشرةً إلى الدوال عالية الرتبة مثل
arrayMapوarrayFilterوغيرها. على سبيل المثال، أصبحarrayMap(negate, [1, 2, 3])الآن مكافئًا لـarrayMap(x -> negate(x), [1, 2, 3]). #101033 (Alexey Milovidov). - أُضيف الإعداد
send_table_structure_on_insert_with_inline_dataوخيار client --inline-insert-dataللسماح لـ server بتحليل بيانات INSERT المضمّنة بنفسه عبر native protocol، ما يجنّب جولة الذهاب والإياب اللازمة لاستقبال بنية table ويحسّن الأداء عند وجود عدد كبير من عمليات insert الصغيرة. #101034 (Alexey Milovidov). - أُضيفت الدالتان
tokenizeQueryوhighlightQueryلتجزئة SQL query إلى tokens وإبراز الصياغة. تُرجعtokenizeQuerytokens الخاصة بالمحلل المعجمي مع offsets بالبايت وأنواع tokens؛ وتُرجعhighlightQueryranges لإبراز الصياغة استنادًا إلى parser، مع فئات الإبراز (keyword وidentifier وfunction وnumber وstring وغير ذلك). #101054 (Alexey Milovidov). - أُضيف الإعداد
url_baseلحل relative URLs في table function urlوtable engine URL، وفق دلالات RFC 3986. #101113 (Alexey Milovidov). - أُضيف دعم القيم السالبة في clause
LIMIT BYلاختيار rows من نهاية كل مجموعة بدلًا من بدايتها. على سبيل المثال، يعيدLIMIT -2 BY idآخر صفّين لكلid. كما أن offsets السالبة (LIMIT -1 OFFSET -1 BY id) والإشارات المختلطة (LIMIT -2 OFFSET 1 BY id) مدعومة أيضًا. #103222 (Nihal Z. Miaji). - أُضيف دعم للدالة
json_valueللإخراج باستخدامtupleوarrayلتحسين أداء استعلامات JSON المتعددة. #78362 (kevinyhzou). وأُضيف أيضًا دعم وسيط JSONPath متعدد المسارات من نوعTuple/ArrayفيJSON_VALUEوJSON_EXISTSوJSON_QUERY، بواسطة @KevinyhZou. #101102 (Alexey Milovidov). - أُضيفت مَعلمة جديدة باسم
kafka_autodetect_client_rack. عند ضبطها، يُكتشف Availability Zone عبر إمكانات السحابة ويُمرَّر على أنه المَعلمةclient.rackفيlibrdkafkaلتجنّب الاتصالات العابرة للمناطق. #81323 (Ilya Golshtein). - أُضيف نوع الحدث
Readإلىsystem.blob_storage_logلتتبّع عمليات القراءة من object storage، ويتحكم فيه الإعداد الجديدenable_blob_storage_log_for_read_operations. #96867 (Alexey Milovidov). - يمكن للمستخدمين الآن الاطّلاع على watches الخاصة بـ ZooKeeper التي يُصدرها
clickhouse-serverباستخدام الجدول الجديدsystem.zookeeper_watches. #99277 (Den Kalantaevskii). - أُضيف حدث ملف التعريف
Shardsالذي يحسب عدد shards المشاركة في distributed queries، مع جمعها عبر جميع الجداول. #99470 (Alexey Milovidov). - يمكن الآن تعريف دوال
WASMالمعرّفة من المستخدم على أنهاDETERMINISTIC، لتخضع لطيّ الثوابت. #100005 (Vasily Chekalkin). - أُضيف الإعداد
parallel_replicas_prefer_local_replica: عند تعطيله، تُختار parallel replicas بالكامل وفقًا لخوارزمية load balancing، مما يتيح توجيه الاستعلامات حتى معmax_parallel_replicas = 1إلى مضيف آخر. #100139 (Alexey Milovidov). - أُضيفت إعدادات الخادم
{disk,storage,http}_connections_rcvbufو{disk,storage,http}_connections_sndbufللتحكم في أحجام مخازن مقابس TCP على اتصالات HTTP الصادرة، بما يتيح للمشغّلين تجاوز autotuning الخاص بالنواة ووضع حدّ لاستخدام الذاكرة لكل اتصال. #100478 (Sema Checherinda). - دعم
CREATE OR REPLACE MATERIALIZED VIEWبنفس دلالات الاستبدال الذرّي الخاصة بـCREATE OR REPLACE TABLE. يعمل ذلك مع الجداول الداخلية، وجداولTO، وPOPULATE، وREFRESH، وON CLUSTER. #100539 (DQ). - أُضيفت histogram metrics
s3_read_request_duration_microsecondsوs3_read_request_bytesلمراقبة مدة اتصال طلبات GET إلى S3 وحجم البايتات المستهلكة، وهي متاحة فيsystem.histogram_metricsوعبر Prometheus endpoint. #102058 (Sema Checherinda). - أُضيفت table engines
PaimonوPaimonS3وPaimonAzureوPaimonHDFSوPaimonLocalمع دعم Incremental read بالاستناد إلى تتبّع تقدّم snapshots الخاصة بـ Keeper. يعيد الوضع التزايدي الصفوف الجديدة فقط منذ آخر snapshot معتمدة. كما تتوفر قراءات delta موجَّهة للّقطات عبرpaimon_target_snapshot_id، وحدود snapshots لكل استعلام عبرmax_consume_snapshots. ويمكن ضبط metadata refresh في الخلفية عبرpaimon_metadata_refresh_interval_sec. ويخضع ذلك للإعدادallow_experimental_paimon_storage_engine. #102343 (XiaoBinMu). - أُضيف إعداد جديد لجدول Kafka باسم
kafka_map_virtual_columns_on_write. عند تفعيله، تُنتَج الأعمدة المسماة_keyو_timestampو_headers.nameو_headers.valueفي مخطط Kafka table على أنها مفتاح رسالة Kafka والطابع الزمني وheaders المقابلة عندINSERT، وتُستبعَد من message payload. #103243 (Alexey Milovidov). - أُضيف الاستعلامان
SYSTEM PAUSE VIEW [db.]nameوSYSTEM PAUSE VIEWSللعروض المادية القابلة للتحديث. وعلى خلافSYSTEM STOP VIEW، لا يقطعSYSTEM PAUSE VIEWعملية التحديث الجارية حاليًا — إذ يُسمح للتحديث قيد التنفيذ بأن يكتمل، ولا تُمنَع إلا عمليات التحديث اللاحقة. ويمكن التراجع عن ذلك باستخدامSYSTEM START VIEWأوSYSTEM START VIEWS، اللذين يزيلان الآن، بصورة موحّدة، حالتي الإيقاف والإيقاف المؤقت معًا. #103252 (Nikita Mikhaylov). - أُضيفت الدالة
regexpPosition(مع الأسماء البديلة المتوافقة مع PostgreSQL:regexpInstrوregexp_instr) التي تُرجع موضع البايت للمطابقة رقم N للتعبير النمطي داخل سلسلة نصية. وهي تدعم إزاحة البداية، ووضع الإرجاع بعد المطابقة، وأعلام التعبير النمطي، واختيار مجموعة الالتقاط. #104172 (Abhinav Agarwal). - أُضيفت الدالتان الجديدتان
isPrimeوisProbablePrimeللتحقق من أولية الأعداد. تُرجعisPrimeنتيجة دقيقة للأعداد الصحيحة غير الموقعة حتىUInt64. كما تدعمisProbablePrimeأيضًاUInt128وUInt256؛ وبالنسبة إلى هذه الأنواع الأوسع، فإن0تعني أن العدد مركب قطعًا، و1تعني أنه أولي على الأرجح. وتتحكم الوسيطة الاختيارية الثانية فيisProbablePrime، وهيrounds، بدرجة الثقة (بحد أقصى256)؛ إذ يحد الإعداد الافتراضي البالغ25جولة من معدل الإيجابيات الكاذبة لعدد مركب عشوائي إلى أقل من10^-15، كما يمكن إلغاءisProbablePrime. #104234 (Nihal Z. Miaji). #104639 (Alexey Milovidov). #104806 (Nihal Z. Miaji). - أصبح
clearو/clearالآن يمسحان الطرفية في أدوات سطر الأوامر الخاصة بـ ClickHouse بدلًا من تنفيذهما على أنهما استعلام خاطئ. #104318 (Tyler Hannan). - أصبح يُسمح الآن لدالة الجدول
fileبقبولArray(String)من المسارات في استعلاماتSELECT. #104442 (Yue). - أُضيف العمودان
deterministicوhigher_orderإلى جدولsystem.functions. #104479 (Pedro Ferreira). - أُضيف مُعامِل اختياري لمتغير الترميز إلى
bech32Encode(bech32/bech32m) ووضع فك ترميز خام إلىbech32Decodeلترميز العناوين غير الخاصة بـ SegWit (مثل Cosmos SDK وInjective وOsmosis). #98986 (Yash ). - يمكنك الآن كتابة البيانات بتنسيق
AvroConfluent، الذي كان سابقًا مخصصًا للإدخال فقط. يتيح ذلك إنتاج رسائل Avro مؤطّرة بواسطة Confluent Schema Registry مباشرةً من ClickHouse، مثلًا عند الكتابة إلى Kafka. ويُسجَّل المخطط تلقائيًا في سجل المخططات. استخدم الإعداد الجديدoutput_format_avro_confluent_subjectلتحديد اسم الـ subject. #101935 (János Benjamin Antal). - أُضيفت الدالة
prettyPrintJSONلتنسيق سلسلة JSON إلى صيغة مقروءة للبشر. وهي مفيدة للوحات المعلومات أو التقارير، حيث كان تحسين التنسيق يتطلب سابقًا خطوة إضافية على جانب العميل. ويغلق ذلك #62523. #102594 (Dmitry Prokofyev). - تمت إضافة
STRING_AGGكاسم مستعار غير حساس لحالة الأحرف لـgroupConcatللتوافق مع PostgreSQL / معيار SQL. #105125 (Alexey Milovidov). - أصبح الآن بالإمكان تخزين نتائج كل استعلام فرعي مؤقتًا بشكل مستقل باستخدام
SETTINGS use_query_cache = trueفي استعلامات فرعية محددة، من دون تخزين الاستعلام الخارجي بالكامل مؤقتًا. كما يتيح الإعداد الجديدquery_cache_for_subqueries = trueتعميمuse_query_cacheعلى جميع الاستعلامات الفرعية دفعةً واحدة. ملاحظة: لم يعدuse_query_cacheفي الاستعلام الخارجي يُطبَّق تلقائيًا على الاستعلامات الفرعية. #99804 (Vincent Voyer). - تمت إضافة تمييز الصياغة البرمجية المعتمد على المحلّل المعجمي إلى محرر الاستعلامات في واجهة الويب (
play.html)، على غرار ألوانclickhouse-client. #105105 (Alexey Milovidov).
ميزة تجريبية
- أُضيفت واجهة طرفية تجريبية عبر الويب عند
/webterminalتوفّر جلسةclickhouse-clientتفاعلية في المتصفح عبر WebSocket. وهي معطّلة افتراضيًا؛ ويمكن تفعيلها باستخدام إعداد الخادمallow_experimental_webterminal. اطّلع عليها هنا. #100277 (Alexey Milovidov). #105191 (Alexey Milovidov). #105059 (Alexey Milovidov). - أصبح المحرّك
Kafka2(تجريبي، مع تخزين الإزاحات المستند إلى Keeper) يدعم الآن استعلاماتSELECTالمباشرة والإعدادkafka_commit_on_select. #100276 (Alexey Milovidov). - يمكن الآن لـ UDFs الخاصة بـ
WASMإجراء تحويل قسري لمزيد من الأنواع العددية: من الأعداد الصحيحة الأصغر إلى الأعداد الصحيحة الأوسع (مثلInt8إلىUInt64)، ومن أي عدد صحيح إلى عدد ذي فاصلة عائمة (مثلInt32إلىFloat32). #100435 (Vasily Chekalkin). - إضافة دعم الدالة
LIKEفي استعلامDELETE FROM system.webassembly_modules. #104397 (Vladimir Cherkasov). - دعم الأنواع الجغرافية في
Iceberg. #103113 (Konstantin Vedernikov). - إضافة دعم العبارات المُحضّرة إلى خادم ArrowFlight SQL. #103047 (Yakov Olkhovskiy).
- تحسين متانة محلّل KQL (لدعم لغة Kusto) عبر الحفاظ على عمق المحلّل وعدادات التراجع عبر مراحل محلّل KQL، بحيث تُتتبَّع حدود المحلّل بصورة متسقة في استعلامات KQL المعقّدة. #103528 (Yakov Olkhovskiy).
تحسين الأداء
- أَعِد استخدام metadata cache الخاصة بتذييل Parquet عند قراءة ملفات Parquet المحلية عبر table function
fileأو table engine File. سابقًا، لم يكن يُستفاد من هذه cache إلا مع backends الخاصة بـ object storage. #104260 (Alexey Milovidov). - مرِّر
ORDER BY ... LIMIT nعبر عمليات JOIN من نوعLEFT/RIGHTعندما لا يشير مفتاح الفرز إلا إلى columns من الجانب الذي يحتفظ به JOIN، ما يقيِّد عدد rows التي يجب أن يُنتجها الإدخال من ذلك الجانب قبل تنفيذ JOIN. ويتحكم في ذلك الإعداد الجديدquery_plan_top_k_through_join(مُمكَّن افتراضيًا). #104268 (Alexey Milovidov). - فعِّل الإعدادين
use_top_k_dynamic_filteringوuse_skip_indexes_for_top_kافتراضيًا لتحسين أداء queries من نوعORDER BY ... LIMIT N. #99537 (Alexey Milovidov). واقصرuse_top_k_dynamic_filteringافتراضيًا على columns الفرز ذات الطول الثابت، لتجنّب التراجعات في queries من نوعORDER BY <var-length-column> LIMIT Nعندما تتجاوز تكلفة مقارنة threshold لكل row وفورات I/O. ويظل السلوك السابق متاحًا عبر الإعداد الجديدuse_top_k_dynamic_filtering_for_variable_length_types. #104216 (Alexey Milovidov). - استخدم ميزة oversize-arena في
jemallocلتقليل أخطاء الصفحات. #103958 (Nikita Taranov). - قلِّل عدد streams النشطة بالتزامن في
UNION ALLلتقليل Peak memory usage. #100176 (Alexey Milovidov). - حسِّن userspace page cache قليلًا. #100300 (Alexey Milovidov). والآن أصبحت userspace page cache أفضل دائمًا من OS page cache.
- أصبحت cold reads من object storage عبر userspace page cache (
use_page_cache_for_object_storage = 1) أسرع بكثير، لأن حالات الإخفاق المتتالية في cache تُدمج الآن في HTTP request واحد بدلًا من طلب واحد لكل block بحجمpage_cache_block_size. #104230 (Alexey Milovidov). - سرِّع index analysis الذي يتضمن CAST وتطبيق FUNCTION. يُغلق #55653. #100366 (Alexey Milovidov).
- سرِّع queries الضخمة على جداول
Mergeعبر عدد هائل من underlying tables. يُغلق #32465. #100369 (Alexey Milovidov). - أزِل
vtableمن types حقول الإعدادات، ما يقلّل حجم نسخSettingsبنحو 28x ويحسّن تموضع cache عبر typed-array layout لجميع أنواع الإعدادات. #102269 (Raúl Marín). - أضِف الإعدادين
max_threads_min_free_memory_per_threadوmax_insert_threads_min_free_memory_per_threadلتقليل query parallelism تلقائيًا عندما تنخفض الذاكرة الحرة على server. #100383 (Alexey Milovidov). - قلِّل memory usage على الأنظمة منخفضة الذاكرة (< 4 GiB). #100389 (Alexey Milovidov).
- تمت إضافة
OptimizeTrivialGroupByLimitPass. في استعلاماتSELECT ... FROM t GROUP BY k LIMIT nالبسيطة (من دونHAVINGأوORDER BYأو دوال النوافذ)، يضبط المحلل الآنmax_rows_to_group_by = n + offsetمعgroup_by_overflow_mode = 'any'، بحيث يتوقف التجميع بمجرد إنتاجnمفاتيح مميزة بدلًا من تجميع كامل الإدخال. ويتحكم في ذلك الإعداد الجديدoptimize_trivial_group_by_limit_query(مُمكَّن افتراضيًا). #104473 (Amos Bird) (Alexey Milovidov). - فهرس min-max ضمني على مستوى الـ granule للعمودين الافتراضيين
_part_offsetو_block_number، بما في ذلك الإسقاطات. يتيح استبعادًا سريعًا للـ granules استنادًا إلى شروط الأعمدة الافتراضية. #103952 (Mikhail Artemenko). #104746 (Mikhail Artemenko). #105137 (Mikhail Artemenko). - بالنسبة إلى عائلة أساليب التجميع
prealloc_serialized، تُحسب قيم hash لكل صف مسبقًا أثناء تمريرة التسلسل الدفعي، ثم تُستخدم من أجل (أ) تجنب إعادة حساب hash فيemplaceKey/findKeyو(ب) إجراء software prefetch لـ bucket الخاصة بالصف التالي. يسرّع ذلك التجميع متعدد المفاتيح للسلاسل/البيانات المُسلسلة عبر تقليل زمن الانتظار الناتج عن إخفاقات cache في hash table. #104475 (Amos Bird) (Alexey Milovidov). - query condition cache لجداول
Iceberg. #102115 (Konstantin Vedernikov). - تحسين
cramersVوcramersVBiasCorrectedوtheilsUوcontingencyعند استخدامها مع دوال النوافذ. يُغلق #83521. #93384 (Nihal Z. Miaji). - أُضيف تحسين للاستعلامات يعيد كتابة
tupleElement(dictGet('dict', ('a', 'b', 'c'), key), N)إلىdictGet('dict', 'a', key)، ما يتجنب جلب سمات Dictionary غير الضرورية. ويتحكم في ذلك الإعدادoptimize_dictget_tuple_element(مُمكَّن افتراضيًا). #100186 (Alexey Milovidov). - تفعيل buffering لخطوات الفرز على initiator من أجل distributed queries التي تتضمن فرزًا. #100661 (Nikita Taranov).
- تحسين في الأداء لـ
partial_mergeJOIN. #100945 (Artem Zuikov). - تقليل طفيف في التخصيص الزائد للذاكرة في
partial_mergeJOIN. #100963 (Artem Zuikov). - تحسين allocations/deallocations عبر التخزين المؤقت لإعدادات sampling بدلًا من اجتياز التسلسل الهرمي الكامل لمتعقّب الذاكرة. #101267 (Azat Khuzhin).
- تقليل overhead تخصيص الذاكرة أثناء multipart upload إلى S3 عبر التخصيص المسبق لحاويات التتبع الداخلية. #101799 (Gagan Dhakrey).
- إضافة software prefetch في مرحلة probe الخاصة بـ hash join لتقليل زمن الوصول إلى الذاكرة مع جداول hash الكبيرة، ويتحكم في ذلك الإعداد
enable_software_prefetch_in_join. #102444 (Xiaozhe Yu). - تحسين بنية
MemoryTracker، مما حسّن أداءه بنحو ~25%. #103464 (Azat Khuzhin). - إعادة كتابة predicates
coalesce(a, b, ...) <op> constوifNull(a, b) <op> constقبل index analysis، بحيث تتمكن primary key و skip indexes لكل عمود في كل argument من استبعاد granules. ويتحكم في ذلك الإعداد الجديدallow_key_condition_coalesce_rewrite(مفعّل افتراضيًا). #103468 (Manuel). - تحسّن query performance بشكل ملحوظ عند قراءة Iceberg catalogs التي تحتوي على ملفات metadata كبيرة بتنسيق JSON، وذلك من خلال تحسين معالجة الشرطات المائلة المُهرَّبة. #103998 (Mohaidoss).
- تجنّب overhead الخاص بـ index uncompressed cache عند تعطيل cache (server setting
index_uncompressed_cache_size = 0، وهي القيمة default). #104063 (Michael Kolupaev). - إصلاح queries من نوع
ORDER BY ... LIMITذات الحد الصغير التي كانت تقرأ granules أكثر من اللازم عند اقترانها بـ filter غير انتقائي فيWHERE. سابقًا، كان أي filter فوق قراءة مرتبة يعطّل تقسيم المهام لكل نطاق علامات، بحيث لا يتمكن pipeline من الإلغاء بين granules وينتهي به الأمر إلى قراءة part بالكامل لكل stream. #104112 (Vladimir Cherkasov). - إصلاح عدم إعادة استخدام cache لأحجام hash table بعد إعادة ترتيب جانبي JOIN. #104131 (Nikita Taranov).
- عند تفعيل
fsync_after_insert، أصبح تنفيذ fsync لملفات part يتم in parallel باستخدام IO thread pool، مما يسرّع إتمام insert في wide tables. وأصبح تحميل ClickBench الكامل لجدولhitsأسرع بنحو 22%. #104137 (Alexey Milovidov). - تحويل
find_first_symbolsوfind_first_not_symbolsوfind_last_symbols_or_nullوfind_last_not_symbols_or_nullوsplitIntoإلى تنفيذ متّجه على AArch64 باستخدام NEON. سابقًا، لم يكن لدى هذه helpers مسار SIMD إلا على x86 (SSE2 / SSE4.2)، وكانت تنتقل إلى حلقة scalar على ARM. يسرّع ذلك parsing لملفات TSV بنحو ~2x، ودوال URL وsplitByCharبنحو ~1.3x على datasethitsمن ClickBench؛ بينما يتراجع parsing الكثيف جدًا لـ JSON (بتواتر حقول أقل من 16 بايت) بشكل طفيف، بما يتماشى مع المقايضة الحالية في SSE2. #104228 (Alexey Milovidov). - أصبحت قراءة data عبر عمود
ALIASبسيط (مثلsome_alias['key']حيثsome_alias ALIAS m) تمر عبر مسار القراءة نفسه لكل subcolumn كما لو تمت الإشارة إلى underlying column مباشرةً، مما يعيد وفورات I/O الكبيرة لأعمدةMapوArrayوTupleوNullableالمستعارة. #104245 (Raúl Marín). - تقليل التنافس على الأقفال في مسار القراءة Asynchronous من نظام الملفات البعيد عبر جعل
AsyncReadCountersالخاص بكل query بلا أقفال. #104374 (Nikita Mikhaylov). - query plan أفضل قليلًا لعملية المسح المرتب لـ projections. #103723 (Mikhail Artemenko).
- توسيع
optimizeUseNormalProjectionsليتعامل أيضًا مع حالة محددة لم يُرشَّح فيها شيء، لكن sorting key الخاص بـ projection يمكنه إزالة خطوة الفرز من query plan. #104680 (Mikhail Artemenko). - السماح لكتابة الاختصار
json.path[]وتلميحات الأنواع الصريحة بالعمل بشكل صحيح على مساراتJSONمحددة النوع. #99179 (Pavel Kruglov). - تحسين
json.path[N].nested.path(التي تتوسع إلىtupleElement(tupleElement(json.path[N], 'nested'), 'path')) إلىjson.path[].nested.path[N]، ما يؤدي إلى قراءة بيانات أقل بكثير. #99802 (Pavel Kruglov). - تحسين فحوصات الوصول لـ
SHOW TABLESفيsystem.partsعبر إخراج فحوصات امتيازات مستوى قاعدة البيانات من الحلقة الخاصة بكل جدول. #100860 (Shaohua Wang). - إزالة فحص وصول زائد لكل جدول لـ
SHOW TABLESفي المسار السريعSELECT name/SELECT database, nameفيsystem.tables. #100881 (Shaohua Wang). - تمكين تجميع JIT على macOS. #100947 (Alexey Milovidov).
- تخطي تأجيل سياسة الصفوف بعد
FINALعندما تعتمد فقط على أعمدة مفتاح الفرز وتكون حتمية، وكذلك تخطي تأجيلPREWHEREالمقابل الذي كانت سياسة الصفوف تفرضه في هذه الحالة. #102884 (Yarik Briukhovetskyi). - إضافة دعم
hasAnyوhasAllكمسندات ترشيح في الفهارس النصية. #103266 (Anton Popov). - توجيه حالة Heap طويلة العمر في MergeTree (البيانات الوصفية لكل part ولكل table) إلى arena مخصصة في jemalloc، مع إتاحتها عبر المقاييس غير المتزامنة
jemalloc.mergetree_arena.*. يقلل ذلك من تجزئة الـ arena الافتراضية في حالات التشغيل المستقرة، ويمنع العناصر الباقية لكل part من تثبيت صفحات كان يمكن أن تتحلل لولا ذلك. #104136 (Raúl Marín). - تحسين التعامل مع timeout في client الخاص بـ ZooKeeper تحت الأحمال العالية عندما تُرسل طلبات كثيرة بأسلوب pipelining ضمن جلسة واحدة. يستخدم client الخاص بـ ZooKeeper الآن timeout قائمًا على التقدم: ما دام يتم تلقي أي بيانات من server خلال
session_timeout_ms، يُمدَّد الانتظار. ويظل هناك حد أقصى صارم قدره3 * session_timeout_msلكل طلب لتقييد زمن الاستجابة لدى المستدعي. يغلق #100466. #104351 (Antonio Andelic). - نقل علامات trace الخاصة بكل حدث إلى مصفوفة منفصلة وتخصيصها عند الحاجة، ما يقلل التكلفة الإضافية لـ tracing في
ProfileEvents. #105030 (Azat Khuzhin). - إضافة
compareTrackAtإلىColumnDecimal، ما يحسن أداء المقارنة لأعمدةDecimal. #105110 (Artem Zuikov). - إضافة تنفيذ SIMD لـ
MD5(AVX2/AVX512) يحسب hash لعدة مُدخلات بالتوازي، مما يحسن الإنتاجية. #105161 (Joanna Hulboj).
تحسينات
- تحسين مخرجات المساعدة في جميع تطبيقات ClickHouse: أصبح
--helpيعيد الآن رمز الخروج0بشكل متسق، ويطبع إلىstdout، كما يعرض الأمر الأعلى مستوىclickhouse --helpجميع الأوامر الفرعية. وتمت إضافة الخيار--no-sudoإلىclickhouse start/restart(وهو مفيد في Docker)، بالإضافة إلى الأمر الفرعيclickhouse help. استكمالًا لـ #58244 من @qoega. #98148 (Alexey Milovidov). - تم تغيير القيمة الافتراضية للإعداد
input_format_column_name_matching_modeمنmatch_caseإلىauto. وأصبحت تنسيقات الإدخال التي تطابق أسماء أعمدة الإدخال مع schema الجدول (JSONEachRowوCSVWithNamesوJSONColumnsوBSONEachRowوRowBinaryWithNamesوغيرها) تحاول أولًا المطابقة الحساسة لحالة الأحرف، ثم تلجأ إلى المطابقة غير الحساسة لحالة الأحرف إذا أخفقت المطابقة الحساسة. ويظل السلوك الصارم السابق محفوظًا ضمنcompatibility. #104320 (Alexey Milovidov). - تمت إضافة
STDDEVكاسم مستعار غير حساس لحالة الأحرف لـstddevSampلتحقيق التوافق مع PostgreSQL/معيار SQL. #105120 (Alexey Milovidov). - تمت إضافة
array_to_stringكاسم مستعار غير حساس لحالة الأحرف لـarrayStringConcatلتحقيق التوافق مع PostgreSQL. #105121 (Alexey Milovidov). - تمت إضافة
unnestكاسم مستعار غير حساس لحالة الأحرف لـarrayJoinلتحقيق التوافق مع PostgreSQL (بصيغة استدعاء الدالة). #105124 (Alexey Milovidov). - يعرض شريط التقدم في
clickhouse-clientالآن البيانات المؤقتة المتعلقة باستخدام القرص (مثل الفرز الخارجي أو aggregation أو JOIN) إلى جانب RAM، بما في ذلك تفصيلًا لكل مضيف في distributed queries. #105190 (Alexey Milovidov). - تمت إضافة
system.predicate_statistics_log، وهو سجل جديد قائم على أخذ العينات لانتقائية مرشحات predicate وGranule pruning لفهارس MergeTree على مستوى كل query. وهو معطّل افتراضيًا؛ ويمكن تفعيله عبر server settingpredicate_statistics_sample_rate. وهو مطلوب للتوصيات التلقائية للفهارس والإسقاطات. #98727 (Yarik Briukhovetskyi). - السماح بتخطي shard المحلي عند غياب الجدول إذا كان
skip_unavailable_shardsمفعّلًا. #100141 (Alexey Milovidov). - تمت إضافة تحذيرات عند بدء التشغيل (تظهر في
system.warnings) عندما تكون مصفوفة Linux mdraid قيد إعادة المزامنة أو في حالة تدهور، إذ قد يؤثر كلا الأمرين في أداء IO للقرص أو يشير إلى أعطال في الأقراص. #100941 (Alexey Milovidov). - تظهر WASM UDFs الآن في
system.functionsمعoriginالصحيح (WasmUserDefined)، مع تعبئة الأعمدةsyntaxوargumentsوreturned_valueمن metadata نوع ClickHouse الخاصة بها. في السابق، كانت إما مفقودة أو مدرجة مكررة معoriginغير صحيح. #101053 (Vasily Chekalkin). - تدعم table function
generate_seriesالآن قيمstepالسالبة لتوليد تسلسلات تنازلية، مثلSELECT * FROM generate_series(99, 0, -1). #101056 (Alexey Milovidov). - إصلاح استثناءات
Context has expiredالتي كانت تُطلقها بعض الدوال (dotProductوformatRowوstructureToCapnProtoSchema/structureToProtobufSchemaوالدوال المعرفة من قبل المستخدم) عند استخدامها في مسارات التنفيذ المؤجل مثل تعبيراتDEFAULT/MATERIALIZEDوإعدادات محرك الجدول، وذلك بضمان احتفاظ هذه الدوال بمرجع سياق قوي عند الحاجة. #101109 (Alexey Milovidov). - إصلاح الأخطاء المنطقية الزائفة
Cache limits violatedفي الأولويات المُنشأة بحدود صفرية (مثل أولوية filesystem cache لكل query المستخدمة عند تفعيلenable_filesystem_query_cache_limit). #101428 (Alexey Milovidov). - الاكتشاف التلقائي للمنطقة لنقاط النهاية
s3express. #101520 (Pradeep Chhetri). - دعم معرّفات الحقول لملفات البيانات عند الكتابة إلى
Iceberg. يُغلق #102322. #102362 (Konstantin Vedernikov). - أصبحت اللوحة اليسرى في واجهة الويب (
play.html) قابلة للتمرير بشكل مستقل، وتبقى ظاهرة عند تمرير الصفحة، كما أن النقر على جدول ينقلك إلى منطقة query. #102498 (Alexey Milovidov). - السماح بفتح واجهة Play في علامة تبويب جديدة عبر Ctrl/Cmd/Shift+click أو بالنقر الأوسط على شعار ClickHouse في اللوحة اليسرى. #102501 (Alexey Milovidov).
- مقاييس جديدة لتتبّع الذاكرة المستخدمة بواسطة المفاتيح الأساسية للإسقاطات ودرجة حبيبية فهرس الإسقاطات عبر جميع الجداول. #102587 (Narasimha Pakeer).
- تطبيق
max_network_bandwidth_for_userوmax_network_bandwidth_for_all_usersعلى عمليات القراءة والكتابة في نظام الملفات البعيد. #103080 (Azat Khuzhin). - تحسين متانة النسخ الاحتياطية عندما تُحدَّث Refreshable Materialized Views باستمرار، وذلك عبر اتخاذ القرارات بناءً على حالة الجداول في اللقطة بدلًا من حالة عامة مشتركة. #103384 (Nikita Mikhaylov).
- أصبح
SELECT * FROM system.databasesيعرض دائمًا قواعد بيانات Data Lake Catalog بغض النظر عن الإعدادshow_data_lake_catalogs_in_system_tables. في السابق كانت هذه القواعد مخفية افتراضيًا، وهو ما لم يكن متسقًا معSHOW DATABASESالذي كان يعرضها دائمًا. #103444 (Alsu Giliazova). - مواءمة القيمة الافتراضية لإعداد الخادم
concurrent_threads_soft_limit_ratio_to_coresفي الشيفرة مع القيمة المضمّنة فيconfig.xml(2)، بحيث يحدّ مجدول الخيوط المتزامنة الافتراضيmax_min_fairمن خيوط معالجة الاستعلامات إلى ضعف عدد الأنوية افتراضيًا حتى عند عدم استخدامconfig.xmlالمضمّن. #103446 (Alexey Milovidov). - تحسين متانة أداة sanitizer في الحالات الطرفية الخاصة بالمحلل ودوال السلاسل النصية، عبر التعامل مع الإدخال الفارغ في
getURLScheme، وتجنّب العمليات الحسابية على المؤشر الصفري في فحوصاتLexer::nextTokenالخاصة بـmax_query_size، والإيقاف المبكر لتقييم التتابع الجزئي UTF-8 عند فراغ سلسلة الإدخال قبل فك الترميز. #103489 (Yakov Olkhovskiy). - تحسين دقة استنتاج الرتابة للدالتين
divide(0, x)وintDiv(0, x): في السابق، كان يُبلَّغ عن هاتين الدالتين على أنهما رتيبتان دائمًا، لكن0 / xغير رتيبة على أي نطاق يتضمن 0 لأن0 / 0غير معرّف (NaN/Infفيdivide، واستثناء القسمة على صفر فيintDiv). وقد أدى هذا الاستنتاج الخاطئ إلى أن يُنتجKeyCondition::applyMonotonicFunctionsChainToRangeنطاقات يكون فيهاleft > right، ما تسبب في إطلاقLOGICAL_ERRORبعنوانInvalid binary search result in MergeTreeSetIndexفي بُنى debug عندما كان تعبيرIN/NOT INعلى المفتاح الأساسي يغلّف المفتاح داخلdivide(0, key)أوintDiv(0, key). ولم تتأثر بُنى Release، إذ إن هذا التحقق مقيَّد بـ#ifndef NDEBUG. #103621 (Groene AI). - استبدال المقاييس غير المتزامنة
HTTPConnectionPool*TCP{Rcv,Snd}BufBytes_{p50,p75,p90,p95}بهيستوغرام قائم على bucket باسمhttp_pool_tcp_buf_bytes(مع labelsgroupوdirection) فيsystem.histogram_metrics. مع الإبقاء على المقاييس غير المتزامنة الإجمالية لكل مجموعة. #103704 (Sema Checherinda). - أصبحت server settings
{disk,storage,http}_connections_{rcvbuf,sndbuf}تُعرض الآن على أنها قابلة للتغيير دون إعادة تشغيل فيsystem.server_settings. ويمكن تحديث قيمها عبرSYSTEM RELOAD CONFIG؛ وكان مسار تطبيقها وقت التشغيل موجودًا بالفعل منذ #100478. #103772 (Sema Checherinda). - إضافة دعم للرموز المحلولة (
Array(String)) فيflameGraph. #103816 (Azat Khuzhin). - يمكن لعميل CLI الآن تحديد
<rainbow_parentheses>false</rainbow_parentheses>في config الخاصة به في البيئات التي تتعارض فيها ألوان الطرفية مع الأقواس (وبالمثل، أصبحclickhouse formatيدعم الآن الخيار--no_rainbow_parentheses). #103851 (Larry Snizek). - إصلاح البحث غير الحساس لحالة الأحرف في UTF-8 في
MultiVolnitskyعبر التراجع عن عمليات insert الجزئية لـputNGramعند الفشل، وتحويل needles الفاشلة إلى أدوات بحث احتياطية، ما يمنع الوصول إلى حالة غير متسقة. #103864 (Yakov Olkhovskiy). - تنفيذ
sched_getcpuعبرrseqTLS في musl المتوافق مع glibc. #104016 (Azat Khuzhin). - لن يعود العرض المادي القابل للتحديث من النوع Replicated في وضع APPEND إلى إجراء refresh مرتين إذا فُقد الاتصال بـ ZooKeeper لفترة وجيزة أثناء refresh. #104051 (Michael Kolupaev).
- السماح لـ Distributed tables التي لا تحتوي على قائمة أعمدة صريحة بالتحقق من sharding keys مقابل بنية الجدول البعيد المستنتجة. #104111 (Yue).
- إصلاح REST catalog مع المسار
Azureabfss. #104120 (Konstantin Vedernikov). - مراعاة إعدادات المصادقة
role_arnوrole_session_nameفي عميل S3 snapshot الخاص بـ Keeper، ما يتيح لعمليات رفع snapshot استخدام مصادقة STS المستندة إلىAssumeRole. #104140 (Alexey Milovidov). - إصلاح تسرّب في الذاكرة عند تشغيل الاستعلامات التي تستخدم CTEs من نوع
MATERIALIZED. #104153 (Alexey Milovidov). - إصلاح الاستثناء في
lowerUTF8/upperUTF8عند معالجة مجموعات بيانات كبيرة غير ASCII (مثلًا أثناء إنشاء فهارس النصوص)، حيث كان buffer الإخراج المتراكم يتجاوز 2 GiB؛ مع رفض الصفوف الفردية الطويلة جدًا برسالة خطأ واضحة. #104229 (Shaohua Wang). - تعزيز تحميل إحصاءات الأعمدة في MergeTree لمقاومة إخفاقات I/O العابرة، منعًا لتعطيل التحسينات المستندة إلى الإحصاءات بشكل دائم للأجزاء المتأثرة. #104372 (zoomxi).
- لم يعد
INSERT INTO ... SELECT FROM input(...)يتطلب امتيازCREATE TEMPORARY TABLE. #104470 (Alexey Milovidov). - تمت إضافة MergeTree setting جديدة باسم
concurrent_part_removal_threshold_for_remote_disk(القيمة الافتراضية16) تُستخدم بدلًا منconcurrent_part_removal_thresholdعندما يكون جزء واحد على الأقل من الأجزاء الجاري حذفها مخزنًا على disk بعيد. كانت العتبة السابقة100قد تؤدي إلى تعطّلDROP TABLEوعمليات حذف الأجزاء الأخرى على backends تخزين الكائنات لعشرات الثواني، لأن عمليات الحذف كانت تُنفَّذ تسلسليًا رغم أن كل عملية منها تمثل رحلة شبكة مستقلة ذهابًا وإيابًا. ويجعل الإعداد الجديد مسار الحذف المتوازي يبدأ في وقت أبكر بكثير على التخزين البعيد، مع إبقاء سلوك الأقراص المحلية دون تغيير. #104676 (Groene AI). - الإعداد الجديد
defer_partition_pruning_after_final(الافتراضي1) يجعل السلوك الذي قُدِّم في 26.3، والمتمثل في تخطي partition pruning تحتFINAL، قابلاً للتعطيل اختياريًا. اضبطه على0لاستعادة partition pruning كما كان قبل 26.3 — وهو أسرع بكثير في أعباء عمل سجلات الأحداث حيث لا يمكن أن تمتد الصفوف ذات PK نفسه عبر partitions. ويضبطcompatibility = '26.2'هذه القيمة إلى0تلقائيًا. #104705 (Nikita Fomichev). - إصلاح
intExp2الذي كان يعيد نتائج غير صحيحة للمدخلات الخارجة عن النطاق (عمليات shift>= 64ضمن JIT، والأعداد الصحيحة التي يتجاوز مقدارهاINT_MAXفي كلا مساري التنفيذ). #105054 (Raúl Marín). - إضافة علامات اقتباس إلى shell arguments المُنشأة من خيارات CLI والمدخلات parsed في
clickhouse installوclickhouse git-import، بحيث تُعالَج paths وأسماء المستخدمين/المجموعات وhashes الخاصة بـ commit التي تحتوي على مسافات بيضاء أو محارف shell خاصة بشكل صحيح. #105232 (Raúl Marín). - أصبح محرك الجداول
Aliasالآن غير تجريبي ومتاحًا دون الإعدادallow_experimental_alias_table_engine. #103488 (Alexey Milovidov). - تمت إضافة الخيار
--queries-formatإلىclickhouse-benchmarkللاختيار بين تنسيق الإدخال الافتراضي المحمي بعلامات تبويب، والذي يضع استعلامًا واحدًا في كل سطر (tsv)، وبين parsing الإدخال القياسي كسكربت يضم عدة queries مفصولة بـ;(script). #99972 (Aleksandr Musorin). - أصبحت معاملات Tuple العنصرية
tuplePlusوtupleMinusوtupleMultiplyوtupleDivideوtupleModuloوtupleIntDivوtupleIntDivOrZeroتقبل الآن عددًا متغيرًا من الوسائط، بحيث تستقبل قيمتي Tuple أو أكثر من الحجم نفسه، وتُطبَّق عنصرًا بعنصر بأسلوب left-fold. وكانت في السابق تقبل argumentين فقط بالضبط. #104659 (Aruj Bansal). - أُضيفت واجهة ويب مدمجة جديدة عند
/processors-profileتعرض خط أنابيب أي استعلامSELECTسابق على شكل خريطة حرارية، بالاعتماد علىsystem.query_logوsystem.processors_profile_log. ويُلوَّن كل معالج بحسب قيمةelapsed_usالخاصة به، كما يعرض إحصاءات لكل معالج (الصفوف والبايتات وأوقات الانتظار) عند تمرير المؤشر فوقه. #104614 (Nikita Mikhaylov). - أصبح الإعداد
query_plan_use_logical_join_step(واسمه البديلquery_plan_use_new_logical_join_step) الآن مهملاً ولم يعد له أي تأثير؛ إذ تُستخدم خطوة الربط المنطقي دائماً. #104017 (Vladimir Cherkasov). - لم يعد حقل الإدخال
userفيplay.htmlوغيره من صفحات الويب المدمجة (dashboard.htmlوjemalloc.htmlوmerges.htmlوbinary.htmlوwebterminal.html) مُعبأً مسبقاً بالنص الحرفيdefault. وهو يعرض الآن تلميحplaceholderللحقلuserويكون فارغاً افتراضياً. وعند تركه فارغاً، لا تُرسل الصفحة معلمة URL باسمuser=(كما أن JSON الخاص بمصادقة WebTerminal يحذف الحقلuser)، لذا يطبّق الخادم آلية fallback المعتادة إلى المستخدمdefault— كما لم تعد بيانات اعتماد HTTP المرسلة عبر قنوات أخرى (X-ClickHouse-UserوHTTP Basic وإعداد<handler><user>الخاص بكل handler) تُتجاوز. #105254 (Alexey Milovidov). - قارئ
ORC: فُصلت القراءة المعتمدة على الإزاحة (readBigAt) عنuse_prefetch، بحيث يمكن قراءة البيانات المرمّزة بأسلوب EC علىHDFSبشكل صحيح حتى عندما تكون قيمةuse_prefetch = false(على سبيل المثال بواسطة Gluten). #103348 (zhanglistar). - أصبحت الملفات التي تُنزَّل من
play.htmlباستخدام التنسيقCSVWithNamesتستخدم الآن امتداد الملف.csv. #103737 (JackFielding). - مزيد من التحقق من صحة الإدخال في كتالوج BigLake. #105117 (Konstantin Vedernikov).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- إصلاح التنسيق غير المتسق عبر تذكّر ما إذا كان التعبير موضوعًا بين قوسين. #92340 (Alexey Milovidov).
- إصلاح المقارنة الدقيقة بين النوعين Decimal وFloat. #94293 (zoomxi).
- السماح باستخدام الوسائط الموضعية في الاستعلامات الموزعة. #94359 (simonmichal).
- إصلاح فشل التحقق في
DatabaseCatalog::updateDependenciesعند حذف عرض مادي ثم إعادة إنشائه بالاسم نفسه؛ وكذلك إصلاح فقدان تبعيات العروض بصمت أثناءRENAME TABLEأوEXCHANGE TABLESعندما تكون التبعيات المرجعية فارغة. #98779 (Alexey Milovidov). - إصلاح إنهاء الخادوم قسرًا (فشل تحقق في
DatabaseCatalog::getTableImpl) الذي كان يحدث عند إنشاء جدول عبرON CLUSTERباستخدام UUID مطابق لـ UUID قاعدة بيانات موجودة. #98861 (xiaohuanlin). - إصلاح استخدام skip indexes عند قراءة البيانات (مع تفعيل الإعداد
use_skip_indexes_on_data_read) ومع patch parts الموجودة التي أنشأتها lightweight updates. #99543 (Alexey Milovidov). - إصلاح استثناء “Not-ready Set” عندما ينقل مُحسِّن الاستعلامات عامل تصفية يحتوي على
IN (subquery)إلى PREWHERE. #100375 (Alexey Milovidov). - إصلاح الخطأ “Cannot find column” عند الجمع بين
ADD COLUMNوRENAME COLUMNفي عبارةALTER TABLEواحدة. #100387 (Alexey Milovidov). - إصلاح العروض التي تجمع بين معاملات
UNIONوINTERSECT/EXCEPTوكانت تُرجع نتائج غير صحيحة بعدDETACH/ATTACHأو إعادة تشغيل الخادوم. #100390 (Alexey Milovidov). - إصلاح استثناء “Trying to execute PLACEHOLDER action” الذي كان قد يحدث أثناء اختبار الضغط باستخدام AST fuzzer عندما يظهر استعلام فرعي مترابط في عبارة IN. #100398 (Alexey Milovidov).
- إصلاح استثناء الخطأ المنطقي عند الإدراج في جدول Iceberg يحتوي على عمود
Dateومقسّم باستخدام تحويلاتyearأوmonthأوday. #100404 (Alexey Milovidov). - إصلاح استخدام skip index مع بيانات غير متوافقة بعد أن يغيّر
ALTER TABLE MODIFY COLUMNنوع العمود، ما قد يؤدي إلى تعطل الخادوم في بُنى sanitizer أو إلى نتائج استعلامات غير صحيحة. #100526 (Alexey Milovidov). - إصلاح تسرّب بيانات الاعتماد في
query_logلدوال الجداولpaimonClusterوpaimonS3ClusterوpaimonAzureClusterوdeltaLakeS3. #100529 (JIaQi Tang). - إصلاح احتمال تعليق
DROP TABLEعلى جداول Kafka engine إلى أجل غير مسمى بسبب حالة توقف متبادل فيrd_kafka_consumer_close. #100604 (Alexey Milovidov). - استُبدلت قائمة
source_table_enginesالمضمّنة ببحث وقت التشغيل عبرStorageFactoryوDatabaseFactory. وأُضيفsource_access_typeإلىDatabaseFactory::EngineFeaturesبحيث يتطلبCREATE DATABASEمع محركات المصدر (PostgreSQL وMySQL وS3 وغيرها) منح المصدر نفسها التي يتطلبهاCREATE TABLE. يُصلح هذا مشكلة فشلGRANT TABLE ENGINE ON *عند ضبطtable_engines_require_grant=false. إغلاق #71544. #100746 (pufit). - إصلاح تعطل الخادم عند القراءة من table كان عمود
ALIASفيها يحتوي على subquery مترابطة متداخلة داخل استدعاء دالة (مثلALIAS toString(intDivOrZero(x, (SELECT ...)))). أصبحCREATE TABLEوALTER TABLEالآن يرفضان أي subquery مهما كان عمقها في تعبيرات الأعمدةDEFAULT/ALIAS/MATERIALIZEDمعTHERE_IS_NO_DEFAULT_VALUE. سابقًا، كان التحقق السطحي يقبل subqueries المتداخلة، لذا كانت الحالة المترابطة تتسبب في التعطل وقت القراءة، بينما كانت الحالة غير المترابطة المتداخلة تبدو وكأنها تعمل لكنها قد تؤدي إلى سلوك غير متوقع؛ أما الآن فتُرفض كلتا الحالتين وقت DDL. #100753 (Groene AI). - إصلاح تعطل الخادم (
Logical error: Bad cast from type DB::FunctionNode to DB::ColumnNode) كان يمكن أن يحدث عند استخدام queries تحتوي على subqueries مترابطة على tables لديها تعريفاتCONSTRAINT ... ASSUME، عندما تكون الإعداداتoptimize_substitute_columnsوconvert_query_to_cnfمفعّلة. #100756 (Groene AI). - إصلاح استثناء كان يمكن أن يحدث عند insert صف في JSON column، حيث كان الصف يضيف حقلًا ديناميكيًا جديدًا إلى جانب حقل ذي نوع محدد بقيمة غير متوافقة، ثم استُخدم العمود لاحقًا كمفتاح GROUP BY. #100758 (Jimmy Aguilar Mena).
- إصلاح تجاوز IO scheduling الخاصة بـ workload بصمت في عمليات الكتابة إلى S3/تخزين الكائنات التي تمر عبر المسار
DiskObjectStorageTransaction(المستخدم في disks من نوعs3_with_keeper، وصراحةً عند ضبطuse_fake_transaction=false). سابقًا، كانت عمليات كتابة INSERT إلى MergeTree tables على هذه disks تتجاهل throttling الخاصة بـCREATE RESOURCE/CREATE WORKLOADلأن رابط resource لم يكن يُحقن مطلقًا فيWriteSettingsلمسار الكتابة المعاملاتي. #100777 (JIaQi Tang). - إصلاح تصادم schema-cache المشتركة بين
ProtobufوProtobufList: كانت قراءة رسالة أولًا بصيغةFORMAT Protobufثم بصيغةFORMAT ProtobufListقد تفشل لأنProtobufListكان يفرض schema المخزنة مؤقتًا بصيغة الغلاف الخاصة به. أصبحProtobufListالآن يعود إلى نوع الرسالة المخزن مؤقتًا عند عدم توفر schema للغلاف. #100849 (Callum Cooper). - إصلاح heap-buffer-overflow في جسر Rust CXX بسبب عدم تطابق ABI لـ
std::exception. #100931 (Azat Khuzhin). - أصبحت
FunctionVariantAdaptorالآن ترميILLEGAL_TYPE_OF_ARGUMENTعندما تكون جميع بدائلVariantغير متوافقة مع دالة، بدلًا من إعادةNullable(Nothing)بصمت. سابقًا، كان predicate من النوعWHERE function(variant_col)، حيث لا يكون أي نوع بديل متوافقًا، يعيد 0 rows من دون خطأ، بينما كان سياقSELECTالمكافئ يرمي الخطأ بشكل صحيح بالفعل. #100939 (Vasily Chekalkin). - لم يعد
TRUNCATE ALL TABLESيفشل عندما تحتوي database على views. #100943 (Alexey Milovidov). - أصلِح تحسين
optimize_rewrite_array_exists_to_hasليتعامل بشكل صحيح مع الحالات غير المتوافقة نوعيًا (مثل Date مقابل String)، وأعِد تفعيله افتراضيًا. #100944 (Alexey Milovidov). - أصلِح أولوية إعدادات S3 بحيث تتجاوز إعدادات القرص في
storage_configurationالقسم العام<s3>، بينما تتجاوز إعدادات المستخدم/profile/مستوىqueryكليهما. #100975 (Alexey Milovidov). - أصلِح مشكلة فقدان التسلسل sparse لإشارة الصفر السالب (-0.0) في أعمدة BFloat16 وFloat32 وFloat64. #100983 (Takumi Hara).
- أُصلِح خطآن في محلل geometry بصيغة WKT المستخدم عند قراءة ملفات GeoParquet وArrow المرمّزة بـ WKT: كانت الأشكال الهندسية
MULTILINESTRINGتُحلَّل خطأً على أنهاPolygon(مما يسبب استثناءً فيtyped columnsوفسادًا صامتًا للبيانات في أعمدةGeometryالمختلطة)، كما أن سلسلة WKT غير صحيحة من دون keyword للنوع كانت تؤدي إلى سلوك غير معرّف بدلًا من ظهور خطأ واضح. #100997 (Vasily Chekalkin). - أصلِح استعلامات
grouping/GROUPING SETSعلى جداول Distributed ذات shard واحد، والتي كانت تفشل بالرسالة “Method executeImpl is not supported for ‘grouping’ function”. #101030 (Alexey Milovidov). - أصلِح
LOGICAL_ERROR“Column identifier is already registered” فيplanner، والذي كان قد يحدث عند معالجة expression الجدول نفسه عدة مرات. #101048 (Alexey Milovidov). - أصلِح استثناء LOGICAL_ERROR “Column identifier is already registered” عند استخدام الإعداد
additional_result_filterمع استعلامات UNION أو EXCEPT. #101051 (Alexey Milovidov). - أُصلِح تعطل server (Logical error: Bad cast from ColumnVector to ColumnNullable) عند استخدام
* APPLYمع aggregate functions وgroup_by_use_nulls=1مع GROUPING SETS أو ROLLUP أو CUBE. #101062 (Groene AI). - أصلِح حلقة لا نهائية عندما تتجاوز
input_format_csv_skip_first_linesأوinput_format_tsv_skip_first_linesعدد الأسطر في الملف. #101111 (Alexey Milovidov). - أصلِح وصولًا خارج الحدود في تحسين lazy materialization، كان يمكن أن يتسبب في استثناء في builds التصحيح. #101144 (Alexey Milovidov).
- أصلِح type inference في CTEs العودية: أصبحت column types الآن تُوسَّع تكراريًا عبر
getLeastSupertypeبين جانبيUNION ALLغير العودي والعودي حتى الوصول إلى الاستقرار، مما يمنع overflow للأعداد الصحيحة في تعبيرات مثلx + 1. #101155 (Alexey Milovidov). - قيِّد إعدادات حجم block الضغط في MergeTree (max_compress_block_size, min_compress_block_size, marks_compress_block_size, primary_key_compress_block_size) عند 256 MiB لمنع تعطل server عند ضبط قيم متطرفة عبر CREATE TABLE SETTINGS. #101159 (Groene AI).
- إصلاح تعطل LOGICAL_ERROR في
QueryAnalyzer::resolve()عندما تستخدم ROW POLICY استعلامًا فرعيًا scalar في عبارةUSINGالخاصة بها (مثلUSING (SELECT 1)). إغلاق #100695. #101263 (Groene AI). - إصلاح سلوك غير معرّف في
MergeTreeDataPartWriterCompact::cancelعند فشل تخصيص تدفق. #101292 (Alexey Milovidov). - إصلاح حالة لم تكن فيها المنطقة الزمنية تُضمَّن أثناء الإسناد في تعليمة ALTER. إغلاق #101328. ذو صلة بـ https://github.com/ClickHouse/ClickHouse/pull/100647. #101403 (Yarik Briukhovetskyi).
- إصلاح تعطل الخادم (LOGICAL_ERROR) في استعلامات INSERT SELECT مع ORDER BY ALL عندما يُنتج مسار SELECT عدة تدفقات. #101443 (Groene AI).
- إصلاح نتائج الاستعلام غير الصحيحة الناتجة عن إعادة ترتيب join، التي كانت تدفع عامل تصفية INNER JOIN (الذي يشير فقط إلى الجانب المُحتفَظ به من outer join) إلى عبارة ON الخاصة بـ outer join. #101504 (Vladimir Cherkasov).
- تخطّي تطبيق lazy materialization على الخطط التي تحتوي على arrayJoin، إذ قد يؤدي ذلك إلى عدم احترام limit. إغلاق #101608. #101644 (Vladimir Cherkasov).
- إصلاح نتائج استعلامات JOIN غير الصحيحة عندما كان تحسين
mergeFilterIntoJoinConditionيُسقط بصمت شرط مساواة في WHERE مع أنواع غير متطابقة. #101652 (Xiaozhe Yu). - إصلاح عدم عمل تلميح الاختبار
errorمع أخطاء الصياغة/التحليل — إذ كان-- { error SYNTAX_ERROR }سابقًا، عند استخدامه مع query غير صحيح، يفشل برسالة “Expected server error” بدلًا من مطابقة خطأ التحليل على جانب العميل. #101675 (Groene AI). - إصلاح أن
INTO OUTFILE ... TRUNCATEلم يكن يستخدم فعليًا إعادة التسمية atomic — إذ كانت الكتابة تتم مباشرة إلى الملف الأصلي بدلًا من ملف مؤقت، لذلك كان المحتوى الأصلي يُدمَّر عند فشل query. والآن تُكتب البيانات إلى ملف مؤقت ولا يُعاد تسميته إلا عند النجاح. #101884 (Pablo Marcos). - إصلاح الاستثناء
Unsupported DeltaLake type: varchar(n)عند قراءة جداول Delta Lake التي يحتوي schema الخاص بها على أنواع أعمدة varchar(n) أو char(n). وتُربط هذه الأنواع الآن بـ String، بما يتوافق مع كيفية تخزين protocol الخاص بـ Delta Lake لها كمصفوفات بايت عادية في Parquet. #101973 (Flavio Malavazi). - إصلاح فقدان صامت للبيانات عند قراءة أرشيفات tar من S3 باستخدام
schema_inference_mode=unionوschemas Parquet غير المتجانسة — إذ كانت parquet metadata cache تعيد استخدام metadata الخاص بالملف الأول على نحو غير صحيح لجميع الملفات اللاحقة في الأرشيف. #101990 (Ahaan Limaye). - إصلاح تعطل الخادم (LOGICAL_ERROR) عند تنفيذ ALTER TABLE UPDATE/DELETE على جداول Iceberg إذا لم يكن قد نُفِّذ أي SELECT أو INSERT مسبقًا على الجدول خلال فترة تشغيل الخادم نفسها. #102113 (Alexey Milovidov).
- إصلاح تعطل محتمل عند تنفيذ استعلام ALTER على جداول من قاعدة بيانات داخل الذاكرة (مثل الجداول المؤقتة). #102360 (Den Kalantaevskii).
- تم إصلاح مشكلة قيام
formatQueryبإنتاج grants مكررة مثلGRANT FILE ON *.*, FILE ON *.* TO xبدلًا منGRANT FILE ON *.* TO xعند تنسيق grants المتوافقة مع الإصدارات السابقة من READ/WRITE على المصدر نفسه. #102411 (Groene AI). - إصلاح فقدان التوازي في التجميع بعد استعلامات read-in-order عندما تكون قيمة
max_streams_to_max_threads_ratioأكبر من 1. #102467 (Alexey Milovidov). - تم إصلاح تعطل (
LOGICAL_ERROR: Unknown virtual column) عند تحديد subcolumns (مثل.nullلـ Nullable، و.size0لـ Array، وعناصر Tuple، أو مفاتيح/قيم Map) من table engine من نوع Buffer. #102470 (Groene AI). - إصلاح الاستثناء “Cannot fold actions for projection” في تحسين إعادة ترتيب join عندما يتم دمج LEFT/RIGHT JOIN مع
join_use_nullsمع joins أخرى تتضمن أكثر من جدولين. #102516 (Alexey Milovidov). - تم إصلاح overflow صامت في العمليات scalar pointwise على numericIndexedVector (مثل
numericIndexedVectorPointwiseAdd) عندما تكون قيمة scalar خارج النطاق. أصبحت هذه المدخلات الآن تُطلقINCORRECT_DATAبدلًا من إرجاع قيم تالفة. #102546 (FriendLey). - إصلاح تنسيق AST غير المتسق لعبارة INSERT مع SAMPLE وOFFSET على مستوى الاستعلام. يُغلق #102523. #102547 (zoomxi).
- إصلاح استثناء
LOGICAL_ERRORفيgroupConcatعند إلغاء تسلسل حالة aggregate function غير صالحة. #102558 (Christoph Wurm). - لم نعد نقبل الآن بيانات غير صالحة في نهاية قيم Time64 بتنسيق CSV عند استخدام
input_format_csv_use_default_on_bad_values=0. يُغلق #102490. #102596 (Yarik Briukhovetskyi). - إصلاح استثناء UNKNOWN_ELEMENT_OF_ENUM عند insert قيمة default في JSON column مع paths من النوع Enum. يُغلق #102359. #102687 (Pavel Kruglov).
- إصلاح تلف الملف columns_substreams.txt أثناء rename العمود في بعض الحالات. يُغلق #102259. #102689 (Pavel Kruglov).
- إصلاح insert في Data type Time أثناء parsing لـ JSON. يُغلق #102016. #102690 (Pavel Kruglov).
- إصلاح الترميز الست عشري لعينة المحتوى في أسماء ملفات schema المخزنة مؤقتًا. يُغلق #101904. #102703 (Pavel Kruglov).
- تم إصلاح انتهاك ترتيب الفرز (تعطل في وضع debug، وفساد صامت للبيانات في إصدار release) أثناء دمج
SummingMergeTreeعندما يكون مفتاحORDER BYتعبير hash على عمودFloat32يحتوي على قيم signaling NaN. #102791 (Groene AI). - تم جعل
DETACH DATABASE ... SYNCوالعمليات الأخرى التي تستدعيwaitDetachedTableNotInUseقابلة للإلغاء عبرKILL QUERYومستجيبة لإيقاف تشغيل server، ما يمنع التعليق إلى أجل غير مسمى عندما يحتفظ query متزامن بمرجع إلى table. #102804 (Antonio Andelic). - تم إصلاح احتمال إرجاع نتيجة غير صحيحة في
ANY RIGHT JOIN. #102893 (Nikita Taranov). - تم إصلاح فشل طلبات S3 مع ظهور
ios_base::clear: unspecified iostream_category errorبدلًا من إعادة المحاولة، وكان السبب أن PocoBufferedStreamBuf::flushBufferلا يتعامل مع عمليات الكتابة القصيرة من طبقة socket. #102894 (Sema Checherinda). - تم إصلاح فشل table function
input('auto')عبر HTTP interface في استعلامات INSERT SELECT. #102902 (Miсhael Stetsyuk). - تم تعطيل تحسين LIMIT البسيط عند استخدام row policies/additional_table_filters (للسماح بإجراء index analysis بالتوازي). #102921 (Azat Khuzhin).
- تم إخفاء secret key في دالة SQL
HMAC. إصلاح #102927. #102997 (Mikhail f. Shiryaev). - تم إصلاح الاستثناء
MULTIPLE_EXPRESSIONS_FOR_ALIASالذي كان يظهر في distributed queries التي تشير إلى استدعاءquantileنفسه عدة مرات (مثلًا فيSELECTوHAVINGوORDER BY) عند تفعيلoptimize_syntax_fuse_functions. #103014 (tanner-bruce). - تم إصلاح حالة اكتشفها CI حيث جرى تمرير set غير جاهز عندما يعتمد filter على column في الجهة اليسرى. يُغلق #102966. #103029 (Yarik Briukhovetskyi).
- تم إصلاح castOrNull إلى JSON في بعض الحالات. يُغلق #101818. #103036 (Pavel Kruglov).
- تم إصلاح حالة كان فيها
SELECT DISTINCTيُرجع بصمت نتائج غير مكتملة عندما كانت aggregate projection تطابق query وكانت بعض parts في table لا تحتوي على بيانات projection (على سبيل المثال، أُضيفت projection إلى table يحتوي بالفعل على بيانات، ولم يُشغَّلMATERIALIZE PROJECTION). يُغلق #102951. #103052 (Nihal Z. Miaji). - تم إصلاح الاستثناء
TOO_FEW_ARGUMENTS_FOR_FUNCTIONعندما ينهار predicate فيWHEREمثلAND(OR(A, A), A)إلى argument واحد على المستوى الأعلى أثناء استخراج التعبيرات المشتركة في analyzer. #103072 (Peng). - إصلاح خطأ منطقي
Function writeSlice expects same column types for GenericArraySlice and GenericArraySinkكان يظهر عند تقييمif/ifNullعلى tuples أو maps أو arrays التي تحتوي على عنصرQBit. كانتColumnQBit::structureEqualsتقارن بشكل غير صحيح الـ tuple الداخلية لأحد أعمدةQBitمع الغلاف الخارجي للآخر، لذلك كان يتم اعتبار أعمدةQBitالمتطابقة بنيويًا مختلفة. #103084 (Groene AI). - جعل
DETACH DATABASEمعdatabase_atomic_wait_for_drop_and_detach_synchronouslyيستجيب لـKILL QUERYبدلًا من أن يظل معلّقًا إلى أجل غير مسمى عند الاحتفاظ بمرجع إلى table. #103095 (Alexey Milovidov). - إصلاح segfault عند حذف وحدة WASM باستخدام predicate ليس معرّفًا (مثل
WHERE 1=1). #103101 (Joe Redfern). - إصلاح مشكلة في التوافق مع الإصدارات السابقة حيث كانت العملاء القدامى يفشلون مع
UNEXPECTED_PACKET_FROM_SERVERعند الإدراج في server أحدث عبرremote()أو Distributed tables، وكان السبب هو استدعاءsendProgressبلا شرط في نهايةprocessInsertQuery. #103148 (Sema Checherinda). - يجب ألا يقوم IN، عند استخدام argument ثانٍ من نوع tuple غير ثابت، بإجراء CAST لعناصر tuple إلى نوع الطرف الأيسر، لأن ذلك قد يسبب overflow. يغلق #103055. #103169 (Yarik Briukhovetskyi).
- إصلاح استخدام قيمة غير مهيأة في دالة protocol. #103187 (Pavel Kruglov).
- إصلاح
LOGICAL_ERROR(Bad cast … to ColumnLowCardinality) أثناء index analysis في MergeTree عندما تقارن عبارةWHEREKey column من نوعLowCardinalityمع ثابت محوَّل إلى نوع يحتوي علىLowCardinalityمتداخل (على سبيل المثالVariant(LowCardinality(Date), String)). #103211 (Groene AI). - إصلاح
Logical error: 'index < bucket_count'في عائلة aggregate functiontimeSeries*ToGrid(مثلtimeSeriesResampleToGridWithStalenessوtimeSeriesChangesToGridوtimeSeriesResetsToGridوtimeSeriesRateToGrid) عند استدعائها باستخدام parameters قصوى لـ timestamp كانت ستؤدي إلى overflow في العمليات الحسابية الموقعة ذات 64-bit أثناء حساب عدد buckets. كما وُضع حد أقصى لإجمالي عدد grid buckets عند 16 مليونًا لمنع تخصيص كميات كبيرة من الذاكرة بالخطأ نتيجة مدخلات خبيثة. #103223 (Groene AI). - إصلاح الاستثناء
Logical error: 'Port is already connected'أثناء توسيع pipeline في مسارFINALالكسول لـReplacingMergeTree. أثرت هذه المشكلة في queries التي تستخدمquery_plan_optimize_lazy_final = 1عندما كانتReadFromMergeTree::initializePipelineتُدرج تحويلات داخلية (مثلResize) تربط processors الخاصة بالـ sub-pipeline معًا، مما جعلLazyUnorderedReadFromMergeTreeSource::expandPipelineيحاول توصيل منافذ output كانت متصلة مسبقًا. #103230 (Groene AI). - إصلاح نتائج غير صحيحة من
LIMIT BYوDISTINCTعندما يكون الإدخال عبارة عنUNION ALLمن subqueries مرتبة. كان مُحسِّن query plan يتعامل خطأً مع هذا union على أنه مرتب عالميًا، مما أدى إلى إرجاع صفوف إضافية. #103231 (Nihal Z. Miaji). - إصلاح احتمال حدوث تعطل أثناء حساب الإحصاءات في Map type مع lazy replication. يغلق #102390. #103273 (Pavel Kruglov).
- إصلاح حالة data race في dictionary sources الخاصة بـ ClickHouse وMySQL وPostgreSQL وXDBC، حيث يقرأ
clone() constمن السلسلةinvalidate_query_responseنفسها التي يكتب إليهاisModified() const. #103277 (Miсhael Stetsyuk). - إصلاح الاكتشاف غير الصحيح للرتابة في
Date32. يُغلق #101265. #103283 (Yarik Briukhovetskyi). - قصر سلاسل حزمة Hello عبر TCP قبل المصادقة على 64 كيلوبايت، وإضافة server setting باسم
handshake_timeout_millisecondsللحد من إجمالي وقت المصافحة، بما يمنع clients غير الموثَّقين من استهلاك قدر مفرط من الذاكرة أو إبقاء threads مشغولة إلى أجل غير مسمى. #103284 (Sema Checherinda). - إصلاح الخلل الذي كانت فيه قيمة min_value > max_value في إحصاءات ColumnIndex الخاصة بـ Parquet لأعمدة String. #103334 (Saurabh Kumar Ojha).
- إصلاح التعامل غير الصحيح مع صفوف NULL لمدخلات
Nullable(Tuple(...))فيflattenTupleوtupleToNameValuePairs. يحتفظflattenTupleالآن بخريطة null الخارجية بحيث تظل صفوف NULL كما هي. ويغيّرtupleToNameValuePairsالآن نوع value في النتيجة إلىNullable(T)متى أمكن ذلك عندما يكون الإدخالNullable(Tuple(...))، بحيث تُنتج صفوف NULL[('a', NULL), ('b', NULL)]بدلًا من[('a', 0), ('b', 0)]. وعندما يتعذر تغليف element type داخلNullable(مثلArray)، تُستخدم default values بدلًا من NULL. يُغلق #103312. #103383 (Nihal Z. Miaji). - التحقق من بيانات Dynamic المسطّحة المشوَّهة في Native format. #103392 (Pavel Kruglov).
- إصلاح RPC stale كان يتسبب في تعطل replication بعد مزامنة snapshot. #103406 (Seva Potapov).
- إصلاح الخطأ
LOGICAL_ERROR“Cannot pop N rows from X” الذي كان يؤدي إلى إيقاف server (في builds الخاصة بالتصحيح / sanitizer) عند قراءة document من BSON مشوَّه يحتوي على value يكون نوع BSON الخاص بها غير متوافق مع column type المستهدَف داخل عمودNullable(T)أوArray(Nullable(T)). وأصبح الصف المشوَّه الآن يُنتج استثناءILLEGAL_COLUMNواضحًا كما هو مقصود. #103418 (Groene AI). - إصلاح إيقاف server في
arrayFillوarrayReverseFillعند تطبيقهما على عمودArray(String)يكون صفه الأول فارغًا مع lambda ثابتة القيمة false. إذ تسبب underflow في حلقة aggregate / المصفوفة الفرعية في تحويل فهرسsize_tإلىSIZE_MAX، مما أدى لاحقًا إلى قراءة خارج الحدود داخلColumnString::doInsertManyFrom. وهذه من family نفسها الخاصة بالخلل #12263. #103424 (Groene AI). - إصلاح ACCESS_DENIED / UNKNOWN_TABLE في RMVs اللاحقة من نوع APPEND مع SQL SECURITY DEFINER عندما يؤدي EXCHANGE في RMV upstream من نوع REPLACE إلى تبديل identity الخاصة بتخزين الهدف أثناء resolution. #103427 (Alexander Gololobov).
- تعبئة عمود
_timeمن table function url. #103437 (Nikita Taranov). - إصلاح احتمال حدوث قراءة خارج الحدود في مسار فك الضغط لمرمّز
ALPعند معالجة مُدخلات تالفة ذات عرض بتات غير صالح. #103457 (Raufs Dunamalijevs). - إصلاح خلل كان قد يؤدي إلى فقدان اسم filesystem cache عند تنسيق الاستعلام
SYSTEM SYNC FILESYSTEM CACHE '<name>' ON CLUSTER ...، مما يجعل العقد البعيدة تزامن جميع ذواكر التخزين المؤقت لنظام الملفات بدلًا من ذاكرة التخزين المؤقت المطلوبة فقط. #103469 (Asish Kumar). - إصلاح معالجة المسار المرمّز بصيغة URL في
deltaLakeAzure. يغلق #103509. #103525 (Smita Kulkarni). - إصلاح مشكلة heap-use-after-free عند ضرب حالة
AggregateFunctionبعدد صحيح (مثلquantilesExactState(...) * N). كانت حلقة الرفع إلى الأس بالتربيع تدمج الحالة مع نفسها، وهو سلوك غير معرّف عندما يعيدmergeالخاص بالدالة التجميعية تخصيص مساحة التخزين الداخلية. يغلق STID 0988-40af. #103536 (Groene AI). - إصلاح الخطأ النادر
LOGICAL_ERROR“Part X intersects previous part Y” الذي كان يظهر أثناء بدء تشغيل جدولReplicatedMergeTreeعندما يكون على القرص جزءان فارغان غير متوقعين لهما نطاقات blocks متداخلة من دون أن يحتوي أحدهما الآخر. كان هذا الاستثناء يوقف خيط Attach الجدول ويمنع تشغيله. #103537 (Groene AI). - إصلاح
Logical error: Incorrect mark rows for part ...(توكيد مخصص للتنقيح فقط) الذي كانت mutations تُحفّزه في جداولMergeTreeذات index granularity غير تكيفية (index_granularity_bytes = 0) عندما تكون علامة البيانات الأخيرة غير مكتملة (ويمكن إعادة إنتاجه بأعلى موثوقية عبرDETACH/ATTACHمتبوعًا بـ lightweightDELETE). #103538 (Groene AI). - إصلاح مشكلة قيام
clickhouse-localبإرجاع 0 rows بصمت عند القراءة من الملفين الوهميين/procو/sysعبرfile()table function (مثلSELECT * FROM file('/proc/cpuinfo', 'RawBLOB')). #103548 (Ashrith Bandla). - إصلاح التعامل مع الوسيط
max_string_lengthفيGenerateRandomtable engine. #103550 (Alex Kuleshov). - إصلاح إخفاء بيانات الاعتماد المتداخلة في logs. #103552 (Vitaly Baranov).
- إصلاح اكتشاف SVE الذي كان يستخدم تعليمات SVE حتى عند عدم توفرها. #103568 (Raúl Marín).
- إصلاح parsing معاملات التخزين الخاصة بـ
GenerateRandom. #103574 (Konstantin Bogdanov). - إصلاح حلقة لا نهائية في
WITH FILLللبيانات التي تبدأ بـ ±inf. #103580 (Konstantin Bogdanov). - إصلاح
JSONExtractإلى نوعVariantالذي كان يقتطع الأرقام العشرية في JSON بصمت. سابقًا، كانJSONExtract('{"x": 3.14}', 'x', 'Variant(Int64, Float64)')يعيدInt64=3وكانJSONExtract('{"x": 3.14}', 'x', 'Variant(String, Int64)')يعيدInt64=3، ما يؤدي إلى إسقاط الجزء الكسري. الآن تُحفَظ القيمة الكسرية بالكامل دون فقدان: إذ يتولاها عضوFloat64/Decimalعند وجوده، وإلا يلتقط عضوStringقيمة JSON الأصلية. أما أنواعVariantالتي تحتوي على أعضاء عددية صحيحة فقط (مثلVariant(Int64, Int32)) والاستخراج المباشر كعدد صحيح (JSONExtract(json, 'Int64'),JSONExtractInt, إلخ) فلم يطرأ عليها تغيير. #103620 (Groene AI). - إصلاح
SYSTEM INSTRUMENT REMOVEعند استدعائه من دون وسائط، إذ كان يُنتجstd::bad_optional_access(رمز الخطأ 1001) بدلًا منSYNTAX_ERROR(رمز الخطأ 62). #103622 (Pablo Marcos). - إصلاح خطأ منطقي / سلوك غير معرّف في
windowIDوtumbleضمن window view عند استدعائهما بسلسلة منطقة زمنية بوصفها الوسيطة الثالثة. #103641 (Alexey Milovidov). - أصبح تسجيل عميل S3 يتعامل الآن مع استجابات HTTP 400 التي تتضمن ترويسة x-amz-bucket-region غير فارغة (أي منطقة توقيع SigV4 خاطئة) على أنها حالة معلوماتية تشير إلى المنطقة الخاطئة، مع سطر سجل أوضح بدلًا من المسار العام ذي طابع الخطأ. كما أُضيف موفّر بيانات الاعتماد لهوية الويب الخاص بـ STS إلى سلسلة بيانات اعتماد S3 فقط عند تهيئة هوية الويب، ما يقلل التحذيرات الزائفة في عمليات النشر التي لا تستخدمه. يغلق #99140. #103673 (MeltonSmith).
- إصلاح
SYSTEM SYNC REPLICA <db>.<tbl> IF EXISTSلكي ينجح بصمت عندما لا تكون قاعدة البيانات موجودة، بما يطابق السلوك الحالي عند غياب الجدول والسابقة التي أرساهاDROP TABLE IF EXISTS. سابقًا، كان الاستعلام يطرحUNKNOWN_DATABASEرغم وجودIF EXISTS. يغلق #103629. #103689 (Groene AI). - إصلاح الخطأ المنطقي
Arguments of 'plus' have incorrect data typesالذي كانت ترميهFunctionBinaryArithmetic::executeImpl2عندما يحتوي جدولMergeTreeعلىArray(LowCardinality(...))في مفتاح الفرز، وتستخدم عبارةWHEREالدالتينplus/minusبين ذلك العمود وثابتArrayمن نوع عنصر مختلف. وأصبحKeyCondition::getMonotonicityForRangeالآن يزيلLowCardinalityتكراريًا قبل استدعاء التوجيه العددي الداخلي. #103701 (Groene AI). - إصلاح حالة تسابق عند تغيير حجم dynamic cache في الإصدار 26.1+. #103702 (Kseniia Sumarokova).
- إصلاح مشكلة كانت فيها فهارس التخطي النصية و bloom_filter على أعمدة
ALIASالتي احتوى تعبيرها على lambda ذات ثوابت ملتقطة (مثلarrayMap((k, v) -> concat(k, '=', v), mapKeys(m), mapValues(m)))) تُتجاهل بصمت. #103708 (Anton Popov). - إصلاح
positionوpositionCaseInsensitiveعندما تكونstart_posقريبة منUINT64_MAX، إذ كانا يعلقان أو يتسببان في خطأ segmentation fault بسبب تجاوز في حساب مؤشرات الذاكرة. #103766 (Raúl Marín). - إصلاح سلوك غير معرّف أثناء تحليل قيمة DateTime تحتوي على جزء كسري مزدوج. #103773 (Yarik Briukhovetskyi).
- تم إصلاح تراجع في صحة البيانات في 26.x، حيث كانت الدالتان
ifوmultiIfالمجمّعتان باستخدام JIT، عند استخدام نوع نتيجةDecimalووجود قيمة literal غيرDecimal(عدد صحيح أو فاصلة عائمة) في أحد الفروع، تُرجعان بصمت قيمة أصغر بمقدار10^scale. ولم يتأثر المسار البطيء (غير المعتمد على JIT). الحل المؤقت في الإصدارات المتأثرة:SET compile_expressions = 0. #103809 (Groene AI). - إصلاح تمرير tokenizer من text index إلى الدوال المدعومة. #103826 (Elmi Ahmadov).
- إصلاح النتائج الخاطئة من
numbersوgenerate_seriesوالمصادر المشابهة الملتزمة بالنطاق عندما يستخدم الشرطWHEREالعاملINأوNOT INعلى tuple تُختزل عناصره إلى Key column واحدة (على سبيل المثال،WHERE tuple(number, number) NOT IN (tuple(1, 2))). يُغلق #103660. #103835 (Groene AI). - إبقاء ذروة الذاكرة الفعلية لخوارزمية hash join ذات auto-spilling تحت
max_bytes_before_external_join. سابقًا، كان كلٌّ من التخصيص المسبق المعتمد على الإحصاءات، ومضاعفة hash table في مكانها، وbuckets داخل الذاكرة غير المقيّدة فيGraceHashJoinقادرًا على دفع query إلى تجاوز الحد المهيأ والتسبب فيMEMORY_LIMIT_EXCEEDED. #103838 (Alexey Milovidov). - إصلاح حالة تعليق عند إيقاف
clickhouse-localعندما تكون logs النظام (مثلtext_logأوfilesystem_cache_log) مهيأة. كانتSystemLogs::flushImplتستدعيBaseDaemon::instance().flushTextLogs()، التي تُطلقstd::bad_castخارجclickhouse-serverوتُبقي threads الحفظ قيد التشغيل إلى أن يحجبpthread_cond_destroyتدمير طوابير log النظام. #103874 (Alexey Milovidov). - رفض استعلامات CTE من نوع
MATERIALIZEDالتي يُفضي body الخاص بها إلى column types مستنتجة مختلفة عبر مراجع مختلفة، مع إظهار خطأTYPE_MISMATCHواضح بدلًا من تعطل server بخطأBad castمن نوعLOGICAL_ERROR. كان هذا يحدث سابقًا عندما كان body الخاص بـ CTE يشير إلى identifiers من النطاق الخارجي (مثل alias من projection الخاصة بالـ subquery المستدعية) التي كانت تُضمَّن inline كثوابت مختلفة لكل مرجع. #103879 (Groene AI). - إصلاح use-of-uninitialized-value في مُحسّنات query plan الخاصة بتحويل JOIN (
tryConvertAnyOuterJoinToInnerJoin,tryConvertAnyJoinToSemiOrAntiJoin) عندما يحتوي filter فوقANYOUTERJOINعلى دالة غير deterministic مثلrandأوnowأوrowNumberInAllBlocks. لم يعد المُحسِّن يحاول constant-fold لهذه filters ويترك JOIN دون تغيير، مما يمنع أيضًا التحويلات غير الصحيحة إلىINNER/SEMI/ANTI JOINالتي قد تُسقط rows بصمت. #103880 (Groene AI). - إصلاح use-after-free في
StorageKafka2كان قد يتسبب في تعطل server عندما تُستبدل session لـ Keeper بينما يكون consumer محتفظًا بأقفال topic-partition من النوع ephemeral. #103890 (Groene AI). - تم إصلاح
LOGICAL_ERRORبالنص “Primary key type mismatch” الذي كان يُطلق عند تنفيذ join على table من نوعEmbeddedRocksDBعبرJOIN ... USING (key)مقابل subquery يكون فيها Key column من type مختلف (مثلNullable(UInt64)أوInt64أوDecimal) عن primary key الخاصة بالتخزين. أصبح planner الآن يرفضDirectKeyValueJoinعند عدم تطابق type ويعود إلىHashJoin، الذي يتعامل مع تحويل النوع. #103928 (Groene AI). - لم يعد
SET max_threads = DEFAULT(وكذلكmax_final_threadsوmax_parsing_threads) يفقد حالةauto. سابقًا، بعد إعادة تعيين أحد هذه الإعدادات، كانsystem.settingsيعرض عدد الأنوية المحسوب (مثلًا32) بدلًا من'auto(32)'، وكان الخادم يتصرف كما لو أن القيمة قد ثُبِّتت صراحةً. #103991 (Groene AI). - إصلاح الخطأ
SIZES_OF_ARRAYS_DONT_MATCHعند قراءة أعمدةAggregateFunction(topK(N), String)التي زادت قيمةalpha_sizeالمحفوظة فيها نتيجة دورة deserialize+serialize سبقت الإصدار 25.12. #104002 (Raúl Marín). - إصلاح ثغرة حقن SQL في مصادر القواميس PostgreSQL وCassandra وXDBC: كانت مفاتيح السلاسل النصية التي تحتوي على single quotes تُهرَّب باستخدام
\'(backslash)، بينما تتعامل هذه الأنظمة الخلفية معه على أنه backslash حرفي لا كتسلسل تهريب، ما يتيح حقن SQL عشوائي في استعلامات lookup الخاصة بالقواميس. يُخرجExternalQueryBuilderالآن تهريب''القياسي في SQL لهذه الأنظمة الخلفية؛ بينما تواصل مصادر القواميس ClickHouse وMySQL استخدام التهريب عبر backslash. #104009 (Shaohua Wang). - إصلاح احتمال عدم تطابق النوع في aggregation عند تغيير column type من/إلى LowCardinality، من دون إعادة بناء min-max projection. #104013 (Nikita Taranov).
- إصلاح حلقة لا نهائية من query optimization نتجت عن عدم تمرير منع إزالة column غير المستخدم عند دمج expressions. #104083 (János Benjamin Antal).
- إصلاح
LOGICAL_ERRORفيStreamingStorageRegistry::renameTableعند إعادة تسمية streaming tables على دفعات (S3Queue وKafka وRabbitMQ)، وذلك باستخدام تتبّع الهوية المستند إلى UUID بدلًا من الاسم. #104101 (Nikita Taranov). - إصلاح نتائج غير صحيحة عندما كان CTE مُنشأً باستخدام
UNION ALLيحتوي على فرعSELECT DISTINCT، بينما كان query الخارجي يُسقِط فقط subset من columns الخاصة بـ CTE. كانتRemoveUnusedProjectionColumnsPassفي analyzer الجديد تزيل على نحو غير صحيح column غير المُشار إليه من إسقاطDISTINCTالداخلي، ما أدى إلى دمج rows كان ينبغي أن تظل متميزة (القيمة نفسها في column المُسقَط لكن قيمة مختلفة في column المحذوف) في row واحدة. #104114 (Groene AI). - إصلاح عدة مشكلات صحة في حالات طرفية في الإعداد
optimize_inverse_dictionary_lookup، حيث كان التحسين قد يحذف rows بصمت أو يمنع ظهور exceptions. يغلق #103270. ويغلق #103085. #104133 (Nihal Z. Miaji). - إصلاح كتابة خارج الحدود أثناء deserialize لحالة
quantileTiming. #104141 (Alexey Milovidov). - إصلاح سلوك غير معرّف عند تحويل قيمة
Float64خارج النطاق إلى integer type عريض (UInt64,Int64,Int128,UInt128,Int256,UInt256). سابقًا، كانت القيم المساوية لـFloat64(numeric_limits<T>::max())(التي تُقرَّب للأعلى إلى قيمة تتجاوز الحد الأقصى الفعلي) تتجاوز فحص الحدود وتنتج UB في التحويل اللاحق. وقد أثّر ذلك في parsing لمعاملات aggregate function (topK,histogram,uniqUpTo,groupArrayInsertAt، وغيرها)، وكذلك في settings ذات النوع الصحيح عبرSET <setting> = <Float64>. يغلق #103817. #104154 (Groene AI). - إصلاح استثناء
LOGICAL_ERROR“Unexpected return type from comparison. ExpectedUInt8. GotConst(Nullable(UInt8))” عند مقارنةTuple(Tuple(Nullable(...)))متداخلة (أو ذات تداخل أعمق) مع قيمةStringحرفية. أصبح نوع الإرجاع للمقارنة يُستنتج الآن بشكل صحيح على أنهNullable(UInt8)، بما يتوافق مع سلوك وقت التشغيل. #104171 (Groene AI). - إصلاح تعطل الخادم (
UndefinedBehaviorSanitizer: reference binding to null pointer، وsegfault في إصدارات release) عندSELECT ... FROM <ReplacingMergeTree(version, is_deleted)> FINAL PREWHERE is_deleted = <expr> AND <other column expr>عندما تكونquery_plan_optimize_lazy_final = 1. فقدت خطوة القراءة lazy-FINAL غير المتقاطعة العمودis_deletedمن ترويسة الخرج لأنPREWHEREاستهلكه كمدخل من دون إعادة تمريره ضمن الخرج. ثم قامت خطوةaddIsDeletedFilterاللاحقة بإلغاء مرجعية مؤشرActionsDAG::Nodeفارغ. #104177 (Groene AI). - عند استدعاء جدول system.failpoints، كان يستخدم failpoint، ما قد يؤدي إلى تعطيله. #104237 (Pedro Ferreira).
- إصلاح
MemorySanitizer: use-of-uninitialized-valueفي الدوالdetectLanguage*عندما يحتوي الإدخال على محرف UTF-8 ينتهي تمامًا عند حدّ buffer. #104257 (Raúl Marín). - إصلاح خطأ منطقي (
Bad cast from type DB::CachedObjectStorage to DB::S3ObjectStorage) كان يؤدي إلى إيقاف parsing الوسائط الخاصة بـ table functions وengines لبحيرات البيانات (icebergS3,deltaLakeS3، إلخ) عند استدعائها باستخدامSETTINGS disk = '...'على disk تكون object storage الأساسية له مغلفة بمُزيّن مثل filesystem cache. يُغلق #89300. #104258 (Groene AI). - إصلاح parsing تعبيرات الفهرسة الموضوعة بين قوسين على columns المسماة
values، مثل(values['a'])، بحيث لم تعد تُفسَّر على أنها تعبيرات جدولVALUESالقياسية في SQL. #104312 (Desel72). - إصلاح تعطل الخادم/
LOGICAL_ERRORفي thread الإخلاء الخلفية الخاصة بـ filesystem cache (SLRUFileCachePriority::collectEvictionInfo) الذي كان يمكن أن يحدث عندما تكونkeep_free_space_size_ratioأوkeep_free_space_elements_ratioمرتفعة بما يكفي لتحفيز الإخلاء، بينما تكون جميع cache entries قد رُقّيت بالفعل إلى protected queue الخاصة بـ SLRU (مع فراغ الجزء probationary). #104313 (Groene AI). - إصلاح الاستثناءات (
NOT_FOUND_COLUMN_IN_BLOCK,LOGICAL_ERROR,AMBIGUOUS_COLUMN_NAME) عند استخدام projections مع عروض UNION ALL أو window functions أو حالات تعارض أسماء الأعمدة مع الأسماء المستعارة. هذا تراجع ناتج عن #88798. #104317 (Amos Bird). - إصلاح احتمال حدوث underflow أثناء parsing مصفوفات Postgres. #104322 (Grant Holly).
- أصبحت الدوال التي تُرجِع نوعًا غير
Nullable(مثلArrayأوTupleأوMap) تقبل الآن وسائطNullable. وتشمل الدوال المتأثرةextractAllوextractAllGroupsوextractAllGroupsHorizontalوextractAllGroupsVerticalوextractGroupsوsplitByCharوsplitByStringوsplitByRegexpوsplitByWhitespaceوsplitByNonAlphaوalphaTokens. وتُنتِج صفوف الإدخال ذات القيمةNULLالقيمةَ الافتراضية لنوع النتيجة (مثل مصفوفة فارغة) بدلًا من إثارة الخطأ “Nested type is not allowed inside Nullable type”. #104326 (Alexey Milovidov). - إصلاح إحصاءات Iceberg مع جدول مُقسَّم إلى partition. وهذا يُغلق #104321. #104329 (Konstantin Vedernikov).
- إصلاح خطأ منطقي فادح عند بدء تشغيل الخادم على macOS (وفي إصدارات
jemallocالمشابهة)، حيث كانتJemalloc::verifySetupتُبلّغ خطأً عن عدم تطابق فيjemalloc_enable_background_threadsلأنmallctlsالاختياريةbackground_thread/max_background_threadsغير موجودة؛ ويُتجاوز التحقق عندما لا تكونmallctlsهذه متاحة، كما أنgetValueلم تعد تترك المخرجات غير مهيّأة عند الفشل. يُغلق #102183. #104330 (SAYON DEEP). - إصلاح تراجع في السلوك الصحيح حيث كان يمكن لاستعلامات
SELECTمعmax_rows_to_read_leafوread_overflow_mode_leaf = 'throw'أن تُطلقTOO_MANY_ROWSبشكل غير صحيح حتى عندما كان skip index سيخفض حجم القراءة إلى ما دون الحد الأقصى على مستوى leaf. وكانت الإعدادات المناظرة لغير leaf (max_rows_to_read/read_overflow_mode) تُعالَج بالفعل. #104331 (Groene AI). - أصبحت
toUUIDوtoUUIDOrNullوtoUUIDOrZeroوtoUUIDOrDefaultوCASTإلىUUIDوNullable(UUID)وaccurateCastOrNullإلىUUID، وكذلك input formats التي تفسّر UUID من النص (AvroوMsgPackوJSONExtractو…)، ترفض الآن السلاسل النصية التي لها الطول الصحيح لكنها تحتوي على محارف غير ستّ عشرية. سابقًا كانت مثل هذه المدخلات تتحول بصمت إلى UUID مُختلق بسبب تجاوز نهاية جدول lookup للأرقام الستّ عشرية؛ أما الآن فإنtoUUIDيُطلقCANNOT_PARSE_UUID، وتُرجع متغيراتOr*القيمةNULL/ zero UUID / القيمة الافتراضية المورَّدة. #104370 (Groene AI). - إصلاح
Bad castLOGICAL_ERRORفيcaseWithExpression(وفي SQL CASE expr WHEN ... THEN ... ELSE ...) عندما ينتهي النوع الأعلى الخاص بـ THEN فقط والنوع الأعلى الخاص بـ (THENs + ELSE) إلى مخازنColumnDecimalمختلفة — على سبيل المثال، قيم THEN (UInt16, Int8)مع ELSE من النوعDecimal(9, 2). يُغلق #104335. #104378 (Groene AI). - أصبحت الأعطال الداخلية المُبلَّغ عنها عبر
logExceptionBeforeStart(عمليات flush الخاصة بالإدراج غير المتزامن، وعمليات refresh للعروض materialized-view، وأخطاء التحليل التي تُثار أثناء الاستعلامات الداخلية) تزيد الآن بشكل صحيح من ProfileEvents FailedInternalQueryوFailedInternalSelectQueryوFailedInternalInsertQueryإلى جانب العدادات الظاهرة للمستخدمFailedQueryوFailedSelectQueryوFailedInsertQuery. سابقًا كانت هذه العدادات الداخلية تبقى عند الصفر في حالات الفشل التي تقع قبل بدء تنفيذ الاستعلام، مما كان يؤدي إلى تقليل احتساب فئة رئيسية من الأعطال الداخلية. #104399 (Groene AI). - إصلاح الخطأ
Code: 36. BAD_ARGUMENTS Expected literal, got {name:Type}الذي كان يظهر عند استخدام query parameter داخل الإعدادbase_backupفي عبارةBACKUPأوRESTORE(على سبيل المثالBACKUP ... SETTINGS base_backup = S3({backup_name:String}, ...)). أُدخل هذا التراجع في26.1.5عبر PR #99205. يُغلق #103324. #104413 (Groene AI). - إصلاح توقفٍ للخادم في عمليات الكتابة إلى
IcebergLocal/IcebergS3عندما تتبع عمليةINSERTالعبارةALTER TABLE ... DROP COLUMNمع قيمةiceberg_metadata_staleness_msأكبر من الصفر. تُبطِلALTERالآن cache المحلي لملفات Iceberg metadata بحيث ترى عمليات القراءة والكتابة اللاحقة الـ schema الجديدة. #104419 (Groene AI). - إصلاح أوامر
DROP ROLEوDROP USERوDROP SETTINGS PROFILEوDROP ROW POLICYوDROP QUOTAوDROP MASKING POLICYبحيث تزيل المراجع إلى الـ entity المحذوف من أي access entity آخر كان يشير إليه (مثل قائمةDEFAULT ROLEالخاصة بالمستخدم، وقائمةTOالخاصة بـ settings profile، والمستفيدين في row policy)، مع حفظ هذا التنظيف على disk. سابقًا، كانت in-memory state تبدو صحيحة لأنSHOW CREATEيرشّح UUIDs غير المعروفة، لكن ملفات.sqlعلى disk كانت تحتفظ بإدخالاتID('<dropped-uuid>')المعلّقة، ثم كانت هذه المراجع تعود للظهور عند إعادة تشغيل server التالية، لتظهر على شكل أخطاءACCESS_ENTITY_NOT_FOUNDأثناء distributed query execution. #104427 (Groene AI). - إصلاح توقفٍ للخادم يحدث مع
azureBlobStorageومحركAzureBlobStorageوDeltaLake-on-Azure عند استخدام connection string يكون فيه عنوانBlobEndpointيحتوي على منفذ فارغ أو غير رقمي أو خارج النطاق (مثلBlobEndpoint=http://host:abc/). يعيد الخادم الآن خطأBAD_ARGUMENTSواضحًا بدلًا من التوقف في builds الخاصة بـ debug/sanitizer. #104460 (Groene AI). - السماح باستخدام معرّف غير مقتبس كاسم مستخدم في table functions
remoteوremoteSecure، بما يتوافق مع كيفية قبول وسيطات database وtable لمعرّفات غير مقتبسة. سابقًا، كان مثل هذا query يفشل مع خطأ authentication مضلّل يشير إلى المستخدمdefault. #104465 (Alexey Milovidov). - إصلاح
Logical error: Incorrect ASTSelectWithUnionQuery (modes: M, selects: N)الذي يحدث عندما يحتوي جسم SQL user-defined function علىUNION ALLداخلي بين قوسين (مثلCREATE FUNCTION f AS x -> (SELECT 1 UNION ALL (SELECT 1 UNION ALL SELECT 1))). #104477 (Groene AI). - إصلاح
uniqThetaIntersectالذي كان يعيد cardinality الخاصة بالـ argument الأول بدلًا من0عندما تكون قيمة state الثانية منuniqThetaفارغة — على سبيل المثال، ناتجuniqThetaMergeStateIf(s, predicate)عندما يستبعد الـ predicate كل row. #104529 (Groene AI). - تم إصلاح قيام
SHOW TABLESوsystem.tablesباقتطاع القائمة بصمت في قواعد بياناتDataLakeCatalogالمعتمدة على كتالوجات Iceberg REST (iceberg-rest,onelake,biglake). فعندما كان خادم الكتالوج يجزّئ استجابة list-tables أو list-namespaces إلى صفحات (مثل Microsoft Fabric / OneLake عند تجاوز ~50 جدولًا لكل مساحة اسم)، كانت الجداول الموجودة في الصفحات اللاحقة تصبح غير مرئية بصمت لـSHOW TABLESوsystem.tables، رغم أنه كان يمكن الاستعلام عنها عبرSELECTمباشر. وأصبحRestCatalogالآن يتبع رمز المتابعةnext-page-tokenالمعرّف في مواصفة Iceberg REST OpenAPI، بما يطابق السلوك الحالي لكل منPaimonRestCatalogوUnityCatalog. #104531 (Groene AI). - تستنتج الدالة الجدولية
inputالآن بنيتها من عبارةFORMATفي استعلامINSERTالمحيط بها عندما يكون لهذا format مخطط ثابت (LineAsString,RawBLOB,JSONAsString، إلخ)، لذلك لم يعد المستخدمون بحاجة إلى تكرار البنية على هيئةinput('line String')لهذه formats. #104532. #104533 (Groene AI). - تم تحديث نوع بيانات الحقول في history الخاصة بـ Iceberg من
Int32إلىInt64. يغلق #94176. #104579 (Smita Kulkarni). - تم إصلاح
Inconsistent AST formattingوLOGICAL_ERRORعند تحليل استدعاء دالة تأتي فيه lambda بعد فاصلة، مثلSELECT substring(x, `x` -> `x`). وكان المحلّل يدمج الوسائط السابقة بصمت في الطرف الأيسر من lambda، مما ينتج عنه استدعاء بوسيط واحد لا يمكن إعادة تحليله إلى AST نفسها. وهو يحافظ الآن على عدد الوسائط الأصلي للدالة. #104626 (Groene AI). - يفضّل
CHECK TABLE tالآن جدولTEMPORARYعلى الجدول الدائم الذي يحمل الاسم نفسه عند عدم تقديم محدِّد database، بما يطابق أولوية الترتيب المستخدمة بالفعل فيSHOW CREATE TABLEوDESCRIBE TABLEوOPTIMIZE TABLEوALTER TABLE. سابقًا، كانCHECK TABLE tيتجاهل الجداول المؤقتة بالكامل، لذلك كان يفشل معUNKNOWN_TABLEعلى جدولLogأوFileمؤقت رغم أن هذين المحركين يدعمانCHECK. متابعة لـ #100966. #104637 (Groene AI). - تم إصلاح مشكلة تؤدي إلى إنهاء Keeper ودخوله في حلقة إعادة تشغيل عند إرسال
get /keeper/availability_zoneمعquorum_reads=trueإلى Keeper لم يُضبط فيه<placement>. #104663 (myeongjun). - تم إصلاح سباق بيانات TOCTOU في
FutureSetFromTuple::buildOrderedSetInplaceكان يؤدي إلى logical error. #104673 (Miсhael Stetsyuk). - تم إصلاح عدة دوال كانت تعيد نتائج مختلفة للمدخل نفسه بحسب ما إذا كانت الوسائط قد وصلت على هيئة أعمدة أو ثوابت:
bitRotateLeft/bitRotateRight(قيم shift الحدّية)، وlength(FixedString)/concatWithSeparatorمع مدخلاتLowCardinality(Nullable)، وroundDownعلى NaN، وrightUTF8على UTF-8 غير صالح. #104710 (Raúl Marín). - تم إصلاح
anyHeavyالذي كان يعيد قيمة غير ثقيلة عندما تكون القيمة الأكثر تكرارًا هي default الخاصة بالعمود وتكون البيانات موزعة عبر عدة parts منMergeTree(مسار قراءة الأعمدة sparse). #104712 (Raúl Marín). - إصلاح عدة عيوب في التعامل مع قيود الإعدادات: كان بالإمكان تجاوز قيود
MergeTreeSettingsالمعلنة على الاسم canonical للإعداد عبر الكتابة إلى alias لذلك الإعداد؛ كما كان التحقق من قيدdisallowed_valuesيطرح استثناءً في مسارات clamp (الاستعلامات secondary، وعُمّالON CLUSTER، وعروضSQL SECURITY DEFINER) بدلًا من إسقاط التغيير بصمت. #104737 (Raúl Marín). - إصلاح استثناء
LOGICAL_ERROR(Metadata is not initialized) الذي كانت تسببه أوامرOPTIMIZE TABLEوALTER TABLE ... DELETEوALTER TABLE ... ADD COLUMNوغيرها من صيغ ALTER عند تنفيذها على جدولIceberg/IcebergLocal/DeltaLake/Hudiمرفق كسولًا ولم تكن metadata الخاصة به قد حُمِّلت بعد (وهو أمر شائع بعد إعادة تشغيل server، أو بعد فشل سابق في كتابة metadata وترك ملف metadata تالفًا على القرص). أصبحت العملية الآن إما تتابع بشكل طبيعي إذا جرى تحميل metadata بنجاح، أو تُظهر سبب فشل التحميل الفعلي كاستثناء عادي للمستخدم بدلًا من إيقاف server في builds الخاصة بـ debug / sanitizer. #104738 (Groene AI). - إصلاح
segfaultناتج عن خطأ use-after-free فيAvroConfluentRowInputFormat. #104751 (Miсhael Stetsyuk). - أصبحت المتغيرات scalar من
numericIndexedVectorPointwiseMultiplyوnumericIndexedVectorPointwiseDivideوnumericIndexedVectorPointwiseEqualوnumericIndexedVectorPointwiseNotEqualترفع الآنINCORRECT_DATAعند استدعائها باستخدام scalar من نوعUInt64أكبر منInt64::max. #104784 (FriendLey). - إصلاح خلل كان يتسبب في التراجع عن override لإعداد تم ضبطه يدويًا عبر اسم alias الخاص به (مثل
SET enable_analyzer = 1بدلًا منSET allow_experimental_analyzer = 1) بعد تطبيق إعدادcompatibility، وذلك عند إجراء تغيير لاحق على إعدادcompatibility. #104829 (Raúl Marín). - إصلاح تعطيل AWS logger بعد https://github.com/ClickHouse/ClickHouse/commit/0e8ad4355c9d. #104837 (Konstantin Bogdanov).
- إصلاح ثلاث دوال إضافية كانت تُرجع نتائج مختلفة للمدخل نفسه بحسب ما إذا كانت arguments قد وصلت على هيئة columns أو constants: الدالة
transform(وكذلكcaseWithExpressionعبرها) مع قيمة default ثابتة من نوعDate/Date32/Enum/FixedString، وعوامل المقارنة بينStringوFixedStringثابت، وكذلكif/ifNull/nullIfمع فرعFixedStringتحت condition ثابت. #104858 (Raúl Marín). - إصلاح إيقاف server بسبب
Bad cast from type DB::ColumnConst to DB::ColumnNullableأثناء partition pruning لجداولMergeTreeعندما يحتوي partition expression على سلسلة دوال تختزل إلى قيمة ثابتة واحدة (مثلfloor(NULL, toRelativeYearNum(...))). #104861 (Groene AI). - إصلاح data race في
ThreadSanitizerداخل مُنشئ النسخContextData: كانتtable_function_resultsتُنسخ من object المصدر دون الحصول علىtable_function_results_mutex، لذا كان من الممكن أن يتسابق كاتبContext::executeTableFunctionconcurrent مع القراءة غير المتزامنة داخل مُنشئ النسخ. #104879 (Groene AI). - إصلاح فحوصات اتساق data part للأنواع ذات structure الديناميكية، مع اكتشاف
columns_substreams.txtالتالف. إعادة تقديم لـ https://github.com/ClickHouse/ClickHouse/pull/103858 مع تغييرات إضافية. #104888 (Pavel Kruglov). - إصلاح حالة تسابق بين DROP وUNDROP في DatabaseCatalog. #104915 (Azat Khuzhin).
- إصلاح تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات عند وجود مقاطع جرى تنزيلها جزئيًا، بما في ذلك استعادة احتساب الاستخدام بعد فشل الإخلاء. #104921 (Antonio Andelic).
- أصبح
DETACH TABLEعلى جدول مؤقت (من دون الكلمة المفتاحيةTEMPORARY) يُطلق الآنSYNTAX_ERRORبشكل صحيح، بما يطابق سلوكDETACH TEMPORARY TABLE. سابقًا، كان يضبط بصمت العلامة الداخليةis_detachedثم يعود من دون خطأ. لإزالة جدول مؤقت، استخدمDROP TEMPORARY TABLEأوDROP TABLE(إذ يحلّ الأخير الجدول المؤقت عبرContext::ResolveExternal). يُغلق #103475. #104943 (Groene AI). - أصبحت الدالة الجدولية
filesystemتراعيmax_memory_usage/max_server_memory_usageعند تحميل محتوى الملف. سابقًا، كان من الممكن أن تتجاوز قراءات المحتوى الكبيرة أو الكثيرة المتوازية هذا الحد من دون إطلاقMEMORY_LIMIT_EXCEEDED، لينتهي الأمر بدلًا من ذلك بإنهاء العملية بسبب نفاد الذاكرة. #104956 (Alexey Milovidov). - إصلاح
LOGICAL_ERRORكان يُطلق عند تصفيةsystem.detached_tablesباستخدامuuid(مثلSELECT count() FROM system.detached_tables WHERE uuid = '...'). يُرجع الاستعلام الآن النتيجة المتوقعة بدلًا من التسبب في إيقاف الخادم. #104979 (Groene AI). - لم تعد
flattenTupleتُطلقLOGICAL_ERRORعند استدعائها على tuple لا تحتوي بنيتها المتداخلة إلا على أوراقTuple()فارغة (مثلTuple(c0 Array(Tuple()))أوTuple(c0 Tuple())). وتُنتج هذه المدخلات الآن استثناءً ظاهرًا للمستخدم من نوعILLEGAL_TYPE_OF_ARGUMENTيوضح أن نتيجة التسطيح ستكون tuple فارغة. #104989 (Groene AI). - إصلاح توقف الخادم وخلل يُرجع نتائج خاطئة بصمت عند الاستعلام باستخدام
loop(remote(...))(أو أيloop()يغلّف تخزينًا يمكنه تأجيل aggregation) معGROUP BY. كان المخطِّط الخارجي يضيفMergingAggregatedStepاستنادًا إلى مرحلة المعالجة التي يبلّغ عنها التخزين الداخلي، لكنLoopSourceيحقق دائمًاselectالداخلي الخاص به على هيئةQueryProcessingStage::Completeويُخرج مقاطع أعمدة عادية، لذا كانMergingAggregatedTransformيتسبب فيLOGICAL_ERROR(Chunk info was not set for chunk in MergingAggregatedTransform) عندenable_parallel_replicas = 1، وفي غير ذلك كان يُسقط التجميع الخارجي بصمت. #105001 (Groene AI). - تعطّل
clickhouse-benchmark --reconnect(بصورته المجردة، من دون قيمة) دون قصد في 25.4 بسبب تغيير حوّل--reconnectإلى خيار عددي يتطلب قيمة. وتعمل الصيغة المجردة الآن مجددًا، وتعادل--reconnect=1(إعادة الاتصال عند كل query). #105006 (Groene AI). - إصلاح مخرجات JSON غير سليمة لأسماء الأعمدة المنتهية بتسلسلات UTF-8 غير مكتملة. #105012 (Pablo Marcos).
- إصلاح فقدان بيانات صامت بعد
EXCHANGE TABLESأوCREATE OR REPLACE TABLEلجدول المصدر الخاص بعرض مادي. ويُحتفَظ الآن بحافة الاعتمادية بين المصدر والعرض الخاصة بـMVعلى الاسم الأصلي، بحيث تستمر في العمل عند عمليات insert. هذا تراجع أُدخل في #98779؛ ويستعيد السلوك الذي كان موجودًا قبل هذا التراجع. #105029 (Sema Checherinda). - إصلاح الخطأ
CANNOT_COMPILE_CODE Could not find symbol __fixunsdftiعند الترجمة البرمجية باستخدام JIT للتعبيرات التي تحوّلFloatإلىUInt128، مثلtoUInt128(<Float64 expression>). كان محلّل الرموز في JIT يفتقد دوال builtins من compiler-rt الخاصة بالتحويل من أعداد الفاصلة العائمة غير الموقّعة ذات 128 بت إلى أعداد صحيحة. يُغلق #105031. #105048 (Raúl Marín). - إصلاح عدم طباعة
clickhouse-localلرسائل السجل الناتجة عن query فاشلة عند تعيينsend_logs_level. #105067 (Alexey Milovidov). - إصلاح النتائج غير الصحيحة عند الإشارة إلى العرض المعلَّم نفسه أكثر من مرة في query واحدة باستخدام قيم وسيطات مختلفة. سابقًا، كان المُحلِّل يدمج هذه الاستدعاءات في استدعاء واحد، ما كان يؤدي بصمت إلى إسقاط جميع عوامل التصفية باستثناء الأول. #105170 (Alexey Milovidov).
- إصلاح ظهور صف
TOTALSمرتين في أسفل جدول النتائج في واجهة الويبplay.html. #103803 (Alexey Milovidov). - رفض المتجهات غير المنتهية (
NaN,±Inf) أثناء البحث المتجهي (سواء كانت متجهات البحث أو متجهات مرجعية)؛ إذ كانت تتسبب سابقًا في سلوك غير معرّف فيusearch. #104079 (Groene AI). - PromQL: إصلاح عامل التجميع للمتجهات الفارغة. #104425 (Vitaly Baranov).
- PromQL: إصلاح معالجة الأخطاء في واجهة Prometheus query API. #104741 (Vitaly Baranov).
- إصلاح حالة تسابق في
MergeTreeTransaction::afterCommitحيث كان من الممكن، بعد فقدان الاتصال بين كتابةCSNالخاصة بـ commit إلى ZooKeeper وإنهاء transaction، أن تصل استجابةCOMMITإلى client قبل أن تصبح قيمتاcreation_csnوremoval_csnالجديدتان مرئيتين فيsystem.parts. #104708 (Tuan Pham Anh). - إصلاح النمو الأُسّي للذاكرة في parser الخاص بـ KQL عند تحويل فهرسة المصفوفات المتداخلة (
arr[arr[arr[...]]]). #105142 (Alexey Milovidov). - إصلاح النتائج غير الصحيحة في
RIGHT ANY JOINعندما يحتوي الجدول الأيمن على عدة rows لكل key، وتُقسَّم كتلة المخرجات بسبب حدود الحجم. يُغلق #99431. #102064 (Vladimir Cherkasov). - التحقق من تجاوز سعة المكدس في قارئ
Avroأثناء إلغاء تسلسل الأنواع المتداخلة. #102417 (Pavel Kruglov). - إصلاح تكرار rows في
system.completionsلإعداداتMergeTree— إذ كان كل اسم إعداد يظهر مرتين لأن كلًا منgetMergeTreeSettingsوgetReplicatedMergeTreeSettingsكانا يُفرَّغان رغم تطابق أسماء الإعدادات فيهما. يُغلق #102013. #102015 (Groene AI). - إصلاح
StorageObjectStorageQueue(S3Queue،AzureQueue) الذي كان يمنع إيقاف التشغيل إلى أن تُقرأ الملفات المُعالجة جزئيًا بالكامل من تخزين الكائنات. أصبح المصدر الآن يوقف القراءة فورًا عند إيقاف التشغيل؛ ويضمن إلغاء التكرار عدم تكرار الصفوف التي جرى بثّها مسبقًا إلى جدول الوجهة قبل إيقاف التشغيل عند إعادة محاولة الملف في بدء التشغيل التالي. #103126 (Tuan Pham Anh). - إصلاح عمليات insert متعددة blocks إلى table engine
Aliasمعinsert_deduplication_tokenبحيث يتم الاحتفاظ بجميع blocks. #103246 (Enric Calabuig). - إصلاح
JSONHasوJSONExtractBoolعلى أعمدةJSONالأصلية، حيث كانا يعيدان القيمة المستخرجة (بعد تحويلها إلىUInt8) بدلًا من0/1. #103313 (zxuhan7). - حماية input format
CustomSeparatedمن البيانات المشوهة أو العدائية التي تُهملformat_custom_row_after_delimiter. كان اكتشاف header، وschema inference، والصفوف ذات الأعمدة المتغيرة، يؤدي سابقًا إلى تجميع fields بلا حدود، وكان يمكن أن يخصص عدة غيغابايت من الذاكرة قبل الفشل. أصبحت عمليات القراءة الآن تفشل معINCORRECT_DATAبمجرد أن يحتوي صف واحد على أكثر من 1,000,000 field. #103404 (Groene AI). - إصلاح
RESTOREلجداولMergeTreeالمتماثلة replicated بحيث يستخدم إلحاق الأجزاء المستعادةbackup_restore_keeper_max_retriesبدلًا من ميزانية إعادة المحاولة العادية الخاصة بـ insert في Keeper. #104610 (Pablo Marcos). - إصلاح النتائج الخاطئة الناتجة عن
WHERE p AND <LowCardinality(Nullable(int)) constant>على جداولMergeTree. كانت مثل هذه queries تعيد سابقًا صفر rows لأن part pruning كان يستنتج قيمةNULLافتراضية من النوعLowCardinality(Nullable(...))وينشئ قيدnotEquals(x, NULL)، مما يؤدي إلى استبعاد كل part. #104767 (Groene AI). - إصلاح نتيجة aggregation غير الصحيحة عند التجميع بواسطة دالة غير حقنية لعمود يكون أيضًا partition key (مثلًا
PARTITION BY aمعGROUP BY intDiv(a, 2)أوa % 2). لم تكن values القادمة من partitions مختلفة والتي تطابق المجموعة نفسها تُدمج، مما كان ينتج rows مجموعات مكررة عندallow_aggregate_partitions_independently = 1. #104869 (Nihal Z. Miaji). - إصلاح حالة تسابق في نقل snapshot في
Keeper، حيث كان يمكن إزالة snapshot أو نقلها أثناء إرسالها إلى follower قيد الاستعادة. #104941 (Antonio Andelic). - إصلاح خطأ صامت يؤدي إلى نتائج خاطئة في
hilbertEncodeوmortonEncode، حيث كانت الوسيطة الأولىTupleغير الثابتة (قناع النطاق) تستخدم قيم الصف 0’s لتحديد إزاحة البتات لكل صف. أصبحت الدالتان الآن تحسبان قيم القناع لكل صف، لذا لم تعد النتيجة تعتمد على كون الإدخال ثابتًا أو على حجم block. #104992 (Groene AI). - إصلاح
clickhouse-localالذي كان يتجاهل بصمت configuration على مستوى المستخدم (profiles،users،quotas، وإعدادات التحكم بالوصول) عند الاكتشاف التلقائي لـ configuration file من./clickhouse-local.xmlأو~/.clickhouse-local/config.xmlأو/etc/clickhouse-local/config.xml. كانت هذه settings تُطبَّق سابقًا فقط عند تمرير--config-fileأو عند وجود./config.xmlفي current directory؛ أما الآن فجميع مسارات الاكتشاف تتصرف بشكل متسق. #105008 (Groene AI). - إصلاح مشكلة أعمدة
BFloat16التي كانت تُرجع بصمت صفر تطابقات عند مقارنتها بقيمة نصية ثابتة (مثلWHERE bf16_col = '49.9'). #105042 (Raúl Marín). - إصلاح التعامل مع
CLEAR COLUMNوTTL أثناء عمليات الدمج فيSummingMergeTreeوAggregatingMergeTreeوCoalescingMergeTreeعندما تكون الأعمدة المطلوبة للدمج غير موجودة أو منتهية الصلاحية. يغلق #101953. #105203 (Antonio Andelic). - إصلاح حالة تسابق بين
DNSCacheUpdater::runوContext::reloadClusterConfigعبر إضافة تحقق صريح من عدم كونshared->clusters_configقيمة فارغة قبل فك مرجعها. #105220 (Mikhail f. Shiryaev). - إصلاح تحليل التاريخ والوقت بصيغة
best_effortفيtoDateTime64بدقةmsوns. #105233 (Kaviraj Kanagaraj). - إصلاح قيام
OSIOWaitMicrosecondsبالإبلاغ عن انتظار I/O على مستوى عمر الخيط بدلًا من انتظار I/O على مستوى query. #105246 (Mikhail f. Shiryaev). - أصبح table engine
Hudiالآن يرفعINCORRECT_DATA(وهو استثناء عادي على مستوى query) بدلًا منLOGICAL_ERRORعندما لا يطابق ملف Parquet في directory الجدول اصطلاح التسمية الخاص بـ Hudi وهو[FileId]_[FileWriteToken]_[Timestamp].[extension]. في السابق، كانت أسماء الملفات هذه تتسبب في استثناء في builds التصحيح. #105266 (Groene AI). - إصلاح حالة تعطل متبادل في
ParallelFormattingOutputFormatعند فشل الجدولة: عندما throwsscheduleFormatterThreadForUnitWithNumber(مثلCANNOT_SCHEDULE_TASK)، كانت الوحدة تُترك في الحالةREADY_TO_FORMATمن دون خيط formatter يعالجها، مما يؤدي إلى تعليق. تُغلَّف الآن استدعاء الجدولة داخلtry/catchويُمرَّر أي فشل عبرonBackgroundExceptionلكي يخرج collector بشكل سليم. #105275 (Azat Khuzhin). - إصلاح فقدان بيانات صامت في
Distributedasync inserts عند التعافي من إيقاف غير طبيعي: إذا كان آخر ملف.binفي Batch محفوظة سليمًا لكن ملفًا في الوسط كان تالفًا، كانتDistributedAsyncInsertBatch::recoverBatchتتحقق فقط من ترويسة الملف الأخير، ثم كانتsendBatchتضع علامة العطب على Batch بأكملها — بما في ذلك الملفات السليمة — مما يؤدي إلى فقدان rows الخاصة بها. أصبح الآن التحقق من ترويسة كل ملف يتم على حدة، بحيث لا يُنقل إلىbroken/إلا الملف التالف فعليًا، بينما تصل rows السليمة إلى الـ shard البعيد. #105281 (Groene AI). - إصلاح تراجع في
clickhouse extract-from-config --try: عندما كانت config تستخدم attributes من نوعfrom_envولم يكن فيها عنصرinclude_from(أو كان يشير إلى ملف مفقود)، كانت جميع substitutions الخاصة بـfrom_envتُسقط بصمت وتُعاد كسلاسل فارغة. وقد أدى ذلك إلى تعطيل اكتشاف المنفذ في نقطة دخول Docker في الإصدار 26.2.5. يغلق #101704. #105283 (Groene AI). - إصلاح فشل
INSERT INTOفي جدولSQLiteبسبب خطأ صياغي من SQLite عندما تكون value المُدرجة من نوعEnumأوJSONأوAggregateFunctionوكان تمثيلها النصي يحتوي على علامة اقتباس مفردة. أصبح الإعدادoutput_format_values_escape_quote_with_quoteمُراعًى الآن في عمليات serialization المقابلة (في السابق كان يراعيه فقطStringوFixedString). #105285 (Groene AI). - إصلاح الخطأ
Code: 44. ILLEGAL_COLUMN: Cannot add column ...: column with this name already existsالذي كانت تطرحه الاستعلامات الموزعة معallow_push_predicate_ast_for_distributed_subqueries = 1(القيمة الافتراضية) عند مطابقة tuple فيGLOBAL INمع استعلام فرعي يحتوي الإسقاط فيه على أسماء أعمدة مكررة، مثل(x, y) GLOBAL IN (SELECT number, number FROM numbers(5)). #105290 (Groene AI). - إصلاح
reinterpretإلىArray(LowCardinality(...))، والتي كانت تُرجع خطأNOT_IMPLEMENTEDمُربكًا أثناء وقت التشغيل؛ وهي تُرجع الآنILLEGAL_TYPE_OF_ARGUMENTأثناء التحقق من النوع. #105301 (Raúl Marín). - أصبحت
minMap/maxMap(بصيغة array) وminMappedArrays/maxMappedArraysتتعامل الآن معNaNبشكل متسق معORDER BY: إذ يُعاملNaNعلى أنه الأخير (ولا يُعاد إلا إذا كانت جميع القيمNaN). سابقًا، كانت النتائج تعتمد على موضعNaNفي البيانات بسبب دلالات المقارنة غير المرتبة في IEEE 754، وكانت تختلف عن صيغة وسيطMapفيminMap/maxMapالتي أُصلحت في #100448. #105331 (Raúl Marín). - إصلاح تسرّب في الذاكرة في cache
ColumnsDescriptionلكل table ضمن جداول عائلةMergeTreeالتي تحتوي على أعمدةNested. ولم يكن يتم إخلاء entries مطلقًا عبر دوراتALTER ADD COLUMN/DROP COLUMNعندما يكونshare_nested_offsets = 1(القيمة الافتراضية). #105376 (Groene AI). - إصلاح الاستثناء
BAD_ARGUMENTS“It’s a bug! Only integer types are supported by__bitWrapperFunc” الذي كان يُطرح عندما يحتويSELECTمع skip index من النوعTYPE set(N)على عنصرWHEREتكون نتيجة تقييمه من النوعFloatأوBFloat16أو أي نوع آخر غير صحيح (على سبيل المثالWHERE c0 + 0.1أوWHERE log(c0)). ويعود skip index الآن إلى مسار filter العادي في هذه الحالة. #105384 (Groene AI).
تحسينات البناء/الاختبار/التغليف
- إيقاف استخدام مكتبات
compiler-rtوترويساته الخاصة بالنظام. يُغلق #91475. #102857 (Konstantin Bogdanov). - تحديث صورة Docker الأساسية من نوع distroless لإصلاح ثغرات OpenSSL الأمنية في
libssl3t64. #103583 (Rahul Nair). - ضمان استلام مفتاح GPG بشكل موثوق أثناء عمليات الإصدار عبر ربط عدة خوادم مفاتيح Ubuntu بالتتابع، بدلًا من انتهاء المهلة على
keyserver.ubuntu.com. #103834 (Mikhail f. Shiryaev). - إزالة عمليات التحقق في
CMakeوقت البناء ومنعها (check_*,try_compile,try_run). وبما أن المصرّف وسلسلة الأدوات محددان مسبقًا، فلم تعد هناك حاجة إلى اكتشاف الميزات وقت التهيئة، وقد أصبح ذلك الآن محظورًا على مستوى المشروع بأكمله؛ وأي سلوك خاص بإصدار معيّن يجب تقييده صراحةً باستخدامCMAKE_CXX_COMPILER_VERSION. #103980 (Alexey Milovidov). - ترقية
libarchiveمن 3.8.6 إلى 3.8.7. #104047 (Robert Schulze). - تحديث
mongo-c-driverإلى 2.3.0. #104300 (Raúl Marín). - تحديث تبعيات LLVM للإصدار 22.x. #104381 (Joshua Carp).
- تمكين بناء صنفي embedded-client وPTY descriptor على MacOS وFreeBSD باستخدام دوال POSIX المحمولة
posix_openpt/grantpt/unlockptوإزالة حواجز#ifالخاصة بـ Linux فقط. #104436 (Alexey Milovidov). - ترقية
librdkafkaإلى الإصدار 2.14.1. #105222 (János Benjamin Antal).
إصدار ClickHouse 26.4، 2026-04-30. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- يستخدم المعامل
INالآن دلالات مطابقة دقيقة للقيم مع النوعBool: إذ لا تطابق قيمBoolإلا القيمتان0و1داخل المجموعة. سابقًا، كانت القيم الرقمية الأكبر من255في مجموعةINتُحوَّل خطأً إلى true عند مقارنتها بـBool، لذلك كانSELECT CAST(1, 'Bool') IN (256)يعيد 1. أما الآن، فهو يعيد0بشكل صحيح. يُغلق #92980. #93115 (Ashrith Bandla). - جرى تحديث مكتبة H3 إلى الإصدار v4، مما يحسّن دقة حسابات الطول والمساحة والمقاييس الأخرى. ويُعد هذا التغيير غير متوافق مع الإصدارات السابقة لأن النتائج الجديدة تختلف عن النتائج السابقة. #100348 (Alexey Milovidov).
- لم يعد مسموحًا باستخدام
SELECTكمُعرّف bareword داخل عنصر في قائمة تعبيراتWITH. #101059 (Aruj Bansal). - يغيّر هذا التصحيح طريقة تعامل جدول Merge مع الأعمدة الافتراضية. فإذا كان underlying table يحتوي على
_tableأو_database، فستُقرأ هذه الأعمدة من التخزين؛ وإلا فستُملأ بعد خطوة القراءة باستخدام خطوة expression. #101742 (Mikhail Artemenko). - يرفض المعامل
INالآن أيضًا تحويلاتDecimalالفاقدة للدقة داخل الأنواع المركبة (TupleوArrayوMap)، مما يجعل سلوكه متسقًا مع مقارنات القيم scalar على المستوى الأعلى. في السابق، كانت فحوصات الدقة تُطبَّق فقط على قيم scalar في المستوى الأعلى: فعلى سبيل المثال، كانCAST('33.3', 'Decimal64(1)') IN (33.33)يعيد0بشكل صحيح، لكنCAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])كان يعيد1خطأً لأن التحويل الفاقد للدقة حدث داخلArray. أما الآن، فتعيد كلتا الحالتين0بشكل صحيح. #101812 (Nihal Z. Miaji). - خُفِّضت القيم الافتراضية لكلٍّ من
http_max_fieldsمن 1,000,000 إلى 1,000 وhttp_max_field_name_sizeمن 128 KB إلى 4 KB للحد من استخدام الذاكرة قبل authentication بواسطة HTTP connections. وأُضيفت الإعداداتhttp_max_request_header_sizeوhttp_headers_read_timeout. ويمكن للمستخدمين الذين يعتمدون على الحدود الأعلى السابقة استعادتها عبر الإعدادات. #103285 (Sema Checherinda).
ميزة جديدة
- إضافة ميزة الكتابة التلقائية إلى القرص لعمليات
hash joinوparallel hash joinعبر تحويلها إلىgrace hash joinعند بلوغ حد الذاكرة. ويتحكم الإعدادmax_bytes_before_external_joinفي هذا السلوك. #97813 (János Benjamin Antal). - إضافة دعم Arrow Flight SQL. #91170 (Yakov Olkhovskiy).
- إضافة دعم Incremental read لمحركات الجداول
Paimonمع تتبّع تقدّم اللقطة عبر Keeper، بما في ذلك قراءات delta موجّهة للّقطات باستخدامpaimon_target_snapshot_id، مع توسيع تغطية الاختبارات لسيناريوهات type mapping وpartition pruning وIncremental read. #93655 (XiaoBinMu). - أصبحت الدالة
stemالآن غير تجريبية (وكان يتعيّن سابقًا تمكين الإعدادallow_experimental_nlp_functions). #102399 (Jimmy Aguilar Mena). ويمكنك الآن بسهولة تطبيق الاشتقاق على جميع الكلمات/الرموز في الأعمدةStringوFixedStringوArray([Fixed]String)وNullableوLowCardinalityوConstباستخدام الدالةstem. #99137 (Jimmy Aguilar Mena). - تنفيذ سلوك جديد للإعدادات
max_insert_block_size_rowsوmax_insert_block_size_bytesوmin_insert_block_size_rowsوmin_insert_block_size_bytesفي عملية squashing ضمن إعداد التوافقuse_strict_insert_block_limits. #94207 (Kirill Kopnev). - إضافة الدالة
arrayAutocorrelation(arr [, max_lag])التي تحسب الارتباط الذاتي المُطبَّع لمصفوفة رقمية لكل قيمة lag. وتدعم أنواع المصفوفات الصحيحة والعائمة والعشرية. #94776 (Wenyu Chen). - إضافة دالة SQL باسم
obfuscateQuery. يُغلق #98010. #98305 (Xuewei Wang). - إضافة دعم النوعين Map وJSON/Object كـ dictionary attributes. ويمكن الآن لـ dictionaries تخزين الأنواع المعقدة واسترجاعها، بما في ذلك Map(String, String) وMap(String, Array(String)) وJSON وNullable(JSON)، في كلٍّ من تخطيطي FLAT وHASHED. #98627 (yanglongwei).
- إضافة إعدادَي MergeTree جديدين —
replicated_fetches_min_part_levelوreplicated_fetches_min_part_level_timeout_seconds— يتيحان لـ replicas تخطي fetching للأجزاء المُدرجة حديثًا (غير المدمجة) من النظائر، مما يقلل الحمل الإضافي الناتج عن replication أثناء ingestion الكثيف. #98625 (tanner-bruce). - إضافة دعم MergeTree skip index لأعمدة JSON باستخدام JSONAllPaths مع أنواع الفهارس bloom_filter وtokenbf_v1 وngrambf_v1 وtext (inverted)، مما يتيح granule skipping استنادًا إلى مجموعة JSON paths الموجودة في كل granule. #98886 (Pavel Kruglov).
- تدعم الدالة
printfالآن format strings غير الثابتة، مما يتيح استخدام أنماط format مختلفة لكل row استنادًا إلى قيم column. #98991 (Yash ). - إضافة projection index جديد،
commit_order، يعيد تنظيم البيانات وفق ترتيب الإدراج. #99004 (Mikhail Artemenko). - إضافة الدالة
highlightالتي تُغلّف مواضع ظهور مصطلحات البحث في سلسلة نصية بوسوم HTML (الوسومان الافتراضيان هما<em>/</em>). تدعم المطابقة غير الحساسة لحالة الأحرف لـ ASCII، والدمج التلقائي للتطابقات المتداخلة، ووسومي الفتح/الإغلاق المخصصين. #99131 (Peng). - تنفيذ quotas استنادًا إلى hash الخاص بالـ normalized query لحماية خدمات ClickHouse العامة من إساءة الاستخدام. 1. دعم
NORMALIZED_QUERY_HASHباعتباره نوع quota key - مع buckets منفصلة لكل normalized query فريدة، بحيث يتتبعCREATE QUOTA q KEYED BY normalized_query_hashكل query مميزة على حدة. 2. دعمQUERIES_PER_NORMALIZED_HASHباعتباره نوع مورد quota — ما يقيّد الحد الأقصى لعدد مرات تنفيذ أي normalized query واحدة ضمن interval، بحيث يمنعMAX queries_per_normalized_hash = 100تشغيل أي query pattern واحدة أكثر من 100 مرة. #99586 (Alexey Milovidov). - يمكن للمستخدمين الآن كتابة استعلامات join باستخدام الصياغة
NATURAL JOIN، التي تطابق تلقائيًا جميع columns التي تحمل الاسم نفسه وتزيل تكرار هذه columns في النتيجة. #99840 (Peter Nguyen). - دعم
SET TIME ZONE 'tz'كـ Alias forSET session_timezone. #99883 (phulv94). - إضافة دعم للاستعلامات المعلَّمة في واجهة الويب (
play.html): يتم اكتشاف query parameters مثل{name:Type}، وتُعرَض حقول إدخال لملء values الخاصة بها. #100041 (Alexey Milovidov). - دعم clause
VALUESالقياسية في SQL كتعبير table داخلFROM، مثلSELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val). #100143 (Desel72). - إضافة وحدات متوافقة مع PostgreSQL إلى العامل
EXTRACT: EPOCHوDOWوDOYوISODOWوISOYEARوWEEKوCENTURYوDECADEوMILLENNIUM. كما تم إصلاحEXTRACT(WEEK FROM date)الذي كان يُطلق خطأً سابقًا. #100274 (Alexey Milovidov). - إضافة دعم لقيم interval المركبة القياسية في SQL مع محددات النطاق
TO، مثلINTERVAL '1:30' HOUR TO MINUTE. ويجري داخليًا تفكيكها إلى مجموع intervals. #100453 (Desel72). - إضافة metrics غير متزامنة لذاكرة buffer استقبال TCP وإرساله في النواة (
sk_rmem_alloc,sk_wmem_alloc) الخاصة بـ sockets في HTTP connection pool، مع الإبلاغ عنها على شكل النسب المئوية p50/p75/p90/p95 وإجماليات لكل مجموعة connection. #100575 (Sema Checherinda). - إضافة web UI خاصة بـ jemalloc profiling لـ ClickHouse Keeper، ومتاحة على
/jemallocعبر منفذ HTTP control. #100606 (murphy-4o). - تنفيذ الأمر
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'لكلٍّ من النمطين ordered وunordered. #100709 (Bharat Nallan). - تمت إضافة الدالة
JSONAllValuesالتي تُرجع جميع القيم من عمودJSONعلى هيئةArray(String)، مع تسلسل القيم بتمثيل نصي وترتيبها حسب أسماء المسارات. كما أُضيف دعم الفهرس النصي لعبارةJSONAllValuesعلى أعمدةJSON. وعند إنشاء فهرس نصي علىJSONAllValues(json_column)، يُستخدم تلقائيًا لتصفية الاستعلامات على الأعمدة الفرعية لـJSON(مثلjson_column.key1 = 'value'). #100730 (Anton Popov). - تمت إضافة إعداد جديد باسم
input_format_column_name_matching_modeيتيح درجات مختلفة من حساسية حالة الأحرف في تنسيقات الإدخال. #99346 (manerone). - تمت إضافة الأمر
watchإلىclickhouse-keeper-clientمع دعم watch في الأوامرgetوexistsوls. #100834 (Den Kalantaevskii). - تمت إضافة الطلب
getChildrenRecursive(ListRecursive) إلى ClickHouse Keeper والأمرlsrإلىclickhouse-keeper-client. وهذا يغلق #99916. #100998 (Konstantin Vedernikov). - تمت إضافة دالة جديدة
arrayTransposeتأخذ Array ثنائي الأبعاد (مصفوفة) وتبدّل صفوفه وأعمدته:SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov). - أصبح الإعداد
auto_statistics_types mergetreeمضبوطًا افتراضيًا على'minmax, uniq'— إذ تُنشأ إحصاءات minmax وuniq تلقائيًا لجميع الأعمدة المناسبة في الجداول الجديدة - كما أصبحmaterialize_statistics_on_insertمضبوطًا افتراضيًا على false — إذ تُبنى الإحصاءات الآن أثناء عمليات الدمج بدلًا من وقت الإدراج، مما يقلل العبء الإضافي على عمليات الإدراج. استخدمSET materialize_statistics_on_insert = 1لاستعادة السلوك السابق. #101275 (Han Fei). - تمت إضافة إعداد التحديث
prefer_dependency_replicaلسلاسل تبعية العروض المادية لتقليل البيانات المفقودة الناتجة عن تأخر النسخ المتماثل بين النسخ. #101591 (Seva Potapov). - تمت إضافة الدالة
hasPhrase(بالاسم البديلmatchPhrase) للبحث عن العبارات (تسلسلات متصلة من الرموز). البحث هنا brute-force، أي إنه غير مدعوم بعد بواسطة الفهرس النصي. #101997 (Elmi Ahmadov). - تمت إضافة histogram metrics
s3_read_request_duration_microsecondsوs3_read_request_bytesلمراقبة مدة اتصال طلبات S3 GET وعدد البايتات المستهلكة، وهي تظهر فيsystem.histogram_metricsوعبر Prometheus endpoint. #102058 (Sema Checherinda). - يمكن الآن إضافة قيم
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. وهذا يغلق #95914. #102421 (Nihal Z. Miaji). - أصبح الفهرس النصي الآن في مرحلة GA ويظل مفعّلًا بغض النظر عن الإعداد
compatibility، مما يمنع تعطيله بشكل غير متوقع أثناء استعادة النسخ الاحتياطية أو عند التشغيل في وضع التوافق. #101518 (Nikita Fomichev).
ميزة تجريبية
- إضافة
ALTER TABLE ... EXECUTE remove_orphan_filesإلى جداول Iceberg لتحديد الملفات غير المُشار إليها وإزالتها من التخزين الكائني. #99127 (murphy-4o). - إضافة الإعداد
query_plan_optimize_join_order_randomizeالذي يضفي عشوائية على الإحصاءات المستخدمة في إعادة ترتيبjoin، وهو مفيد لأغراض الاختبار. #100643 (Vladimir Cherkasov). - إضافة دعم دالة AI إلى ClickHouse، بما يتيح للمستخدمين استدعاء نقاط نهاية OpenAI وAnthropic باستخدام SQL. وتُعد
aiGenerateأول دالة من هذا النوع. #100831 (George Larionov). - إضافة دوال AI:
aiClassifyوaiExtractوaiTranslateللاستفادة من واجهات برمجة تطبيقات نماذج اللغة الكبيرة في ClickHouse. #100832 (George Larionov). - تمت إضافة
system.histogram_metric_log، وهو جدول نظام جديد يلتقط لقطات دورية لجميع مقاييس المدرج التكراري (مثل زمن الاستجابة في S3/Azure، ومدد مراحل معالجة طلبات Keeper). كذلك، يتغير العمودvalueفيsystem.histogram_metricsإلىFloat64لأنه أكثر مرونةً وتوافقًا مع نموذج بيانات Prometheus. #103046 (Miсhael Stetsyuk). ومن المرجح أن تتغير بنية الجدول في الإصدارات القادمة.
تحسين الأداء
- أصبح ClickHouse الآن قادرًا على استبعاد أجزاء البيانات بالكامل في استعلامات SELECT استنادًا إلى إحصاءات الحد الأدنى/الحد الأقصى. #94140 (zoomxi).
- تقليل التنافس على الأقفال أثناء عمليات readonly على جداول ReplicatedMergeTree التي اكتملت فيها mutations. #95771 (Eduard Karacharov).
- مراعاة
optimize_read_in_orderعند قراءة projections. يغلق #89453. #95885 (Andrey Zvonov). - مجموعة صغيرة من التحسينات في Hash Join وConcurrent Hash Join. #96663 (Yarik Briukhovetskyi).
- تحسين تحويل
DISTINCTعبر تعطيل تحسين أعمدةLowCardinalityعندما تكون بيانات الإدخال متميزة تقريبًا. #97113 (Nihal Z. Miaji). - تحسين أداء استعلامات
LIKEالمذكورة في #97723. ويمكن لهذه الاستعلامات الآن استخدام فهارس النص. #98149 (Elmi Ahmadov). - أصبحت الدوال الرياضية المتجهة (
exp,log,sigmoid,tanh) أسرع الآن على AArch64 (باستخدام NEON/SVE) وعلى FreeBSD/Darwin، بعدما كانت تستخدم سابقًا مسار scalar احتياطيًا أبطأ. #98230 (Raúl Marín). - يمكن الآن للاستعلامات التي تُجري filtering على أعمدة primary key في
MergeTreeباستخدام بدائل regexp على سلاسل حرفية، مثل^(abc-1|abc-2)، الاستفادة من pruning للمفتاح الأساسي عندما تشترك البدائل في prefix واحد. #98988 (Yash ). - تعميم التصفية الديناميكية top-k في
ORDER BY ... LIMITلدعم الأنواعNullableوStringوCOLLATE. #99033 (murphy-4o). - تسريع hash join على المفاتيح
Int32وInt64ذات النطاق الصغير باستخدام hash table بفهرسة مباشرة. #99275 (Hechem Selmi). - تسريع الاستعلامات غير المتصلة لأعمدة
LowCardinalityذات Dictionary واحد. #99285 (Ivan Babrou). - تسريع الدالتين
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). - تفعيل تحسينات تستند إلى أقسام الرابط (
-ffunction-sections,-fdata-sections,--icf=all) لتقليل حجم binary وتحسين الاستفادة من ذاكرة cache الخاصة بالتعليمات. #99474 (Alexey Milovidov). - إصلاح التوسع السلبي للاستعلامات القصيرة التي تتضمن التجميع على الأجهزة ذات العدد الكبير من الأنوية. فعندما يقرأ الاستعلام عددًا قليلًا من العلامات، لم يعد خط المعالجة يتوسع إلى
max_threadsبعد التجميع، مما يتجنب الأعباء الإضافية الناتجة عن تدفقات شبه فارغة. #99493 (Alexey Milovidov). - تحسين أداء الاستعلامات التي تستخدم النسخ المتماثلة المتوازية عبر اختيار حجم مهمة القراءة على نحو صحيح. #99801 (Nikita Taranov).
- السماح بالاستباق في الجلب عند قراءة ملف بعيد عبر ذاكرة تخزين الصفحات المؤقتة في فضاء المستخدم. #99919 (Alexey Milovidov).
- تجنب الحساب غير الضروري للعمود الفرعي
.sizeمن النوعStringأثناء تعداد الأعمدة الفرعية. #99941 (Pavel Kruglov). - جعل شريط التقدم في
clickhouse-clientأقل تذبذبًا عند العمل من فندق مع clusters تضم عددًا كبيرًا جدًا من replicas. #100145 (Alexey Milovidov). - تشغيل
MemoryWorkerفيclickhouse-localعند تفعيل page cache، بحيث يمكن استخدام userspace page cache فعليًا. #100306 (Alexey Milovidov). - تحسين الاستعلامات عبر دفع clause
LIMITإلى داخلUNION ALL. #100364 (Alexey Milovidov). - إضافة دعم ترجمة JIT لمقارنات الأعمدة
StringوFixedStringفيORDER BY، مما يحسن أداء الفرز في مرحلة الدمج بنسبة 6–17% لمفاتيح الفرز التي تعتمد بكثافة على السلاسل النصية. بالمشاركة في التأليف مع @lgbo-ustc. #100577 (Raúl Marín). - عند تفعيل
read_in_order_use_virtual_rowمع الإعداد الجديدread_in_order_use_virtual_row_per_block، أصبحت معلومات حدود الصفوف الافتراضية تُرسَل الآن بعد قراءة كل block منMergeTree، مما يسمح لعملية الدمج بإعادة ترتيب أولويات المصادر أثناء التدفق للأجزاء التي تُصفّى بياناتها بالكامل بواسطةWHERE/PREWHERE/JOIN. يُغلق #99945. #100603 (Vladimir Cherkasov). - تسريع تحويل
FloatإلىStringللقيم الصحيحة الكبيرة عبر توسيع المسار السريعitoaمع تقريب متوافق مع dragonbox. #100649 (Raúl Marín). - استبدال
dragonboxبـzmijللحصول على تحويلFloatإلىStringأسرع بمقدار 1.5x-3x. #100650 (Raúl Marín). - تسريع تحويل
Int128/UInt128إلى سلسلة نصية عبر استبدال القسمة البرمجية باختزال Barrett وفكّ تكرار حلقة التحويل. #100671 (Raúl Marín). - تجنب إنشاء threads زائدة في الدمج المتوازي لـ
uniqExact. #100686 (Jiebin Sun). - إضافة دمج متوازٍ على دفعات لـ
uniqExact. #100687 (Jiebin Sun). - تحسين التوازي في الاستعلامات ذات views البسيطة (مع table أساسية من
MergeTree) التي تُنفذ باستخدام parallel replicas. #100815 (Igor Nikonov). - يضيف دعم
parallel replicasعبرviewsالبسيطة (بما في ذلك عروضUNION ALLالمؤهلة فوق جداولMergeTree) عند تعيينparallel_replicas_allow_view_over_mergetree=1. ويتيح ذلك تنفيذ الاستعلام الخارجي للـ view بالتوازي بدلًا من الاستعلام الداخلي، مما يزيد من مستوى التوازي في الاستعلامات عبر العقد. #100958 (Igor Nikonov). - تحسين القراءة وفق ترتيب
primary keyفيfull_sorting_mergeعند وجود عوامل تصفية تتضمنINفيquery plan. #101261 (Nikita Taranov). - تحسين
allocations/deallocationsعبر تخزين إعداداتsamplingمؤقتًا بدلًا من اجتياز كامل التسلسل الهرمي لـmemory tracker. #101267 (Azat Khuzhin). - إصلاح تراجع كبير في أداء
INSERTعندما يكونdeduplicate_insert = 'enable'(وهو الإعداد الافتراضي منذ 26.2)، وذلك عبر تأجيل حسابhashالبيانات منsquashingإلى جهة المصب، واستخدام تجزئة دفعية للأعمدة عبرupdateHashWithValueRange، مما يقلّل الحمل الإضافي من نحو ~2.5s إلى ~0.5s لـ 5M صفوف مع 22 عمودًا. #101494 (Sema Checherinda). - تقليل الحمل الإضافي لأقفال التحليل باستخدام
try_lockلتجنّب احتساب زمن عمليات الاستحواذ غير المتنازع عليها، مع إزالة قياس مدة الاحتفاظ بالقفل. #101502 (Antonio Andelic). - استبدال تعليمات AVX-512 المضمنة المكتوبة يدويًا في
arrayDotProductبحلقات مستقلة عن المنصة قابلة للتوجيه التلقائي، مع إضافة دعم AVX2 وARM NEON. #101571 (Peng). - تحسين الأداء في
INSERT VALUESلأعمدةMapوArrayوTupleعند تمرير القيم كسلاسل نصية مُهربة (مثل'{\'key\':1}')، مع تجنّب الرجوع غير الضروري إلىparserتعبيرات SQL. #102119 (Joanna Hulboj). - إصلاح الاستخدام المفرط للمعالج من قِبل
table engineRabbitMQ. #102711 (Jaap Elst). - أصبح مُحسِّن
join orderالآن يستنتجpredicatesمساواة انتقالية من شروطjoinالحالية. فعلى سبيل المثال، عند وجودA.x = B.x AND B.x = C.x، يتعرّف على التكافؤA.x = C.x، مما يتيح للمُحسِّن النظر في عملياتjoinمباشرة بين الجداول المرتبطة انتقاليًا. ويمكن أن يحسّن ذلك جودةplanفيschemasالنجمية وندفة الثلج، حيث ترتبط جداول الأبعاد عبر جدول وقائع مشترك. وتتحكم في هذه الميزةsettingالجديدةenable_join_transitive_predicates(وهي معطلة افتراضيًا). #98479 (Alexander Gololobov). - تحسين
TRUNCATE DATABASE TABLES LIKEعبر الإلغاء المسبق لعملياتmergesبالتوازي. #98597 (Shaohua Wang). - إضافة دعم الرتابة لعملية الضرب، مما يتيح
pruningباستخدامprimary keyلتعبيراتkey * constant. #98983 (Amos Bird). - لم تعد
cache dictionariesتأخذ قفلًاexclusiveفيhasKeys؛ مما يقلّل التزاحم على الأقفال باستخدام قفل مشترك لقراءاتcache. #100796 (liuguangliang). - تضمين
subqueryالخاصة بـ VIEW داخلquery treeلإتاحة تطبيق المزيد من التحسينات على VIEW. #100830 (Dmitry Novik). - تحسين
loadingالخاصة بـcacheعند بدء تشغيل الخادم. #101500 (Kseniia Sumarokova). - تطبيق التجسيد المادي الكسول للأعمدة في ReplacingMergeTree مع FINAL عندما يكون الشرط انتقائيًا بما يكفي. #101647 (Nikolai Kochetov).
- إعادة تمكين التحسين
optimize_rewrite_array_exists_to_has(وهو معطّل افتراضيًا منذ 23.10). فهو يعيد كتابةarrayExists(x -> x = elem, arr)إلىhas(arr, elem)الأسرع بكثير، ويتجاوز الآن إعادة الكتابة على نحو صحيح عندما لا يكون نوع عنصر المصفوفة وelemمتوافقين معhas(مثلDateمقابلString)، بحيث تواصل الاستعلامات التي كانت تتعطل سابقًا العمل. يُغلق #71431. #100944 (Alexey Milovidov).
تحسينات
- تحسين مخرجات
EXPLAIN PLAN pretty=1: طباعة أعمدة مخرجات الاستعلام ذي المستوى الأعلى، وإظهار تسميات/رموز علاقة join مع عدد الصفوف التقديري للنتيجة والمحلية، وتضمين أعمدة المخرجات لكل خطوة في خطوات join/source. تغطي هذه التغييرات جزء Information Deficit من #98117. #99462 (Kirill Kopnev). - إضافة إعداد لجدول MergeTree باسم
share_nested_offsets(القيمة الافتراضيةtrue). عند ضبطه علىfalse، تُعامل أعمدة Array ذات الأسماء المنقطة (مثلn.aوn.b) على أنها أعمدة مستقلة بدلاً من مشاركة ملفات offsets والتحقق من تساوي أحجام المصفوفات كجزء من دلالاتNestedالقديمة. #98416 (Amos Bird). - يمكن للمستخدمين الآن تحديد عدة authentication methods في إعداد users.xml/yaml (وكان ذلك ممكناً دائماً في SQL). #91998 (Flip-Liquid).
- إعادة تحميل اتصالات Raft بين العقد التي تستخدم TLS تلقائياً. #93455 (Evgeny).
- توسيع
cast_keep_nullableليعمل مع النوعين Dynamic/JSON. عند تفعيله، فإن تحويل NULL من الأنواع التي يمكن أن تكون Nullable سيُرجع NULL، وإلا فسيتسبب NULL في الخطأCANNOT_INSERT_NULL_IN_ORDINARY_COLUMN. #96504 (Seva Potapov). - تقليل استهلاك الذاكرة لهياكل البيانات الداخلية (
ISerializationobjects) عبر إدخال مجمّع كائنات. #96563 (Nikita Mikhaylov). - إضافة دعم للحقلين
passwordوidentityفي إعداد XML الخاص بـ keeper-client. #96800 (Grigorii Sokolik). - تحسين عمليات الكتابة إلى
Icebergلـ Unity Catalog. #98162 (Konstantin Vedernikov). - إضافة الإعداد
finalize_projection_parts_synchronouslyللسماح بإنهاء projection parts بشكل متزامن أثناء INSERT، ما يقلل peak memory usage للجداول التي تحتوي على projections كثيرة مع الحفاظ على السلوك غير المتزامن الحالي افتراضياً. #98228 (Amos Bird). - إضافة العمود
projections_duration_msإلىsystem.part_logلتسجيل مدة merge/rebuild لكل projection بالمللي ثانية. #98292 (Amos Bird). - تحسين إلغاء queries التي تستخدم ExpressionTransform وNumbersRangedSource عبر KILL QUERY وإلغاء query (Ctrl+C) في clickhouse-client. #98908 (Roman Vasin).
- استبدال قائمة
source_table_enginesالمرمّزة مسبقاً ببحث وقت التشغيل عبرStorageFactory::getAllStorages(). يضيف هذا عمليات تحقق من الوصول لبعض table engines غير المشمولة، ويغلق #71544. #98984 (pufit). - إضافة إعداد للتحكم في سلوك عدم تطابق النوع لـ Variant وDynamic (throw أو إرجاع null). #99085 (Bharat Nallan).
- تحسين التوافق بين
IcebergوSpark: إصلاح التعامل غير المتسق مع المسارات الناتج عن المزج بين مسارات التخزين ومسارات البيانات الوصفية؛ وفرض أن تسجّل جداولIcebergموقع الجدول على هيئة عنوان URL أو مسار مطلق؛ وإضافة آلية fallback لحساب أحجام الملفات فيAzureلأن بعض قارئات ClickHouse لا تدعم عدّ البايتات بعد الاجتياز؛ ومعالجةversion-hint.txtبطريقة متوافقة مع Spark؛ وإدخال تجريدات على مستوى الأنواع تجعل الخلط بين أنواع المسارات أصعب مستقبلًا؛ وإضافة اختبارات لـAzureوLocalتتحقق من قابلية التشغيل البيني بين المحركات من دون تحميل/تنزيل وسيط؛ وإصلاح استخدام عمليات الحذف الموضعي، التي كانت تعتمد سابقًا على استدلالات استنتاج المسار في مواضع لا يكون فيها هذا النهج مناسبًا. #99163 (Daniil Ivanik). #100420 (Daniil Ivanik). - إصلاح احتمال حدوث race condition في
IPartitionStrategy::cached_result، والذي أُدخل في https://github.com/ClickHouse/ClickHouse/pull/92844. #99400 (Arthur Passos). - يمكن للمستخدمين الآن كتابة أنواع بيانات Interval في ClickHouse بتنسيق Arrow. #99519 (Peter Nguyen).
- إضافة دعم native لاستيراد أنواع بيانات
UUIDوتصديرها بتنسيقاتArrowوParquet. يمكن للمستخدمين الآن الاستعلام مباشرةً عن بيانات UUID ونقلها بين ClickHouse وأدوات البيانات الأخرى من دون الحاجة إلى تحويلها يدويًا إلى سلاسل نصية أو استخدام حلول بديلة. كما أُضيف استدلال منطقي تلقائي لعناصر UUID ذات المستوى الأعلى، ودعم لتلميح مخطط صريح لعناصر UUID المتداخلة. #99521 (Ivan). - دعم أرشيفات
7zعلى object storage. يُغلق #70968. #99600 (Alexey Milovidov). - إضافة أحداث ProfileEvents
ObjectStorageListedObjectsوObjectStorageGlobFilteredObjectsوObjectStoragePredicateFilteredObjectsوObjectStorageReadObjectsلأغراض introspection لخط أنابيب سرد الملفات وقراءتها في object storage (S3وAzureوغيرهما). #99778 (Sema Checherinda). - إصلاح فشل table function
mergeمع الخطأUNKNOWN_IDENTIFIERعند الاستعلام عن أعمدة غير موجودة في جميع الجداول الموزعة/البعيدة الأساسية. #99833 (Alexey Milovidov). - نضمّن الآن وقت commit في metric الإجمالي لوقت تنفيذ mutation في ReplicatedMergeTree. كان هذا الوقت مفقودًا بعد #96376. #99936 (alesapin).
- إضافة سجل كتابة مسبقة للكائنات الثنائية الكبيرة (blob) المعلقة للإزالة في
MetadataStorageFromDisk، مما يحسّن المتانة والاتساق بين البيانات الوصفية وobject storage البعيد عند حذف الكائنات. #100019 (Maksim Kita). - تعطيل AI SQL generation (الأمر
??) في العميل embedded (بروتوكولا SSH وWebSocket) لمنع الوصول إلى متغيرات بيئة الخادم. #100290 (Alexey Milovidov). - تغيير الواجهة الخاصة بعمليات insert في Iceberg مع catalog. وإهمال الإعدادات التالية:
storage_catalog_typeوstorage_aws_access_key_idوغيرها. #100334 (Konstantin Vedernikov). - اعرض علامات الجدولة على شكل 4 مسافات عند اللصق في clickhouse-client. يُغلق #100405. #100416 (Raúl Marín).
- تجنّب فحص كتالوج بحيرة البيانات البعيد بالكامل بحثًا عن تلميحات الجداول “Maybe you meant …” عندما يكون
show_data_lake_catalogs_in_system_tablesمعطّلًا. #100452 (Alsu Giliazova). - طبّق
distributed_index_analysis_min_indexes_bytes_to_activateبعد تقليم الأقسام. #100477 (Azat Khuzhin). - أصلِح فشل التحقّق في push down لمرشح bloom في Parquet عند استخدام عبارات IN/NOT IN الفارغة. #100543 (zoomxi).
- أصبحت إحصاءات الأعمدة MinMax تخزّن القيمتَين الصغرى والكبرى على هيئة Field (مُحدَّد النوع) بدلًا من Float64. ويتضمن التنسيق المُسلسل اسم نوع العمود إلى جانب القيم. كما رُفع إصدار ملف الإحصاءات إلى V2؛ وتستلزم الملفات المكتوبة بإصدارات أقدم إعادة materialization (ALTER TABLE … MATERIALIZE STATISTICS ALL). إصلاح #53140. #100605 (Han Fei).
- حدّث
cppkafkaليتضمن إصلاحًا لحالة deadlock عند إغلاق Consumer. #100612 (Azat Khuzhin). - تحتوي معلومات الكائن المستخدمة في parsing لملفات البيانات في Iceberg الآن على عدد صفوف الملف وحجم الملف بالبايت، بعد parsing لهما من manifest file. #100645 (Daniil Ivanik).
- أضف معلمة التهيئة
use_separate_cache_arenaلإتاحة التحكم في فصل Arena الخاصة بذاكرة cache. #100664 (Seva Potapov). - يضيف دعمًا أصليًا لاستيراد نوعَي البيانات
StringViewوBinaryViewمن Apache Arrow إلى أعمدةStringفي ClickHouse، مما يحسّن التوافق مع ingestion المعتمد على Arrow. #100762 (Ivan). - أصبحت بعض server settings في Keeper تُعاد تحميلها ديناميكيًا إذا تغيّر config file أثناء runtime: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads. #100773 (Michael Kolupaev).
- زِد profile events
MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytesفي إصدار release. #100899 (Pavel Kruglov). - يستبعد تتبّع الذاكرة في Cgroupv2 الآن
slab_reclaimableمن ذاكرة النواة، مما يوفّر قياسًا أدق لاستخدام الذاكرة غير القابلة للاسترداد. #100901 (Antonio Andelic). - يعطّل
use_partition_pruning = 0الآن أيضًا تقليم فهرسMinMaxوتحسين العد على أعمدة مفتاح partition، بالإضافة إلى تعطيل التقليم المستند إلى مفاتيح partition. #100904 (Nihal Z. Miaji). - يطبع
pretty=1فيEXPLAIN [PLAN]الآن expressions بصيغة سهلة القراءة. #100927 (Kirill Kopnev). - يدعم
accurateCastOrNullوaccurateCastOrDefaultالآن أنواع الهدفTuple، بما في ذلكTuplesالمتداخلة التي تحتوي على عناصرNullable. في السابق، كانت هذه الدوال ترفض أهدافTupleلأنTupleلم يكن مدعومًا داخلNullable. إغلاق #100820. #100942 (Nihal Z. Miaji). - إصلاح تكرار المخططات في واجهة Play عند التبديل بين المظهرين الفاتح والداكن. #101058 (Alexey Milovidov).
- تحديث chdig إلى v26.3.1 (واجهة perfetto، ومخططات sparklines في الملخص لـ CPU/Memory/Merges/Queries، وsystem.warnings، والبحث باستخدام regexp في السجلات). #101092 (Azat Khuzhin). وتحديث chdig إلى v26.4.3 (تحسينات perfetto، وإصلاحات للمشاركة عبر pastila.nl، وفروقات flamegraph، وتغيير الإعدادات آنيًا). #103145 (Azat Khuzhin).
- يمكنك الآن وضع فاصلة ختامية في clause
WITHقبل querySELECT. #101093 (Aruj Bansal). - إضافة MergeTree setting
compress_per_column_in_compact_partsللتحكم في كيفية تنظيم blocks المضغوطة داخل compact parts. عندما تكون قيمتهtrue(وهي القيمة الافتراضية، مع الحفاظ على السلوك الحالي)، يبدأ كل column block مضغوطة جديدة، مما يتيح فك الضغط انتقائيًا. وعندما تكون قيمتهfalse، تُحزم جميع columns داخل granule في block مضغوطة واحدة، مما يحسن compression ratio وأداء القراءة في workloads التي تقرأ جميع columns دائمًا. #101114 (Amos Bird). - عرض نافذة معلومات الجدول في واجهة Play فقط عند تمرير المؤشر فوق اسم الجدول، وليس فوق الصف بأكمله. #101118 (Alexey Milovidov).
- إضافة أيقونات خاصة بكل engine وتحسين تجربة استخدام قائمة الجداول في الشريط الجانبي لواجهة Play. #101134 (Alexey Milovidov).
- دعم
Nullable(Tuple)في formats ArrowوArrowStreamوORCوParquetالقديمة. #101272 (Nihal Z. Miaji). - عرض صف TOTALS كتذييل للجدول في web UI (play.html). #101286 (Alexey Milovidov).
- دعم وضع الاستعلامات المتعددة في web UI (
play.html): تشغيل عدة queries دفعة واحدة مع تنفيذ متوازٍ للاستعلامات الشبيهة بـSELECT، وعرض نتائج كل query على حدة. #101290 (Alexey Milovidov). - إصلاح تغيير حجم columns في web UI play.html بعد إعادة هيكلة result table إلى مكوّن ويب. #101295 (Alexey Milovidov).
- إضافة إمكانية تقييد عدد عمليات flushes لملف profile الخاص بـ jemalloc عند MEMORY_LIMIT_EXCEEDED لكل interval زمني. #101396 (Azat Khuzhin).
- تمت إضافة إعدادات Keeper
nuraft_streaming_mode(القيمة الافتراضيةfalse) وnuraft_max_log_gap_in_streamوnuraft_max_bytes_in_flight_in_stream. يُغلق #90743. #101427 (Kseniia Sumarokova). - تمت إضافة المقياس غير المتزامن
CGroupMemoryUsedWithoutPageCacheالذي يبلّغ عن استخدام ذاكرة cgroup مع استبعاد كلٍّ من OS page cache الخاصة بالنواة وuserspace page cache الخاصة بـ ClickHouse، بما يماثلMemoryResidentWithoutPageCache. كما جرى توضيح وصف المقياسCGroupMemoryUsed. #101513 (Francesco Ciocchetti). - أُضيف تبسيط نحوي على مستوى parser لصياغة الدالة القياسية
OVERLAYفي SQL. الدالةoverlayموجودة بالفعل؛ وتضيف هذه الميزة دعم الصيغة المعتمدة على الكلمات المفتاحية باستخدامPLACINGوFROMوFORكفواصل. #101681 (Desel72). - تمت إضافة اسم مستعار للعمود
INDEX_LENGTHإلى جدول النظامinformation_schema.tables، على غرار الأسماء المستعارة الحالية المكتوبة بأحرف كبيرة في هذا الجدول. #101705 (Robert Schulze). - أصبح جدول النظام
information_schema.tablesيتجاهل الآن أجزاء الجدول غير النشطة. وهذا يجعل قيم أحجام الجداول المعروضة أكثر واقعية. #101706 (Robert Schulze). - أصبحت الدالة
ngramsترفض الآن أطوال ngram غير الصالحة. مثال: أصبحSELECT ngrams('abc', 0)يُرجع خطأً. #101922 (Robert Schulze). - متابعة لـ #91820 و#90837: تصفية الخوارزميات غير المدعومة من رسالة الخطأ؛ وتشغيل الاختبارات الخاصة بـ FIPS في بنيات FIPS. #102067 (Mikhail f. Shiryaev).
- قَصر ارتفاع الخلية على ثلاثة أسطر في web UI (
play.html)، مع إتاحة توسيع الخلايا بالنقر عليها. #102154 (Alexey Milovidov). - تمت إضافة خيار جديد يتيح فرض نمط (virtual/path) لنقاط نهاية S3. يحل #82019 و#76007، وهو استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/83168. #102378 (Konstantin Vedernikov).
- أصبح الإعداد
restore_replace_external_engines_to_nullيتجاوز الآن أيضًا استعادة قواعد البيانات ذات المحركات الخارجية (مثلDataLakeCatalogوMySQLوPostgreSQLوS3) بدلًا من الفشل أو بدء اتصالات خارجية. #102400 (Nikita Fomichev). - إضافة دعم تحليل الفهرس النصي للدالة
hasPhraseعبر وضعHINT. #102438 (Elmi Ahmadov). - تمت معاملة STATISTICS على أنها للقراءة فقط في ColumnDependency لإصلاح LOGICAL_ERROR أثناء MATERIALIZE STATISTICS ALL. #102627 (Konstantin Bogdanov).
- إنشاء
system.asynchronous_metric_logوتعبئته في وضع keeper-as-server. #102664 (Miсhael Stetsyuk). - إضافة خيار الإعداد
default_system_log_flush_policy.skip_alias_columnsللسماح بتجاهل أعمدة ALIAS في جداول سجلات النظام، مما يعالج مشكلة سجلات النظام المعتمدة على S3 التي ترفض أعمدة ALIAS. #102669 (Miсhael Stetsyuk). - لا تُمكِّن الإحصاءات التلقائية لجداول النظام، إذ نادرًا ما تستفيد منها. #102862 (Han Fei).
- دعم المُجزِّئ
arrayلتحسين LIKE. #102880 (Elmi Ahmadov). - إرسال MemoryAllocatedWithoutCheck حتى في بنيات الإصدار. #103064 (Azat Khuzhin).
- إتاحة untracked_memory لكل خيط تنفيذ في system.stack_trace. #103065 (Azat Khuzhin).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- إصلاح الخطأ
Block structure mismatch in streamالناتج عن إرجاع أعمدة غير ضرورية بسبب Lazy materialization. يُصلح #95191. #96682 (Nikolai Kochetov). - إصلاح خطأ منطقي في استعلام سياسة إخفاء البيانات مع
ON CLUSTER. #97594 (Bharat Nallan). - إصلاح خلل عند استخدام Unity catalog فوق GCS. #98456 (Melvyn Peignon).
- أصبح
DataLakeCatalogالآن يراعي إعدادhttp_forbid_headersفي إعدادات الخادم عند التحقق من الإعدادauth_header. #98827 (Michael Anastasakis). - إصلاح استدعاءات
HeadObjectمن نوع N+1 لأنماط globs ذات توسيع الأقواس في S3. #99219 (Konstantin Bogdanov). - التحقق من تغييرات الإعدادات في استعلامات CREATE عندما يكون المحرّك نفسه يدعم الإعدادات أيضًا. #99279 (János Benjamin Antal).
- إصلاح فشل
ALTER TABLE UPDATE/DELETEمع الخطأMissing columnsعندما يحتوي جدول على عمود MATERIALIZED يعتمد تعبيره على عمود EPHEMERAL. #99281 (Yash ). - أصبحت بيانات الاعتماد في سلاسل اتصال JDBC وODBC وNATS تُحجب الآن في سجلات الاستعلامات ومخرجات
SHOW CREATE، مما يمنع الكشف غير المقصود عن المعلومات الحساسة. وبالنسبة إلى سلاسل الاتصال بصيغة URI (مثل{scheme}://{user}:{password}@{host})، لا يُحجب سوى جزء كلمة المرور، بينما يبقى الباقي مرئيًا لتسهيل استكشاف الأخطاء وإصلاحها. كما أصبح الإعدادnats_tokenيُحجب الآن أيضًا. #99344 (János Benjamin Antal). - إصلاح قيام parseDateTimeBestEffort بتحليل كلمات تبدأ ببادئات أسماء الأشهر بشكل غير صحيح في التنسيق DD-month-YYYY. يُغلق #99345. #99350 (Pavel Kruglov).
- إصلاح تجاهل TABLE_UUID_MISMATCH عند عدم استخدام analyzer. #99380 (Azat Khuzhin).
- إصلاح خلل كان يؤدي إلى تجاهل الإعدادات الصريحة المرسلة إلى جانب
compatibilityفي الطلب نفسه بصمت إذا كانت قيمتها تطابق القيمة default على الخادم. #99402 (Raufs Dunamalijevs). - إصلاح الحالات التي كانت فيها الأرقام ذات الأصفار البادئة في مسار hive partitioning تتسبب في أخطاء. يُصلح #98801. #99458 (Yarik Briukhovetskyi).
- إصلاح heap-use-after-free عند حذف جدول بالتزامن مع استعلام قراءة قيد التشغيل (19 حالة في CI خلال آخر 90 يومًا). #99483 (Alexey Milovidov).
- إصلاح خلل في Keeper حيث كان من الممكن أن يعلق read request (مما يؤدي إلى انتهاء مهلة session) إذا أُغلقت session أخرى غير مرتبطة على الخادم نفسه في توقيت غير مناسب تمامًا. #99484 (Michael Kolupaev).
- التحقّق من بنية العمود قبل تطبيق التصحيحات. #99531 (Seva Potapov).
- إصلاح فشل التحقّق
rows_sourcesفي الدمج العمودي عند التبديل السريع بينSYSTEM STOP/START MERGESأثناء دمج جدول يحتوي على أعمدةDynamic. #99532 (Alexey Milovidov). - إصلاح تشذيب الأقسام غير الصحيح للدالة
toWeek()، الذي كان يتسبب في أن تُرجع الاستعلامات التي تحتوي علىWHERE toWeek(date, mode) = Nنتائج فارغة للأسابيع 49–52 في الجداول المُقسّمة باستخدامtoYYYYMM(date). #99542 (Takumi Hara). - إصلاح استثناء في الدوال التي تعمل على ColumnReplicated مع صفوف غير مُشار إليها ناتجة عن JOIN. #99564 (Hechem Selmi).
- إصلاح عدم قيام
CLEAR COLUMNبإعادة بناء projections، وعدم إعادة تقييم materialized columns التي تعتمد على العمود الذي جرت إزالته، مما قد يسبب استثناءات أو تلفًا في البيانات أثناء عمليات الدمج اللاحقة. #99565 (Desel72). - إصلاح استثناء (
Bad get: has Tuple, actual type String) فيConditionSelectivityEstimatorعندما يستخدم استعلام عامل IN مع query parameter قياسي واحد (مثلWHERE col IN ({p:String})) على جدول يحتوي على column statistics ويكونuse_statisticsمفعّلًا. #99614 (Ilya Yatsishin). - يجب ألّا يُوسَم الجزء الذي يحتوي على projections غير معروفة بأنه مفقود نهائيًا. #99623 (Sema Checherinda).
- إصلاح استثناء
logical errorنادر أثناء الدمج العمودي عند تنفيذSYSTEM STOP MERGESوSYSTEM START MERGESبالتوازي. #99628 (Desel72). - إصلاح مرجع متدلٍّ في injectRequiredColumns كان يتسبب في تعطل أثناء الدمج. #99679 (Tuan Pham Anh).
- إصلاح سلوك غير معرّف في قارئ Avro format عند قراءة numeric values تتجاوز سعة column type الهدف. وأصبحت الاستعلامات الآن تفشل عند حدوث overflow بدلًا من إنتاج قيم غير صحيحة بصمت. #99697 (asyablue22).
- إصلاح تحليل علامات الاقتباس بأسلوب shell في arguments الخاصة بـ
executabletable function. #99794 (Nikita Semenov). - إصلاح إيقاف خاطئ في
NativeReaderعند deserialization لتدفق Native format مع عدم تطابق عدد الصفوف: جرى تغييره منLOGICAL_ERRORإلىINCORRECT_DATAبحيث يُعالَج الخطأ على أنه خطأ بيانات بدلًا من تشغيلabort()في builds الخاصة بـ sanitizer/debug. #99822 (Rahul Nair). - إصلاح إنهاء العملية أثناء deserialization لعمود
Tupleعندما يكون نوع serialization في التدفق binary هوDETACHED. #99823 (Rahul Nair). - إصلاح استثناء
LOGICAL_ERRORزائف أثناء تغيير حجم filesystem cache ديناميكيًا بسبب race condition في ترقية الطابور الفرعي SLRU. #99850 (Alexey Milovidov). - إصلاح إبلاغ استعلامات async insert عن
written_rowsوread_rowsوresult_rowsعلى أنها صفر فيquery_logومخرجات العميل. #99879 (Sema Checherinda). - إصلاح الاستثناء “Bad cast from type X to Y” في
KILL QUERYعندما يُرجع الاستعلام الداخلي على جداول النظام أعمدةً مغلّفةً فيColumnConst. #99881 (Alexey Milovidov). - إصلاح خطأ منطقي في استعلام فرعي مترابط داخل وسيطة
untuple. #99917 (Vladimir Cherkasov). - إصلاح استثناء عند استدعاء
rightأوrightUTF8أو دوالsubstringأخرى بطول INT64_MIN (-9223372036854775808)، إذ كان ذلك يؤدي سابقًا إلى سلوك غير معرّف بسبب فيض عددي. تُبلّغ الدوال الآن بشكل صحيح عن الخطأ ARGUMENT_OUT_OF_BOUND. #99934 (Jimmy Aguilar Mena). - أصبح ClickHouse الآن يتعامل بشكل صحيح مع الجداول بأسلوب Spark (حيث يكون لدينا مسار مطلق كامل لكل ملف أو مسار نسبي إلى مسار الجدول المشترك). يُصلح #92348. #99935 (alesapin).
- إصلاح الاستثناء “Inconsistent AST formatting” في
ALTER TABLE ... MODIFY QUERYمع استعلامات فرعية متداخلة تحتوي علىSETTINGSعندما يحتويALTERنفسه أيضًا علىSETTINGS. #99938 (Nikita Mikhaylov). - التراجع عن #97114 “Move join step row estimation before check for 1 child” بسبب الاشتباه في تراجع الأداء. #99957 (Alexander Gololobov).
- إصلاح خلل كان قد يؤدي إلى تخطي ClickHouse لبعض الملفات إذا كان ترويس
Content-Lengthمفقودًا من استجابة طلب HEAD الخاص بها (على سبيل المثال، بسبب decompressive transcoding في GCS). #99971 (Yarik Briukhovetskyi). - إصلاح فشل assertion (استثناء في debug builds، ونتائج غير صحيحة في release builds) عند ضرب حالات التجميع
aggregate statesالخاصة بـNumericIndexedVectorفي ثابت صحيح زوجي، وكان السبب self-XOR على bitmaps من نوع Roaring ذات alias فيpointwiseAddInplace. #99976 (Desel72). - منع استثناء
Unexpected return typeفي filter pushdown القديم عبرJOIN USINGمتسلسل عندما تتغير أنواع المفاتيح بعد تحويلاتjoin. #99999 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERROR“Unexpected node type for table expression … Actual IDENTIFIER” عندما يُستخدم استعلام فرعي scalar داخل وسيطة غير محلولة لدالة جدول، مثلSELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1))). #100014 (Alexey Milovidov). - إصلاح فشل
INSERTمعVALUESعندما كانت البيانات متبوعةً بتعليق SQL ختامي (--أو/* */) في السطر التالي. يُتجاوز التعليق الآن بدلًا من تحليله على أنه صف آخر. #100016 (Pratima Patel). - إصلاح استثناء في
arrayRemoveعند مقارنة قيم tuple ذات مكونات NULL. #100017 (Alexey Milovidov). - إصلاح تسرّب البيانات بين المستخدمين في
system.asynchronous_inserts: كان بإمكان أي مستخدم لديه صلاحيةSELECTعلى الجدول رؤية إدخالات async insert المعلّقة الخاصة بمستخدمين آخرين. تُصفّى الإدخالات الآن بحسب المستخدم الحالي، ما لم يكن لدى المستخدم امتيازSHOW_USERS. #100024 (Shaohua Wang). - إصلاح حالة كان فيها التحويل من Time64 إلى UInt64 يقيّد القيم عند 24 ساعة. #100025 (Yarik Briukhovetskyi).
- إصلاح تعطل الخادم المحلي عندما يحتوي
CREATE DICTIONARYعلى تعريف بقيمة قائمة تتضمن دالة غير موجودة. #100036 (Yakov Olkhovskiy). - إصلاح عدم قدرة التنسيقين
CSVوMsgPackعلى تحليلNullable(Tuple)بشكل صحيح. يغلق #99753. #100038 (Nihal Z. Miaji). - إصلاح فشل
CREATE VIEWمعUNKNOWN_IDENTIFIERعند استخدام اسم مستعار لتعبير دالة في WITH (مثلtuple(...)) كطرف أيمن لـIN. #100042 (Peng). - إصلاح فشل aggregate functions الخاصة بالسلاسل الزمنية (مثل
timeSeriesResampleToGridWithStaleness) معILLEGAL_TYPE_OF_ARGUMENTعند استخدامها معinitializeAggregationأوAggregatingMergeTreeفي وضع parallel replicas. #100053 (Alexey Milovidov). - تصحيح معالجة القيم السالبة داخل NumericIndexedVectorDataBSI. #100086 (Daniil Ivanik).
- إصلاح عدم احتفاظ الدالتين
accurateCastOrDefaultوto*OrDefaultبنوع العمود Const للمدخلات الثابتة. #100132 (Alexey Milovidov). - أصبحت query parameters المحذوفة من النوع
LowCardinality(Nullable(T))تأخذ القيمة الافتراضية NULL بشكل صحيح، تمامًا مثلNullable(T). #100144 (Denys Melnyk). - إصلاح استخدام قيمة غير مهيّأة في StringSearcher.h. #100225 (Konstantin Bogdanov).
- السماح بإلغاء الاستعلامات الفرعية scalar وpipelines الأخرى أثناء التحليل عبر Ctrl+C. سابقًا، لم يكن للضغط على Ctrl+C أثناء تنفيذ استعلام فرعي scalar طويل التشغيل أي تأثير حتى يكتمل الاستعلام الفرعي. كما تم إصلاح شريط التقدم وإحصاءات JSON لكي يبلّغا بشكل صحيح عن الصفوف المقروءة أثناء تنفيذ الاستعلام الفرعي scalar، سواء في
clickhouse-clientأوclickhouse-local. بالمشاركة في التأليف مع @YjyJeff. #100230 (Raúl Marín). - إصلاح استثناء
LOGICAL_ERRORفي queries التي تتضمن أعمدةDynamicمع عمليات CROSS JOIN وRuntime Filters، وكان السبب أنColumnVariant::filterكان يشارك مؤشرات variant column بدلًا من استنساخها في مسار تحسينhasOnlyNulls. يغلق https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov). - إصلاح خلل في Array من النوع variant قد يعيد تفسير نوع البيانات عند استدعاء الدالة
arrayFirst/arrayLast. على سبيل المثال، كانArray(Variant(Date, Bool))يتحول سابقًا إلىBoolعندما يكون variant type الأساسي الفعلي هوDate. #100255 (timothygk). - بعض التغييرات الطفيفة على الدوال: أصبحت دوال h3 تتحقق من الحدود بشكل أفضل؛ وأصبحت
readWKBتتحقق من حدود الحجم (إعداد جديد،max_wkb_geometry_elements)؛ كما أصبحت دوال التوليد العشوائي تقيّد الحد الأقصى لعدد التكرارات في حساباتها. متابعة لـ #93543. #100270 (Alexey Milovidov). - إصلاح مشكلة كانت تؤدي فيها
cutURLParameterإلى تخطي المعلمات بشكل غير صحيح عندما تظهر كسلاسل فرعية ضمن معلمات أخرى. #100280 (Nikita Semenov). - إصلاح استثناء عند احتواء إعداد مسار ملف metadata في Iceberg على null byte. #100283 (Alexey Milovidov).
- إصلاح الزيادة التربيعية في عدد الاستعلامات المنفذة عند استخدام
distributed_index_analysisمع predicates تحتوي على استعلامات فرعيةIN. #100287 (Anton Popov). - إصلاح استثناء “Block structure mismatch” عند استخدام
GROUP BY ... WITH TOTALS HAVINGمعUNION DISTINCTوتعبيرات Nullable. #100293 (Alexey Milovidov). - إصلاح استثناء LOGICAL_ERROR في
estimateCompressionRatioعندما تكون المعلمةblock_size_bytesكبيرة جدًا. #100298 (Alexey Milovidov). - إصلاح استثناء “Inconsistent AST formatting” في builds التصحيح عند استخدام
GROUP BY CUBE(...) WITH ROLLUPأو تركيبات مشابهة. #100376 (Alexey Milovidov). - إصلاح استثناء عند إنشاء view بأسماء alias للأعمدة مع
SELECT *أو استعلاماتEXCEPT/INTERSECT. #100386 (Alexey Milovidov). - إصلاح تعليق
DROP TABLEإلى أجل غير مسمى على جداول Kafka engine عندما يعلق المستهلكون في عملية rebalance بعد خطأ heartbeat. #100388 (Alexey Milovidov). - إصلاح استثناء
ReadBuffer is canceled. Can't read from it.في عمليات النسخ الاحتياطي/الاستعادة التي تستخدم أرشيفات zip. #100400 (Alexey Milovidov). - إصلاح استثناء
TOO_MANY_ROWSفي استعلاماتSELECT count()معmax_rows_to_read/force_primary_keyعندما تكون البيانات موزعة على عدة parts ذات حدود granule غير متطابقة. #100408 (Alexey Milovidov). - إصلاح
system.completionsليُرشِّح databases وtables وcolumns بشكل صحيح حسب access rights في جميع تركيبات grant: grant لكل table، ولكل DB، وrevoke لكل column. #100432 (Shaohua Wang). - إصلاح SEGFAULT في NuRaft بسبب race condition. #100444 (Pablo Marcos).
- أصبحت
min/max/argMin/argMaxالآن تتعامل مع NaN بشكل متسق معORDER BY: يُتخطى NaN دائمًا (ولا يُعاد إلا إذا كانت جميع القيم NaN). سابقًا، كانت النتائج تعتمد على موضع NaN في البيانات بسبب دلالات المقارنة غير المرتبة في IEEE 754. #100448 (Raúl Marín). - أُصلح خلل ناتج عن النسخ واللصق، إذ كان يتم تجاهل
delta_lake_snapshot_end_versionبصمت عند ضبطه بدونdelta_lake_snapshot_start_versionبدلًا من إصدار الخطأBAD_ARGUMENTS. #100454 (Mohammad Lareb Zafar). - إن
StorageRabbitMQ::shutdownليس idempotent (إذ يصل دائمًا إلى المؤشرات الضعيفة ثم يدمّر المؤشرات المشتركة المقابلة)، لكنه بات يُستدعى الآن مرتين: مرة فيStreamingStorageRegistryثم فيDatabaseCatalog. يجعل هذا الإصلاح الأسلوب idempotent ويضيف تحققات دفاعية من القيم الفارغة. #100455 (Miсhael Stetsyuk). - أُصلح استثناء
LOGICAL_ERRORعند استخدامaccurateCastOrNullمع النوع الهدفQBit. #100470 (Raufs Dunamalijevs). - أُصلح استثناء LOGICAL_ERROR “Stream … not found” عند الإدراج في جدول يحتوي على أعمدة
Array(JSON)متداخلة ضمن wide parts معoptimize_on_insert=0. #100475 (Pavel Kruglov). - أُضيف التحقق من مسارات مُدخلات الملفات في البيانات الوصفية للنسخ الاحتياطي لرفض اجتياز المسار، والمسارات المطلقة، والأسماء الفارغة أثناء
RESTORE. #100483 (Pablo Marcos). - أُصلح عدم عمل صياغة
LIMIT m OFFSET n WITH TIES. وهذه الصياغة مكافئة لـLIMIT n, m WITH TIESالتي كانت تعمل بالفعل. #100491 (Nihal Z. Miaji). - أُصلح الاستثناء “No set is registered for key” عند استخدام
INمع أعمدةNullable(Tuple)التي تحتوي على حقول مسماة وعناصرLowCardinality. #100523 (Alexey Milovidov). - أُصلح خلل heap-buffer-overflow في usearch
sorted_buffer_gt::insert()كان يمكن أن يسبب تعطلًا أو إفسادًا صامتًا للذاكرة أثناء vector similarity search. #100537 (Dustin Healy). - أُصلح تجاهل
EXECUTE ASلعبارتيFORMATوINTO OUTFILEالمحددتين في الاستعلام. #100538 (pufit). - أُصلح عدم اتساق تنسيق AST لـ SAMPLE مع OFFSET على مستوى الاستعلام. يُغلق #100576. #100579 (Pavel Kruglov).
- أُصلح Polaris catalog مع azure. فمنذ الإصدار 25.12، بدأ هذا الكتالوج مع azure بإضافة bucket في بداية المسار. على سبيل المثال:
abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path>بدلًا منabfss://polaris-polaris@<some_url>.windows.net/<other-path>. يزيل طلب السحب هذا الـ bucket من المسار. #100583 (Konstantin Vedernikov). - أُصلح استثناء عدم تطابق النوع في التحويل عندما يكون العمود
defaultثابتًا في بعض blocks. يُغلق #100574. #100616 (Pavel Kruglov). - يُصلح حالات NOT_FOUND_COLUMN_IN_BLOCK التي يحتوي فيها جزء projection SELECT على أعمدة غير موجودة في جزء SELECT الأصلي من الاستعلام. يُغلق #100194. #100623 (Yarik Briukhovetskyi).
- يتحقق من أبعاد shape لتنسيق Npy مقارنةً بحجم الملف وحدود overflow لمنع حجب الخدمة الناتج عن ملفات
.npyمُصمَّمة بأبعاد كبيرة على نحو غير معقول. ويرفض أيضًا الأشكال الفارغة، ويضع حدًا أقصى للذاكرة لكل صف يبلغ 2 GiB. #100625 (Raúl Marín). - يُصلح تجاهل
session_timezoneعند parsing قيمDateTimeأثناء async inserts (TCP) وجميع عمليات insert عبر HTTP. #100647 (Sema Checherinda). - يتيح تمرير sharding key إلى table functions
cluster()وclusterAllReplicas()عند استخدام table function كمصدر (مثلcluster('name', view(...), sharding_key)). #100665 (Sergey Veletskiy). - يُصلح crash في server (فشل assertion) عند استخدام Parametric aggregate functions مع combinator Array وargument من نوع NULL، مثل
quantileIfArrayArray(0.5)([[NULL]], [[1]]). #100679 (nerve-bot). - يُصلح Exception عند حساب common supertype لـ tuples الفارغة وغير الفارغة عند تفعيل
use_variant_as_common_type. #100699 (Antonio Andelic). - لم يعد server يفشل في بدء التشغيل عندما يكون قرص Azure blob storage مُعدًّا لكن endpoint غير متاح مؤقتًا (مثل فشل DNS). #100701 (Raúl Marín).
- يُصلح سلوكًا غير معرّف في
positiveModuloعندما لا يتسع divisor غير الموقّع داخل نوع النتيجة الموقّع. #100705 (Raúl Marín). - يُصلح crash في server (logical error “Unexpected return type from __topKFilter”) عند تفعيل
use_top_k_dynamic_filteringوكان عمودORDER BYمن النوعDynamicأوVariant. #100742 (Groene AI). - يُصلح crash في server عند استخدام الدالة
has()مع PREWHERE/WHERE على مفتاح Tuple يحتوي على عناصر LowCardinality. #100760 (Groene AI). - يُصلح فشل assertion
file_offset_of_buffer_end <= getFileSize()(Exception في إصدارات debug) عند القراءة من جداولLogأوStripeLogعلى S3 object storage مع عمليات كتابة concurrent. #100763 (Alexey Milovidov). - يُصلح Exception في مُقدِّر selectivity للإحصاءات عندما تحتوي WHERE clause على function expression (مثل
toDecimal64(col, 3)) في table مع تفعيل statistics. ويتجاوز المُقدِّر الآن مثل هذه predicates بدلًا من محاولة إجراء type cast غير صالح. #100764 (Han Fei). - يُصلح حالة نادرة قد ينتج فيها join مع إعادة الترتيب نتيجة غير صحيحة. #100790 (Yarik Briukhovetskyi).
- إصلاح أنواع الوسائط غير الصحيحة في
AggregateFunctionضمن العدّ البسيط المُحسَّن، والتي كانت تتسبب في ظهور الاستثناءNUMBER_OF_ARGUMENTS_DOESNT_MATCHعند الاستعلام عن تعبيرات مثلcount(v0 + v1)على الجداول الموزعة. #100794 (YjyJeff). - قد تعرض بعض الكتالوجات بعض البيانات السرية في قسم
SETTINGSضمن نتيجة الاستعلامselect * from system.databases. يمنع هذا التغيير حدوث هذا السلوك. #100800 (Konstantin Vedernikov). - إصلاح سلوك غير معرّف (تجاوز السعة في الأعداد الصحيحة الموقَّعة) في
toStartOfIntervalعند استخدام الفواصل Week أو Quarter أو Year مع وسيطة origin وقيم فاصلة متطرفة. #100817 (Raúl Marín). - إصلاح مشكلة عدم قدرة مُركِّبات الدوال التجميعية
IfوDistinctوDistinctIfوIfStateذات نوع الإرجاعTupleووسيطةNullableواحدة أو أكثر على قراءة الحالات المُسلسلة الأقدم بعد إدخالNullable(Tuple). يغلق #98917. #100826 (Nihal Z. Miaji). - إصلاح
segfaultفي s3Cluster والاستعلامات الموزعة بسبب استخدام تجمع الاتصالات بعد تحريره. #100837 (Konstantin Bogdanov). - إصلاح
segfaultالناتج عن فكّ إشارة مؤشّر فارغ عند تحميل القواميس أثناء إيقاف تشغيل الخادم. يُستدعىContext::getUserDefinedSQLObjectsStorage(الذي يفكّ إشارةuser_defined_sql_objects_storage) بواسطة خيوط القواميس بالتزامن مع استدعاء الخيط الرئيسي لـContext::shutdown(الذي يضبطuser_defined_sql_objects_storageعلى null). نحتاج إلى التأكد من تعطيل التحديثات المستقبلية في مُحمّل القواميس، وإنهاء استعلامات القواميس الجارية حاليًا، والانتظار حتى تنتهي خيوط تحميل القواميس — وكل ذلك قبل تشغيلContext::shutdown. وهذا مماثل لما نفعله مع الاستعلامات العادية. #100839 (Miсhael Stetsyuk). - إصلاح تجاوز سعة المخزن المؤقت في
ULIDStringToDateTimeعندما يحتوي الإدخال على بايتات غير ASCII. #100843 (Konstantin Bogdanov). - إصلاح التعطل (
LOGICAL_ERROR) عند الاستعلام عن جدولMerge(أو دالة الجدولmerge()) الذي يغلّف عدة جداول، من بينها جدولDistributed، مع تفعيلdistributed_group_by_no_merge=1. #100859 (Groene AI). - عند تفعيل Cast_keep_nullable، لن يُطلق استثناءً عند التحويل من null ديناميكي إلى Variant. #100864 (Seva Potapov).
- إصلاح قيام أوامر
getوexistsوlsفيclickhouse-keeper-clientبطباعة رسائل خطأwatch_idالمكررة إلى stdout بدلًا من stderr. #100893 (Mohammad Lareb Zafar). - إصلاح الاستثناء في
intDiv/intDivOrZeroعند التعامل مع المصفوفات من tuples قابلة للإسناد إلى null، مثلSELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín). - تقييم وسائط المحرك لـ
StorageAliasقبل تخزين التعريف، بحيث تُحوَّل تعبيرات مثلcurrentDatabase()إلى قيم حرفية قبل حفظها في قاعدة البيانات. #100902 (Nikolay Degterinsky). - إصلاح
processAndOptimizeTextIndexFunctionsعندما يكونquery_plan_merge_expressions = 0، حيث تكونExpressionStepفوقReadFromMergeTreeمباشرةً. يُصلح هذا #100879. #100909 (Jimmy Aguilar Mena). - تحديث replxx ليتضمن إصلاحًا لمشكلة الوصول خارج الحدود في do_complete_line. #100925 (Azat Khuzhin).
- إصلاح النتائج غير الصحيحة عندما يستخدم JOIN مع تحسين shard-by-PK ذاكرة التخزين المؤقت لشروط الاستعلام، وتُستبعَد بعض الأجزاء بسبب الشروط المخزنة مؤقتًا. #100926 (Groene AI).
- إصلاح
divideوintDivاللتين كانتا تُرجعانILLEGAL_DIVISIONعند استخدامهما في تعبيرات التصفية أثناء تحليل الفهرس في بعض الحالات. #100928 (Nihal Z. Miaji). - إصلاح أخطاء “جدول الهدف غير موجود” في materialized views ذات الجداول الداخلية أثناء بدء التشغيل غير المتزامن، وكانت ناتجة عن ترتيب غير صحيح لاعتماديات بدء التشغيل. #100946 (Nikolay Degterinsky).
- إصلاح سلوك غير معرّف (تجاوز سعة الأعداد الصحيحة الموقعة) في parseDateTimeBestEffort عند تحليل سلاسل datetime التي تحتوي على أكثر من 18 رقمًا كسريًا للثانية. #100948 (Vasily Chekalkin).
- إصلاح تعطل عند استخدام فهرس بحث نصي مع clause
INتحتوي على subquery من نوع Tuple، مثلWHERE (id, str) IN (SELECT (id, str) FROM ...)، أو عندما لا يتطابق عدد columns في الـ subquery مع الـ Tuple على الجانب الأيسر منIN. #100959 (Anton Popov). - إصلاح تعطل عند بناء Dictionary من نوع Polygon من جدول
MergeTreeيستخدم serialization للأعمدة sparse. #100964 (Anton Popov). - إصلاح الخطأ المنطقي “Invalid action query tree node” عند استخدام
INTERSECT ALL/UNION ALLمع expressions مطوية إلى ثوابت. #100977 (Alexey Milovidov). - إصلاح aggregate function
sumCountOrDefaultعندما يحتوي argument واحد أو أكثر علىNullable، إذ لم تكن قادرة على قراءة الحالات الأقدم التي جرت لها serialize بعد إدخالNullable(Tuple). يُغلق هذا #100882. #101021 (Nihal Z. Miaji). - إصلاح تعطل (
Logical error: isConst/isSparse/isReplicated assertTypeEquality) في خوارزميات merge عندما يُنتج النسخ الكسول للأعمدة (enable_lazy_columns_replication) أعمدةColumnReplicatedتتدفق إلى pipelines الفرز بالدمج مع مدخلات تصل متأخرة. #101036 (Groene AI). - إصلاح خطأ
UNKNOWN_IDENTIFIERغير الصحيح عندما يُستخدم alias نفسه لعدة expressions فيSELECT؛ ويُبلَّغ الآن عن الخطأ الصحيحMULTIPLE_EXPRESSIONS_FOR_ALIAS. #101040 (Alexey Milovidov). - إصلاح أعمدة ALIAS من النوعين
DateTime/DateTime64التي لم تكن تطبّق تحويل timezone عندما تختلف timezone المُعلنة عن timezone الخاصة بالتعبير. #101043 (Alexey Milovidov). - إصلاح عدم تسجيل سياسات الصفوف في
query_logللعروض والاستعلامات الفرعية وINSERT ... SELECT. رغم تطبيق سياسات الصفوف أثناء تخطيط الاستعلام، لم تكن تُمرَّر من المخططات الفرعية إلى المخطط الأب لأغراض التسجيل. والآن تُحفَظ سياسات الصفوف (للتسجيل فقط) فيQueryAccessInfoبحيث يمكن لكلٍّ من المخططات والمخططات الفرعية تعبئتها. #101044 (Narasimha Pakeer). - إصلاح استثناء في
DirectJoinMergeTreeEntityعندما تحتوي كتل خط المعالجة على أعمدةColumnConstمدمجة مع أعمدة عادية. #101046 (Alexey Milovidov). - إصلاح المسافة الزائدة في تنسيق الاسم المستعار لأعمدة 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، ما كان يؤدي إلى إرجاع عدد صفوف أقل من المتوقع. #101071 (Nihal Z. Miaji). - إصلاح التعطل عند استخدام تنسيق
Regexpمع regular expression غير صالح في الإعدادformat_regexp. #101074 (Nihal Z. Miaji). - إصلاح الخطأ “Illegal type Decimal64 of start parameter” في aggregate functions الخاصة بالسلاسل الزمنية عند استخدام
serialize_query_plan=1مع parallel replicas. #101083 (Groene AI). - إصلاح استثناء في
optimizeLazyMaterializationعند استخدام projection مع PREWHERE وORDER BY ... LIMIT. #101115 (Anton Popov). - إصلاح تعطل الخادم (SIGABRT) عند استخدام aggregate functions مع combinator الداخلي فقط
Null(مثلsumNullوavgNull) مع تفعيل الإعدادaggregate_functions_null_for_empty = 1. #101147 (Groene AI). - إصلاح حالة use-after-free في مسار الكتابة في filesystem cache، كانت قد تتسبب في القراءة من ذاكرة جرى تحريرها عند تسجيل file segments المكتملة (رصدها MemorySanitizer في BuzzHouse). #101161 (Groene AI).
- إصلاح تعطل الخادم مع الخطأ “Trying to attach external table to a ready set without explicit elements” عندما يواجه distributed index analysis مسند GLOBAL IN جرى إنشاء مجموعته دون عناصر صريحة. #101178 (Groene AI).
- إصلاح إرجاع الدالتين التجميعيتين
MAX/MINعلى أعمدةDecimalنتائج غير صحيحة عند تفعيل ترجمة JIT البرمجية (بعد بلوغ threshold الترجمة). #101203 (Raúl Marín). - إصلاح تعطيل تحسينات
minmax_count_projectionوتحسيناتCOUNT(*)البسيطة بشكل دائم بعد lightweight delete، حتى بعد دمج جميع الأجزاء التي تحمل قناع lightweight delete. #101212 (Anton Popov). - إصلاح حالة قد تؤدي إلى ظهور الخطأ المنطقي
Having zero bytes, ...منcacheبسبب الكتابة فوق كائن بعيد بينlistوread، ما كان يؤدي سابقًا إلى بيانات وصفية قديمة للكائن. #101219 (Kseniia Sumarokova). - إصلاح تعطل الخادم (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) عند الاستعلام عن جدول MergeTree باستخدام
ORDER BY CAST(lc_column, 'Type')، حيث يكونlc_columnمن النوع LowCardinality. #101220 (Groene AI). - إصلاح تنظيف processing nodes القديمة في
S3Queue. #101230 (Kseniia Sumarokova). - إصلاح سلوك غير معرّف في mergeTreeAnalyzeIndexes() في حال كانت وسيطة optimizations غير صالحة. #101253 (Azat Khuzhin).
- إصلاح الاستثناء
Logical error: 'partitions_count > 0'عند تنفيذ عملياتALTER TABLE UPDATEمتتالية على جدول Iceberg مقسّم إلى partition. #101278 (Desel72). - إصلاح نتائج query غير الصحيحة عند استخدام ثابت صحيح كبير (مثل 256 أو 2147483648) كـ predicate منطقية في WHERE clause مع AND على جداول MergeTree. على سبيل المثال، كان
SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648يُرجع 0 بشكل غير صحيح بدلًا من مطابقة جميع الصفوف. #101287 (Groene AI). - إصلاح insert-select من delta lake cluster مع replicated merge tree. #101299 (Konstantin Vedernikov).
- إصلاح التعطل المصحوب بالرسالة “Logical error: Reading from materialized CTE before materialization” عندما يشير scalar subquery إلى سلسلة من materialized CTEs المعتمدة على بعضها بعضًا. #101305 (Groene AI).
- إصلاح data race على
storage_idفيIStorage::getDependentViewsByColumn. #101385 (Nikolay Degterinsky). - إصلاح تنسيق واستنساخ AST لعبارة BACKUP FROM SNAPSHOT. #101405 (Pablo Marcos).
- إصلاح تعطل 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). - طرح خطأ عند استخدام إعداد
delta_lake_snapshot_versionأو إصدار CDF بدون تمكين DeltaKernel، بدلًا من إرجاع بيانات خاطئة بصمت. #101489 (Desel72). - إصلاح الاستثناء
NOT_FOUND_COLUMN_IN_BLOCKعند استخدام ARRAY JOIN مع JOIN USING وتمكين الإعدادanalyzer_compatibility_join_using_top_level_identifier. إغلاق #101240. #101507 (Vladimir Cherkasov). - إصلاح فشل حلقة إعادة محاولة INSERT في Iceberg عندما يكون الجدول قد أُنشئ باستخدام
iceberg_metadata_file_pathوتكون نسخة البيانات الوصفية المستهدفة موجودة بالفعل. #101548 (Groene AI). - إزالة Nullable من عمود النتيجة في arrayIntersect والدوال ذات الصلة لتجنّب عدم التطابق بين التسلسل وإلغاء التسلسل. #101569 (George Larionov).
- إصلاح تعطل الخادم (LOGICAL_ERROR) عند تنفيذ SELECT من عرض مادي يستند إلى table engine من نوع IcebergLocal. #101577 (Groene AI).
- إصلاح رسالة الخطأ غير الصحيحة عند استدعاء
intExp10بوسيطة NaN — إذ كانت تعرضintExp2بدلًا منintExp10. #101582 (Krishna Chaitanya). - إصلاح عدم قيام
allow_statistics=0بحظرALTER TABLE ADD STATISTICSوALTER TABLE DROP STATISTICSبعد إعادة الهيكلة في #100288. #101585 (Krishna Chaitanya). - إصلاح فشل
KeeperMapCREATE TABLEمع الرسالة “Cannot create metadata for table” عندما تكون عقد ZooKeeper المتبقية من عملية حذف جزئية قبل الإصدار 25.1 تفتقد العقدةdrop_lock_version. #101623 (Antonio Andelic). - إصلاح خطأ منطقي محتمل أثناء قراءة subcolumns في Map. يُغلق #100769. يُغلق #101336. #101641 (Pavel Kruglov).
- إصلاح أولوية المطابقة التامة للعمود الفرعي مقارنةً بمطابقة البادئة في
getSubcolumnDataلتجنّب تعطل محتمل. يُغلق #101271. #101645 (Pavel Kruglov). - إصلاح تعطل (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).
- ما الجديد: تم إصلاح نص الوصف المعكوس للعمود
alterableفيsystem.s3_queue_settingsوsystem.azure_queue_settings— إذ جرى تبديل دلالتي0و1لتتوافقا مع السلوك الفعلي في الشيفرة. #101703 (ClickGap AI Bot). - إصلاح توجيه positiveModulo(tuple, number) بشكل غير صحيح إلى القسمة بدلًا من باقي القسمة. #101709 (ClickGap AI Bot).
- إصلاح تعطل يحدث عند تهيئة
thread_pool_sizeعلى disk مغلّف بـ cache. سابقًا، كانتFileCacheSettings::loadFromConfig()ترفضthread_pool_sizeباعتباره setting غير معروف، مما كان يمنع الخادم من البدء. هذا setting هو parameter صالح فيIDiskيتحكم في عدد threads المستخدمة في عمليات النسخ من disk إلى disk أثناء عمليات نقل الأجزاء في الخلفية. #101712 (Francisco). - إصلاح إنشاء Dictionary
RANGE_HASHEDالذي كان يقبل بصمت سمة النطاقMAXغير الموجودة، ويستخدم تهيئة نوع خاطئة عندما كانت سمتا الحد الأدنى والحد الأقصى للنطاق من نوعين مختلفين. كان الخلل ناتجًا عن خطأ نسخ ولصق فيbuildRangeConfiguration، إذ كان يبحث عنmin_attr_nameبدلًا منmax_attr_nameللسمة القصوى. #101732 (Yakov Olkhovskiy). - إصلاح تعطل use-after-free في scheduler الخاص بتأجير CPU عندما يستمر مؤقت الانتظار بعد انتهاء عمر worker thread الذي تشير إليه
ProfileEvents::Counters. #101761 (Antonio Andelic). - إصلاح خلل في الدالتين arrayLevenshteinDistanceWeighted و arraySimilarity. يغلق #101725. #101767 (Mikhail f. Shiryaev).
- إصلاح تجاهل Prometheus Query API لهيئات نماذج POST. #101794 (James Cunningham).
- إصلاح تسرّب Exception من destructor S3
Client::~Clientبما يؤدي إلى إنهاء server. #101798 (Gagan Dhakrey). - إصلاح use-after-scope في deserialization المتوازي للمسارات الديناميكية من النوع
Object، وهو ما كان قد يؤدي إلى أعطال عند قراءة جداول تحتوي على عدد كبير من المسارات الديناميكية. #101823 (Antonio Andelic). - إصلاح مخرجات غير صحيحة في الدالة
formatDateTimeمع Formatter %Wفي بعض إعدادات formatting المعينة (غيرdefault). #101847 (Robert Schulze). - إصلاح النتيجة السلبية الكاذبة في
shouldPatchFunctionضمنSYSTEM INSTRUMENT ADDعندما يظهر نص البحث لأول مرة داخل argument قالب في اسم الرمز بعد فكّ تشويشه. #101885 (Pablo Marcos). - إصلاح فقدان UDF registry عند انتهاء session الخاصة بـ ZooKeeper أثناء refresh الدوري — إذ كان من الممكن أن تصبح جميع user-defined functions غير متاحة إلى أن ينجح full refresh. #101891 (Nikita Fomichev).
- إصلاح وصف
system.codecsلـAES_256_GCM_SIVلكي يعرضAES-256بدلًا منAES-128. #101917 (Jimmy Aguilar Mena). - إصلاح استخدام extremes خاطئة في min-max index أُنشئ على JSON column، مما أدى إلى نتيجة query خاطئة. يغلق #101700. #101918 (Pavel Kruglov).
- أصبحت
splitByStringtokenizer ترفض الآن سلاسل الفاصل الفارغة. #101928 (Robert Schulze). - إصلاح مشكلة أن
materialize_skip_indexes_on_merge=falseلا يمنع text indexes (full-text) أثناء merge. سابقًا، لم يكن يتم تعطيل سوى skip indexes غير النصية (minmax و set و bloom_filter)؛ أما text indexes فكانت تستمر في البناء، مما يهدر CPU وعمليات I/O. #101932 (Groene AI). - كانت
sparseGramstokenizer تُولّد tokens أطول من الحد الأقصى المحدد للطول (وكان سبب ذلك وجود+2مضمّنة في التنفيذ). #101934 (Elmi Ahmadov). - إصلاح SIGSEGV في
MergeTreeDataPartWriterWide::cancelعند قيام مُنشئ stream برمي استثناء أثناءaddStreams، مما يترك إدخالًا فارغًا فيcolumn_streams. #101936 (Antonio Andelic). - إصلاح استثناء يحدث عند الاستعلام عن جداول Merge أو Distributed مع full-text index وشروط ترشيح مركبة تجمع بين
has*TokensوLIKE، عندما يكونquery_plan_direct_read_from_text_indexمُمكّنًا. #101939 (Jimmy Aguilar Mena). - إصلاح سلوك غير معرّف عند تحليل حزم query في native protocol التي تحتوي على قيم
QueryProcessingStageغير صالحة. #101972 (Raúl Marín). - إغلاق TCP connection عند حدوث استثناء أثناء تحليل initial query، لمنع قراءة بيانات غير صالحة من stream فقد التزامن. #101989 (Raúl Marín).
- إصلاح خلل سباق SLRU في filesystem cache في الإصدار 26.1+، والذي قد يؤدي إلى logical error عند حجز المساحة. وفي build التصحيح قد يؤدي أيضًا إلى فشل assert:
'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'.. #101991 (Kseniia Sumarokova). - إصلاح استثناء عند تحويل سلسلة نصية تحتوي على بيانات لاحقة إلى النوع الفارغ
Tuple(). #102011 (Alexey Milovidov). - إصلاح الترتيب غير الصحيح للصفوف في queries التي تستخدم ORDER BY مع خوارزمية join grace_hash. إذ كان يمكن أن تُرجع queries المتأثرة النتائج بترتيب خاطئ، ما يؤدي بصمت إلى مخرجات غير صحيحة. #102036 (János Benjamin Antal).
- إصلاح LOGICAL ERROR (Unexpected size of index type) كان يمكن أن يحدث في queries من نوع RIGHT JOIN وFULL JOIN عند ضبط الإعداد
max_bytes_in_join. #102042 (Jimmy Aguilar Mena). - إصلاح حالات كان فيها Time ذي القيم السالبة يُرجع نتيجة غير صحيحة عند المقارنة مع DateTime. يُغلق #101670. #102056 (Yarik Briukhovetskyi).
- إصلاح تعطل في refresh الخاص بـ UDF سببه أن
ZooKeeperRetriesControlكان يعيد المحاولة على session قديمة (منتهية الصلاحية) لـ ZooKeeper من دون تجديدها. #102059 (Nikita Fomichev). - إصلاح المسافات المفقودة عند formatting لعبارة unlock snapshot. close https://github.com/clickhouse/clickhouse/issues/101723. #102063 (Han Fei).
- إصلاح تعطل (SIGSEGV) عند الاستعلام عن view فيها WHERE clause، عندما يُنتج الاستعلام الداخلي columns بأنواع تختلف عن metadata الخاصة بالـ view (مثل Nullable الناتج من LEFT JOIN مع
join_use_nulls). #102085 (Miсhael Stetsyuk). - إصلاح مشكلة عدم طرد entries الخاصة بـ
VectorSimilarityIndexCacheنهائيًا بعد إزالة part بسبب عدم تطابق مفاتيح cache. #102152 (Seva Potapov). - إرسال NACK للرسائل المعطوبة عند استخدام rabbitmq storage. #102157 (Seva Potapov).
- إصلاح خطأ منطقي عند تحليل سلسلة tuple فارغة وغير صحيحة. #102289 (Nihal Z. Miaji).
- إصلاح نتائج التجميع غير الصحيحة (صفوف مكررة) عند استخدام
optimize_aggregation_in_order=1مع أعمدة GROUP BY المرتبة بشكل مختلف عن مفتاح الفرز الخاص بالجدول. #102299 (Groene AI). - إصلاح تعطل في
IcebergLocalALTER TABLE ... UPDATEعند استخدام تنسيق Avro، وكان السبب عدم فك تغليف الأنواعLowCardinality/Nullableقبل التسلسل. #102337 (Desel72). - تم إصلاح خطأ segmentation fault في mutations على الأعمدة materialized من دون expression. يغلق #102185. #102342 (zoomxi).
- إصلاح في Coalescing merge tree لنوع array. هذا يغلق #89509. #102384 (Konstantin Vedernikov).
- إصلاح segfault (أو LOGICAL_ERROR في debug builds) عند قراءة Parquet files مع تفعيل bloom filter push down وشروط المساواة/عدم المساواة في WHERE clause. كان التعطل يحدث بسبب وصول إلى الذاكرة خارج الحدود أثناء استرجاع بيانات bloom filter في Parquet prefetcher، وكان يمكن أن يتسبب أيضًا في نتائج استعلام خاطئة وغير deterministic. #102385 (Groene AI).
- إصلاح abort لـ
LOGICAL_ERRORأثناء تغيير الحجم الديناميكي لذاكرة filesystem cache من نوع SLRU، وكان السبب مشاركة إحصاءات eviction عبر الطوابير الفرعية ومسار recovery غير الصحيح للمرشحين الذين فشلوا. #102396 (Antonio Andelic). - إصلاح الفشل في التهيئة على replica جديدة لجداول alias من دون target table في Database Replicated. يغلق #101320. #102397 (Nikolay Degterinsky).
- إصلاح قراءة خارج الحدود في string search functions (
countSubstrings,position, etc.) عند البحث عن needle مكوّنة بالكامل من null bytes. #102401 (Raúl Marín). - لم تعد إعدادات text index الكامل (
enable_full_text_index,allow_experimental_full_text_index,use_skip_indexes_on_data_read) معطلة عندما يشير إعدادcompatibilityإلى إصدار أقدم من 26.1. وكان هذا سابقًا قد يمنعSharedDatabaseCatalogمن إنشاء جداول تحتوي على text indexes. #102422 (Nikita Fomichev). - إصلاح قراءة خارج الحدود في
printfعند وجود%في النهاية. #102472 (Raúl Marín). - إصلاح استثناء chassert وهو
ReadBuffer is canceledفي debug builds داخل AsynchronousMetrics، وكان السبب أن rewind لا يعيد ضبط علامة إلغاء buffer. #102524 (Yuri Fedoseev). - تم إصلاح
hasToken/hasTokenOrNullمع needles التي تتكون فقط من فواصل (مثل'()'و'!!!') على columns التي تحتوي على text index: كان index سابقًا يتخطى جميع granules بصمت بدلًا من إطلاقBAD_ARGUMENTS(فيhasToken) أو إعادةNULL(فيhasTokenOrNull). #102544 (Jimmy Aguilar Mena). - إصلاح حالات نفاد الذاكرة (OOM) في الطلبات المتعددة الضخمة داخل Keeper. بالنسبة إلى تتبّع OpenTelemetry، كنّا نخصّص دائمًا أكثر من 1 KiB لوحدات OpenTelemetry spans في كائنات
ZooKeeperRequest، ما يعني أنّنا في الطلبات المتعددة الكبيرة جدًا كنّا نحاول تخصيص أكثر من 10 GiB إضافية من الذاكرة. ولإصلاح ذلك، نحتفظ الآن بالبيانات المشتركة في ذاكرة ثابتة ونستخدمstd::unique_ptrبدلًا منstd::optionalفيZooKeeperOpentelemetrySpans. #102586 (Miсhael Stetsyuk). - إصلاح تضخّم CurrentMetric الخاص بـ
NamedCollectionبسببCREATE NAMED COLLECTION IF NOT EXISTSعند وجود مجموعات موجودة مسبقًا، وكذلك عدم تهيئته للمجموعات المُحمّلة من config أو من تخزين SQL عند بدء التشغيل. يُغلق #102507. #102598 (Pablo Marcos). - إصلاح استثناء في
getStructureOfRemoteTableعندما يعيد الجزء المحلي أعمدة فارغة بسبب تنفيذ DDL متزامن. #102604 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERRORعند استهداف عدة استعلاماتCREATE TABLE IF NOT EXISTSمتزامنة للجدول نفسه من نوعS3Queueفي Shared database. #102610 (Nikita Taranov). - إصلاح تعطّل
LOGICAL_ERRORبرسالة “Unexpected number of rows in column subchunk” في قارئ Parquet V3 الأصلي عند قراءة nullable columns مع عامل التصفية WHERE. #102628 (Groene AI). - إصلاح وصف حدث profile
AzureWriteMicrosecondsالذي كان يذكر “read” بدلًا من “write”. #102639 (Miсhael Stetsyuk). - خطأ في row policy يؤدي إلى ظهور استثناء ‘Not found column in block’ في بعض الحالات الخاصة. #102648 (Yarik Briukhovetskyi).
- إصلاح استثناء في server ضمن ClusterDiscovery عندما لا تكون هناك مؤقتًا أي عقدة حيّة في cluster ثابت (مُعرّف في config). #102661 (Kseniia Sumarokova).
- إصلاح الاستدلال الخاطئ على Data type للتاريخ في حالة حدوث overflow بعد ضبط timezone. يُغلق #102601. #102674 (Pavel Kruglov).
- إصلاح مشكلة بقاء
SYSTEM WAIT VIEWمعلّقًا إلى الأبد عند حذف refreshable materialized view أثناء الانتظار. #102681 (Nikolay Degterinsky). - إصلاح حالة
CASEمع expression من نوع Dynamic كانت تُرجع ELSE لجميع الصفوف. يُغلق #102511. #102684 (Pavel Kruglov). - إصلاح serialization للنوع Dynamic المسطّح مع data types مُرمّزة بصيغة binary. يُغلق #101911. #102692 (Pavel Kruglov).
- إصلاح
format_schema_source='query'الذي كان يتجاهل بصمت النتائج متعددة الصفوف. يُغلق #101905. #102698 (Pavel Kruglov). - الإبلاغ عن رمز الخروج الفعلي عبر عميل SSH بدلًا من تعيين جميع الأخطاء إلى
1. يغلق #101741. #102700 (Konstantin Bogdanov). - إصلاح فقدان ترويسات HTTP في معالجات الاستعلامات الديناميكية/المعرّفة مسبقًا. يغلق #101846. #102706 (Konstantin Bogdanov).
- تطبيق تصحيح معاينة Poisson على ملفات تعريف الكومة المطوية الخاصة بـ jemalloc لمطابقة خرج jeprof. سابقًا، كان التنسيق المطوي يقلّل من تقدير أحجام التخصيص الفعلية لأنه لا يأخذ احتمال المعاينة في الحسبان. #102759 (Antonio Andelic).
- إصلاح التعطل في الدالة
hasPhraseعند استخدام وسيطةNULL. #102802 (Nikita Taranov). - إصلاح تعطل الخادم (SIGSEGV) عند قراءة ملفات Avro ذات المخططات التكرارية التي تحتوي على مراجع دورية للأنواع الرمزية. وأصبح الآن يتم اكتشاف هذه المخططات ورفضها برسالة خطأ واضحة بدلًا من التعطل. #102853 (Groene AI).
- إصلاح تعطل الخادم (تأكيد LOGICAL_ERROR) عندما تواجه دالة على عمود
Variantحدّ الذاكرة أو استثناءً آخر غير متعلق بتحويل النوع أثناء تحويل النتيجة فيFunctionVariantAdaptor. ويُمرَّر الاستثناء الآن بشكل صحيح بدلًا من تصنيفه خطأً على أنه خطأ داخلي. #102855 (Groene AI). - إصلاح تعطل الخادم في بُنى debug/sanitizer عند رمي
std::length_errorأثناء استنتاج المخطط (مثلًا بسبب القيم المتطرفة لـinput_format_msgpack_number_of_columnsأو بيانات إدخال غير سليمة). #102859 (Groene AI). - جعل تمثيل null في تسلسل الأعمدة المكررة والمتناثرة يراعي الإعدادات (مثل
format_tsv_null_representation). #102888 (Hechem Selmi). - نُقل إلى الإصدارات الأقدم في #103499: إصلاح فشل طلبات S3 مع
ios_base::clear: unspecified iostream_category errorبدلًا من إعادة المحاولة، وكان السبب أن PocoBufferedStreamBuf::flushBufferلا يتعامل مع عمليات الكتابة القصيرة من طبقة socket. #102894 (Sema Checherinda). - إصلاح بقاء تحسينات
minmax_count_projectionوCOUNT(*)البسيطة معطّلة بشكل دائم بعد lightweight delete، حتى بعد دمج جميع الأجزاء التي تحمل قناع lightweight delete واختفائها. #102900 (Anton Popov). - إصلاح الأعطال العشوائية في jemalloc بسبب LTO. #102913 (Azat Khuzhin).
- تحسين سلاسل OR في سياسة الصفوف إلى IN في المحلّل الجديد. #102915 (Azat Khuzhin).
- إصلاح تلف البيانات الوصفية في jemalloc الناتج عن تحرير ذاكرة تخزين الصفحات المؤقتة بمحاذاة خاطئة، ما قد يؤدي إلى أعطال. #102918 (Azat Khuzhin).
- لم تعد عمليات INSERT العادية من دون العروض المادية تطلب عددًا مفرطًا من فتحات التزامن والخيوط في ConcurrencyControl (
max_threadsبدلًا منmax_insert_threads)، مما يمنع استنزاف فتحات CC وتضخّم عدد الخيوط في المجموعات ذات معدل INSERT مرتفع. #102961 (Sema Checherinda). - إعادة إدخال ArrowMemoryPool للسماح بإطلاق MEMORY_LIMIT_EXCEEDED لتفادي OOM على مستوى النواة. #102999 (Azat Khuzhin).
- إصلاح تجاهل
cast_string_to_date_time_modeعند استخدامCASTإلىNullable(DateTime). يغلق #101840. #103035 (Pavel Kruglov). - إضافة دعم لأعمدة
ALIASفي تحسين direct read لفهرس النص. #103037 (Anton Popov). - نُقل إلى الإصدارات الأقدم في #103454: إصلاح مشكلة كان فيها
SELECT DISTINCTيعيد بصمت نتائج غير مكتملة عندما يطابق aggregate projection الاستعلام، بينما لا تحتوي بعض parts في الجدول على بيانات projection (على سبيل المثال، إذا أُضيف الـ projection إلى جدول يحتوي مسبقاً على بيانات ولم يُشغَّلMATERIALIZE PROJECTION). يغلق #102951. #103052 (Nihal Z. Miaji). - إصلاح النتائج الخاطئة التي كانت تُرجَع بواسطة
WHERE x AND toNullable(N)على جداولMergeTreeعندما تكونNعدداً صحيحاً أعرض منUInt8(مثل256أو65535أو2147483648أو أي عدد صحيح سالب). كان المرشح يستبعد جميع الصفوف بشكل غير صحيح لأنsplitFilterNodeForAllowedInputsاستخدم صفراً منNULLعند تحويل remainder منNullableبعد اختزالANDإلى قيمة منطقية، مما حوّل المقارنة إلىNULLضمن المنطق ثلاثي القيم. #103077 (Groene AI). - إصلاح نوع argument غير الصحيح الذي كان يُبلَّغ عنه في رسائل error الخاصة بـ string search functions (مثل
locateوposition) عند تمرير arguments بترتيب معكوس (locate(needle, haystack)معfunction_locate_has_mysql_compatible_argument_order = 1). #103102 (Alex Kuleshov). - إصلاح بقاء waitForPause معلّقاً إلى أجل غير مسمى عند استدعاء disableFailPoint بدون وجود أي thread متوقفة عند failpoint. #103119 (Shaohua Wang).
- قصر سلاسل حزمة TCP Hello قبل المصادقة على 64 كيلوبايت، وإضافة server setting باسم
handshake_timeout_millisecondsللحد من إجمالي وقت المصافحة، مما يمنع العملاء غير الموثَّقين من استهلاك ذاكرة مفرطة أو إبقاء threads مشغولة إلى أجل غير مسمى. #103284 (Sema Checherinda). - إصلاح حالة كانت فيها إحصاءات min_value > max_value في Parquet ColumnIndex لأعمدة String. #103334 (Saurabh Kumar Ojha).
- التحقق من وجود بيانات Dynamic flattened غير سليمة في Native format. #103392 (Pavel Kruglov).
- تعبئة العمود
_timeمن table function url. #103437 (Nikita Taranov). - إصلاح اكتشاف SVE الذي كان يستخدم تعليمات SVE حتى عند عدم توفرها. #103568 (Raúl Marín).
تحسينات البناء/الاختبار/التغليف
- تستخدم تبعية Libstemmer (Snowball) الآن الإصدار الأحدث v3.0.1. #99256 (Jimmy Aguilar Mena).
- إضفاء طابع عشوائي على الإعدادات في clickhouse-test:
use_skip_indexes_for_top_k,use_top_k_dynamic_filtering,query_plan_max_limit_for_top_k_optimization. #91782 (Nikita Fomichev). - تنفيذ اختبار stress للدوال للتحقق من سلامة خصائصها المختلفة. #93543 (Michael Kolupaev).
- توفير إعداد CMake خاص لـ
llvm-projectبدلًا من استيراد الإعداد من upstream. #97453 (Konstantin Bogdanov). - إضفاء طابع عشوائي على المزيد من إعدادات
optimize_*في البنية التحتية للاختبارات لتحسين تغطية passes تحسين الاستعلامات. #97547 (Alexey Milovidov). - استخدام سلسلة أدوات Rust nightly-2026-03-22. #98602 (Konstantin Bogdanov).
- استخدام
wasmtimev42.0.1. #98603 (Konstantin Bogdanov). - استخدام
llvm-project22.1.1. #98882 (Konstantin Bogdanov). - استبدال
SANITIZE_COVERAGE(callbacks مخصصة لـ sanitizer، ودقة على مستوى الرموز) بتغطية LLVM المعتمدة على المصدر (WITH_COVERAGE,-fprofile-instr-generate -fcoverage-mapping) ضمن pipeline التغطية الليلية لكل اختبار. يقرأ الخادم الآن تعيين التغطية الخاص به من أقسام ELF عند بدء التشغيل، ويجمع tuples بالشكل(file, line_start, line_end)لكل اختبار عبر أمر جديدSYSTEM SET COVERAGE TEST 'name'. ويستخدم اختيار الاختبارات في فحوصات CI المستهدفة استعلامات نطاق الأسطر على table جديدة باسمchecks_coverage_linesفي CIDB، مع ترتيب الاختبارات المرشحة بحسب عدد أسطر diff المعدلة التي تغطيها. #99513 (Nikita Fomichev). - إصلاح خطأ link في llvm-libc عند build باستخدام -O0. #100023 (Zheguang Zhao).
- إصلاح رسالتي error عند بدء تشغيل الحاوية إذا لم يتضمن configuration الإعدادين
logger.logوlogger.errorlog(على سبيل المثال، عندما يُفترض أن تذهب جميع log messages إلى STDOUT/STDERR). #100239 (Simon). - تفضيل
ld64.lldعلىldالخاص بـ Apple (cctools-port ld64) في builds الخاصة بـ MacOS. من شأن ذلك أن يقلل بشكل كبير أزمنة الربط على Darwin، لأن ld64 الخاص بـ cctools-port بطيء جدًا مع-ffunction-sectionsو-dead_strip. ويجري الرجوع إلىldإذا لم يكنld64.lldمتاحًا. #100275 (Alexey Milovidov). - اختبارات لضمان عدم تسجيل الأدلة لأي secrets (REST + Glue). #100307 (Konstantin Vedernikov).
- تكرار الاختبارات التي عُدّلت مؤخرًا باستخدام إعدادات عشوائية مختلفة. #100385 (Alexey Milovidov).
- تتبّع تبعيات ملفات
#embedفي CMake وتمكين وضع التبعيات في ccache لضمان إعادة بناء صحيحة. #100411 (Alexey Milovidov). - إضافة اختبارات للتحقق من صحة استعلامات TPC-H. #100580 (Raufs Dunamalijevs).
- استخدام
aws-sdk-cpp1.11.771. #100582 (Konstantin Bogdanov). - السماح لملفات XML الخاصة باختبارات الأداء بالإشارة إلى ملفات SQL query خارجية وإعدادات عبر السمة file. #100747 (Raufs Dunamalijevs).
- إصلاح التجميع مع
-march=x86-64-v4بإضافة التضمين المفقودTargetSpecific.hفيLowerUpperImpl.h. #100932 (Alexey Milovidov). - إصلاح البناء على gentoo بإضافة —no-default-config إلى cxxflags. #100973 (Isak Ellmer).
- تمت إضافة
utils/auto-bisect/— وهو إطار عمل للتنصيف يعتمد على shell، ينزّل binaries جاهزة البناء من CI ويشغّل سكربت اختبار يوفّره المستخدم للعثور على أول commit تسبب في تراجع، من دون الحاجة إلى بناء محلي. #100989 (Nikita Fomichev). - تعطيل ThinLTO افتراضيًا في CMake، بحيث لم تعد builds المطورين المحلية تفعّله ضمنيًا. ولا تتأثر builds الإصدار الخاصة بـ CI لأنها تمرّر
-DENABLE_THINLTO=1صراحةً. #101041 (Alexey Milovidov). - إضافة benchmark TPC-DS SF1 إلى اختبارات الأداء. #101209 (Raufs Dunamalijevs).
- تمت إضافة اختبارات stateless لعمليات DELETE الخفيفة في MergeTree، وتغطي: دورة حياة العلامة
has_lightweight_delete، وصحةCOUNT(*)معoptimize_trivial_count_query، وسلامة الأعمدةMATERIALIZED/DEFAULT، واستعادة العلامة فيReplicatedMergeTree، وread_in_orderمع الصفوف المحذوفة، ودورات حذف/دمج متعددة، وإخفاء العمود_row_exists، وتنوع الشروط، وفرض RBAC علىALTER DELETE. #101792 (Nikita Fomichev). - يتم الآن نشر Docker image Distroless بمتغيرَي ubuntu وalpine للإصدارات الموسومة. #101941 (Rahul Nair).
- تعرض stack traces الآن مسارات نسبية واضحة ومباشرة (مثل
src/Common/Exception.cpp) بدلًا من مسارات مشوَّشة بدليل البناء (مثل./ci/tmp/fast_build/./src/Common/Exception.cpp). #102000 (Raúl Marín). - إضافة Style check في CI يرفض الملفات الأكبر من 5 ميغابايت التي يتم commit لها إلى repository، مع whitelist لبيانات الاختبار الحالية المشروعة. وإزالة الملف غير المستخدم
zookeeper_log.parquetبحجم 14 ميغابايت. #102080 (Raúl Marín). - إزالة نحو 400 توجيه
#includeغير مستخدم من headers لتقليل أوقات التجميع. #102585 (Raúl Marín). - استخدام
wasmtimev43.0.1. #102603 (Konstantin Bogdanov). - استخدام
openssl3.5.6. #102606 (Konstantin Bogdanov). - استخدام
xz5.8.3. #102607 (Konstantin Bogdanov). - ترقية الصورة الأساسية distroless في Docker من Debian 12 (glibc 2.36، OpenSSL 3.0) إلى Debian 13 (glibc 2.41، OpenSSL 3.5)، مما يقلّص نطاق التعرّض لثغرات CVE إلى عدم وجود أي ثغرات قابلة للوصول. #101678 (Rahul Nair).
إصدار ClickHouse 26.3 LTS بتاريخ 2026-03-26. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- قد يؤدي الرجوع إلى إصدار أقدم بعد الترقية إلى فقدان البيانات. انشر إصدارات التسلسل الخاصة بأنواع البيانات إلى أنواع البيانات المتداخلة. على سبيل المثال، كان إصدار التسلسل String
with_size_streamيُطبَّق سابقًا فقط على أعمدة String من المستوى الأعلى وعناصر Tuple. أما الآن فأصبح يُطبَّق على أي نوع String داخل أي نوع متداخل مثلArray/Map/Variant/JSON/إلخ. يتحكم في هذا السلوك إعداد MergeTree propagate_types_serialization_versions_to_nested_types، وهو مفعّل افتراضيًا الآن. بعد هذا التغيير، لن تتمكن الإصدارات الأقدم من قراءة أجزاء البيانات المُنشأة حديثًا، لكن يمكن للإصدار الجديد قراءة الأجزاء القديمة دون أي مشاكل. الترقية آمنة، لكن الرجوع إلى إصدار أقدم ليس كذلك — إذا احتجت إلى التراجع بعد الترقية إلى 26.3، فستصبح البيانات التي كتبها 26.3 في الأعمدة ذات الأنواع المتداخلة غير قابلة للقراءة! راجع #101429 للتفاصيل. #94859 (Pavel Kruglov). - إزالة نوع skip index
hypothesis. كانت هذه ميزة غامضة وتجريبية ذات فائدة عملية محدودة. سيؤدي إنشاء الجداول باستخدامINDEX ... TYPE hypothesisالآن إلى ظهور خطأ. #96874 (Alexey Milovidov). - إزالة الدالة التجريبية
detectProgrammingLanguage. #99567 (Alexey Milovidov). - إصلاح أسبقية العامل
NOTلتتوافق مع معيار SQL: أصبحNOTالآن أقل ارتباطًا منIS NULLوBETWEENوLIKEوالعوامل الحسابية. على سبيل المثال، أصبحNOT (x) IS NULLالآن يُفسَّر على أنهNOT (x IS NULL)بدلًا من(NOT x) IS NULL. قد يغيّر هذا نتائج queries التي كانت تعتمد على السلوك السابق (غير القياسي). #97680 (Alexey Milovidov). - تصحيح البيانات الوصفية للإسقاطات العادية بحيث يجري التعرّف على الإسقاطات ذات مفاتيح الفرز متعددة الأعمدة بشكل صحيح. يستند هذا إلى #90429. #91352 (Amos Bird).
- إصلاح مشكلة عدم احترام ملفات skip index للإعداد replace_long_file_name_to_hash، مما كان يسبب أخطاء “اسم الملف طويل جدًا” وتعطّل قراءة الفهارس ذات الأسماء الطويلة. أصبحت أسماء ملفات skip index الآن تُحوَّل إلى hash عند تجاوزها max_file_name_length، على غرار ملفات الأعمدة. وهذا متوافق مع الإصدارات السابقة (يمكن للخوادم الجديدة قراءة الأجزاء القديمة)، لكن الرجوع إلى إصدار أقدم (أو استخدام خوادم قديمة أثناء rolling upgrade) قد يؤدي إلى تجاهل الفهارس ذات الأسماء الطويلة. #97128 (Raúl Marín).
- تفعيل async insert افتراضيًا. سيقوم ClickHouse الآن بتجميع جميع عمليات insert الصغيرة افتراضيًا. يُضبط هذا الإعداد ضمن compatibility. إذا قمت بتعيين
compatibility=<version less than 26.2>فستكون القيمة الافتراضية هي السابقة، أيfalse. يمكنك إيقاف/تفعيل async inserts على عدة مستويات: في config ضمن profiles المستخدمين، أو على مستوى session، أو query، أو MergeTree table. #97590 (Sema Checherinda). - تغيير القيمة الافتراضية لـ
mysql_datatypes_support_levelمن فارغة إلىdecimal,datetime64,date2Date32، مما يفعّل المواءمة الصحيحة افتراضيًا من MySQLDATEإلىDate32، ومنDECIMAL/NUMERICإلىDecimal، ومنDATETIME/TIMESTAMPمع precision إلىDateTime64. سابقًا، كانت أعمدة MySQLDATEتُواءَم إلىDate، وهو ما لا يمكنه تمثيل التواريخ السابقة لـ 1970-01-01، مما كان يسبب تلف البيانات. #97716 (Alexey Milovidov). - قبول مصفوفة من أسماء الأجزاء بدلًا من regexp في
mergeTreeAnalyzeIndexes{,UUID}لأن regexp بطيء (ميزة تجريبية). #98474 (Azat Khuzhin). - تغيير القيمة الافتراضية لـ
stderr_reactionمنthrowإلىlog_lastفي UDFs القابلة للتنفيذ. لم تعد UDFs التي تكتب تحذيرات إلى stderr تفشل عندما يكون رمز الخروج 0. وتتضمن الاستثناءات المرتبطة برمز الخروج الآن محتوى stderr. #99232 (Xu Jia).
ميزة جديدة
- تمت إضافة Bucketed Serialization لأعمدة Map في MergeTree (
map_serialization_version = 'with_buckets'). تُقسَّم المفاتيح إلى buckets قائمة على hash، بحيث إن قراءة مفتاح واحد (m['key']) لا تتطلب سوى قراءة bucket واحدة بدلًا من العمود بالكامل، ما يوفّر تسريعًا يتراوح بين 2x و49x لعمليات lookup على مفتاح واحد، وذلك بحسب حجم map. ويمكن التحكم في عدد الـ buckets واستراتيجية توزيعها عبر MergeTree settings الجديدة التالية:map_serialization_version,max_buckets_in_map,map_buckets_strategy,map_buckets_coefficient، وmap_buckets_min_avg_size. #99200 (Pavel Kruglov). - دعم materialized CTE. يتيح ذلك تقييم CTE مرة واحدة فقط أثناء تنفيذ query وتخزين نتائجه في temporary tables. يغلق #53449. #94849 (Dmitry Novik).
- السماح باستخدام بعض الدوال القياسية في SQL من دون أقواس لأغراض التوافق، مثل
NOW. يغلق #52102. #95949 (Aly Kafoury). - يمكنك الآن استخدام دالة natural sort key بالشكل
naturalSortKey(s). #90322 (Nazarii Piontko). - يمكنك الآن استخدام إدخال JSON/Object الأصلي مع دوال JSONExtract. يغلق #88370. #96711 (Fisnik Kastrati).
- إذا كان query parameter من النوع
Nullableولم يتم تحديده، فسنفترض أن قيمته هيNULL. #93869 (Vikash Kumar). - دعم auxiliary ZooKeeper لقاعدة البيانات
Replicated. #95590 (RinChanNOW). - دعم الدالة
hasمع JSON type للتحقق من وجود path، على غرار Map. #96927 (DQ). - تمت إضافة table function
mergeTreeTextIndex(database, table, index)، التي تتيح قراءة البيانات مباشرةً من text index. ويمكن استخدام هذه الدالة لأغراض introspection أو لإجراء aggregations فوق بيانات text index. #97003 (Anton Popov). - إضافة MergeTree setting
table_readonlyلتمييز الجداول بأنها read-only، مما يمنع inserts والتعديلات. #97652 (Alexey Milovidov). - إضافة setting جديدة
use_partition_pruningوالاسم البديل alias use_partition_key. اضبطها علىfalseلتعطيل partition pruning استنادًا إلى partition key. #97888 (Nihal Z. Miaji). - تنفيذ
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')لجداول Iceberg. #97904 (murphy-4o). #99130 - السماح لكل entry من النوع
type=httpداخل<protocols>بتحديد مفتاح<handlers>مخصص يشير إلى قسم config منفصل<http_handlers_*>، ما يتيح قواعد توجيه HTTP مختلفة لكل منفذ. #98414 (Amos Bird). - إضافة الخيار
pretty=1إلىEXPLAINللحصول على مخرجات شجرية ذات مسافات بادئة، وإضافةcompact=1لطيّ خطواتExpression، مما يجعل خطط الاستعلام أكثر قابلية للقراءة. #98500 (Kirill Kopnev). - إضافة إعداد الخادم
restore_access_entities_with_current_grants. عند تمكينه، تقتصر امتيازات المستخدمين/الأدوار المستعادة من النسخ الاحتياطية على ما يُسمح للمستخدم الذي يجري الاستعادة بمنحه (بنفس دلالاتGRANT CURRENT GRANTS)، بدلًا من الفشل معACCESS_DENIED. #98795 (pufit). - إضافة الدالتين
caseFoldUTF8وremoveDiacriticsUTF8لطيّ حالة Unicode وإزالة العلامات التشكيلية. #98973 (George Larionov). - إضافة دالة السلاسل النصية
normalizeUTF8NFKCCasefoldلتطبيع Unicode من نوع NFKC_Casefold، والذي يجمع بين تطبيع NFKC وطيّ الحالة. #99276 (George Larionov). - إضافة المُجزِّئ
unicode_wordإلى فهارس النص الكامل وإلى الدالةtokens. وهو يقسم النص باستخدام قواعد حدود الكلمات في Unicode: تتكوّن كلمات ASCII باستخدام محارف الربط (الشرطة السفلية، النقطتان، النقطة، وعلامة الاقتباس المفردة)، بينما تتحول محارف Unicode غير التابعة لـ ASCII إلى tokens أحادية المحرف. ملاحظة: يقبل الإصدار 26.3 هذا المُجزِّئ بالاسمunicode_wordفقط؛ وقد أُعيدت تسميته إلىasciiCJKفي الإصدار 26.4. #99357 (Amos Bird). - تمت إضافة الإعدادين
max_skip_unavailable_shards_numوmax_skip_unavailable_shards_ratioلتقييد عدد shards التي يمكن تخطيها بصمت عند تمكينskip_unavailable_shards. إذا تجاوز عدد shards غير المتاحة أو نسبتها العتبة المُعدّة، يُطرَح استثناء بدلًا من إرجاع نتائج غير مكتملة بصمت. #99369 (Alexey Milovidov). - يمكن للمستخدمين الآن استخدام الكلمة المفتاحية
SOMEفي تعبيرات الاستعلامات الفرعية. وهي تتصرف بصورة مطابقة تمامًا لـANY. #99842 (Artem Kytkin). - إضافة الإعداد
output_format_trim_fixed_stringلإزالة null bytes اللاحقة من قيمFixedStringفي تنسيقات الإخراج النصية. #97558 (NeedmeFordev). - دعم تعبيرات ربط الجداول الموضوعة بين قوسين في عبارة
FROM، مثلSELECT * FROM (t1 CROSS JOIN t2). #97650 (Alexey Milovidov). - تنفيذ الدالة
toDaysInMonth: تُرجع عدد الأيام في شهر التاريخ المحدد. #99227 (Vitaly Baranov).
ميزة تجريبية
- إضافة دعم تجريبي لـ UDFs المستندة إلى WebAssembly، ما يتيح تنفيذ منطق دوال مخصصة باستخدام WebAssembly وتشغيلها داخل ClickHouse. شكر خاص لـ Alexey Smirnov لمساهمته في دعم backend الخاص بـ Wasmtime. #88747 (Vladimir Cherkasov). تحسينات إضافية تدريجية على دعم WASM UDF. #99373 (Vasily Chekalkin).
- إضافة دعم لهجات SQL خارجية باستخدام مكتبة
polyglot. #99496 (Alexey Milovidov). - إضافة compression codec للأعداد ذات الفاصلة العائمة
ALP(من دون fallback إلى ALP_rd للقيم المزدوجة غير القابلة للضغط). #91362 (Nazarii Piontko). - إضافة Lazy Type Hints تجريبية لأعمدة
JSON. عند تفعيلها عبرallow_experimental_json_lazy_type_hints، فإنALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)الذي يضيف type hints أو يعدّلها فقط يكتمل فورًا كعملية تقتصر على metadata، من دون إعادة كتابة البيانات التاريخية. تُطبَّق type hints عند query time على parts القديمة، ويجري materialize لها أثناء عمليات INSERT وbackground merges. #97412 (tanner-bruce). - تمكين reads المتوازية من YTsaurus table engine. #97343 (MikhailBurdukov).
تحسين الأداء
- تحسين أداء بحيرات البيانات. في الإصدارات السابقة، لم تكن القراءة من تخزين الكائنات تعيد تكييف pipeline مع عدد خيوط المعالجة. يوفّر هذا تحسينات هائلة في الأداء (~40x) على الأجهزة متعددة الأنوية. #99548 (Alexey Milovidov).
- أصبحت العلاقة بين
enable_parallel_replicasوautomatic_parallel_replicas_modeكما يلي: لا يمكن لأي استعلام استخدام النسخ المتماثلة المتوازية إلا إذا كانت قيمةenable_parallel_replicas > 0. بالإضافة إلى ذلك، إذا كانتautomatic_parallel_replicas_mode=1، فيُتخذ قرار استخدام النسخ المتماثلة المتوازية أثناء التخطيط استنادًا إلى الإحصاءات المجمّعة مسبقًا. أما إذا كانتautomatic_parallel_replicas_mode=0، فستُستخدم النسخ المتماثلة المتوازية في جميع الاستعلامات المدعومة بغضّ النظر عن أي إحصاءات. وهناك استثناء مهم، وهو distributed insert-select مع النسخ المتماثلة المتوازية: في هذه الحالة، ستُنفّذ الاستعلامات دائمًا كما لو كانتautomatic_parallel_replicas_mode=0. #97517 (Nikita Taranov). - إتاحة partition pruning عندما يحتوي predicate على أي عامل مقارنة (
=,<,>,!=) ويكون partition key ملفوفًا ضمن سلسلة دوال حتمية؛ فعلى سبيل المثال، فيPARTITION BY x، ستستخدم predicates مثلcityHash64(x) % 5 > 2وtoYYYYMM(x) < 2026وtoYYYYMM(x) = 2026أوtoYYYYMM(x) != 2026جميعها partition key لأغراض pruning. يُغلق #28800. #98432 (Nihal Z. Miaji). - إتاحة تحسين read-in-order وprimary-key pruning عندما يكون النوع الهدف في
CASTهوNullableويكون التحويل رتيبًا؛ فعلى سبيل المثال، معPRIMARY KEY x، يمكن لـ ClickHouse استخدام تحسين read-in-order معORDER BY x::Nullable(UInt64)، كما يمكنه تطبيق primary-key pruning على predicates مثلWHERE x::Nullable(UInt64) > 500000. #98482 (Nihal Z. Miaji). - إتاحة index pruning وfilter pushdown عندما تجري مقارنة column صحيحة بقيمة Float حرفية؛ فعلى سبيل المثال، يمكن الآن لـ predicates مثل
WHERE x < 10.5استخدام primary key لأغراض pruning، كما أصبحت filters مثلprime < 1e9أوnumber < 1e5تُدفع إلىprimes()وnumbers()table functions بدلًا من التسبّب في تنفيذ غير محدود. يُغلق #85167. #98516 (Nihal Z. Miaji). - إضافة cache جديدة من نوع SLRU لبيانات Parquet الوصفية لتحسين أداء القراءة، عبر إزالة الحاجة إلى إعادة تنزيل الملفات لمجرد قراءة metadata. #98140 (Grant Holly).
- دعم تبديل طرفَي ANTI وSEMI وFULL joins استنادًا إلى إحصاءات المُحسِّن. #97498 (Hechem Selmi).
- تحسين تخطي granules في
pointInPolygonعند التعامل مع polygons كبيرة، وإصلاح مشكلة تسبّبpointInPolygonفي طرح خطأ أثناء index analysis خلال primary key pruning. #91633 (Nihal Z. Miaji). - تحسين أداء الدالة
levenshteinDistance. #94543 (Joanna Hulboj). - تحسين تحويلات نوع Decimal على مستوى Batch عبر تجنّب استدعاء الدوال لكل عنصر. #95923 (Konstantin Bogdanov).
- تدعم جداول Iceberg الآن الجلب المسبق غير المتزامن للبيانات الوصفية عبر إعداد الجدول
iceberg_metadata_async_prefetch_period_ms، الذي يعبّئ ذاكرة التخزين المؤقت للبيانات الوصفية مسبقًا بشكل دوري. بالإضافة إلى ذلك، يتيح إعداد الاستعلامiceberg_metadata_staleness_msلاستعلامات SELECT استخدام البيانات الوصفية المخزنة مؤقتًا إذا كانت أحدث من مدة التقادم المحددة، مما يلغي استدعاءات Iceberg catalog أثناء معالجة الطلبات. #96191 (Arsen Muk). - يستخدم وضع
S3Queueالمرتب الخاصية S3 ListObjectsV2 StartAfter لتجنب إعادة إدراج السجل الكامل للبادئة، مما يقلل استدعاءات ListObjects. #96370 (Venkata Vineel ). - خفض استخدام الذاكرة لعمليات insert مع إزالة التكرار. عمومًا، تكون الكتلة الأصلية مطلوبة لإزالة التكرار، لكن في insert المتزامن يمكن الاستغناء عنها وتوفير الذاكرة. #96661 (Sema Checherinda).
- استخدام قيمة خاصة بالمعمارية لحجم سطر cache بدلًا من قيمة ثابتة مقدارها 64. #97357 (Nikita Taranov).
- تحسين طفيف في القراءة من قاموس text index، مما يحسّن الأداء العام لتحليل text index. #97519 (Anton Popov).
- تسريع فك ضغط
LZ4للكتل بحجم 16 بايت على ARM. #97774 (Raúl Marín). - إعادة هيكلة tokenization إلى interface جديدة عالية الأداء، مع استبدال واجهة API القديمة ذات نمط iterator لدعم SIMD وtokenizers ذات الحالة. جزء من #90268. #97871 (Amos Bird).
- تحسين أداء تحليل text index للاستعلامات التي تحتوي على conditions مركبة تشمل أعمدة مفهرسة وأخرى غير مفهرسة. في السابق، كان تحسين الإنهاء المبكر أثناء index analysis يُعطَّل بشكل غير صحيح في مثل هذه الحالات. #98096 (Anton Popov).
- تحسين أداء الاستعلامات التي تحتوي على expressions ثابتة تُنشئ Arrays أو خرائط طويلة جدًا. #98287 (Alexey Milovidov).
- إصلاح تحليل شرط المفتاح لمفاتيح primary من النوع
DateTime64عند مقارنتها بثوابت صحيحة، وهو ما كان يؤدي سابقًا إلى عدم تطبيق Granule pruning. #98410 (Amos Bird). - أصبح الإعداد
optimize_syntax_fuse_functionsمفعّلًا افتراضيًا. #98424 (Alexey Milovidov). - تحسين الدالة التجميعية
avgWeightedباستخدام مجمّعات محلية بدلًا من التمرير والتخزين لكل صف عبر aggregate state، مما يحسّن الأداء بنسبة تصل إلى 27% لمدخلات Nullable. #98793 (Antonio Andelic). - يحسّن الأداء ويقلل استخدام الذاكرة لدوال window المتوازية في بعض السيناريوهات، وكذلك لأحمال عمل
arrayFoldالتي تتضمن Arrays كبيرة. ويمكن أن يقلل هذا أيضًا من ضغط أخطاء الصفحات ويحسّن الاستقرار عند حدود الذاكرة الضيقة بالنسبة إلى الاستعلامات المتأثرة. #98892 (filimonov). - تحسين أداء sorted merges. #99013 (Artem Zuikov).
- تحسين
INTERSECT ALLوEXCEPT ALL. #99097 (Raufs Dunamalijevs). - دعم تحسين
read_in_order_use_virtual_rowلعمليات القراءة بالترتيب العكسي. #99198 (Vladimir Cherkasov). - تقليل التنافس على الذاكرة المخبئية في عمليتَي
RIGHTوFULLJOINمن خلال التحقق من تعيين JoinUsedFlags قبل الكتابة. #99274 (Hechem Selmi). - تحسين
PrefetchingHelper::calcPrefetchLookAheadباستبدال حسابات الفاصلة العائمة بحسابات صحيحة بالكامل، ما يحسّن تنظيم ذاكرة التعليمات المخبئية ويقلّل كلفة الدورات أثناء حلقات التجميع. #99327 (Riyane El Qoqui). - تقليل استهلاك Keeper للذاكرة باستبدال
absl::flat_hash_setبـCompactChildrenSetلتخزين العقد التابعة. وتخزّن الحاوية الجديدة من 0 إلى 1 من العقد التابعة ضمنيًا من دون تخصيص على heap، وهو ما يغطي غالبية عقد Keeper. ويؤدي ذلك إلى تقليل حجمKeeperMemNodeمن 144 إلى 128 بايت. #99860 (Antonio Andelic). - أصبحت الإسقاطات التجميعية مدعومة الآن بشكل صحيح في العروض. يُصلح هذا #32753. #88798 (Amos Bird).
- دعم تحسين تحويل الربط من OUTER إلى INNER مع
join_use_nulls. يُغلق هذا #90978. #95968 (Vladimir Cherkasov). - تحسين قراءة الأعمدة الفرعية عبر احتساب الأحجام بشكل صحيح قبل القراءة. وهذا يقلّل استخدام الذاكرة ويُسرّع قراءة الأعمدة الفرعية. #96251 (Pavel Kruglov).
- جعل الذاكرات المخبئية mark وuncompressed وpage تستخدم ساحة jemalloc منفصلة لتجنّب تجزؤ الذاكرة عند خلط التخصيصات قصيرة العمر، مثل الاستعلامات والطلبات، مع التخصيصات الأطول عمرًا الخاصة بالذواكر المخبئية. #96812 (Seva Potapov). #98812. #99021
- يمكن للجداول التي تحتوي على قواعد
DELETE TTLالآن استخدام خوارزمية الدمج العمودي. #97332 (murphy-4o). - تطبيق فهارس تخطي البيانات أثناء تحليل الفهرس الموزع. #97767 (Azat Khuzhin).
- تُحمَّى علامات الفهارس الثانوية مسبقًا الآن عند تمكين الإعداد
prewarm_mark_cache(إذ تُحمَّل إلى الذاكرة المخبئية لعلامات الفهرس أثناء جلب أجزاء البيانات وعند بدء تشغيل الجدول). #97772 (Anton Popov). - تقليل عمليات القفل أثناء التحكم في الوصول. #97894 (Nikita Taranov).
- عند تمكين apply_row_policy_after_final أو apply_prewhere_after_final، أصبحت شروط AND المركبة في سياسات الصفوف وPREWHERE تُفكَّك الآن لاستخراج عناصر مفتاح الفرز لتحليل فهرس المفتاح الأساسي. سابقًا، إذا كان عامل التصفية المؤجل يحتوي على مزيج من predicates خاصة بمفتاح الفرز وأخرى لا تخص مفتاح الفرز (مثل x > 1 AND y != ‘foo’)، كان التعبير بالكامل يُستبعَد من تحليل الفهرس. أما الآن، فتُستخرَج عناصر مفتاح الفرز (مثل x > 1) وتُستخدم في تقليم الحبيبات، حتى من تعبيرات AND المتداخلة. #98513 (Yarik Briukhovetskyi).
- تقليل التنازع على الأقفال في MergeTreeBackgroundExecutor من خلال جعل تحرير موارد المهمة يتم من دون أخذ القفل. يغلق #93620. #98604 (Dmitry Novik).
- إصلاح الاستهلاك المفرط للذاكرة (~514 MiB) أثناء الاكتشاف التلقائي لـ format عند قراءة بيانات غير Arrow (مثل JSON من
urlأوfileمن دون تحديد format صراحةً)، وكان السبب أن قارئ ArrowStream يفسّر البايتات الأولى خطأً على أنها طول هائل لـ metadata. #98893 (Konstantin Bogdanov).
تحسينات
- يتيح تحليل ملفات GeoParquet التي تحتوي على أنواع Geo مختلفة ضمن العمود نفسه. #97851 (Mark Needham).
- تقديم دالة SQL
tokensForLikePatternالتي تُقسِّم أنماط LIKE إلى tokens مع مراعاة دلالات أحرف البدل: يُعامَل%و_كأحرف بدل، وتُعامَل أحرف البدل المُهربة (\%,\_) كقيم حرفية، وتُستبعَد الـ tokens المجاورة لأحرف البدل غير المُهربة. #97872 (Amos Bird). - إضافة العنصر النائب
{_schema_hash}إلى S3 table engine لإدراج hash لتعريفات أعمدة الجدول في مسار S3. #98265 (Miсhael Stetsyuk). - أصبحت
SymbolIndexوaddressToSymbolوsystem.symbolsوbuildIdتعمل الآن على macOS عبر تحليل جداول رموز Mach-O. #99014 (Alexey Milovidov). - أصبح جدول
system.stack_traceيعمل الآن على macOS، مما يتيح استبطان stack traces لجميع threads الخاصة بالـ server. #98982 (Alexey Milovidov). - إضافة خيار config خاص بكل server في LDAP باسم
<follow_referrals>(القيمة الافتراضيةfalse) للتحكم في ما إذا كان LDAP client يتبع الإحالات. يؤدّي تعطيل تتبّع الإحالات إلى تجنّب حالات timeout والتعليق عند البحث انطلاقًا من base DN لجذر نطاق Active Directory. كما نُقلت log messages المرتبطة بالإحالات منwarnإلىtrace. #96765 (paf91). - أصبحنا الآن نتتبّع أي data skipping indices استُخدمت أثناء تنفيذ query في جدول query_log ضمن عمود جديد باسم
skip_indices. يُصلح هذا #78676. المؤلف الأصلي @pheepa. #87862 (Grant Holly). - لم تعد تلميحات ACCESS_DENIED تكشف أسماء الأعمدة ما لم يكن المستخدم قادرًا على إظهار جميع الأعمدة المطلوبة؛ بينما تظل أسماء database/table مرئية في التلميح. #91067 (filimonov).
- إضافة thread تنظيف مخصص لـ MergeTree لمنع تأخّر التنظيف تحت أحمال merge الكثيفة. يحل هذا #86181. #91574 (Amos Bird).
- إعادة تحميل config الخاصة بالـ cluster إذا تغيّرت عناوين IP الخاصة باسم مضيف الـ server المحلي، بدلًا من عناوين IP لأي host. يُصلح هذا #81215 و#70156 و#65268. #93726 (Zhigao Hong).
- السماح للإعداد optimize_aggregators_of_group_by_keys بتحسين aggregate functions بشكل صحيح في استعلامات GROUPING SETS. #93935 (Xiaozhe Yu).
- Keeper-bench: الإبلاغ عن الأخطاء في metrics وإنشاء ملف metrics بصيغة json لوضع —input-request-log. #95748 (Mohammad Lareb Zafar).
- إضافة clause جديدة ROLE إلى CREATE USER. #97074 (Vitaly Baranov).
- يمكنك الآن تعيين إعدادات
internal_replicationلعنقود تم إنشاؤه بواسطة قاعدة البيانات Replicated. #97228 (Pervakov Grigorii). - الإعداد الجديد
allow_nullable_tuple_in_extracted_subcolumnsيتحكم في ما إذا كانت الأعمدة الفرعية المستخرجةTuple(...)منTupleوVariantوDynamicوJSONستُعاد بصيغةNullable(Tuple(...))(معNULLللصفوف المفقودة) أو بصيغةTuple(...)(مع قيم tuple الافتراضية للصفوف المفقودة). هذا الإعداد معطّل افتراضيًا، ولا يمكن تغييره إلا بإعادة تشغيل الخادم. #97299 (Nihal Z. Miaji). - إضافة معلومات عن المرشحات المؤجلة كعنصر منفصل في مخرجات استعلام EXPLAIN (عند استخدام Row Policies/PREWHERE مع FINAL). ذو صلة: #91065. #97374 (Yarik Briukhovetskyi).
- تفعيل
type_json_allow_duplicated_key_with_literal_and_nested_objectافتراضيًا. يتيح ذلك تجنب الأخطاء المتعلقة بالمفاتيح المكررة أثناء تحليل JSONات مثل{"a" : 42, "a" : {"b" : 42}}، والتي يمكن أن يصوغها ClickHouse انطلاقًا من بيانات JSON الأصلية{"a" : 42, "a.b" : 42}. #97423 (Pavel Kruglov). - تحسين في Keeper: الأمر
find_super_nodesمفيد جدًا لأغراض تصحيح الأخطاء عند حدوث زيادة غير متوقعة في عدد العقد في Keeper. لكن إذا وُجدت عدة super nodes، يصبح من شبه المستحيل العثور على أكثر من واحدة، لأن الأمر يعلق إلى الأبد أثناء اجتياز الأبناء لأول super node يعثر عليها. يمنع هذا PR اجتياز أبناء super nodes. #97819 (pufit). - دعم أولي للإكمال التلقائي في
clickhouse-keeper-client. #97828 (Konstantin Bogdanov). - تفريغ مخازن التسجيل المؤقتة غير المتزامنة في حال حدوث تعطل. #97836 (Azat Khuzhin).
- تفعيل ميزة impersonate افتراضيًا (راجع EXECUTE AS target_user). #97870 (Vitaly Baranov).
- تحسين إلغاء الاستعلامات مع table engine الخاص بـ SQLite باستخدام KILL QUERY وإلغاء الاستعلام (Ctrl+C) في clickhouse-client. #97944 (Roman Vasin).
- إضافة server setting باسم
jemalloc_profiler_sampling_rateللتحكم فيlg_prof_sampleالخاص بـ jemalloc، وإظهاره بوصفه مقياسًا غير متزامن باسمjemalloc.prof.lg_sample. #97945 (Antonio Andelic). - دعم weights في تنفيذ الطابور المحدود المتزامن. #97962 (Daniil Ivanik).
- إضافة sslmode إلى المفاتيح المسموح بها لمصادر dictionary في PostgreSQL. سابقًا، لم يكن sslmode موجودًا في قائمة السماح
dictionary_allowed_keysفي PostgreSQLDictionarySource.cpp، مما جعل من المستحيل تهيئة وضع SSL لاتصالات dictionary في PostgreSQL. وقد منع ذلك Dictionaries من الاتصال بخوادم PostgreSQL التي تتطلب SSL (مثل AWS RDS، الذي يفرض SSL افتراضيًا)، إذ كان الاتصال يفشل في تفاوض TLS ويرفض الخادم الرجوع الاحتياطي غير المشفر. #98014 (mcalfin). - اعرض خطأً واضحًا من نوع “no such file” عند تمرير مسار ملف غير موجود إلى
clickhouseأوclickhouse-local، بدلًا من رسالة عامة مربكة. #98048 (Raúl Marín). - يمكن الآن إنشاء Text indexes على الأعمدة
Nullable([Fixed]String)وArray(Nullable([Fixed]String)). #98118 (Jimmy Aguilar Mena). - تجنّب حذف named collections التي تُعد تبعيات لـ dictionary sources. #98127 (Pablo Marcos).
- تمكين join algorithm
grace_hashللاستعلامات التي تحتوي على totals. #98144 (János Benjamin Antal). - ألغِ background merges مبكرًا في DROP DATABASE لـ ordinary shared merge tree. #98161 (Shaohua Wang).
- حسِّن إلغاء queries مع MongoDB وMySQL باستخدام KILL QUERY وcancel query (Ctrl+C) في clickhouse-client. #98187 (Roman Vasin).
- أزل NetlinkMetricsProvider واستخدم procfs حصريًا لجمع metric الخاصة بـ taskstats لكل thread. فالجمع المستند إلى Netlink يسبب مشكلات في البيئات المعتمدة على الحاويات، كما أن tail latency فيه أسوأ عند وجود contention. #98229 (Amos Bird).
- أعد هيكلة معالجة Iceberg manifest file لإصلاح المشكلات المتعلقة بـ manifest file caching. #98231 (Daniil Ivanik).
- نأخذ الآن في الحسبان الحالات التي يكون فيها sorting key للـ table عبارة عن expression مثل
toDate(time)، ويمكننا اتخاذ قرارات بشأن عدم تأجيل expressions من هذا النوع إذا كانت جزءًا من filters. #98237 (Yarik Briukhovetskyi). - أضف metric جديدة باسم
MaxAllocatedEphemeralLockSequentialNumberللحد الأقصى للرقم sequential المخصّص لعُقد القفل ephemeral من نوع znode في ZooKeeper. #98243 (Miсhael Stetsyuk). - حدّث ClickStack إلى version 2.20.0. #98252 (Aaron Knudtson).
- أُضيف حدث profile جديد
KeeperRequestTotalWithSubrequestsيحتسب كل subrequest داخل multi-request على حدة، مما يوفّر رؤية أفضل لعبء العمل الفعلي في Keeper. ويستمر الحدث الحاليKeeperRequestTotalفي احتساب كل multi-request باعتباره request واحدة. #98348 (Antonio Andelic). - يقوم
SYSTEM RELOAD DICTIONARIESالآن بإعادة تحميل Dictionaries بترتيب طوبولوجي، بحيث ترى Dictionaries التي تستخدم Dictionaries أخرى كمصدر بياناتٍ مُحدَّثة بعد إعادة التحميل. #98356 (Alexey Milovidov). - أعد تشغيل ذاكرة التخزين المؤقت للإحصاءات بعد تغيير MergeTree setting. #98520 (Han Fei).
- لا تشارك في distributed index analysis إلا replicas “الحية” (القابلة للاتصال). #98521 (Azat Khuzhin).
- أضِف الإعداد
access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users(معطّل/مسموح به افتراضيًا) لمنع استخدام ملفات تعريف الإعدادات المعرّفة في config (باستثناء ملف التعريفdefault) مع المستخدمين المعرّفين عبر SQL. #98662 (Alexander Tokmakov). - ضع حدًا لعدد العقد المستخدمة في الاستدلال التلقائي للنسخ المتماثلة المتوازية بحيث يطابق العدد الفعلي للعقد في المجموعة، بدلًا من الاعتماد فقط على الإعداد
max_parallel_replicas. #98668 (Nikita Taranov). - نفّذ الطلبات التحوطية والقراءة غير المتزامنة لتحليل الفهرس الموزّع. #98724 (Azat Khuzhin).
- أصبحت إزالة التسلسل لحالات
AggregateFunctionالثنائية تتطلب الآن استهلاك الإدخال بالكامل. وإذا وُجدت بايتات زائدة غير ضرورية في النهاية، فإن ClickHouse يطرح استثناءً بدلًا من قبول بيانات حالة غير سليمة البنية. #98786 (Nihal Z. Miaji). - اجعل
TRUNCATE DATABASEيستجيب لإلغاء الاستعلام. #98828 (Shaohua Wang). - حسِّن
keeper-benchعبر استخدام pipelining للطلبات، وفترة إحماء، وإحصاءات لكل عملية، وبذور قابلة لإعادة الإنتاج، ومعالجة أفضل للأخطاء. #98906 (Antonio Andelic). - ادعم
SAMPLE clauseفي تحليل الفهرس الموزّع. #98931 (Azat Khuzhin). - اعرض عنوان المخطط في لوحة المعلومات حتى عندما يُرجع الاستعلام نتيجة فارغة أو يواجه خطأً. #98975 (Yash ).
- لم تعد رسائل أخطاء المحلّل تسرد جميع أعمدة الجدول (ما كان قد ينتج عنه استثناءات بحجم يتجاوز 150KB). وأصبحت قوائم الأعمدة الآن مقيّدة بحد أقصى قدره 10 عناصر. #99002 (Yash ).
- أرجِع إحصاءات الأعمدة بشكل صحيح من الاستعلامات الفرعية التي تتضمن joins لكي يتمكن الاستعلام الأب من استخدامها في إعادة ترتيب join. #99096 (Alexander Gololobov).
- علِّم جلسة ZooKeeper على أنها منتهية الصلاحية فور بدء الإنهاء، بدلًا من انتظار انتهاء خيط الإرسال. يتيح ذلك للخيوط الأخرى إنشاء جلسة جديدة دون تأخير. #99102 (Raúl Marín).
- استخدم المزيد من الدوال الرياضية من LLVM-libc:
exp,exp2,expm1,fabs,fabsl,floor,fmodl,log,log2,logf,pow,scalbn,scalbnl,copysignl,nan,nanf,nanl، وثوابتexplogxfالمشتركة. #99118 (Konstantin Bogdanov). - قلّل استهلاك الذاكرة وأصلِح احتمال تكرار المخرجات في التنسيق المطوي لـ
system.jemalloc_profile_text. #99121 (Antonio Andelic). - أضِف العمود
is_subrequestإلىsystem.aggregated_zookeeper_logللفصل بين الطلبات المستقلة والطلبات الفرعية داخل طلبات Multi/MultiRead. سابقًا، كانت الطلبات الفرعية تُجمَّع في نفس الحاويات الخاصة بالطلبات المستقلة، وبما أن كل عملية فرعية كانت تُسجَّل مع المدة الإجمالية للطلب المتعدد، فقد أصبح متوسط زمن الاستجابة مضللًا. أما الآن فأصبح زمن استجابة الطلبات الفرعية صفرًا. #99169 (Miсhael Stetsyuk). - السماح باستخدام الأمر
ALTER TABLE MODIFY COLUMN x TTL ...دون تحديد نوع العمود. #99208 (Nikolay Degterinsky). - تخطي طلبات Keeper المتقادمة للجلسات التي انقطعت بالفعل، لتجنب جولات Raft غير الضرورية. ويُحدَّد الحد الأقصى لعدد الجلسات المنتهية التي يجري تتبعها بواسطة إعداد coordination
max_finished_sessions_cache_size. #99246 (Antonio Andelic). - دعم الفهرس النصي المبني على
mapValues(map)مع المعاملIN. #99286 (Anton Popov). - دعم الإكمال الشبيه بالـ shell في clickhouse keeper-client (معالجة إكمال الوسائط داخل علامات الاقتباس، مثل
'foo ba'، ومعالجة الوسائط المُفلَّتة، مثلfoo\ ba، وجعلlsيطبع العقد بين علامتَي اقتباس إذا كانت تحتوي على مسافات بيضاء). #99312 (Azat Khuzhin). - منع توقّف أمر Keeper
mntrبسبب التنافس على الأقفال. #99472 (Antonio Andelic). - تقليل التنافس على الأقفال في dispatcher الخاص بـ Keeper عبر استدعاء دوال
callbacksوتمرير طلبات القراءة خارج نطاقmutex، وإضافة حراس أقفال مُوصَّفة لأغراض الرصد. #99751 (Antonio Andelic). - التساهل مع غياب الحشو في نهاية آخر كتلة من ملفات Parquet. #99857 (Seva Potapov).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- يُصلح كيفية حفظ هدف جدول Alias كتبعية DDL عندما لا يكون مؤهلًا بالكامل: إذ يُحفَظ الآن مع قاعدة بيانات جدول Alias بدلًا من قاعدة بيانات الجلسة. #95175 (Enric Calabuig).
- إصلاح النتيجة الخاطئة أو حدوث استثناء أثناء قراءة الأعمدة الفرعية لأعمدة ALIAS. #95408 (Pavel Kruglov).
- إصلاح مشكلة العمود المفقود عند استخدام alias لمعرّف غير قياسي في JOIN مع analyzer القديم. يُصلح #25594 و#47288 و#53263. #95679 (Zhigao Hong).
- يُصلح تعطلًا في دوال لهجة Kusto
bin()وbin_at()وextract()وindexof()عند تمرير وسيطات فارغة. #95736 (NeedmeFordev). - يمنع تركيب local_object_storage (المستخدم في بحيرات البيانات فوق نظام الملفات المحلي وربما بواسطة LocalDisk) في أي مكان خارج user_files_path في clickhouse-client. #96201 (Daniil Ivanik).
- في table engine
DeltaLake، أُصلح سباق منطقي عند تغيير إصدار اللقطة، وأزيلت عمليات إعادة تحميل اللقطة الثقيلة الزائدة عن الحاجة. #96226 (Kseniia Sumarokova). - إصلاح خطأ منطقي عند إرفاق part في MergeTree إذا وُجدت عدة عمليات إعادة تسمية متسلسلة بين الفصل والإرفاق. #96351 (Alexey Milovidov).
- إصلاح خلل كان يؤدي إلى تجاهل الإعدادات الصريحة المرسلة إلى جانب
compatibilityفي الطلب نفسه بصمت إذا كانت قيمتها تطابق القيمة الافتراضية في الخادم. #97078 (Raufs Dunamalijevs). - إصلاح قيام العميل بالإبلاغ عن
NETWORK_ERRORبدلًا من خطأ التحليل الفعلي (مع رقم الصف الصحيح) عندما تواجه عملية INSERT مع التحليل المتوازي بيانات غير صالحة. #97339 (Alexey Milovidov). - إصلاح عدم قدرة الدالة التجميعية
sumCountعلى قراءة الحالات المُسلسلة الأقدم بعد إدخالNullable(Tuple). يُغلق #97370. #97502 (Nihal Z. Miaji). - إصلاح استثناء في مقارنة tuple تتضمن عناصر من النوع
Nothing(مثل المقارنة مع عناصر tuple منNULL) عند استخدامها معGROUPING SETSوORDER BY. #97509 (Alexey Milovidov). - إصلاح احتساب
uncompressed_hashغير الحتمي لأجزاء Compact في MergeTree عند استخدام عدة codecs للضغط، مما قد يتسبب في سلوك غير صحيح لإزالة التكرار. #97522 (Alexey Milovidov). - إصلاح خطأ منطقي يتعلق بتيار مفقود أثناء INSERT SELECT مع JSON وbuckets في البيانات المشتركة. يُغلق #97331. #97523 (Pavel Kruglov).
- إصلاح الإبلاغ الخاطئ عن استثناءات
MEMORY_LIMIT_EXCEEDEDعلى أنهاCORRUPTED_DATAأثناء عمليات الدمج في SummingMergeTree وCoalescingMergeTree. #97537 (János Benjamin Antal). - إصلاح استثناء “Context has expired” في الاستعلامات الفرعية المترابطة التي تحتوي على دوال جداول مثل
url(). #97544 (Alexey Milovidov). - إصلاح الاستثناءات والسلوك غير الصحيح في
optimize_syntax_fuse_functionsمع الإسقاطات التجميعية، وأنواع Date، والحفاظ على أسماء الأعمدة. #97545 (Alexey Milovidov). - إزالة query rewrite غير الصحيح من
replaceRegexpOneإلىextract، والذي كان يؤدي إلى نتائج خاطئة عندما لا يتطابق regexp؛ وكذلك إصلاح الاستثناء عند استخدامreplaceRegexpOneمعGROUP BY ... WITH CUBEوgroup_by_use_nulls=1. #97546 (Alexey Milovidov). - إصلاح تعليق
DROP DATABASEإلى أجل غير مسمى معdatabase_atomic_wait_for_drop_and_detach_synchronouslyعند إنهاء الاستعلام. #97586 (Alexey Milovidov). - إصلاح عدم قدرة
KILL QUERYعلى إنهاء الاستعلامات العالقة أثناء توليدWITH FILL، أو تحميل Dictionary عبرdictGet، أوALTER DELETEمعmutations_sync=1علىReplicatedMergeTree. #97589 (Alexey Milovidov). - كانت دالة الجدول
loopتستدعيinner_storage->read()مباشرةً، متجاوزةً طبقة المفسّر التي تُطبَّق فيها row policies وامتيازات column-level وغيرها من فحوصات الأمان. وقد أتاح ذلك لمستخدم مقيَّد بواسطة row policies قراءة جميع الصفوف عبرloop(table)حتى عندما كان تنفيذ SELECT مباشر يُرجع صفوفًا معدومة. #97682 (pufit). - إصلاح partition pruning غير الصحيح في حالات استخدام DateTime64 الأسبق من حقبة يونكس مع الدالة
toDate(). #97746 (Yarik Briukhovetskyi). - بعد هذا التصحيح، ستُرجع
hasPartitionIdالقيمة false إذا وُجد partition آخر ذو معرّف partition أعلى ضمن مجموعة data part. #97748 (Mikhail Artemenko). - إصلاح الأعطال المحتملة أثناء قراءة granules الفارغة في shared data المتقدمة ضمن JSON. يُغلق #97563. #97778 (Pavel Kruglov).
- إصلاح الخطأ
Cannot schedule a fileLOGICAL_ERRORعند تنفيذINSERTعلىDistributedبسبب حالة تسابق بينDROPوINSERT. #97822 (Azat Khuzhin). - إصلاح crash/assert في ClickHouse server عند استدعاء
mapContainsKey/mapContainsKeyLikeمع skip index من النوعtokenbf_v1. #97826 (Shankar Iyer). - إصلاح استثناءات LOGICAL_ERROR الناتجة عن
LowCardinalityداخل الأنواع المركبة (VariantوDynamicوTuple) فيconcatWithSeparatorوformatوالاستعلامات الفرعية فيINوGLOBAL INوعمليات الربط مع runtime filters. #97831 (Raúl Marín). - إصلاح استثناء
LOGICAL_ERROR، Chunk info was not set for chunk in MergingAggregatedTransform، عند استخدامARRAY JOINمع دالة الجدولmerge()عبر عدة جداول Distributed معGROUP BY. #97838 (Raúl Marín). - إصلاح تعطل الخادم (
std::terminate) الناتج عن استثناء غير مُلتقط في destructor الخاص بـ HTTP connection pool عند بلوغ الحد الصارم لمجموعة الاتصالات في ظل Concurrency مرتفع. إذ كان الاستثناءHTTP_CONNECTION_LIMIT_REACHEDقد يتسرب من~PooledConnectionعند إعادة connection إلى الـ pool، مما يؤدي إلىSIGABRT. #97850 (Antonio Andelic). - إصلاح نتيجة غير صحيحة عند استخدام الخوارزمية
grace_hashمع عمليات join غير المتساوية، عندما يتعذر معالجة الكتلة اليسرى بالكامل بسبب قيود الحجم على ناتج join. #97866 (János Benjamin Antal). - إصلاح تراجع في كفاءة الأداء عند فحص metadata الخاصة بـ DeltaLake، أُدخل في #96686. #97880 (Kseniia Sumarokova).
- إصلاح data race في عميل ZooKeeper بين sendThread وreceiveThread. #97887 (Pablo Marcos).
- إصلاح خلل كان يمنع استخدام CTE مع distributed insert selects. استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/87789. إغلاق #95837. #97889 (Yarik Briukhovetskyi).
- إصلاح استثناء صادر من
CachedOnDiskReadBufferFromFile::readBigAt. إغلاق #97325. #97890 (Kseniia Sumarokova). - إصلاح استثناء
LOGICAL_ERRORفي المحركAliasمع materialized columns بسبب عدم تطابق الأعمدة. إغلاق #97907. #97921 (Kai Zhu). - إصلاح فقدان بيانات Keeper بعد إعادة التشغيل عند استخدام Azure Blob Storage مع metadata من نوع
s3_plainلتخزين السجل. #97987 (Antonio Andelic). - إصلاح الترجمة البرمجية الخاطئة من JIT للدالة
signلأنواع الأعداد الصحيحة الأوسع منInt8— إذ كانت القيم خارج النطاق -128..127 قد تنتج إشارة غير صحيحة. #98012 (Alexey Milovidov). - إصلاح استثناء
DUPLICATE_COLUMNوظهور قيم NULL صامتة عند قراءة جداول Delta Lake التي تستخدم وضع تعيين الأعمدة “name” مع حقول struct التي تحتوي أسماؤها على نقاط (مثلSTRUCT<`a.foo`: STRING, `b.foo`: STRING>). #98013 (Caio Ishizaka Costa). - إصلاح mutation بعد lightweight update وsecondary indices. #98044 (Raúl Marín).
- إصلاح نتيجة غير صحيحة لاستعلامات FINAL عند الجمع بين skip indexes الخاصة بالمفتاح الأساسي وتلك غير المرتبطة به. #98097 (Raúl Marín).
- فرض التحقق من READ ON FILE على file() scalar وDESCRIBE TABLE file(). #98115 (Nikolay Degterinsky).
- إصلاح تعطل كان يحدث عند الاستعلام عن الملفات باستخدام نمط glob (مثل
file('dir/**', 'LineAsString'))، إذ كان يُطلق استثناءً غير معالَج من نظام الملفات (STD_EXCEPTION) إذا كان الدليل يحتوي على رابط رمزي غير صالح. وأصبحت هذه الروابط الرمزية غير الصالحة الآن تُتخطى بصمت، ويُرجع الاستعلام نتائج جميع الملفات الصالحة. #98143 (Mark Andreev). - إصلاح خطأ segfault في تحسين خطة الاستعلام عند تحويل outer join إلى inner join باستخدام
arrayJoinفي تعبير التصفية. #98147 (Alexey Milovidov). - إصلاح عدم عمل تنسيق
ProtobufListمع Kafka engine بسبب عدم إعادة ضبط حالة القراءة بين الرسائل. #98151 (Alexey Milovidov). - إصلاح خطأ منطقي في analyzer_compatibility_join_using_top_level_identifier و ARRAY JOIN، مع إغلاق #98164. #98179 (Vladimir Cherkasov).
- تعيين المكوّن
Watchلاستجابات watch فيaggregated_zookeeper_logبدلًا من تركه فارغًا. #98202 (Antonio Andelic). - إذا لم تكن أعمدة مفتاح التقسيم مشمولة ضمن مفتاح الفرز، فقد يؤدي partition pruning، بشكل غير صحيح، إلى تخطي partitions تحتوي على rows كان ينبغي أن “تفوز” أثناء إزالة التكرار في FINAL. #98242 (Yarik Briukhovetskyi).
- إصلاح الخطأ المنطقي “Bad cast from type DB::ColumnConst to DB::ColumnArray” في
kql_array_sort_asc/kql_array_sort_descعند استدعائهما باستخدام معاملات Array ثابتة. #98251 (Alexey Milovidov). - إصلاح وصول خارج الحدود في
ColumnConst::getExtremesكان قد يتسبب في تعطل عند تفعيلextremes = 1. #98263 (Alexey Milovidov). - إصلاح احتمال حدوث حالة توقف تام عندما تعمل عمليتا
MOVE PARTITIONمتزامنتان على الزوج نفسه من الجداول ولكن في اتجاهين متعاكسين. #98264 (Alexey Milovidov). - يُرجع خادم HTTP الآن رسالة خطأ في body الاستجابة لردود 400 Bad Request الناتجة عن headers غير سليمة، بدلًا من body فارغ. #98268 (Alexey Milovidov).
- إصلاح نتائج غير صحيحة مع distributed index analysis (ميزة تجريبية) وquery condition cache. #98269 (Azat Khuzhin).
- إصلاح استثناء LOGICAL_ERROR “Invalid binary search result in
MergeTreeSetIndex” الناتج عن تحويلtoDateعلى أعمدة المفتاح عندما تتجاوز البيانات الحد 65535. #98276 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERRORعندما يُستبدل RIGHT JOIN مغلف داخل CROSS JOIN بواسطة تحسينquery_plan_join_swap_tableفي مسار الشيفرة القديم لخطوة join. #98279 (Alexey Milovidov). - التحقق من صحة البيانات التالفة أثناء إلغاء التسلسل لـ
DDSketchلمنع حالاتsegfaultوالاستثناءات والحلقات اللانهائية ونفاد الذاكرة عند قراءة حالات دوال التجميعquantilesDDالتالفة. #98284 (Alexey Milovidov). - إصلاح LOGICAL_ERROR “Trying to execute PLACEHOLDER action” عند الرجوع إلى الأعمدة المترابطة من الاستعلامات الخارجية داخل دوال lambda مثل
arrayMap. #98285 (Alexey Milovidov). - إصلاح استثناء الخطأ المنطقي في
caseWithExpressionعندما يتضمن تعبيرCASEmaterialize(NULL)أو argumentات أخرى من النوعNullable(Nothing). #98290 (Alexey Milovidov). - إصلاح استثناء التحويل غير الصحيح عند التصفية على العمود الافتراضي
_tableفي table function merge. #98291 (Alexey Milovidov). - إصلاح فشل متقطع في إزالة التكرار، إذ كانت عمليات الإدراج المعاد تُزال تكراراتها بشكل غير صحيح بسبب عدم اتساق ترتيب التنظيف بين دليلي ZooKeeper
blocks/وdeduplication_hashes/. #98293 (Alexey Milovidov). - إصلاح استثناء عند استخدام
ORDER BY ... WITH FILLمعLIMIT BYفي الوقت نفسه. #98361 (Alexey Milovidov). - إصلاح تلف صامت للبيانات عند إدراج عمود
Dateمن Parquet/Arrow في عمودEnum— إذ يرفض الآن تحويل النوع غير المتوافق على نحو صحيح بدلًا من تخزين قيم enum غير صالحة. #98364 (Alexey Milovidov). - إصلاح استثناء عند قراءة ملف Arrow يحتوي على عمود
Arrayإلى جدول يحتوي على عمودNested. #98365 (Alexey Milovidov). - إصلاح تعلّق mutations الخاصة بـ
MATERIALIZE INDEXوMATERIALIZE PROJECTIONعندما يُحذف الفهرس أو الإسقاط قبل اكتمال mutation. #98369 (Alexey Milovidov). - إصلاح استثناء عند القراءة من
Nullable(Tuple(...))عندما يتعارض اسم أحد عناصرTupleمع العمود الفرعيnullالخاص بـNullable. #98372 (Alexey Milovidov). - إصلاح الاستثناء “Column … query tree node does not have valid source node” عند تنفيذ joining لجدول
Merge(يلف جدولDistributed) مع جدول آخر. #98376 (Alexey Milovidov). - إصلاح التحويل غير الصحيح من Parquet
BoolإلىFixedStringفي القارئ native V3، والذي كان ينتج raw bytes بدلًا من التمثيل النصي. #98378 (Alexey Milovidov). - إصلاح
tryGetColumnDescriptionلتصفية الأعمدة الفرعية بحسب نوع العمود الأصل، بما يتسق مع أساليب lookup الأخرى للأعمدة. #98391 (Alexey Milovidov). - قبول credentials المشفرة بـ base64 من دون padding في HTTP Basic Auth. بعض عملاء HTTP يحذفون padding اللاحق
=في ترويسةAuthorization: Basic، وكان هذا يتسبب سابقًا في فشل authentication. #98392 (Amos Bird). - إصلاح نتائج partition pruning غير الصحيحة بعد دمج الأجزاء التي تحتوي على أعمدة partition key من النوع
Nullable، وكان السبب حدود min-max index الخاطئة. #98405 (Amos Bird). - إصلاح exception نادر في executor الخاص بـ pipeline، قد يظهر على شكل
Received signal 6(في builds الخاصة بـ debug فقط)، عندما يتزامن توسيع pipeline مع إلغاء query. #98428 (Alexey Milovidov). - إصلاح exception “Column identifier is already registered” عند استخدام
count_distinct_optimizationمع clause QUALIFY. #98433 (Alexey Milovidov). - إصلاح exception “cannot be inside Nullable type” عند استخدام
IN/NOT INمع arguments لأعمدة من النوعLowCardinality(مثلa NOT IN (b)حيث تكونaمن النوعLowCardinality(String)). #98443 (Alexey Milovidov). - إصلاح exception “Pipeline stuck” في joins
full_sorting_mergeالناتج عن حالة deadlock فيPingPongProcessorعندما أنشأ تحسينFilterBySetOnTheFlyتبعية دائرية معMergeJoinTransform. #98454 (Alexey Milovidov). - إصلاح exception
LOGICAL_ERROR“Projection cannot increase the number of rows in a block” عند دمج الأجزاء التي تحتوي على TTL يحذف جميع rows وprojection تجميعي مع مفتاحGROUP BYثابت. #98458 (Alexey Milovidov). - إصلاح exception من نوع logical error عند استخدام
CROSS JOINمعINNER JOIN USINGمعًا. #98459 (Alexey Milovidov). - إصلاح إلغاء مرجعية مؤشر null في
dictGetOrDefaultعندما تكون argument الخاصة بالمفتاح من النوعNullable. #98460 (Alexey Milovidov). - إصلاح exception في queries
DISTINCTعند استخدام projections تجميعية، وعندما يتسببmaterializeفي اختلافات في النوعLowCardinalityبين query وprojection. #98462 (Alexey Milovidov). - إصلاح exception LOGICAL_ERROR عند استخدام
arrayJoinداخل filter expression معOUTER JOINمع تفعيلjoin_use_nulls. #98464 (Alexey Milovidov). - إصلاح exception من نوع logical error “Replica decided to read in WithOrder mode, not in ReverseOrder” عند استخدام parallel replicas مع
optimize_aggregation_in_order. #98467 (Alexey Milovidov). - تم إصلاح مشكلة قيام ClickHouse Keeper بقطع اتصال عملاء Java ZooKeeper بعد طلب
addWatch. يتوقع Java client وجود body منErrorResponseبحجم 4 بايت في استجابةaddWatch، لكن Keeper كان يرسل body فارغًا، مما تسبب فيEOFExceptionوقطع session. وقد أدى ذلك إلى تعطيلCuratorCacheفي Apache Curator وأي تطبيق Java يستخدم watches دائمة. يُصلح هذا #98079. #98499 (Antonio Andelic). - إصلاح عدم انخفاض مقاييس Keeper
zk_followersوzk_synced_followersعند تعطل follower. وإضافة المقاييس الجديدةzk_learnersوzk_synced_non_voting_followersإلى الأمرmntrذي الأحرف الأربعة. يصلح #54173. #98504 (Antonio Andelic). - إصلاح استثناء LOGICAL_ERROR في
renameAndCommitEmptyParts، والذي كان يمكن أن يحدث عند تشغيلTRUNCATE TABLEبالتزامن معOPTIMIZE TABLEباستخدام معاملات MergeTree. #98508 (Alexey Milovidov). - إصلاح تجاهل منفذ raft الآمن في Keeper للقيمتَين
cipherListوdhParamsFileمن إعداداتopenSSL، إذ كان يستخدم القيم الافتراضية دائمًا بدلًا من القيم التي يحددها المستخدم. يغلق #51188. #98509 (Antonio Andelic). - إصلاح رسائل السجل المضللة في Keeper مثل “Receiving request for session X took 9963 ms”، حيث كان الوقت المُبلّغ عنه يُقضى فعليًا في انتظار خامل داخل
poll()بين نبضات القلب، لا في تنفيذ العملية نفسها. يصلح #79026. #98510 (Antonio Andelic). - إصلاح نتيجة غير متوقعة مع read_in_order_use_virtual_row والدوال الرتيبة. يغلق #97837. #98514 (Vladimir Cherkasov).
- إصلاح
LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'عند استخدامPREWHEREمع subquery لـINعلى جداول MergeTree. #98522 (Alexey Milovidov). - إصلاح اتصالات Keeper عبر TCP التي كانت تمنع إيقاف server بسلاسة بسبب عدم الاستجابة لإشارة الإيقاف. #98525 (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). - إصلاح فشل MongoDB dictionary source عند استخدام named collections. يغلق #97840. #98528 (Pablo Marcos).
- إصلاح LOGICAL_ERROR عندما يكون Identifier فارغًا بعد substitution للمعلمات. #98530 (Pervakov Grigorii).
- إصلاح حالة deadlock في pipeline عند استخدام
sort_overflow_mode = 'break'مع window functions. #98543 (Alexey Milovidov). - إصلاح rollback للعمود في محرك Buffer أثناء التعامل مع استثناء عند append لكتلة جديدة. كان المنطق السابق قد يؤدي إلى تلف in-memory state للأعمدة. #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). - تم إصلاح استخدام text index مع skip indexes الأخرى. سابقًا، كان يمكن أن تظهر أخطاء منطقية مثل “Trying to get non-existing mark” عندما يستخدم filter الاستعلام text index مع skip indexes عادية أخرى في الوقت نفسه. #98555 (Anton Popov).
- تم إصلاح الخطأ المنطقي “TABLE_FUNCTION is not allowed in expression context” عندما تظهر table function ذات alias عدة مرات ضمن نطاق query نفسه (على سبيل المثال، في كلٍّ من clauses
PREWHEREوQUALIFY). #98557 (Alexey Milovidov). - تم إصلاح distributed index analysis مع expressions (وليس الأعمدة فقط) في PK، وهو ما كان يؤدي إلى انعدام Filtering للحبيبات الزائدة على replicas البعيدة. #98561 (Azat Khuzhin).
- تم منع dropping العمود عندما تكون subcolumns التابعة له مستخدمة في expressions من نوع default/alias لأعمدة أخرى، مع استخدام analyzer لتعبيرات default عند alter drop column. #98569 (Nikita Mikhaylov).
- تم إصلاح إعادة محاولة طلبات S3 بشكل غير صحيح عند حدوث أخطاء غير قابلة لإعادة المحاولة (بما في ذلك
HTTP_CONNECTION_LIMIT_REACHED) في HTTP client. #98598 (Sema Checherinda). - تم إصلاح overflow عشري عند partition pruning مع DateTime64. #98628 (Yarik Briukhovetskyi).
- تم إصلاح خطأين في ترجمة expression باستخدام JIT: خطأ نسخ ولصق في type checking لـ
nativeCastجعل فروع cast من عدد صحيح إلى عدد صحيح ومن float إلى float غير قابلة للوصول، وتمريرnullptrTargetMachine غير صحيح إلى LLVMPassBuilder، مما منع تسجيل passes التحسين الخاصة بالهدف. #98660 (Alexey Milovidov). - تم إصلاح تجاوز RBAC كان يسمح للمستخدمين بتنفيذ DESCRIBE لأي table عبر
remote()أوremoteSecure()أوcluster()أوclusterAllReplicas()عند توجيهها إلى localhost، من دون الحاجة إلى privilege SHOW_COLUMNS. #98669 (pufit). - تم إصلاح الاستثناء
BAD_GETونتائج query غير الصحيحة عندما يُستخدم expression غير Boolean (على سبيل المثالsin(col)) في كلٍّ من WHERE وSELECT مع JOIN، بسبب إفساد تحسين دفع filter إلى الأسفل لعُقد 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). - تم إصلاح الاستثناء “Bad cast from type
DB::TableFunctionNodetoDB::QueryNode” عند استخدام table function inputكـ argument لـremote. #98694 (Alexey Milovidov). - تم إصلاح إعادة إحياء Outdated data parts الناتجة عن تنظيف empty covering parts بشكل غير صحيح. #98698 (Shaohua Wang).
- إصلاح استثناء في
LogicalExpressionOptimizerPassعندما تُرجع دالة منطقية ضمن مقارنةequalsنوعVariant. #98712 (Alexey Milovidov). - إصلاح قيام
parseDateTimeBestEffortبتحليل الكلمات التي تبدأ ببادئات الأشهر أو أيام الأسبوع بشكل غير صحيح. يُغلق #97965. #98742 (Pavel Kruglov). - إصلاح استثناء
UNKNOWN_IDENTIFIERعند الاستعلام عن table function merge()أو محركMergeعلى جداول تحتوي على JSON columns ذات parameters مختلفة (مثل حقولSKIPمختلفة) وأعمدة ALIAS تشير إلى مسارات JSON فرعية، مع تمكين analyzer الجديد. يُغلق #97812. #98753 (Pavel Kruglov). - إصلاح تحسين
optimize_skip_unused_shardsمع analyzer في حال استخدام تخزينDistributedداخلView. #98754 (Nikolai Kochetov). - إصلاح الوصول إلى subcolumn في Tuple بالاسم (مثل
SELECT x.aلـTuple(a UUID, b Int32)) في external tables المُمرَّرة عبر--externalفيclickhouse-client. يُغلق #96925. #98755 (Pavel Kruglov). - إصلاح استثناء
reverseUTF8عند إدخال UTF-8 غير صالح (مبتور). #98770 (Alexey Milovidov). - إصلاح اكتشاف مدى فائدة skip index من نوع Set مع OR مع false (أي or(x, 0)) بوصفه predicate. #98776 (Azat Khuzhin).
- إصلاح استثناء
LOGICAL_ERROR(عدم تطابق بنية block فيremoveUnusedColumns) الذي قد يحدث معFINAL+PREWHERE+ expression ثابتة فيWHERE+ aggregateات لا تعتمد على الأعمدة مثلcount(). #98778 (Alexey Milovidov). - جعل entries
system.trace_logالخاصة بإعادة التحميل التلقائي لـ Dictionaries في ClickHouse تحتوي على Query id غير فارغ. #98784 (Miсhael Stetsyuk). - إصلاح عطل كان قد يؤدي إلى إلغاء مرجع مؤشر null في system tables التي أُنشئت بين لحظة أخذ snapshot للجداول في استدعاء
IDatabaseTablesIterator::table()وبين تغيّر الجداول في thread أخرى أثناء التكرار اللاحق. #98792 (Grant Holly). - إصلاح عدم قيام
SYSTEM START REPLICATED VIEWبإيقاظ مهمة refresh. #98797 (Pablo Marcos). - إصلاح الاستثناء “Inconsistent table names” عند استخدام table function
view()التي تحتوي على JOINs داخل JOIN آخر (فقط مع analyzer القديم). #98809 (Alexey Milovidov). - إصلاح ضبط RLIMIT_SIGPENDING (عبر pending_signals). #98829 (Azat Khuzhin).
- إصلاح الاستثناء عند تركيب
loopمع cluster table functions. #98860 (Konstantin Bogdanov). - كانت
LEFT ANTI JOINالتي تتضمن عدة أعمدة لمفاتيح الربط تُرجع نتائج غير صحيحة عندما يكونenable_join_runtime_filters=1(وهو الإعداد الافتراضي). #98871 (Alexander Gololobov). - إصلاح
WITH FILL STALENESSالذي كان يُنتج صفوفًا إضافية مُعبأة عند قراءة البيانات على عدة chunks (على سبيل المثال، مع قيمة صغيرة لـindex_granularity). #98895 (Alexey Milovidov). - إصلاح الخطأ
LOGICAL_ERRORالتالي: “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B”. #98900 (Azat Khuzhin). - إصلاح انحراف تتبّع الذاكرة الناتج عن عدم التراجع عن allocations الفاشلة، والسلوك غير المعرّف لـ
nallocx(0)، وخطأ زيادة بمقدار واحد في تتبّع الذروة العامة. كما جرى توسيع التتبّع ليشمل ring buffers الخاصة بـio_uring. #98915 (Antonio Andelic). - منع Attach إلى جداول data lake المحلية خارج مسارات المستخدم، وليس فقط منع إنشائها. #98936 (Daniil Ivanik).
- إصلاح race condition كان يمكن أن يتسبب في ظهور الاستثناء “ReadBuffer is canceled” في queries التي تستخدم
urlClusterأو cluster table functions مشابهة. #98955 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERRORفي Financial functions (financialNetPresentValue,financialInternalRateOfReturn، وغيرها) عند تمرير arguments من النوعBFloat16. #98958 (Alexey Milovidov). - إصلاح عدم تطبيق skip indexes (وشروط primary key) على أعمدة ALIAS عند تعطيل دمج expression في query plan (
query_plan_merge_expressions = 0أوquery_plan_enable_optimizations = 0). #98960 (Peng). - زيادة
InsertQueryProfileEvent من أجل async inserts. يغلق #98626. #98962 (Narasimha Pakeer). - إصلاح الاستثناء “Inconsistent KeyCondition behavior” في builds التصحيح عندما يحتوي primary key على قيم float من نوع NaN، وذلك بجعل
accurateLessوaccurateEqualsيتعاملان مع NaN بصورة متسقة مع ترتيب الفرز في ClickHouse. يغلق #98075. #98964 (Alexey Milovidov). - لم يعد
SummingMergeTreeيجمع أعمدة Bool (وأنواع domain الأخرى). وتُحفظ قيم Bool كما هي بدلًا من جمعها حسابيًا. #98976 (Yash ). - إصلاح الاستثناء Scalar doesn’t exist الذي كان يحدث عند الاستعلام عن shard بعيد مع ضبط
optimize_const_name_sizeوتعيينenable_scalar_subquery_optimization= 0. إذ لم تكن الثوابت الكبيرة المستبدلة بمراجع__getScalarفي query البعيد تُرسَل إلى الـ shard، مما كان يؤدي إلى فشل query. #98979 (andriibeee). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKفي بعض الاستعلامات التي تستخدمGROUP BYوتعبيرات تتضمن بحثًا عكسيًا في Dictionary، ومقارنات لتحويلDate/DateTime، ومقارنات tuple. يغلق #98888. #98980 (Nihal Z. Miaji). - تم إصلاح سلوك غير معرّف (إلغاء إشارة مرجع لمؤشر فارغ) عند تعديل عمود version/sign/is_deleted إلى
EPHEMERALأوALIASفي محركات MergeTree. وأصبحت هذه التعديلات تُرفَض الآن على نحو صحيح. #98985 (Alexey Milovidov). - تم إصلاح مشكلة كانت تتسبب في أن
system.grantsلا تُدرج معلمات regular expression الخاصة بامتيازاتURLوS3في العمودaccess_object. #98987 (DQ). - تم إصلاح قراءات Iceberg BigLake: أصبحت بيانات اعتماد ADC تُمرَّر الآن إلى عميل GCS S3 (ما يعالج أخطاء 403)، وتُشفَّر بيانات اعتماد OAuth2 بترميز URL قبل إرسالها (ما يعالج حالات فشل المصادقة للرموز المميزة التي تحتوي على محارف خاصة)، ولم يعد اجتياز مساحة الأسماء يتوقف عند استجابات BigLake HTTP 400. #98998 (Nikita Fomichev).
- تم إصلاح فشل
clickhouse-clientفي تبديل timezone عندما يستخدم متغير البيئةTZصيغة file path الخاصة بـ POSIX (مثلTZ=:/etc/localtime). #99000 (Yash ). - إصلاح تقليم غير صحيح أو أقل فاعلية عند استخدام
startsWithأوLIKEأوNOT LIKEمع عمودFixedString. بالإضافة إلى ذلك، يمكن الآن لدالة التحويل منFixedStringإلىStringتقليم granules عند تطبيقها على Key column. يغلق #98940. #99001 (Nihal Z. Miaji). - تم إصلاح
windowFunnelمعstrict_deduplication، إذ كان يعيد مستوى غير صحيح عند مصادفة حدث مكرر. #99003 (Yash ). - إصلاح خطأ كان يتسبب في تجاهل EXISTS لعبارتي
LIMITوOFFSETفي الاستعلامات الفرعية، ما يؤدي إلى نتائج غير صحيحة عندما لا يُرجع الاستعلام الفرعي أي صفوف بسبب offset أو limit صفري. يغلق #88722. #99005 (andriibeee). - إصلاح استثناء “Block structure mismatch” عندما تواجه عملية تحسين دفع التصفية إلى الأسفل تعبير AND يُختصر إلى قيمة ثابتة مع
GROUPING SETS. #99010 (Alexey Milovidov). - إصلاح استثناء عند قراءة patch parts (التحديثات الخفيفة) من دون العمود
_part_offsetفي query plan. #99023 (Alexey Milovidov). - استعلام مثل
SELECT * FROM table WHERE pk_id = ''حيث يكونpk_idهو primary key ومن النوعStringسيستخدم الآن فهرس primary key على نحو صحيح لتصفية granules. #99027 (Shankar Iyer). - إصلاح استثناء
DEPENDENCIES_NOT_FOUNDفي Kafka engine عندما تكون materialized view في حالة detached بينما يقوم background thread ببث streaming data. #99028 (Alexey Milovidov). - إصلاح الاستثناء الذي يحدث عند إنشاء جدول يحتوي على عمود
EPHEMERALيحمل الاسم نفسه لعمود افتراضي (مثل_part_offset). #99031 (Alexey Milovidov). - إصلاح الرسالة المضللة “inflate failed: buffer error” عند قراءة ملفات مضغوطة غير موجودة عبر دالة الجدول
url()باستخدام أنماط glob. تُرجع الآن نتيجة فارغة كما هو متوقع عند تمكينhttp_skip_not_found_url_for_globs. #99034 (Alexey Milovidov). - إصلاح تعطل الخادم (std::terminate) عند تنفيذ
ALTER TABLE ... DROP PARTعلىpatch partبعد تغيير في المخطط (مثل ADD COLUMN). كان التعطل ناتجًا عن غياب أعمدة النظام (_part) من البيانات الوصفية لـcoverage partالفارغ، مما أدى إلى استثناء غير ملتقط داخلNOEXCEPT_SCOPE. #99036 (Peng). - كان من الممكن أن تتعطل عملية خادم ClickHouse إذا طُرح استثناء لتجاوز حد الذاكرة أثناء قراءة من قرص مخزنة مؤقتًا. وقد أُصلح ذلك الآن. #99042 (Shankar Iyer).
- إصلاح
LOGICAL_ERRORعند الاستعلام عن جدول يحتوي على كلٍّ من ROW POLICY وعمود ALIAS باستخدامdictGet. كانت المشكلة ناتجة عن الوصول المبكر إلى تعبير الجدول أثناء تحليل عمود ALIAS في المحلل الجديد. #99065 (Peng). - إصلاح خطأ تجاوز الحدود عند محاولة المستخدم الاستعلام عن الأعمدة الافتراضية فقط من جدول Iceberg مع Avro format للبيانات. هذه حالة نادرة جدًا، لذا لا نعدّها حرجة. يُصلح #88238. #99080 (alesapin).
- إصلاح segfault في CTE递归 مع
remote()+view(). #99081 (Konstantin Bogdanov). - تخطي تحليل الفهرس الإضافي غير الضروري عند تطبيق تحسين read-in-order. #99084 (Vladimir Cherkasov).
- إصلاح تعطل ناتج عن استثناء تجاوز حد الذاكرة طُرح أثناء تطبيق
patch part. #99086 (Anton Popov). - إصلاح تأكيد debug في
DDLWorkerكان سببه تقادمfirst_failed_task_nameبعد حذف إدخال ZooKeeper أثناء استعادة إعادة التهيئة. #99099 (Antonio Andelic). - إصلاح إعادة بناء الفهارس النصية أثناء عمليات الدمج مع TTL. #99107 (Anton Popov).
- إصلاح تعطل في استعلام
ALTER TABLE ... REMOVE SETTINGSلمحرك جدول Iceberg. يُصلح #86330. #99108 (alesapin). - إصلاح خلل في تحسين
query_plan_convert_any_join_to_semi_or_anti_joinكان يُرجع نتيجة غير صحيحة للصفوف غير المتطابقة. ذو صلة: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi). - إصلاح استثناء
LOGICAL_ERRORفيASTColumnsExceptTransformer::transform. #99119 (Pablo Marcos). - إصلاح تجاوز RBAC الذي كان يتيح للمستخدمين الحصول على بنية الجدول عبر
DESCRIBE TABLEأوCREATE TABLE ASعلى دوال الجداول (mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc()وغيرها) من دون امتيازات الوصول المطلوبة إلى المصدر. وبالنسبة إلى الدوال التي تستنتج المخطط من خوادم بعيدة، كان ذلك يتيح أيضًا تشغيل اتصالات صادرة (SSRF) من دون تخويل. #99122 (pufit). - إصلاح تعطل Keeper (segfault في NuRaft) أثناء إعادة التهيئة الديناميكية ونقل القيادة. #99133 (JIaQi Tang).
- إصلاح التعطل عند استخدام جدول Buffer مع SAMPLE عندما لا تدعمه الوجهة. #99141 (Kseniia Sumarokova).
- إصلاح LOGICAL_ERROR الناتج عن عدم تطابق ترتيب الأعمدة في patch parts. #99164 (Pablo Marcos).
- إصلاح تعطل نادر جدًا عند احتواء جدول Iceberg على ملفات بتنسيقات مختلطة (ORC وParquet). يُصلح #88126. #99168 (alesapin).
- إصلاح عدم تطبيق max_execution_time على backup/restore. #99205 (Kseniia Sumarokova).
- إصلاح تجاهل
insert_deduplication_tokenبصمت في استعلاماتINSERT SELECTمن دونORDER BY ALL. سابقًا، كان يتم تعطيل deduplication بالكامل لعملياتINSERT SELECTغير المرتبة، حتى عند تقديم token صريح من المستخدم. الآن، يكفي تقديمinsert_deduplication_tokenلتمكين deduplication بغض النظر عنORDER BY ALL. #99206 (Desel72). - إصلاح الإفراط في التحقق من الوصول أثناء تحسين
InverseDictionaryLookupPass، وذلك عبر التحقق من grantCREATE_TEMPORARY_TABLEمرة واحدة قبل المرور بدلًا من التحقق منه لكل عقدة تمت زيارتها. #99210 (Mikhail Artemenko). - إصلاح قيام
clickhouse format --obfuscateبإنتاج SQL غير صالح بسبب إخفاء أنواع skip index، وأسماء compression codec، وأسماء database engine، وتعريفات dictionary layout/source. #99260 (Raúl Marín). - إصلاح خلل كان يجعل المقارنة بين النوعين Time[64] وDateTime[64] مربكة في بعض الحالات؛ والآن، في مثل هذه الحالات، تتم ترقية قيم Time[64] إلى DateTime[64] بإضافة
1970-01-01كجزء التاريخ. #99267 (Yarik Briukhovetskyi). - تقييد constraints الخاصة بالإعدادات في عامل DDL لاستعلامات DDL الموزعة. #99317 (Pablo Marcos).
- إصلاح مشكلات طفيفة في authentication باستخدام TOTP: خيار CLI
--one-time-passwordمع كلمة مرور فارغة، والتحقق من قيم الإعداد<digits>و<period>. #99322 (Vladimir Cherkasov). - إصلاح الخطأ المنطقي
unordered_map::at: key not foundفي Avro output format عند تسلسل أعمدةEnum8/Enum16التي تحتوي على values غير موجودة في تعريف enum. #99332 (Desel72). - إصلاح CHECK TABLE عند استخدام التسلسل المتناثر داخل Tuple مع Dynamic. يغلق #96588. #99351 (Pavel Kruglov).
- إصلاح التحقق المتشدّد أكثر من اللازم من المعالجة المسبقة للفهرس النصي. #99359 (Anton Popov).
- إصلاح التوافق عند ترقية الجداول المُكررة ذات فهارس minmax الضمنية من الإصدار 25.10 إلى الإصدارات الأحدث. #99392 (Raúl Marín).
- أُزيل دعم الدوال المنفية (
notEquals,notLike,notIn) من تحليل الفهرس النصي. لم يكن بالإمكان لهذه الدوال تخطي أي حبيبات مطلقًا، لذا فإن تحليل الفهرس لها لم يكن يضيف سوى عبء إضافي من دون أي فائدة. #99393 (Anton Popov). - إصلاح
optimize_skip_unused_shardsمع المحلّل الجديد في الحالة التي يُستخدم فيها جدولDistributedداخل استعلام IN فرعي. #99436 (Nikolai Kochetov). - إصلاح heap-use-after-free في
INTERSECT/EXCEPTعندما يُنتج الاستعلام أسماء أعمدة مكررة. #99471 (Alexey Milovidov). - إصلاح خطأ منطقي في
ALTER TABLE ... DROP PARTعند استخدام معلمة استعلام محددة النوع لاسم الجزء. #99489 (Alexey Milovidov). - إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعندما يُشار إلى شرط فهرس نصي (مثلhasAllTokens) في كلٍّ من عبارتيSELECTوWHEREعبر اسم مستعار. #99504 (Anton Popov). - إصلاح النتائج غير الصحيحة عند استخدام
hasAllTokensمع OR بين أعمدة لها فهارس نصية منفصلة. #99505 (Anton Popov). - تهيئة ذاكرة تخزين الصفحات المؤقتة في
clickhouse-localحتى يصبح الإعدادpage_cache_max_sizeفعّالًا. #99510 (Alexey Milovidov). - إصلاح حالة نادرة يُوسم فيها جزء بيانات على نحو غير صحيح بأنه تالف ويُفصل بعد استعلام
DETACH/ATTACH TABLE. #99529 (Anton Popov). - إصلاح استثناء
std::length_errorعند الاستعلام عن جداول النظام الفارغة باستخدام تنسيق Pretty عبر واجهة HTTP. #99541 (Alexey Milovidov). - إصلاح
LOGICAL_ERRORعند استخدامALTER TABLE ADD COLUMNلإنشاء عمودEPHEMERALبالاسم نفسه لعمود افتراضي (مثل_part_offset). #99549 (Alexey Milovidov). - إصلاح مشكلة عدم طرد إدخالات
VectorSimilarityIndexCacheمطلقًا بعد إزالة الجزء بسبب عدم تطابق مفاتيح ذاكرة التخزين المؤقت. #99575 (Seva Potapov). - منع قراءة بيانات اعتماد Google من ملف محلي. هذا الإعداد غير آمن لأنه يتيح قراءة بيانات اعتماد أخرى إذا كان مسار الملف معروفًا. #99584 (Konstantin Vedernikov).
- إصلاح تراجع الأداء في analyzer، واستبعاد الأعمدة غير المستخدمة من
ARRAY JOIN. #99587 (Dmitry Novik). - إصلاح قراءة الفهرس النصي في جدول يحتوي على lightweight deletes وسياسات صفوف. #99661 (Anton Popov).
- إصلاح إلغاء الإشارة إلى nullptr في قارئ Parquet عندما يواجه مسار filter-in-decoder صفحات مستبعَدة بالتصفية. يُغلق #99676. #99677 (Alexey Milovidov).
- إصلاح عملية seek غير الصحيحة في AsynchronousReadBufferFromFileDescriptor مع O_DIRECT. يُغلق #99358. #99678 (Pavel Kruglov).
- إصلاح heap-buffer-overflow في
CompressionCodecT64وإنهاء العملية فيCompressionCodecMultipleعند فك ضغط بيانات مضغوطة تالفة. وقد اكتُشفت كلتا المشكلتين بواسطة أهداف libFuzzer الجديدة. وأصبحت codecs الآن تطلق استثناءً بدلًا من التعطل. #99680 (Rahul). - تأخير المعالجة إلى أن ينتهي server من تحميل جميع الجداول. #99700 (Seva Potapov).
- إصلاح تجاوز مصدر قاموس MySQL لـ
RemoteHostFilterفي معاملات DDL المضمّنة. #99720 (Shaohua Wang). - إصلاح خطأ منطقي عند التكرار عبر جداول data lake في
system.tables. #99739 (Konstantin Vedernikov). - إصلاح تحليل predicates باستخدام الدالة
INعبر الفهرس النصي مع preprocessor. كما أُصلح تصادم tokens التي يجري البحث عنها في الفهرس النصي، وهو ما كان قد يؤدي إلى نتائج غير صحيحة. #99755 (Anton Popov). - إصلاح حلقة لا نهائية عند قراءة ملفات التنسيق
Npyذات أبعاد shape السالبة. #99812 (Desel72). - إصلاح global-buffer-overflow في الدالة
CRC32على arguments من نوعFixedStringعند تقييمها مع صفر صفوف أثناء حساب ترويسة query plan. #99835 (Alexey Milovidov). - إصلاح التعطل (إلغاء الإشارة إلى مؤشر فارغ) عند تنفيذ
ALTER TABLE ... MODIFY COLUMN ... COMMENTعلى جداول Iceberg. #99838 (Desel72). - إصلاح الإعداد
aggregate_functions_null_for_emptyليعمل مع aggregate functions التي تُرجع أنواعًا غيرNullableمثلArrayأوMap(مثلgroupArrayوsumMap). #99839 (Alexey Milovidov). - إصلاح استثناء LOGICAL_ERROR في الدالة
midpointعند استدعائها بأنواع أعداد صحيحة مختلطة موقعة/غير موقعة. #99867 (Alexey Milovidov). - إصلاح استثناء “عدم تطابق بنية الكتلة” في queries التي تحتوي على HAVING clause، حيث يتضمن filter expression كِلَا من تجميع ملفوف داخل دالة تُنتج NULL و
materialize(0). #99915 (Alexey Milovidov). - إصلاح فشل
assertionفيsipHash128Keyed(ودوالhashذات المفاتيح المشابهة) عندما تكون وسيطة البيانات من نوع Map بمفاتيح Array أو بأنواع Array متداخلة أخرى. #99921 (Alexey Milovidov). - إصلاح الاستثناء
LOGICAL_ERROR“Set غير جاهز” في الدالةINأثناء تحسين خطة الاستعلام باستخدامconvertAnyJoinToSemiOrAntiJoin. #99939 (Alexey Milovidov).
تحسينات البناء/الاختبار/التغليف
- تقليل وقت الترجمة بإزالة تضمينات ملفات الترويسة الثقيلة ونقل إنشاءات القوالب المكلفة خارج ملفات الترويسة. #97893 (Raúl Marín).
- تقليل وقت ترجمة الدوال الحسابية وملفات الترويسة المرتبطة بها عبر تصغير مصفوفات توزيع القوالب وإزالة التضمينات الثقيلة. #98204 (Raúl Marín).
- استخدام
mongo-c-driver2.2.2. #98304 (Konstantin Bogdanov). - استخدام
postgresREL_18_3. #98306 (Konstantin Bogdanov). - تمكين jemalloc allocator في builds الخاصة بـ UBSan لتجنب تراكم RSS الناتج عن ضعف سلوك
glibc mallocفي استعادة الذاكرة. #98444 (Alexey Milovidov). - استخدام Rust v0 symbol mangling وإزالة الرموز الداخلية من مكتبة PRQL لتقليل تضخم أسماء الرموز الناتج عن مكتبات parser combinator. #98446 (Alexey Milovidov).
- إضافة مجموعة benchmark TPC-H وملف README الخاص بـ TPC-DS إلى
tests/benchmarks. #98495 (Raufs Dunamalijevs). - إضافة اختبارات صحة لجميع استعلامات TPC-DS البالغ عددها 99. #99204 (Raufs Dunamalijevs).
- إضافة اختبار تكامل يعيد إنتاج الخلل المتعلق بـ DDL CREATE TABLE + ALTER مع نسخة متماثلة غير متصلة (#44070)، مع تمييزه كإخفاق متوقع. #99259 (Raufs Dunamalijevs).
- دمج jemalloc مع البادئة
je_وإزالة استخدام--wrapالخاص بالمُرابط. #99342 (Azat Khuzhin).
إصدار ClickHouse 26.2 بتاريخ 2026-02-26. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصبحت إزالة التكرار مفعّلة افتراضيًا لجميع عمليات insert. في السابق، كانت غير مفعّلة لعمليات async inserts ولـ MVs، لكنها كانت مفعّلة لعمليات insert المتزامنة. الهدف هو توحيد القيم الافتراضية في كلتا طريقتَي insert. إذا كانت إزالة التكرار معطّلة صراحةً على الـ cluster لديك، فعليك ضبط
deduplicate_insert='backward_compatible_choice'صراحةً للحفاظ على السلوك السابق. وينطبق الأمر نفسه علىdeduplicate_blocks_in_dependent_materialized_views. #95970 (Sema Checherinda). - تم تحسين تنسيق تخزين الإحصاءات. أصبحت جميع الإحصاءات الآن تُخزَّن في ملف واحد. #93414 (Anton Popov). إذا لم تكن قد فعّلت إحصاءات الجدول صراحةً، فيمكنك تجاهل هذا البند.
- تقييد البيانات الوصفية داخل الذاكرة لـ S3(Azure)Queue. أُعيدت تسمية جداول النظام من
azure_queueإلىazure_queue_metadata_cacheومنsystem.s3queueإلىs3queue_metadata_cache. #95809 (Kseniia Sumarokova). - في السابق، كان تطبيق دالة على عمود
Variantيعيد قيم NULL بصمت عندما يكون النوع الفرعي للـ variant غير متوافق مع الدالة؛ أما الآن، فإنه يطرح استثناءً، ما قد يؤدي إلى تعطّل الاستعلامات التي كانت تعتمد على سلوك NULL الصامت. #95811 (Bharat Nallan). - أصبحت أعمدة
DATEمن PostgreSQL تُستنتج الآن على أنهاDate32في ClickHouse (في الإصدارات السابقة، كانت تُستنتج على أنهاDate، ما كان يؤدي إلى overflow للقيم الواقعة خارج نطاق ضيق). كما أصبح مسموحًا بإدراج قيمDate32مرة أخرى إلى PostgreSQL. يغلق هذا #73084. #95999 (Alexey Milovidov). - أصبحت دلالات الإعداد
do_not_merge_across_partitions_select_finalأوضح. في السابق، كان يمكن تفعيل هذه الميزة تلقائيًا عندما لا يكون الإعداد مضبوطًا صراحةً في ملفات config. وقد تسبب ذلك مرارًا في حدوث التباس، وللأسف أدى إلى بعض المشكلات في بيئات production. أما الآن، فأصبحت القواعد أبسط: يفعّلdo_not_merge_across_partitions_select_final=1هذه الوظيفة دون أي شرط. وإذا كانdo_not_merge_across_partitions_select_final=0، فسيُستخدم الوضع التلقائي فقط إذا كان الإعداد الجديدenable_automatic_decision_for_merging_across_partitions_for_final=1، ولن يُستخدم في غير ذلك. وللحفاظ على السلوك السابق قدر الإمكان، ضُبطت القيم الافتراضية علىdo_not_merge_across_partitions_select_final=0وenable_automatic_decision_for_merging_across_partitions_for_final=1. #96110 (Nikita Taranov). - عند إنشاء جدول S3 مع تحديد الأعمدة صراحةً، يتحقق ClickHouse الآن من أن أسماء تلك الأعمدة موجودة فعلًا في schema الخاصة بالملف البعيد. الاستعلامات التي كانت تعمل سابقًا رغم عدم تطابق أسماء الأعمدة ستفشل الآن عند إنشاء الجدول. يغلق هذا #96089. #96194 (Konstantin Vedernikov).
- يُحظر استخدام الاستعلامات الفرعية في ORDER BY وفي تعبيرات مفاتيح الجداول الأخرى. #96847 (Alexey Milovidov).
- أصبح
apply_row_policy_after_finalمفعّلًا افتراضيًا. في البداية، عندما كانت قيمةoptimize_move_to_prewhere_if_final=0، كان كلٌّ من ROW POLICY وPREWHERE يراعيان FINAL ويُطبَّقان بعد FINAL. لكن هذا السلوك تعطّل بسبب #87303، الذي تجاهلoptimize_move_to_prewhere_if_finalلمرشّح ROW POLICY. ولإصلاح ذلك، يفعّل طلب السحب هذا الإعدادapply_row_policy_after_finalالذي قُدِّم في #91065. ومع تفعيلapply_row_policy_after_final، سيواصل ROW POLICY مراعاة FINAL افتراضيًا كما كان سابقًا. ويُعد طلب السحب هذا تغييرًا غير متوافق لأنه يغيّر السلوك عندoptimize_move_to_prewhere_if_final=1. والآن، لجعل ROW POLICY يُطبَّق قبل FINAL، ينبغي استخدامapply_row_policy_after_finalبدلًا منoptimize_move_to_prewhere_if_final. #97279 (Nikolai Kochetov). - أصبح النوع
Dateالآن يُسلسَل باعتباره النوع الأصليdate32في Arrow ضمن تنسيقات Arrow/ArrowStream، بدلًا منuint16. وستتعرّف أدوات مثل PyArrow الآن على العمود بشكل صحيح باعتباره نوع تاريخ. ويمكن استعادة السلوك القديم باستخدام الإعدادoutput_format_arrow_date_as_uint16. ولا يزال دعم قراءة ملفات Arrow القديمة التي كانت تستخدمuint16لأعمدةDateمتاحًا. #96860 (Alexey Milovidov).
ميزة جديدة
- يمكن للمستخدمين الآن استخدام ClickStack (واجهة observability) مباشرةً من ClickHouse، وهو ما يفيد في debugging والتطوير المحلي. #96597 (Aaron Knudtson).
- دعم كلمات المرور لمرة واحدة المستندة إلى الوقت (TOTP) بوصفها طريقة authentication. #71273 (Vladimir Cherkasov).
- إضافة إعداد قاعدة البيانات
lazy_load_tables. عند تمكينه، لا تُحمَّل الجداول أثناء بدء تشغيل قاعدة البيانات — وبدلًا من ذلك، يُنشأStorageTableProxyخفيف الوزن، ثم يُنشأ table engine الفعلي عند أول وصول. #96283 (xiaohuanlin). - تمت إضافة الإعداد
input_format_max_block_wait_msلإخراج data blocks عند انتهاء المهلة، مع السماح بمعالجة البيانات المتبقية عند إغلاق HTTP connection بشكل غير متوقع. #94509 (Mostafa Mohamed Salah). - تكامل catalog لـ Google BigLake. هذا يُغلق #95339. #97104 (Konstantin Vedernikov).
- تمت إضافة system table
system.tokenizersالتي تعرض جميع أدوات tokenizer المتاحة. #96753 (Robert Schulze). - إضافة system table جديدة
system.user_defined_functionsلمراقبة loading status وconfiguration الخاصة بـ UDF. #90340 (Xu Jia). - إضافة table
system.jemalloc_statsالتي تعرض إحصاءات allocator الذاكرة jemalloc (عبرmalloc_stats_print) لتشخيص memory usage على الخوادم المبنية باستخدام jemalloc. كما تمت إضافة endpoint HTTP باسم/jemalloc.htmlعلى ClickHouse HTTP interface من أجل تصور تفاعلي لهذه الإحصاءات. #97077 (Antonio Andelic). - تمت إضافة table
system.jemalloc_profile_textلقراءة heap profiles الخاصة بـ jemalloc وتحليلها. ويتحكم الإعدادjemalloc_profile_text_output_formatفي output format (raw أو symbolized أو collapsed؛ والقيمة default هي collapsed). ويتحكمjemalloc_profile_text_symbolize_with_inlineفي resolution الخاصة بـ inline frame (عند تمكينه، تُدرج inline frames على حساب بطء symbolization؛ وعند تعطيله، يتم تخطيها للحصول على مخرجات أسرع). وبالنسبة إلى الصيغة collapsed، يتحكمjemalloc_profile_text_collapsed_use_countفي ما إذا كانت stacks تُوزن بحسب عدد التخصيصات الحية (true) أو البايتات الحية (false، وهي القيمة default). يسهّل ذلك profiling الذاكرة وتصور flame graph لملفات jemalloc heap profile. ويُصلح #93248. #97218 (Antonio Andelic). - إضافة الإعداد
default_dictionary_database، الذي يتيح لـ ClickHouse تحليل external dictionaries المشار إليها من دون محدد قاعدة بيانات ضمن قاعدة بيانات default محددة. وهذا يبسّط migration من القواميس العامة المعرّفة عبر XML إلى Dictionaries معرّفة عبر SQL لكل قاعدة بيانات، بما يسمح لاستعلامات القواميس الحالية (مثل dictGet(‘name’, …)) بالاستمرار في العمل من دون تعديل. #91412 (Dmitrii Plotnikov). - دعم auxiliary ZooKeeper لـ
DatabaseReplicated. #91683 (RinChanNOW). - تنفيذ table function جديدة باسم
primesوsystem table جديدةsystem.primesتحتوي على الأعداد الأولية بترتيب تصاعدي. يُغلق #90839. #92776 (Nihal Z. Miaji). - تدعم
async insertsالنصاب المتوازي (parallel quorum). وتتم مطابقة البيانات المُدرجة عبر النصاب. وإذا عُثر على بيانات مكررة، ينتظر الاستعلام حتى تتم أيضًا مطابقة البيانات المُدرجة سابقًا. #93356 (Sema Checherinda). - أُضيفت الدالتان
colorOKLABToSRGBوcolorSRGBToOKLABلتحويل القيمة من sRGB إلى OKLAB والعكس. #93361 (Pranav Tiwari). - أُضيف إعداد جديد هو
deduplicate_insertيتجاوزinsert_deduplicateوasync_insert_deduplicate. #94413 (Sema Checherinda). - يتيح إعداد الخادم
insert_deduplication_versionالترحيل إلى قيمة hash موحّدة لإزالة التكرار. #95409 (Sema Checherinda). - أُضيفت دالة hash باسم
xxh3_128. #96055 (Raúl Marín). - أُضيف الاستعلام
OPTIMIZE <table> DRY RUN PARTS <part names>لمحاكاة عمليات الدمج دون اعتماد الجزء الناتج. وقد يكون ذلك مفيدًا لأغراض الاختبار: التحقق من صحة الدمج في الإصدار الجديد، وإعادة إنتاج الأخطاء المرتبطة بالدمج بصورة حتمية، وقياس أداء الدمج بشكل موثوق. #96122 (Anton Popov). - أُضيف فحص جديد مفعّل افتراضيًا عبر الإعداد
check_named_collection_dependenciesلتجنّب حذف المجموعات المسمّاة المستخدمة بواسطة الجداول. #96181 (Pablo Marcos). - أُضيفت
system.fail_pointsلفحص نقاط الإخفاق الموجودة في الخادم وما إذا كانت مفعّلة أم لا. وسيساعد ذلك على أتمتة الاختبارات. #96762 (Pedro Ferreira). - أُضيف التحكم في الوصول المستند إلى الأدوار إلى Glue catalog. استخدم الإعداد
aws_role_arn، ويمكن استخدامaws_role_session_nameاختياريًا. #90825 (Antonio Andelic). - أُضيف إعداد
add_minmax_index_for_temporal_columnsالذي ينشئ، عند تفعيله، MinMax indexes تلقائيًا لجميع الأعمدةDateوDate32وTimeوTime64وDateTimeوDateTime64. #93355 (Michael Jarrett). - أُضيف دعم الأسماء المستعارة الموسّعة للجداول في JOINs (استعلامات مثل
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). ويغلق #95131. #95331 (Yarik Briukhovetskyi). - أُضيف دعم
ALTER TABLE RENAME COLUMNلجداول Iceberg. في السابق، كان الدعم يقتصر علىADD COLUMN, DROP COLUMN, and MODIFY COLUMNفقط. #97455 (murphy-4o).
ميزة تجريبية
- أصبح الفهرس النصي الآن متاحًا للاستخدام العام (GA). #96794 (Robert Schulze).
- أصبح نوع البيانات
QBitلتخزين المتجهات المكمّمة والمعبأة على مستوى البت (المستخدم في البحث التقريبي عن أقرب الجيران) متاحًا للاستخدام العام، ولم يعد يتطلب تفعيل إعداد تجريبي. #95358 (Raufs Dunamalijevs). - يمكن الآن لميزة vector search في ClickHouse استخدام النسخ المتماثلة في العنقود لتوزيع الحمل وعمليات البحث عبر أجزاء الفهرس المتجهي. ويتيح ذلك لـ ClickHouse دعم فهارس متجهية كبيرة تتجاوز سعة ذاكرة جهاز افتراضي واحد. #95876 (Shankar Iyer).
- إضافة server-side AST fuzzer، مع التحكم فيه عبر الإعدادين
ast_fuzzer_runsوast_fuzzer_any_query. وعند تفعيله، يُجري الخادم تحويرات عشوائية على كل استعلام بعد تنفيذه المعتاد، مع تجاهل النتائج. #97568 (Alexey Milovidov). - إضافة الدالة
iifإلى لهجة KQL التجريبية. #94790 (happyso). - يراعي استنتاج المخطط الآن
allow_experimental_nullable_tuple_type. وعند تفعيله، فإنه يسمح بأن تكون أنواعTupleالمستنتجة من النوعNullable(Tuple(...))، بحيث يمكن أن تصبح الكائنات المتداخلة المفقودةNULLبدلًا منTupleمكوَّن من عناصرNULL. #95525 (Nihal Z. Miaji). - أصبح الإعداد
use_statistics_cacheمفعّلًا افتراضيًا الآن، بحيث تُخزَّن إحصاءات الأعمدة مؤقتًا في الذاكرة لتسريع تحسين الاستعلامات دون الحاجة إلى إعادة تحميلها من كل جزء بيانات. #95950 (Han Fei).
تحسين الأداء
- السماح باستخدام أي expression حتمي في المفتاح الأساسي لتخطي البيانات (مثل
ORDER BY cityHash64(user_id)/ORDER BY length(user_id)). بالنسبة إلى التعبيرات الحتمية، يمكن لـ ClickHouse تطبيق expression على ثوابت query واستخدام النتيجة في index المفتاح الأساسي مع predicates مثل=وINوhas. وإذا كان expression أيضًا تقابليًا (injective) (مثلORDER BY hex(p)أوORDER BY reverse(tuple(reverse(p), hex(p))))، فيمكن استخدام index بفعالية مع الصيغ المنفية:!=وNOT INوNOT has. يُغلق #10685. يُغلق #82161. #92952 (Nihal Z. Miaji). - تحسين format تخزين الإحصاءات. أصبحت جميع الإحصاءات الآن مخزنة في ملف واحد. #93414 (Anton Popov).
- السماح بالقراءة المتوازية لمحركات/دوال الجداول البعيدة في filesystem cache. #71781 (Kseniia Sumarokova).
- السماح باستخدام userspace page cache مع الملفات المحلية ودوال الجداول الخاصة بـ object storage. #77874 (Michael Kolupaev).
- تجنّب عمليات
memcpyغير الضرورية في userspace page cache. #77884 (Michael Kolupaev). - أصبحت القيمة الافتراضية لـ
concurrent_threads_schedulerالآنmax_min_fairبدلًا منfair_round_robin. يحسّن ذلك العدالة تحت الأحمال العالية عبر إعطاء الأولوية للاستعلامات ذات الخانات المخصّصة الأقل، بحيث لا تتأثر الاستعلامات القصيرة سلبًا بالاستعلامات طويلة التشغيل. #95300 (Sergei Trifonov). - إذا كان استعلام
FINALيستخدم شرط المفتاح الأساسي للتصفية ثم تتبعه skip indexes لشروط أخرى، فستتحقق خطوة المعالجةPrimaryKeyExpandالآن فقط من تقاطع نطاقات المفتاح الأساسي التي جرى اختيارها مبدئيًا. #94903 (Shankar Iyer). - عند استخدام parallel replicas مع table functions مثل
s3(...)، أصبحت الاستعلامات التي تحتوي على subquery واحد يغلّف table function تُوزَّع الآن تلقائيًا بالتوازي عبر replicas، بينما كان التوزيع المتوازي سابقًا يقتصر على المراجع المباشرة إلى table functions فقط. يُغلق #92264. #96332 (phulv94). - تمكين تقسيم ملفات البيانات وملفات النظام داخل cache إلى segments منفصلة. #87834 (MikhailBurdukov).
- تسريع بعض عمليات hash join من خلال تنفيذ التوجيه الديناميكي لـ
ColumnVector::replicate. #79573 (Raúl Marín). - تحسين الأداء لـ parallel hash join في حالات predicates المعقدة. سابقًا، كانت الصفوف غير المنضمّة تُعالَج في thread واحد، وهو ما لم يكن مثاليًا؛ وفكرة هذا التحسين هي موازاة معالجة الصفوف غير المنضمّة عبر عدة threads. يمكن التحكم به عبر الإعداد
parallel_non_joined_rows_processing. وهو مُمكَّن افتراضيًا. #92068 (Yarik Briukhovetskyi). - تحسين طفيف في parsing الخاص بـ JSON type. #93614 (Pavel Kruglov).
- تحسين البصمة الذاكرية لـ AST. يكون هذا التحسين مفيدًا لأن الحقول لا تُستخدم عند عدم استخدام التمييز البصري، وعند عدم وجود parsing لعبارات VALUES. #93974 (Ilya Yatsishin).
- تحسين استهلاك الذاكرة لكائنات AST من النوع Tuple المسمّاة. توضع أسماء الأعمدة كسلاسل نصية داخل كائن tuple بدلًا من الاحتفاظ بها في عقد AST حرفية عامة. #94704 (Ilya Yatsishin).
- جرى تحسين إزالة الافتراضية بإضافة خيارات ربط إضافية. #94737 (Nikita Taranov).
- تحسين أداء استنساخ replica لجداول ReplicatedMergeTree التي تحتوي على parts كثيرة من خلال batching لطلبات ZooKeeper. #94847 (c-end).
- عندما كانت خطوة القراءة تحتوي مسبقًا على مرشحات PREWHERE، لم يكن من الممكن إضافة مرشح جديد. يؤخر هذا التغيير تحسين PREWHERE إلى ما بعد تحسين runtime filter في JOIN، بحيث يمكن أيضًا دفع runtime filters إلى PREWHERE. #95838 (Alexander Gololobov).
- تسريع ضغط codec
T64باستخدام الإرسال الديناميكي على x86. #95881 (Raúl Marín). - تسريع
uniqعلى الأنواع الرقمية عبر batching لعمليات insert عند الإمكان (Not null، وليس -If، وبدون GROUP BY، وبدون IPv6 أو String). #95904 (Raúl Marín). - تحسينات منخفضة المستوى في Keeper: تبيّن أن
ZooKeeper::observeOperationsيستحوذ على أكثر من 20% من استهلاك CPU لخيط الاستقبال في ZooKeeper. ويعالج هذا التغيير ذلك عبر: 1. استخدامCityHash64بدلًا منSipHashفيAggregatedZooKeeperLog::statsلأنه أسرع بأكثر من 10 مرات. 2. استخدامstd::array<std::atomic<UInt32>, N>بدلًا منstd::unordered_mapوstd::mutexفيCoordination::ErrorCounter. #95962 (Miсhael Stetsyuk). - إزالة المحاذاة إلى 64 بايت لـ
ProfileEvents::Counterلتوفير الذاكرة. #96097 (Azat Khuzhin). - تحسين الذاكرة: تقليص حجم البنية
CachedOnDiskReadBufferFromFileبمقدار 50 مرة. #96098 (Azat Khuzhin). - عدم نسخ البيانات القديمة عند تغيير حجم hash table إذا كانت فارغة. #96180 (Raúl Marín).
- دعم JOIN runtime filters لعمليات
RIGHT OUTERJOIN. #96183 (Hechem Selmi). - أصبح التحسين
enable_join_runtime_filtersمفعّلًا افتراضيًا الآن. #89314 (Alexey Milovidov). - سابقًا، كان تحسين direct read للفهرس النصي يُطبَّق فقط عندما كانت جميع parts تحتوي على text index من نوع materialized. يضيف هذا PR دعمًا جزئيًا: إذا كانت بعض parts تحتوي على text index من نوع materialized، فستستخدمها تلك parts، بينما ستعود parts التي لا تحتوي على text index من نوع materialized إلى تنفيذ filter expression الأصلية. #96411 (Anton Popov).
- أُضيفت indexes ثانوية من نوع
minmaxعلى أعمدة الوقت، وindexes من نوعbloom_filterعلى عمودَيquery_idوinitial_query_idفي log tables الخاصة بالنظام لتسريع التصفية. #96712 (Alexey Milovidov). - يُطبَّق الآن تحسين
lazy materializationعلى جميع فروع استعلامUNION ALL، وليس على الفرع الأول فقط. وستستفيد الاستعلامات التي تجمع بين قراءات متعددة مرتبة ومقيّدة من جداولMergeTreeمختلفة عبرUNION ALLمن تأجيل قراءة الأعمدة في كل فرع، مما يقلّل من عمليات I/O. #96832 (Federico Ginosa). - تحسين حساب
minmax skip indexأثناء INSERT من خلال إزالة نسخة بيانات غير ضرورية وتفعيل الحساب المتجهي لقيم min/max للأعمدة الرقمية. #97392 (Raúl Marín). - أصبح
DeltaLakeفي Storage يأخذ نتيجةcount()من البيانات الوصفية لـ delta lake ويعرض إحصاءات الجدول الصحيحة في system.tables (إجمالي البايتات/الصفوف). #96190 (Kseniia Sumarokova). - تُزال الأعمدة غير المستخدمة أيضًا من خطوة القراءة عند القراءة من MergeTree. ويكون ذلك مفيدًا بشكل خاص عندما يُدفَع عامل التصفية إلى
PREWHERE. #89982 (János Benjamin Antal). - تحسين معالجة استعلام
SHOW TABLESمن خلال جلب أسماء الجداول فقط، وتحسين getLightweightTablesIterator ليُرجع بنية تحتوي على أسماء الجداول فقط. يحلّ #93835. #94467 (Smita Kulkarni). - تحسين
assumeNotNullوcoalesceوifNullلتمكين تقليم المفتاح الأساسي وskip index لشرطيات النطاق عندما تكون أعمدة المفتاح مغلّفة بهذه الدوال. يغلق #94689. #94754 (Nihal Z. Miaji). - إضافة الامتدادين with_data وwith_stat إلى طلب getChildren في Keeper. يتيح ذلك جلب ليس فقط قائمة العناصر الأبناء، بل أيضًا
statو/أوdataالخاصة بها في عملية واحدة. #94826 (Nikolay Degterinsky). - يُجرى تحليل الفهرس مرة واحدة فقط (في معظم الحالات)، بغض النظر عمّا إذا كان التنفيذ سينتهي إلى خطة محلية أو خطة تستخدم parallel replicas. #94854 (Nikita Taranov).
- السماح بتمكين distributed index analysis استنادًا إلى عدد الأجزاء (
distributed_index_analysis_min_parts_to_activate) وحجم الفهارس (distributed_index_analysis_min_indexes_size_to_activate). #95216 (Azat Khuzhin). - تمكين تحسين PREWHERE لجداول Iceberg. #95476 (Konstantin Vedernikov).
- تقليل استهلاك الذاكرة لبعض أصناف AST. #95514 (Raúl Marín).
- تقييد عدد تدفقات pipeline المُولَّدة عند تمكين
split_intersecting_parts_ranges_into_layers. يساعد ذلك على تجنب الاستهلاك المفرط للذاكرة. #96478 (Nikita Taranov). - تنفيذ تحسين المجموعات المتكافئة لعمليات joins المتعددة. تستفيد الاستعلامات التي تتضمن عدة عمليات
INNER JOINمتتالية الآن من تحسين أفضل لـ filter pushdown. وعندما تُربط الجداول باستخدام أعمدة متكافئة (مثلًا،t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10)، تُدفَع عوامل التصفية المطبقة على أي جدول في السلسلة تلقائيًا إلى جميع الجداول. يغلق #96550. #96596 (Vladimir Cherkasov). - تحسين فحص البيانات الوصفية لـ delta lake. يستخدم تغييرات من طلب السحب PR في delta-kernel https://github.com/delta-io/delta-kernel-rs/pull/1827. #96686 (Kseniia Sumarokova).
- في قاعدة البيانات Replicated، لا تُحدِّث العنقود المخزَّن مؤقتًا مع كل استعلام صوري. #96897 (Tuan Pham Anh).
- استخدم فهرس المفتاح الأساسي عند التصفية باستخدام
startsWithUTF8إذا كانت البادئة تحتوي فقط على محارف ASCII. #97055 (vkcku).
تحسينات
- إضافة تتبّع OpenTelemetry لطلبات Keeper. #91332 (Miсhael Stetsyuk).
- خيارات configuration جديدة:
logger.startup_console_levelوlogger.shutdown_console_levelللسماح بتجاوز مستوى السجل الخاص بالـ console أثناء بدء تشغيل ClickHouse وإيقافه، على التوالي. #95919 (Garrett Thomas). - مراعاة التجاوزات عبر سطر الأوامر عند إعادة تحميل configuration. يُغلق #80294. #80295 (Alexey Milovidov).
- السماح بتجاوزات key-value لـ parameters الخاصة بـ named collection في table function
mongodb. #89616 (vanchaklar). - يعمل الآن تحسين read-in-order لجداول Iceberg مع دوال فرز معقّدة مثل
icebergBucketوicebergTruncate، وليس فقط مع مراجع column البسيطة. #90256 (Konstantin Vedernikov). - إضافة column جديد باسم parts_postpone_reasons في system.mutations لتحسين التشخيص، ويعرض أسباب تأجيل parts. #92206 (Shaohua Wang).
- تتبّع التغييرات في عدد الصفوف المطلوب قراءتها (بسبب inserts/deletes أو استخدام query condition cache) في
DataflowStatisticsCache. #93636 (Nikita Taranov). - دعم query SYSTEM RESET DDL WORKER [ON CLUSTER]. يطلب هذا إعادة تعيين state الخاص بـ DDLWorker في thread الرئيسي له. ويفيد ذلك في refresh حالة replica النشط عند تحديث معرّفات المضيفين. #93780 (Tuan Pham Anh).
- دعم
mutation_idsفيsystem.part_logلنوعي الحدثMUTATE_PARTوMUTATE_PART_START. #93811 (Shaohua Wang). - يمكن الآن إعداد عمليات Background (Mutate و Merge) بشكل مستقل عبر profile ‘background’. سابقًا، كانت هذه العمليات تشترك في Settings مع queries العادية عبر profile ‘default’. #93905 (Arsen Muk).
- إضافة مزيد من المعلومات إلى
system.crash_log. #94112 #95857 (Miсhael Stetsyuk). - تمت إضافة metric جديد باسم
QueryNonInternalلتتبّع عدد queries غير الداخلية الجاري تنفيذها. يُعرَض هذا metric باسمClickHouseMetrics_QueryNonInternalويساعد operators على مراقبة Concurrency الخاصة بالـ query مقارنةً بالحدmax_concurrent_queries، الذي ينطبق فقط على queries غير الداخلية. #94284 (Ashwath Singh). - دعم جمع إحصاءات بايتات الإدخال لـ columns من compact parts في
RuntimeDataflowStatisticsCacheUpdater. #94626 (Nikita Taranov). - إضافة check لاكتشاف سوء إعداد Keeper الذي يؤدي إلى فشل تجميع cluster. يُغلق #60932. #94682 (Konstantin Bogdanov).
- تحسين deserialization لبادئات JSON أثناء loading الخاص بالـ part. #94848 (Pavel Kruglov).
- إعادة تنظيم مسار الكتابة باستخدام مسار INSERT الكامل، مما يؤدي إلى تشغيل العروض المادية على الجدول الهدف. #94890 (Kai Zhu).
- استخدام تحسينات خطة البحث عن التشابه المتجهي فقط إذا كان الفهرس موجودًا لعمود البحث. #94998 (Eduard Karacharov).
- التحقق من حد الذاكرة الإجمالي قبل مصادقة المستخدم، وإصدار
(total) memory limit exceededإذا كان الحد الإجمالي أكبر من المسموح به. #95003 (Nikolai Kochetov). - إضافة خيار الضبط
throw_on_unmatched_row_policiesالذي، عند تمكينه، يطلق استثناءً إذا نفّذ مستخدم استعلامًا على جدول لديه سياسات صفوف ولكن لا تنطبق أيٌّ منها على ذلك المستخدم — مما يمنع السلوك الملتبس المتمثل في إرجاع جميع الصفوف بسبب سوء ضبط التحكم في الوصول. #95014 (Vitaly Baranov). - تحديث رموز وصول S3 ديناميكيًا في الاستعلامات الطويلة مع Unity Catalog. ويغلق هذا #93981. #95069 (Konstantin Vedernikov).
- تعطيل اضمحلال الصفحات المتسخة في jemalloc إذا كان ClickHouse تحت ضغط ذاكرة مستمر لمدة
memory_worker_decay_adjustment_period_msميلي ثانية. وإعادة تمكين اضمحلال الصفحات المتسخة في jemalloc إذا كان ClickHouse يعمل في ظروف طبيعية للمدة الزمنية نفسها. #95145 (Antonio Andelic). - دعم ZooKeeper الإضافي في S3Queue باستخدام الإعداد
keeper_pathمن s3Queue. #95203 (Diego Nieto). - مراعاة
max_parts_to_merge_at_onceفي عمليات دمج الأجزاء الخاصة بحذف TTL. #95315 (Kseniia Sumarokova). - إضافة
connection_addressوconnection_portإلى query_log لعكس الاتصال الفعلي (addressوportيُستبدلان عند الاتصال عبر proxy وauth_use_forwarded_address=1). #95471 (Yakov Olkhovskiy). - إصلاح احتساب الذاكرة غير الصحيح لذاكرة التخزين المؤقت لشروط الاستعلام. وكانت المشكلة الأساسية أنه لم يأخذ في الحسبان مفتاح ذاكرة التخزين المؤقت المكوَّن من عدة سلاسل نصية (مثل part_name ومعرّف الجدول وشرط SQL بالكامل). #95478 (Nikita Mikhaylov).
- سيتيح الخادم الذي يبدأ باستخدام التهيئة المضمنة التعامل مع المستخدمين والمنح، مع حفظها في الدليل
access، كما في التهيئة العادية. وهذا يحسّن الاختبار. كما جرى تمكين جميع access_control_improvements في التهيئة المضمنة وفي clickhouse-local. #95481 (Alexey Milovidov). - تحسين رسائل خطأ المصادقة الخاصة بـ S3 لتتضمن تلميحًا للتحقق من بيانات الاعتماد عند رفض الوصول. #95648 (Gerald Latkovic).
- تمكين ذاكرة التخزين المؤقت للإحصاءات وضبط فترة تحديثها على 300 ثانية. #95841 (Han Fei).
- إضافة اسم المكوّن إلى
system.aggregated_zookeeper_log. #95882 (Antonio Andelic). - تخطّي القراءات من object storage عند الاستعلام عن جداول
DeltaLakeمنsystem.tables. #95899 (Antonio Andelic). - تفعيل
enable_max_bytes_limit_for_min_age_to_force_mergeافتراضيًا إذا كانت قيمة الإعدادcompatibilityهي26.2أو أعلى. #95917 (Christoph Wurm). - أصبح Delta Lake متاحًا الآن على MacOS. إغلاق #95979. #95985 (Alexey Milovidov).
- في الإصدارات السابقة، عند دمج تعبيرات ALTER المتعارضة مع UPDATE وRENAME COLUMN، كان يُطرَح خطأ منطقي بدلًا من استثناء مناسب. إغلاق #70678. #96022 (Alexey Milovidov).
- تحسين مخرجات المساعدة لجميع تطبيقات ClickHouse وإضافة الخيار
--no-sudoمع بعض الإصلاحات. وهذا استكمال لـ #58244 من Ilya Yatsishin. #96025 (Alexey Milovidov). - إضافة alias
distanceCosineلـcosineDistanceلأن جميع دوال المسافة الأخرى لديها بالفعل alias بهذا الشكل. #96065 (Raufs Dunamalijevs). - إضافة دعم لامتداد
with_dataفي Keeper لتحسين جلب الجداول في Database Replicated. #96090 (Nikolay Degterinsky). - تحديث chdig إلى v26.2.1 (ميزات جديدة ودعم MacOS). #96113 (Azat Khuzhin).
- تحسين filter pushdown لـ
numbersوprimes. يمكن لـ ClickHouse الآن اشتقاق حدود قيم متحفظة من شروطWHEREعندما يتعذر اشتقاق حدود دقيقة، وتقييد توليد التسلسل بناءً على ذلك (على سبيل المثال، بالنسبة إلىWHERE number % 5 < 2 AND number > 100 AND number < 300، لن يولّد ClickHouse إلا الأرقام بين 100 و300، ثم يطبّق predicate)، ما يتجنب عمليات المسح غير المحدودة. إغلاق #84853. إغلاق #93913. #96115 (Nihal Z. Miaji). - كان Formatter يضع SELECT سابقًا بين قوسين عند وجود clause
COMMENTلإزالة اللبس في parsing. وبدلًا من ذلك، يُخرِجCOMMENTقبلAS SELECT، مما يزيل هذا اللبس من دون أقواس. #96293 (Alexey Milovidov). - أصبح إعداد
allow_impersonate_userفيconfigموجودًا الآن ضمن القسمaccess_control_improvementsبدلًا من كونه server setting مستقلًا. #96451 (Vitaly Baranov). - جعل إعداد
core_dump.size_limitفي configuration قابلًا لإعادة التحميل الفوري، لتجنب الحاجة إلى إعادة تشغيل server حتى تدخل تغييرات configuration حيّز التنفيذ. #96524 (Miсhael Stetsyuk). - تحسين قابلية التشغيل البيني بين Profiler المعالج وProfiler الزمن الحقيقي مع مهلات socket. #96601 (Sergei Trifonov).
- منع عودة البيانات المحذوفة للظهور إذا جرى تشغيل ADD COLUMN بسرعة بعد تنفيذ mutation DROP COLUMN. #96713 (Alexey Milovidov).
- تغيير نوع
function_idفيsystem.instrumentationمن LowCardinality(Int32) إلى Int32. #96726 (Copilot). - سيحترم الانتظار المتزامن لعمليات mutation إلغاء الاستعلام والمهل الزمنية. #96756 (Alexey Milovidov).
- إضافة أمر النظام
SYSTEM RELOAD DELTA KERNEL TRACING <level>لإتاحة تغيير مستوى logging الخاص بـ delta-kernel، وهو ما قد يكون مفيدًا في استكشاف الأخطاء وإصلاحها. #96763 (Kseniia Sumarokova). - تُطبَّق التصفية حسب عائلة عناوين IP، أي إعدادات
dns_allow_resolve_names_to_ipv4/ipv6، حتى إذا كانت DNS cache معطلة. #96810 (c-end). - تحسين إمكانيات introspection في jemalloc. #96840 (Azat Khuzhin).
- إصلاح تسبُّب واجهة الويب
/playفي ظهور الخطأQUERY_CACHE_USED_WITH_SYSTEM_TABLEعند الاستعلام عن جداول النظام. #96869 (Alexey Milovidov). - تحسين واجهة الويب: تغيير favicon للإشارة إلى حالة الاستعلام قيد التنفيذ؛ وعرض الأخطاء من الاستعلامات المساعدة (تحميل قواعد البيانات والجداول) بدلًا من تجاهلها بصمت. يُغلق #85055. #96883 (Alexey Milovidov).
- جعل اللوحة اليسرى في واجهة
/playقابلة للنقر لإظهار قائمة قواعد البيانات أو إخفائها. #96884 (Alexey Milovidov). - أصبح
DROP DATABASEالآن يحذف الجداول بترتيب عكسي للتبعيات، مما يحسّن السلامة عند التعطل عندما تحتوي قاعدة البيانات على جداول لها تبعيات تحميل (مثل جداولDistributedالتي تستخدمjoinGet). #97057 (Alexey Milovidov). - ترقية yaml-cpp لمنع تجاوز YAML غير الصالح. #97333 (Azat Khuzhin).
- إظهار مؤشر تحميل في الشريط الجانبي لـ
play.htmlأثناء جلب الجداول. #97531 (Alexey Milovidov). - إضافة زر للنسخ إلى الحافظة لنتائج الاستعلام الخام في واجهة الويب المضمنة (play.html). #97532 (Alexey Milovidov).
- إصلاح مُموِّه الاستعلامات (
clickhouse-format --obfuscate) لإنتاج SQL قابلة للتحليل في مزيد من الحالات. #97584 (Alexey Milovidov).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- بعد عمليات ALTER الخاصة بالبيانات الوصفية فقط، مثل توسيع عناصر Enums، قد يؤدي تحسين التجميع باستخدام projection إلى حدوث استثناء. #84143 (Alexey Milovidov).
- تستخدم materialized views الآن قاعدة البيانات التي أُنشئت فيها كسياق تنفيذ، ما يعني الآتي: - يمكن الاستغناء عن تحديد قاعدة البيانات صراحةً في الأسماء المشار إليها في استعلام select الخاص بالعرض - إذا لم يُحدَّد اسم قاعدة البيانات صراحةً، فسيُفترض استخدام قاعدة البيانات نفسها التي أُنشئ فيها materialized view. #88193 (Dmitry Kovalev).
- إصلاح استبدال query parameter في authentication methods الخاصة بـ CREATE USER عند استخدام ON CLUSTER. إذ لم تكن query parameters في authentication methods (مثل password) تُستبدل، مما كان يتسبب في ظهور أخطاء UNKNOWN_QUERY_PARAMETER على العقد البعيدة. #92777 (xiaohuanlin).
- إصلاح حالات عدم الاتساق في index analysis الخاص بـ text index للدوال
hasوmapContainsKeyوmapContainsValue. في السابق، كان يمكن أن تُرجع queries التي تستخدم هذه الدوال نتائج مختلفة بحسب ما إذا كان expression قد قُيِّم باستخدام text index أو بدونه. #93578 (Anton Popov). - إصلاح crash عند Attach table إلى قاعدة بيانات
MaterializedPostgreSQLإذا كانتdropReplicationSlotthrows أثناء فك تكدس الاستدعاءات. #96871 (Alexey Milovidov). - كان من الممكن أن تتسبب backups في crash للخادم عند إجراء عدد كبير من backups concurrent تتعارض على الملفات نفسها. #93659 (Alexey Milovidov).
- إصلاح queries التي تستخدم parallel replicas وJOIN مع table غير MT. يغلق #92056. #93902 (Igor Nikonov).
- إصلاح مشكلة كانت تؤدي إلى أن columns في Iceberg التي تحتوي أسماؤها على نقطة تُرجع NULL باعتبارها values. #94335 (Mikhail Koviazin).
- إصلاح التعامل مع strings بترميز UTF8 في
stringJaccardIndexUTF8وتحسين الأداء. #94613 (Joanna Hulboj). - إصلاح حالات overflow المحتملة في
WITH FILL STALENESS(التي قد تؤدي إلى UB و/أو حلقات لا نهائية). وإصلاح احتمال حدوث حلقة لا نهائية بسبب القفزات الكبيرة. وإضافة دعم analyzer القديم (غالبًا لاختبارات stress). #94663 (Azat Khuzhin). - إصلاح احتمال تعليق distributed queries عندما تُحل hostnames إلى عدة عناوين ويتجمد replica بعيد. #94726 (c-end).
- إصلاح نتيجة غير صحيحة عند joining عدة table expressions، عندما يكون leftmost table expression عبارة عن table function من نوع
-Cluster. يحل #89996. #94748 (Konstantin Bogdanov). - إصلاح pruning غير الصحيح لكل من primary key وskip index بالنسبة إلى predicates التي تتضمن
toWeekوtoYearWeekوtoStartOfWeekوtoLastDayOfWeekوtoDayOfWeek، مع إصلاح الاستثناءات في بعض هذه الدوال للاستعلامات الصحيحة التي تستخدمLowCardinality(String). #94816 (Nihal Z. Miaji). - إزالة تجاوز التحقق من الأذونات دون داعٍ في استعلامات
ATTACHالخاصة بعرض يستخدم SQL Security. يمنع هذا احتمال تصعيد الامتيازات عندما يقوم مستخدم بإرفاق عرض معdefinerمن دون التحقق من صلاحيات الوصول المطلوبة. #94865 (pufit). - إصلاح تعطل أثناء بدء تشغيل
ReplicatedMergeTreeناتج عن إزالة متزامنة لأدلةdelete_tmp_*. #94892 (myeongjun). - إصلاح فقدان معلومات deduplication عند تنفيذ
INSERTفي جداول Iceberg مع materialized views، مما كان يتسبب في حدوث استثناء. #94938 (Daniil Ivanik). - إصلاح خلل كان يؤدي إلى أن
SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME>يحذف cache بالكامل على مستوى cluster. #94978 (Rory Crispin). - الحفاظ على index granularity الثابتة (use_const_adaptive_granularity) بعد عمليات Vertical merge (الإصدار v2 مع إصلاح لـ Nested، وبشكل عام). #95013 (Azat Khuzhin).
- إصلاح race في filesystem cache في الإصدار 26.1 بعد [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764). #95042 (Kseniia Sumarokova).
- إصلاح إلغاء table function postgresql() عبر KILL QUERY واستعلام الإلغاء (Ctrl+C) في clickhouse-client. #95136 (Roman Vasin).
- إصلاح استنتاج الأنواع للأعمدة المؤهلة من source tables عند استخدام عدة joins مع عبارة
USING. سابقًا، كانت الـ joins اللاحقة تحدّث types الخاصة بأعمدة المصدر الأساسية بشكل غير صحيح إلى common supertype حتى عندما لا يكون column مشاركًا في ذلك join (على سبيل المثال، فيSELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a)، فإن column t2.aيُستخدم فقط في join الأول، لذلك يجب أن يكون نوعه هو supertype لـt1.aوt2.aمع استبعادt3.a). وقد يؤدي ذلك إلى أخطاء منطقية أو أعطال عندما تتوقع الدوال column types تختلف عما يظهر فعليًا في Execution Plan. #95157 (Vladimir Cherkasov). - تنفيذ تحويل الأعمدة مرة واحدة فقط أثناء جلب محتوى قائمة manifest .avro والملفات. #95164 (Daniil Ivanik).
- إصلاح الحساب غير الصحيح لأحجام JSON column، والذي قد يؤدي إلى استخدام مفرط للذاكرة أو column statistics غير صحيحة. #95207 (Azat Khuzhin).
- إصلاح احتساب الذاكرة غير الدقيق عند تطبيق patch parts كبيرة بعد lightweight updates. سابقًا، كان تطبيق الرقع الكبيرة قد يتسبب في استخدام مفرط للذاكرة، وينتج عنه إنهاء server process بواسطة OOM killer. #95231 (Anton Popov).
- إصلاح سلوك غير معرّف كان قد يتسبب في نتائج غير صحيحة أو استثناء عند رجوع distributed query مع
max_parallel_replicasإلى replica محلية أثناء index analysis. #95263 (Azat Khuzhin). - إصلاح aggregation للأعمدة المتناثرة مع
sumوtimeseries عندما يكونgroup_by_overflow_modeمضبوطًا علىany. #95301 (Mikhail Koviazin). - إصلاح مشكلة موثوقية في سياسة القرص
plain_rewritable، إذ كان من الممكن أن يؤدي خطأ في الشبكة أثناء فك ارتباط ملف بيانات وصفية إلى ترك وحدة التخزين في حالة غير متسقة. #95302 (Mikhail Artemenko). - استبدال Date بـ Date32 في Iceberg. #95322 (Konstantin Vedernikov).
- سيُخفى الآن وسيط password في table function
redisضمن السجلات وجداول النظام (مثل:query_log). #95325 (János Benjamin Antal). - إصلاح خطأ كان يسمح بحذف الجداول أو تعديلها بينما كان distributed query لا يزال قيد التنفيذ عليها، مما قد يؤدي إلى استثناءات أو نتائج غير صحيحة. #95356 (Azat Khuzhin).
- إصلاح خطأ منطقي في بعض الحالات عند استخدام
LIMIT/OFFSETبقيم سالبة في distributed queries. #95357 (Nihal Z. Miaji). - إصلاح خطأ كان يتسبب في أن يطلب clickhouse-client كلمة المرور مرتين عند الاتصال باستخدام ssh. #95372 (Isak Ellmer).
- إصلاح حالة data race في وحدة التخزين S3(Azure)Queue. #95385 (Kseniia Sumarokova).
- إصلاح خطأ في مرشح prewhere تسببت فيه تعبيرات lambda داخل prewhere. #95395 (Xiaozhe Yu).
- إصلاح
optimize_syntax_fuse_functionsبحيث لا يعيد Rewritesum/count/avgإلىsumCount()عندما يكون وسيط aggregate من النوعNullable. يغلق #95390. #95441 (Nihal Z. Miaji). - تجنب احتمال حدوث crash في distributed queries عند الإلغاء. #95466 (Aleksandr Musorin).
- إصلاح deduplication للبث من محرك S3(Azure)Queue. #95467 (Kseniia Sumarokova).
- إصلاح تحديث row policies المعيّنة للمستخدم الأولي في distributed queries. #95469 (Vitaly Baranov).
- إصلاح التحقق من الأقراص المشفرة فوق plain_rewritable (يُصلح احتمال ظهور
It is not possible to register multiple plain-rewritable disks with the same object storage prefix). #95470 (Azat Khuzhin). - كانت table function
mergeTreeProjectionتفتقر إلى تحقق من الوصول، مما أتاح للمستخدمين الذين لا يملكون إذن SELECT على جدول (لكن لديهم أذونات table functions) قراءة البيانات من projections الخاصة به. يضيف هذا الإصلاح تحقق الوصول نفسه الموجود بالفعل فيmergeTreeIndexوmergeTreeAnalyzeIndexes. #95480 (Alexey Milovidov). - إصلاح احتمال حدوث خطأ منطقي أثناء قراءة subcolumn الحجم من dynamic subcolumns لأنواع Dynamic/JSON. #95573 (Pavel Kruglov).
- إصلاح تراجع في النسخ المتماثل بدون نسخ (التجريبي) أُدخل في #94262، حيث كان يمكن حذف الأجزاء المشتركة قبل أن تنتهي النسخ المتماثلة الأخرى من جلبها. #95597 (filimonov).
- إصلاح تعطل أثناء تطبيق
tupleElementعلى Arrays من JSON. يُغلق #95581. #95647 (Pavel Kruglov). - إصلاح استثناء خطأ منطقي عند استخدام مُطابِق (
*) داخل دالة لامبدا ضمن عبارة VALUES في JOIN مع USING. يُغلق #93675. #95661 (Vladimir Cherkasov). - إصلاح الخطأ المنطقي
There was an error: Cannot obtain error messageعند انتظار distributed DDL وحذف قاعدة بيانات Replicated بالتزامن مع ذلك. يُصلح #95539. #95664 (Alexander Tokmakov). - إصلاح إرجاع الدالة
INنتائج غير صحيحة مع قيمNULLعندما يكونtransform_null_inمُمكّنًا. يُغلق #65776. #95674 (Nihal Z. Miaji). - التعامل بشكل صحيح مع الأنواع LowCardinality Nullable في
CASTعندما يكون الإعدادcast_keep_nullableمُمكّنًا. يُغلق #95670. #95747 (Alexey Milovidov). - إصلاح squashing لبيانات delta lake المُقسّمة إلى partitions. #95773 (Kseniia Sumarokova).
- إصلاح حالة تسابق لعمود join من نوع Nullable في مرشحات وقت التشغيل. #95775 (Hechem Selmi).
- إصلاح خطأ منطقي محتمل في استعلام يحتوي على مُطابِق (
*,table.*) وanalyzer_compatibility_join_using_top_level_identifierعندما يكون لعمودUSINGأنواع مختلفة في الجداول وفي قائمة SELECT. يُغلق #90477. #95808 (Vladimir Cherkasov). - إصلاح مشكلات سلامة الذاكرة في عمليات thread pool المتوازية (backups وaggregation وdistributed queries) التي كان يمكن أن تتسبب في استثناءات عند حدوث خطأ أثناء scheduling المهام. #95818 (Raúl Marín).
- إصلاح تعطل عند تنفيذ DROP WORKLOAD بالتزامن مع استعلامات تستخدم workload الجاري حذفه. #95856 (Alexey Milovidov).
- إصلاح بطء الأداء عند الاستعلام عن جداول النظام باستخدام مستخدم لديه أذونات محدودة على عدد كبير من قواعد البيانات. يُغلق #89371. #95874 (pufit).
- إصلاح تنفيذ
tupleElementعلى JSON مع مسارات متداخلة، إذ كان يمكن أن يؤدي سابقًا إلى نتيجة استعلام خاطئة. #95907 (Pavel Kruglov). - إصلاح خطأ
NOT_SUPPORTEDكان يمكن أن يحدث عند استخدام خوارزمية joindirectمع جدول MergeTree فارغ. #95935 (Vladimir Cherkasov). - إصلاح مشكلة عدم اقتراح العميل للأسماء المستعارة للإعدادات وعدم إكمالها تلقائيًا، يُغلق #92190. #95945 (phulv94).
- إصلاح event_date في system.asynchronous_metric_log. #95947 (Raúl Marín).
- إصلاح skipping paths في نوع البيانات JSON. سابقًا، مع
JSON(SKIP path)كان يتم تخطي جميع مفاتيح JSON التي تبدأ بالبادئةpath، بما في ذلك مفاتيح مثل"pathpath"، ما كان قد يؤدي إلى فقدان البيانات لهذه المسارات أثناء insert. الآن أُصلحت هذه المشكلة، ولم يعد يتم تخطي سوى المفتاح"path". #95948 (Pavel Kruglov). - يجب ألا يتم اعتبار part الذي يحتوي على projections غير معروفة مفقودًا إلى الأبد. #95952 (Mikhail Artemenko).
- إصلاح تحوّل السلسلة الفارغة إلى
NULLفي جدولJoinمع مفتاحNullable(String). يُغلق #71414. #96002 (Alexey Milovidov). - أصبح بإمكان engine PostgreSQL الآن قراءة
BOOLEAN[]بشكل صحيح. يُغلق #72754. #96006 (Alexey Milovidov). - إصلاح format
ProtobufListعند القراءة من ملف فارغ. يُغلق #70059. #96007 (Alexey Milovidov). - إصلاح مشكلة إنتاج format
ProtobufListسجلًا وهميًا للجداول الفارغة. يُغلق #72596. #96010 (Alexey Milovidov). - إصلاح عدم تطابق الأنواع في الدالة
ifبينUInt64وInt32في حالة غير معتادة من distributed queries و PREWHERE، مع type inference. يُغلق #70017. #96012 (Alexey Milovidov). - إصلاح queries المترجمة بواسطة
JITالتي تتضمن أنواعBool. #96013 (Alexey Milovidov). - إصلاح logical error عند قراءة UUID column من عمود TEXT في SQLite. يُغلق #71263. #96016 (Alexey Milovidov).
- إصلاح تحويل الأنواع في engine SQLite لكل من
DateTimeوDateوUUIDوأنواع أخرى. يُغلق #73481. #96017 (Alexey Milovidov). - كان يتم تهريب قيم
FixedStringبشكل غير صحيح في queries المرسلة إلى قواعد البيانات الخارجية، SQLite و PostgreSQL. يُغلق #73519. بمشاركة @jh0x في التأليف. #96019 (Alexey Milovidov). - إصلاح فشل assertion في WindowTransform عند استخدام إزاحة PRECEDING كبيرة. يغلق #75852. #96026 (Alexey Milovidov).
- إصلاح خلل قد يؤدي إلى تلف البيانات عند استخدام async inserts متزامنة بأسماء المعلمات نفسها ولكن بقيم مختلفة. #96035 (Seva Potapov).
- إصلاح الفترة الزمنية لأدوات التحليل العامة (ويتحكم فيها
global_profiler_real_time_period_nsوglobal_profiler_cpu_time_period_ns). فبدلًا من القيمة المضبوطة، كانت تُستخدم قيمة مقصوصة، مما يؤدي إلى إيقاظ أداة التحليل أكثر من المقصود. #96048 (Antonio Andelic). - سابقًا، إذا كان ملف البيانات المرجعي داخل ملف manifest في Iceberg الخاص بـ position delete موجودًا في entry لكنه كان null، فلم نكن نحصل على الحدود الصحيحة لملفات البيانات المقابلة. يُصلح هذا الـ PR هذا الخلل. #96061 (Daniil Ivanik).
- إصلاح سحب الأدوار الافتراضية. #96103 (Vitaly Baranov).
- إصلاح use-after-free في تحليل الفهرس في حالة نادرة تجمع بين تعطيل
use_primary_keyووجود عدد كبير جدًا من حالات الفصل بين الشروط التي تستخدم الفهرس. #96112 (Alexey Milovidov). - إصلاح تراجع في codec
Gorillaعندما لا يتطابق الحجم المحدد صراحةً مع حجم نوع البيانات، ويكون حجم buffer صغيرًا جدًا. في الإصدارات السابقة، كان هذا يؤدي إلى استثناء عند فك الضغط. يغلق #78253. #96118 (Alexey Milovidov). - تجنب حدوث deadlock في القواميس المحمّلة عندما يشير أحد القواميس إلى جدول Merge يشير إليه بشكل递عي. يغلق #78360. #96120 (Alexey Milovidov).
- إصلاح use-of-uninitialized-value في
formatDateTimeمع Formatterات غير ثابتة العرض، مثل نمط MySQL ونمط JODA. #96133 (Alexey Milovidov). - أدى الجمع بين الإعدادين
use_const_adaptive_granularityوindex_granularity_bytes(والذي يعني “granularity غير تكيفية”) إلى سوء حساب عدد الصفوف المطلوب قراءتها وحدوث استثناء. #96143 (Alexey Milovidov). - قد يؤدي تنفيذ mutation غير صالحة من ALTER UPDATE على الجداول الشبيهة بالملفات في object storage، مثل S3 وAzure، إلى إلغاء مرجعية nullptr. يغلق #92994. #96162 (Alexey Milovidov).
- إصلاح إرجاع
AccessRights::containsنتائج غير صحيحة مع عمليات revoke الجزئية. #96170 (pufit). - إصلاح تصادم hash في query condition cache للثوابت المطوية في CTE، ما قد يؤدي إلى نتيجة query خاطئة. يغلق #96060. #96172 (Alexey Milovidov).
- إصلاح احتمال حدوث توقّف تام في ProcessList. وقد يحدث ذلك بسبب احتمال انعكاس ترتيب الأقفال إذا جرى تفعيل متتبّع memory overcommit أثناء إضافة مهمة إلى مدقّق الإلغاء. #96182 (Antonio Andelic).
- إصلاح خلل كان قد يؤدي إلى إرجاع نتائج غير صحيحة في الاستعلامات التي تتضمن عمليات ربط خارجية (LEFT أو RIGHT أو FULL) مع عدة عمليات INNER JOIN، وذلك بسبب إعادة ترتيب غير قانونية لعمليات الربط. فعندما كان شرط ON لعملية الربط الخارجية يشير إلى أعمدة من عدة جداول تم ربطها مسبقًا، كان المُحسِّن لا يراعي جميع تبعيات الجداول، ما قد يؤدي إلى إعادة ترتيب عمليات الربط بشكل غير صحيح والتسبب في فقدان بعض الصفوف. إغلاق #95972. #96193 (Vladimir Cherkasov).
- عندما لا تكون هناك إحصاءات معرّفة لجدول ما، ينبغي ألّا يحاول ClickHouse تحميلها. وهذا يتجنّب بعض العبء الإضافي (أكثر من 100 مللي ثانية) الناتج عن التحقق من وجود ملفات الإحصاءات. (issue #96068). #96233 (Han Fei).
- إصلاح
optimize_syntax_fuse_functionsبحيث لا يعيد كتابةsum/count/avgإلىsumCount()عندما تكون وسيطة التجميع من النوعLowCardinality(Nullable). إغلاق #95390. #96239 (Nihal Z. Miaji). - إصلاح تقليم الأقسام غير الصحيح للدالتين
not INوnot hasفي بعض الحالات. #96241 (Nihal Z. Miaji). - إصلاح
stack-use-after-scopeفي فهرس تشابه المتجهات. #96259 (Alexey Milovidov). - إصلاح مشكلة عدم تعرّف مشغّل الاختبارات على تعليقات تلميحات الأخطاء عندما يسبق الاستعلامَ تعليقُ SQL. #96336 (Yakov Olkhovskiy).
- إصلاح خطأ منطقي في KeyCondition عندما يكون للجدول مفتاح أساسي قابل للقيم الفارغة، ويستخدم الاستعلام الدالة
coalesceبحيث تكون وسيطتها الأولى ثابتة. #96340 (Alexey Milovidov). - كان التفاعل بين
GROUPING SETSوgroup_by_use_nullsونوع البياناتTupleمع وجودLowCardinalityبداخله قد ينتج بنية block غير متوقعة في query pipeline، مما يؤدي إلى خطأ منطقي. وقد ظهر ذلك بعد إدخالTupleمن النوعNullable. #96358 (Alexey Milovidov). - كان من الممكن إنشاء جدول باستخدام تعبير فارغ
()بوصفه index، مما أدى إلى وصول غير صالح إلى الذاكرة. #96363 (Alexey Milovidov). - إصلاح تعطل في المحلّل القديم عند وجود JOIN وأسماء مستعارة مكررة. #96405 (Ilya Golshtein).
- إصلاح الخطأ
Nested columns sizes are inconsistent with local_discriminatorsالناتج عن تحسين خاطئ للتصفية الموضعية لأعمدة Variant. #96410 (Alexey Milovidov). - إصلاح مشكلة تجاهل
CREATE TABLE ... CLONE AS ...للمؤهِّل الكامل للجدول المصدر. #96415 (Hasyimi Bahrudin). - إصلاح إلغاء table function
mysqlباستخدام KILL QUERY وإلغاء الاستعلام (Ctrl+C) في clickhouse-client. #96437 (Roman Vasin). - إصلاح حالة livelock في خيط التحقق من الإلغاء للاستعلامات ذات القيم المرتفعة لـ
max_execution_time. #96450 (Sergei Trifonov). - إصلاح خطأ منطقي في بعض الحالات عند استخدام
LIMIT/OFFSETبقيم كسرية في الاستعلامات الموزعة. #96475 (Nihal Z. Miaji). - إصلاح إلغاء مرجعية مؤشر فارغ في بعض التعبيرات التي تتضمن lambda functions. #96479 (Alexey Milovidov).
- إصلاح نتائج غير صحيحة عند تحويل الأعمدة
LowCardinalityإلىNullable. #96483 (Nihal Z. Miaji). - إصلاح تعطل عند إنشاء Iceberg table مع عبارة
ORDER BYتشير إلى عمود غير موجود أو تستخدم argument موضعيًا. يغلق #93280. #96484 (Konstantin Vedernikov). - إصلاح استثناء runtime filter لأعمدة Tuple ذات الحقول الفرعية Nullable. #96509 (Alexey Milovidov).
- إصلاح استثناء
LOGICAL_ERRORفي القارئ native لـ Parquet V3 عندما يحتوي عمود عامل التصفيةPREWHEREعلى قيم UInt8 غير Boolean. #96594 (Alexey Milovidov). - إصلاح إعادة توليد الفهرس الضمنية في replicated tables أثناء تغييرات metadata. #96600 (Raúl Marín).
- إصلاح حالة datarace عند DROP WORKLOAD. #96614 (Sergei Trifonov).
- إصلاح خطأ في عمليات الكتابة إلى Iceberg table، حيث قد تؤدي عمليات insert المقسمة إلى partition إلى توزيع غير صحيح للبيانات عبر ملفات partition. #96620 (Konstantin Vedernikov).
- إصلاح
heap-use-after-freeفيCREATE TABLEمع القيود. #96669 (Nikita Taranov). - التحقق من witness version في bech32 لتجنب تجاوز سعة buffer. #96671 (Raúl Marín).
- إصلاح إرجاع
system.tablesلأخطاء عند إنشاء Data Lake REST catalog بإعدادauth_headerغير صالح. #96680 (Han Fei). - إصلاح إرجاع
min(timestamp)لبداية الحقبة (1970-01-01) عبر_minmax_count_projectionبعد دمج TTL عندما تُصفّى جميع الصفوف في block. #96703 (Raquel Barbadillo). - تحسين التحقق من إعداد
iceberg_metadata_file_pathلمنع path traversal وضمان وجود ملف metadata المحدد داخل directory الجدول. #96754 (Daniil Ivanik). - إصلاح تعطل في
ifNullمع argument من نوعVariantمستخدم فيGROUP BY. #96790 (Alexey Milovidov). - أُصلِحت تصادمات مفاتيح الذاكرة المؤقتة بين الجداول التي تستخدم الإعداد
table_disk=1. #96818 (Raufs Dunamalijevs). - أُصلِح تعلّق خيط التنظيف الخاص بـ MemoryWorker بسبب حالة تسابق. #96819 (Antonio Andelic).
- لم يَعُد يجري تسجيل البيانات التي تحتوي على بيانات اعتماد في كتالوجات Iceberg. #96831 (Konstantin Vedernikov).
- أُصلِحت حالة الخروج الخاصة بـ clickhouse-client بعد حدوث خطأ في الخادم. #96841 (Vitaly Baranov).
- قد تُرجِع الاستعلامات التي تتضمن
CROSS JOINمع تفعيل النسخ المتماثلة المتوازية نتائج غير صحيحة. يُصلح هذا #74337. #96848 (Igor Nikonov). - أُصلِحت مشكلة فشل استعلامات
ALTER TABLE DROP COLUMNبعد تنفيذ تحديث خفيف سابقًا على العمود نفسه. #96861 (Anton Popov). - أُصلِح تجاوز المكدس (انهيار) عند إنشاء نسخ احتياطية أرشيفية (
.zip,.tzst) على قرص تخزين كائناتplain_rewritable. #96872 (Alexey Milovidov). - أُصلِح انهيار الخادم عند فشل النسخ الاحتياطي بسبب امتلاء القرص أو أخطاء إدخال/إخراج أخرى في نظام ملفات الوجهة. #96873 (Alexey Milovidov).
- أُصلِح تجاهل
EXCEPT ALLوINTERSECT ALLلتكرارات الصفوف وتعاملُهما كما لو كانا النظيرينDISTINCT. #96876 (Alexey Milovidov). - أُصلِح استثناء
std::terminateفيindexOfAssumeSortedعند استدعائه بأنواع غير متوافقة (مثل مصفوفةIPv4مع قيمة بحث صحيحة). #96877 (Alexey Milovidov). - أُصلِح الاستثناء
Bad cast from type DB::ColumnNullable to DB::ColumnStringعند استخدام window functions معgroup_by_use_nulls = 1وCUBE/ROLLUP/GROUPING SETS. #96878 (Alexey Milovidov). - أُصلِحت النتائج غير الصحيحة عندما تحوّل compiled expressions المترجمة بـ JIT
DateTimeإلىDateTime64(مثلًا فيCASE/if/multiIfمع أنواع DateTime مختلطة). فقد أُعيد تفسير القيمة بدلًا من تحجيمها بشكل صحيح، مما أدى إلى timestamps خاطئة بعد تفعيل ترجمة التعبير. #96879 (Alexey Milovidov). - أُصلِح استثناء الخطأ المنطقي في
CoalescingMergeTreeعندما يُنتج تعبير skip index عمودًا ثابتًا (مثلbloom_filterعلىifNotFinite(1, c0)لعمود صحيح). #96880 (Alexey Milovidov). - أُصلِح رقم المنفذ الخاطئ في رسالة الخطأ عند الاتصال عبر HTTP بالخطأ بمنفذ native protocol المفعَّل بـ TLS. #96881 (Alexey Milovidov).
- أُصلِح عدم تطبيق
SETTINGSالخاصة بكل subquery على Table functions مثلfileفي CTEs والاستعلامات الفرعية. #96882 (Alexey Milovidov). - إصلاح تسرّب الذاكرة في كائنات BIO عند قراءة شهادات X509. #96885 (Alexey Milovidov).
- إصلاح استثناء
LOGICAL_ERRORفي محلّل الاستعلامات عند تمرير تعبير lambda في موضع يُتوقَّع فيه وجود قيمة فعلية (على سبيل المثال، كوسيط للمُراكِم فيarrayFold). #96892 (Alexey Milovidov). - إصلاح استثناء
ColumnNullable is not compatible with originalعند إجراء CAST للأنواع المتداخلة المعقّدة (Array من Nullable Tuple يحتوي على Map بقيم Nullable Enum). #96924 (Alexey Milovidov). - إصلاح حالة race condition في التحميل المتوازي لـ Dictionary المجزّأ
HASHED، والتي كان يمكن أن تتسبب أحيانًا في عدم تحميل بعض الصفوف. #96953 (Alexey Milovidov). - إصلاح حالة race condition بين
REPLACE PARTITIONوmutations الخلفية، والتي كان يمكن أن تؤدي إلى ظهور كلٍّ من البيانات القديمة والجديدة بعد الاستبدال. #96955 (Alexey Milovidov). - إصلاح دالة
arrayJoinالتي كانت تُنتج صفوفًا مكررة عند استخدامها مع INNER JOIN وWHERE clause، وكان السبب في ذلك أن تحسين الدفع الجزئي للمسندات كان يدفع عوامل التصفية التي تحتوي علىarrayJoinبشكل غير صحيح إلى ما دون JOIN. #96989 (Alexey Milovidov). - إصلاح الانهيار (SEGFAULT) في
clearCachesالناتج عن أنBlockIO::operator=لم يكن ينقلquery_metadata_cache، مما أدى إلى التدمير المبكر لـ snapshotات التخزين المخزنة مؤقتًا وحدوث use-after-free لتخزينMergeTreeData. #96995 (Alexey Milovidov). - إصلاح فشل assertion في
IfTransformStringsToEnumPassعندما تُرجع الدالةifأوtransformالقيمةNullable(String)(على سبيل المثال معGROUP BY ... WITH CUBEوgroup_by_use_nulls = true). #97002 (Alexey Milovidov). - إصلاح كتابة بيانات غير صحيحة أثناء
INSERT ... SELECTمعUNION ALLوJOIN، حيث كان يمكن أن تتلقى أعمدة السلاسل النصية الثابتة قيمًا خاطئة بعد squashing الكتل. #97019 (Hasyimi Bahrudin). - إصلاح استثناء
assert_cast(أو تلف البيانات الصامت في إصدارات release) عند إنشاء column statistics بعد أن يغيّرALTER TABLE MODIFY COLUMNنوع العمود. #97027 (Alexey Milovidov). - إصلاح قراءات من ذاكرة غير مهيّأة في Azure Blob Storage، وSSH protocol، وواجهات Arrow Flight. #97053 (Alexey Milovidov).
- إصلاح الحالات التي كانت فيها indexes تؤثر في نتائج queries التي تستخدم row policy/PREWHERE وFINAL. #97076 (Yarik Briukhovetskyi).
- إصلاح ما تبقى من حالة race condition بين
REPLACE PARTITIONوmutations الخلفية في جداولMergeTree، والتي كان يمكن أن تتسبب في ظهور البيانات القديمة من جديد. #97105 (Alexey Milovidov). - إصلاح الفهارس الضمنية مع الأعمدة المستعارة، وإجراء تحقق كامل قبل إنشائها. #97115 (Raúl Marín).
- إصلاح خطأ منطقي في
FunctionVariantAdaptorمع الدوال التي تتطلب arguments ثابتة مثلarrayROCAUC. #97116 (Bharat Nallan). - إصلاح تعثر mutations عند قيام
PartCheckThreadبإعادة إدراجGET_PARTلجزء طُبِّق عليه mutation بالفعل، مما يترك entries وهمية فيparts_to_do. #97162 (Alexey Milovidov). - إصلاح تقدير عدد rows في query plan للاستعلامات الفرعية التي تحتوي على
ORDER BY ... LIMIT، وهو ما كان قد يدفع المُحسِّن إلى اختيار join order غير مثالي. #97193 (Alexander Gololobov). - إصلاح استثناء
LOGICAL_ERRORفيFunctionVariantAdaptorعندما تُرجِع دالة تعمل على Variant columns النوعNothing، وهو ما قد يحدث مع Arrays الفارغة في queriesUNION ALL. #97213 (Alexey Milovidov). - إصلاح data race أثناء عمليات النسخ متعدد الأجزاء في S3 (مثل أثناء
BACKUP/RESTOREإلى S3)، والتي كان يمكن أن تتسبب في استثناءات عند الوصول المتزامن. #97227 (Azat Khuzhin). - إصلاح استثناء
LOGICAL_ERRORعندما يُشيرarrayJoinفي clauseWHEREإلى columns من جانبيJOIN. #97239 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERRORعند قراءة subcolumn.sizeلـNullable(String)sparse داخل Tuple مع PREWHERE. #97264 (Alexey Milovidov). - إصلاح الاستثناء “Number of rows in lazy chunk does not match number of offsets” في
LazyMaterializingTransformعند القراءة من tables ذات index granularity غير تكيفية (index_granularity_bytes = 0) باستخدامORDER BY ... LIMIT. #97270 (Alexey Milovidov). - إصلاح فقدان
SYSTEM RESTART REPLICAللجدول من database عند فشل إعادة إنشاء الجدول بسبب استثناء غير متعلق بـ ZooKeeper (مثل memory limit)، مما يؤدي إلى عدم تطابق في ملخصات metadata فيDatabaseReplicated. #97276 (Alexey Milovidov). - أصبح الحقل
readonlyفيsystem.merge_tree_settingsيعكس الآن بشكل صحيح أن بعض إعدادات merge tree (مثلindex_granularity) تكون readonly دون قيد. #97277 (Robert Schulze). - إصلاح crash أثناء تحسين
count()على جداولMergeTreeعندما كان snapshot التخزين قد أُنشئ من دون data. #97281 (Pablo Marcos). - إصلاح crash محتمل عند تحليل أسماء الدوال من معلومات التصحيح لأجل stack traces. #97294 (Azat Khuzhin).
- إصلاح خطأ منطقي في analyzer_compatibility_join_using_top_level_identifier ومع أعمدة ALIAS. إغلاق #96228. #97297 (Vladimir Cherkasov).
- إصلاح استثناء
LOGICAL_ERRORفيapplyOrderعند استخدام columns مفهرسة نصيًا مع clauseQUALIFY. #97313 (Alexey Milovidov). - يعرض جدول النظام
system.functionsالآن للدوال الداخلية القيمةcategories = 'Internal'بدلًا منcategories = ''. #97315 (Robert Schulze). - قد يُنتج الاستعلام الذي يتضمن سلسلة RIGHT JOIN مع تمكين parallel replicas نتيجة غير صحيحة. يُصلح #74341. #97316 (Igor Nikonov).
- إصلاح أخطاء
TABLE_UUID_MISMATCHالزائفة التي قد تحدث مع العروض المادية القابلة للتحديث وفي سيناريوهات أخرى يُعاد فيها تسمية الجداول. #97323 (Azat Khuzhin). - إصلاح segfault في النسخ الاحتياطي لـ
StorageKeeperMapبسبب استخدام مؤشر تخزين متدلٍّ بعد تحريره في دفعة النسخ الاحتياطي lazy. #97336 (Alexey Milovidov). - إصلاح الدالة
existsمع scalar subquery داخلALTER UPDATE/DELETEعند تمكينmutations_execute_subqueries_on_initiator. جرى تقييم scalar subquery بشكل غير صحيح، ما قد يؤدي إلى خطأ أو إلى أمر mutation تالف يجعل الجدول غير قابل للتحميل عند إعادة تشغيل الخادم التالية. #97347 (Kirill Kopnev). - إصلاح الاستثناء المنطقي
Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8)))عند مقارنة NULL بعمود Variant يحتوي على أنواع LowCardinality. #97379 (Alexey Milovidov). - إصلاح race condition محتملة عند تنفيذ
EXCHANGE TABLESبالتوازي مع تمكين query cache المُجزّأ. #97411 (Konstantin Vedernikov). - إصلاح الاستثناء
LOGICAL_ERRORفي التحويل من Array إلىQBitعندما يستبدلnullable_sourceمن غلافTupleخارجي عمود Array المُحوَّل بنوع عمود غير متطابق. يُغلق #97389. #97413 (Alexey Milovidov). - إصلاح عدم اتساق التنسيق ذهابًا وإيابًا لـ AST في القيم الحرفية tuple ذات alias داخل الأقواس، فمثلًا أُعيدت تهيئة
(('a', 'b') AS x)بشكل غير صحيح إلىtuple(('a', 'b') AS x). #97418 (Alexey Milovidov). - إصلاح استثناء أثناء asynchronous inserts مع deduplication عندما أدى فشل parsing إلى إنشاء block فارغ بلا rows. #97460 (Sema Checherinda).
- إصلاح الاستثناء “Number of rows in lazy chunk does not match number of offsets” في
LazyMaterializingTransformعند القراءة من الجداول ذات index granularity غير التكيفية (index_granularity_bytes = 0) باستخدامORDER BY ... LIMIT. #97482 (Alexey Milovidov). - إصلاح إعدادات insert في Iceberg. إضافة alias للإعداد
allow_experimental_insert_into_iceberg. #97483 (Konstantin Vedernikov). - إصلاح
ACCESS_DENIEDللمستخدمين الذين لا يملكون permission CREATE TEMPORARY TABLEعندما تعيد optimization optimize_inverse_dictionary_lookupكتابة predicates الخاصة بـdictGet(...). يتخطّى ClickHouse الآن إعادة الكتابة وينفّذ expression الأصلي. يُغلق #97269. #97484 (Nihal Z. Miaji). - إصلاح فشل assertion (استثناء في إصدارات debug/sanitizer) في
SetوMergeTreeIndexSetعند معالجة الأعمدة التي تحتوي على أعمدة فرعية داخلية sparse (مثل أعمدةTupleمن أجزاء MergeTree ذات ملفات تعريف serialization sparse مختلفة). #97493 (Alexey Milovidov). - إصلاح احتمال استخدام الذاكرة بعد تحريرها في StorageKafka2. #97520 (Bharat Nallan).
- إصلاح
INTO OUTFILEمعTRUNCATEوالإعدادinto_outfile_create_parent_directoriesعندما يحتوي مسار الإخراج على مجلدات. #97549 (Alexey Milovidov). - إصلاح الخطأ
BAD_ARGUMENTSعند الاستعلام عن الجداول التي تحتوي على تعبيرات lambda داخل أعمدة ALIAS عبر table function merge()مع تمكين analyzer. #97551 (Alexey Milovidov). - إصلاح استثناء
system.zookeeper_infoعندما تكون قيمة zxid في Keeper مساوية لـ 0. #97553 (Alexey Milovidov). - إصلاح احتمال حدوث logical error في Dictionary
ip_trieعندما لا يكون نوع المفتاح String. #97555 (Bharat Nallan). - إصلاح عدم عمل OAuth authentication في REST catalog الأساسي
RestCatalog(إذ كانت تعمل فقط مع catalogs المشتقة مثلOneLakeCatalog). وقد أدى ذلك إلى تعطيل REST catalog الافتراضي بعد تقديم BigLake catalog. #97561 (Konstantin Vedernikov). - تقبل دوال Geometry (
perimeterSpherical,areaSpherical، إلخ) الآن الأنواع الفرعية الهندسية الفردية (PolygonوRingوPointوغيرها) بالإضافة إلى النوعGeometryمن نوع Variant. #97571 (Alexey Milovidov). - إصلاح استثناء
LOGICAL_ERRORعند استخدامisNull/isNotNullعلى subcolumns للأنواعNullable(Tuple(... Nullable(T) ...)). يغلق #97224. #97582 (Alexey Milovidov). - إصلاح إلغاء مرجعية مؤشر فارغ عند تطبيق patch parts أثناء lightweight updates. #97583 (Alexey Milovidov).
- يمرر
BaseSettings::readBinaryالفهرس منaccessor.findإلىfield_infos[]من دون التحقق من قيمة عدم العثور الخاصة (أي-1)، ما قد يؤدي إلى وصول خارج حدودstd::vector. وقد اكتُشفت المشكلة بفضل تقوية libcxx. وعلى الأرجح كان هذا يحدث أثناء deserialization لخطة query عندما يرسل server أحدث إعدادًا غير معروف إلى server أقدم. تتعامل طريقة القراءة المعتمدة على السلاسل النصية مع هذا بشكل صحيح بالفعل، لكنreadBinaryكان يفتقد إلى التحقق نفسه. #97585 (Miсhael Stetsyuk). - إصلاح نتائج query غير صحيحة لاستعلامات
UNION ALLعندما كان أحد الفروع يحتوي على predicate ثابتة القيمة false، إذ كان الفرع يقرأ data بشكل غير صحيح بدلًا من ألا يعيد شيئًا. #97620 (Bharat Nallan). - إصلاح فشل
IN (col)عند استخدام مرجع column واحد مع الخطأUNSUPPORTED_METHOD. #97646 (Alexey Milovidov). - إصلاح استثناء الخطأ المنطقي عند استخدام
GROUP BY ... WITH ROLLUP/CUBEعندما تتضمن المفاتيحLowCardinality(Nullable(...))داخلNullable(Tuple(...)). #97647 (Alexey Milovidov). - إصلاح عدم اتساق تنسيق AST في
NOT (1, 1, 1)، والذي كان قد يتسبب فيLOGICAL_ERRORفي بُنى التصحيح. #97653 (Alexey Milovidov). - إصلاح استثناء
keeper-converterعند مصادفة ملفات سجل معاملات ZooKeeper فارغة. #97673 (Alexey Milovidov).
تحسينات البناء/الاختبار/التغليف
- يمكن بناء ClickHouse باستخدام clang-23 (master). #95578 (Alexey Milovidov).
- إصلاح فرض القيمة
falseعلىis_localعند تهيئةbind_host، مع استبداله باختبار تكامل. متابعة لـ #74741. #93109 #96018 (Zhigao Hong). - اختبارات الإجهاد: إصلاح اختبارات الإجهاد والترقية في CI، وتجاهل الوسوم
no-{build}، وإضافة عشوائية للتوافق. #94693 (Nikita Fomichev). - نشر الملف التنفيذي parser_memory_profiler من نواتج build. ويمكن استخدام الأداة لتحليل استهلاك ذاكرة AST. #95826 (Ilya Yatsishin).
- إضافة الراية
--symbolizeإلى أداةparser_memory_profiler، بحيث تُنتج ملفات.heap.symتحتوي على رموز محلولة في النتائج. #96477 (Ilya Yatsishin). - تثبيت Docker images التابعة لجهات خارجية في اختبارات التكامل على إصدارات محددة. #96500 (Alexey Milovidov).
- استعادة إمكانية الربط الديناميكي مع
OpenSSL. لا يُنصح بهذا، ولا يُستخدم في أي builds خاصة ببيئات production، لكن الخيار لا يزال متاحًا للهواة على الإنترنت. #96506 (Govind R Nair). - تقليل نطاق
magic_enumمن [-100, 1000] إلى النطاق default [-128, 127] باستخدام تخصيص لكل نوع لـCoordination::OpNum، مما يحسن زمن build. #96632 (Alexey Milovidov). - إزالة قوالب C++ غير الضرورية من فئات Function لتقليل أزمنة build. #96646 (Alexey Milovidov).
- نقل generation الخاصة بـ
StorageSystemLicensesإلى وقت التهيئة لتحسين التوازي في build. #96697 (Alexey Milovidov). - جعل فحص التراخيص متوازيًا. #96727 (Raúl Marín).
- إضافة اختبار functional عديم الحالة لدعم بروتوكول SSH. #96996 (Alexey Milovidov).
- إضافة Kafka 3.9.0 إلى البنية التحتية لاختبارات functional العديمة الحالة، مما يتيح اختبارًا مباشرًا لمحركي الجدول Kafka وKafka2 باستخدام ClickHouse Keeper بوصفه ZooKeeper. وتغطي ستة اختبارات عديمة الحالة جديدة أساسيات الإنتاج/الاستهلاك، والأعمدة الافتراضية، وINSERT، وتنسيقات متعددة، والتعامل مع الرسائل التالفة، وتخزين الإزاحات المستند إلى Keeper. #96997 (Alexey Milovidov).
- إضافة سير عمل في CI لبناء سلسلة أدوات clang محسّنة باستخدام PGO+BOLT. #96991 (Alexey Milovidov).
- استخدام build محسّنة من LLVM/Clang باستخدام PGO في CI، ما يفترض أن يحقق تحسنًا في سرعة build بنسبة 20..30%. #97031 (Alexey Milovidov).
- استبدال الدوال الرياضية من glibc بتنفيذات llvm-libc. #90151 (Konstantin Bogdanov).
- تحديث Boost من 1.83 إلى 1.90، مما يُصلح فشل تأكيد
devectorفي إصدارات Debug. #97037 (Alexey Milovidov). - تحديث
postgresإلى REL_18_1. #95189 (Konstantin Bogdanov). - استخدام
libexpat2.7.3. #95218 (Konstantin Bogdanov). - استخدام
OpenSSL3.5.5. #95345 (Konstantin Bogdanov). - استخدام
simdjsonv4.2.4. #97129 (Konstantin Bogdanov). - استخدام
libarchive3.8.5. #97131 (Konstantin Bogdanov). - استخدام
fast_floatv8.2.3. #97133 (Konstantin Bogdanov). - استخدام
abseil-cpp20260107.1، وترقيةs2geometryإلى v0.13.1. #97134 (Konstantin Bogdanov). - رفع
libxml2إلى 2.15.1. #95574 (Robert Schulze). - ترقية 7 صور Docker لاختبارات التكامل من Tier-3 من صور أساسية منتهية الدعم أو مُزالة إلى إصدارات مدعومة حاليًا. #97314 (Rahul).
- إضافة استعلامات benchmark لـ TPC-DS. #97349 (Raufs Dunamalijevs).
- استبدال خيارات cmake الفردية لمجموعات تعليمات x86 (
ENABLE_SSSE3,ENABLE_AVX2,NO_SSE3_OR_HIGHER,ARCH_NATIVE، إلخ) بخيار رقمي واحد هوX86_ARCH_LEVEL(1/2/3/4)، بما يتوافق مع مستويات البنية الدقيقة القياسية لـ x86-64 المستخدمة بالفعل في نظام التوجيه وقت التشغيل. #97354 (Raúl Marín). - تجنب إنشاء متغيرات القوالب لـ
division_by_nullable=trueلعمليات غير القسمة فيFunctionBinaryArithmetic، مما يقلل وقت الترجمة وحجم الملف الثنائي. #97496 (Raúl Marín). - تقليل أثر التضمين لـ
Exception.hعبر إزالته من ملفات الترويسة واسعة الاستخدام مثلtypeid_cast.hوassert_cast.hوContext_fwd.hوIDataType.hومختلف ملفات ترويسة Column. #97497 (Raúl Marín). - استخدام ترويسات
compiler-rtالمضمّنة دائمًا (واجهات sanitizer وXRay) بدلًا من ترويسات مترجم المضيف، وبناء مكتباتcompiler-rtمن المصدر افتراضيًا. #97499 (Raúl Marín). - تجنّب تضمين ترويسات boost/multiprecision في
wide_integer_impl.hعلى المنصات التي يتوفر فيهاlong doubleبالمستوى الكافي، مما يحسّن وقت البناء. #96633 (Alexey Milovidov). - تنفيذ مهمة LLVM Code Coverage وتفعيلها مبدئيًا لفرع master. #90952 (Alexey Bakharew).
- تفعيل التحصين السريع لـ libcxx في بنيات الإصدار. وهذا مطلوب في الغالب لعمليات التحقق من تجاوز الحدود. واستنادًا إلى نتائج اختبارات الأداء، لا يُتوقع أي تأثير ملحوظ على الأداء. #94757 (Miсhael Stetsyuk).
إصدار ClickHouse 26.1، 2026-01-29. العرض التقديمي، الفيديو
تغيير غير متوافق مع الإصدارات السابقة
- أصلِح التنسيق غير المتسق الناتج عن الاستبدال غير الصحيح للأسماء المستعارة في المُنسِّق. يُغلق هذا #82833. يُغلق هذا #82832. يُغلق هذا #68296. قد يكون هذا التغيير غير متوافق مع الإصدارات السابقة: عند تعطيل المحلّل، يتعذر معالجة بعض استعلامات CREATE VIEW التي تستخدم IN وتشير إلى اسم مستعار. ولتجنب عدم التوافق، فعِّل المحلّل (وهو مفعّل افتراضيًا منذ الإصدار 24.3). #82838 (Alexey Milovidov).
- أُزيل المرمِّزان
DEFLATE_QPLوZSTD_QAT. ويُنصح المستخدمون بتحويل البيانات الحالية المضغوطة باستخدامDEFLATE_QPLأوZSTD_QATإلى codec آخر قبل الترقية. لاحظ أنه لاستخدام هذين الـ codecs كان يجب تفعيل الإعدادينenable_deflate_qpl_codecوenable_zstd_qat_codec. #92150 (Robert Schulze). - تحسين تصحيح أخطاء UDF عبر تمكين التقاط stderr في
system.query_log.exception. في السابق، كان stderr الخاص بـ UDF يُسجَّل في الملفات فقط ولا يظهر في سجلات الاستعلامات، مما جعل تصحيح الأخطاء مستحيلًا. الآن، يؤدي stderr افتراضيًا إلى إطلاق استثناءات، كما يُجمَّع بالكامل (حتى 1MB) قبل الإطلاق، بحيث تظهر آثار التتبّع الكاملة لبايثون ورسائل الخطأ فيsystem.query_log.exceptionبما يسهّل استكشاف الأخطاء وإصلاحها بفعالية. #92209 (Xu Jia). - تُعدّ قائمة الأعمدة الفارغة في clause
JOIN USING ()الآن خطأً نحويًا. في السابق، كان من المفترض أن تكونINVALID_JOIN_ON_EXPRESSIONأثناء تنفيذ الاستعلام. وفي بعض الحالات، مثل الربط مع تخزينJoin، كان ذلك يؤدي إلىLOGICAL_ERROR، ويغلق #82502. #92371 (Vladimir Cherkasov). - استخدام المطابقة الجزئية لـ SKIP REGEXP في JSON type افتراضيًا. يُغلق #79250. #92847 (Pavel Kruglov).
- التراجع عن “السماح بـ INSERT إلى أعمدة ALIAS البسيطة” (تراجع عن ClickHouse/ClickHouse#84154). فهذا لا يعمل مع formats مخصصة، ولا يخضع لأي setting. #92849 (Azat Khuzhin).
- إضافة إعداد لإطلاق خطأ إذا لم يكن لدى Data Lake Catalog إمكانية وصول إلى object storage. #93606 (Konstantin Vedernikov).
- أُزيل database engine
Lazyولم يعد متاحًا. يُغلق #91231. #93627 (Alexey Milovidov). - إزالة الوضع
transposed_with_wide_viewمنmetric_logلأنه غير قابل للاستخدام بسبب خلل برمجي. ولم يعد ممكنًا تعريفsystem.metric_logبهذا الوضع. ويتراجع هذا التغيير جزئيًا عن #78412. #93867 (Alexey Milovidov). - أصبحت جدولة CPU لأعباء العمل استباقية افتراضيًا. راجع server setting
cpu_slot_preemption. #94060 (Sergei Trifonov). - استخدم محارف الهروب في أسماء ملفات الفهارس لمنع تلف الأجزاء. مع هذا التغيير، سيفشل ClickHouse في تحميل الفهارس التي تحتوي أسماؤها على محارف غير ASCII والمُنشأة في الإصدارات السابقة. للتعامل مع ذلك، يمكنك استخدام إعداد MergeTree
escape_index_filenames. #94079 (Raúl Marín). - تغيّرت الإعدادات
exact_rows_before_limitوrows_before_aggregationوcross_to_inner_join_rewriteوregexp_dict_allow_hyperscanوregexp_dict_flag_case_insensitiveوregexp_dict_flag_dotallوdictionary_use_async_executorلتصبح الآن إعدادات عادية (وليست إعدادات format). هذا تغيير داخلي بحت من دون آثار جانبية مرئية للمستخدم، إلا في الحالة (غير المرجحة) التي تكون فيها قد حدّدت أيًا من هذه الإعدادات في تعريفات محرك الجدول Iceberg أو DeltaLake أو Kafka أو S3 أو S3Queue أو Azure أو Hive أو RabbitMQ أو Set أو FileLog أو NATS. في هذه الحالات، كانت هذه الإعدادات تُتجاهل سابقًا، أما الآن فستؤدي هذه التعريفات إلى ظهور خطأ. #94106 (Robert Schulze). - تفرض الدالتان
joinGet/joinGetOrNullالآن امتيازاتSELECTعلى جدول Join الأساسي. بعد هذا التغيير، يتطلب تنفيذjoinGet('db.table', 'column', key)أن يمتلك المستخدم امتيازSELECTلكلٍّ من أعمدة المفتاح المعرّفة في جدول Join وعمود السمة الجاري استرجاعه. ستفشل الاستعلامات التي تفتقر إلى هذه الامتيازات معACCESS_DENIED. للترحيل، امنح الأذونات اللازمة باستخدامGRANT SELECT ON db.join_table TO userللوصول الكامل إلى الجدول، أوGRANT SELECT(key_col, attr_col) ON db.join_table TO userللوصول على مستوى العمود. يؤثر هذا التغيير في جميع المستخدمين والتطبيقات التي تعتمد علىjoinGet/joinGetOrNullحيث لم تكن امتيازاتSELECTالصريحة مُعدّة مسبقًا. #94307 (Vladimir Cherkasov). - تحقّق من
SHOW COLUMNSفي استعلاماتCREATE TABLE ... AS .... سابقًا، كان التحقق يتم عبرSHOW TABLES، وهو grant غير صحيح لهذا النوع من فحوصات الأذونات. #94556 (pufit). - اجعل output format
Hashمستقلًا عن أحجام block. #94503 (Alexey Milovidov). لاحظ أن هذا يغيّر قيم hash الناتجة مقارنة بالإصدارات السابقة.
ميزة جديدة
- واجهة برمجة تطبيقات HTTP وواجهة ويب مدمجة لـ ClickHouse Keeper. #78181 (pufit وspeeedmaster).
- تعمل الآن آلية إزالة التكرار في async insert مع العروض المادية التابعة. عند حدوث تعارض بسبب block_id، تُرشَّح الكتلة الأصلية لإزالة الصفوف المرتبطة بـ block_id، ثم تُحوَّل الصفوف المتبقية باستخدام جميع استعلامات select ذات الصلة في العروض المادية، ما يعيد بناء الكتلة الأصلية من دون الصفوف المتعارضة. #89140 (Sema Checherinda). كما أصبح استخدام إزالة التكرار مع async inserts مسموحًا عند وجود عروض مادية. #93957 (Sema Checherinda).
- تقديم صياغة جديدة وإطار عمل جديد لتبسيط ميزة فهرس projection وتوسيعها. ويأتي هذا استكمالًا لـ https://github.com/ClickHouse/ClickHouse/pull/81021. #91844 (Amos Bird).
- إضافة دعم الفهرس النصي لأعمدة
Array. #89895 (Jimmy Aguilar Mena). - تفعيل
use_variant_as_common_typeافتراضيًا، ما يتيح استخدام أنواع غير متوافقة داخلArray، وفي استعلاماتUNION، وفي فروعif/multiIf/case. #90677 (Alexey Milovidov). - جدول نظام جديد
zookeeper_info. ينفّذ #88014. #90809 (Smita Kulkarni). - دعم النوع
Variantفي جميع الدوال. #90900 (Bharat Nallan). - إضافة مقياس
ClickHouse_Infoإلى نقطة النهاية/metricsفي Prometheus، ويحتوي أساسًا على معلومات الإصدار، ما يتيح إنشاء مخططات تتتبّع معلومات الإصدار التفصيلية بمرور الوقت. #91125 (Christoph Wurm). - تقديم أمر جديد مكوّن من أربعة أحرف هو
rcfgلـ Keeper، يتيح تغيير تهيئة العنقود. ويوفّر هذا الأمر إمكانات أوسع لتغييرات التهيئة مقارنة بطلبreconfigureالقياسي. ويأخذ الأمر سلسلةjsonبوصفها وسيطة. يجب أن تبدو المجموعة الكاملة من البايتات المُرسلة إلى واجهة TCP كما يلي:rcfg{json_string_length_big_endian}{json_string}. وقد تبدو بعض أمثلة الأمر كما يلي:{"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}. #91354 (alesapin). - إضافة الدالة
reverseBySeparatorالتي تعكس ترتيب substrings في سلسلة نصية مفصولة بفاصل محدد. ويغلق هذا #91463. #91780 (Xuewei Wang). - إضافة الإعداد الجديد
max_insert_block_size_bytesالذي يتيح تحكمًا أدق في تكوين الكتل المُدخلة. #92833 (Kirill Kopnev). - يمكن تنفيذ استعلامات DDL مع العبارة
ON CLUSTERلقاعدة بيانات Replicated إذا كان الإعدادignore_on_cluster_for_replicated_databaseمفعّلًا. في هذه الحالة، سيتم تجاهل اسم العنقود. #92872 (Kirill). - تنفيذ الدالة
mergeTreeAnalyzeIndexes. #92954 (Azat Khuzhin). - إضافة الإعداد الجديد
use_primary_key. اضبطه علىfalseلتعطيل استبعاد الحبيبات استنادًا إلى المفتاح الأساسي. #93319 (Nihal Z. Miaji). - إضافة دالة الجدول
icebergLocalCluster. #93323 (Anton Ivashkin). - إضافة الدالة
cosineDistanceTransposedالتي تُقدّر مسافة جيب التمام بين نقطتين. #93621 (Raufs Dunamalijevs). - إضافة العمود
filesإلى جدول system.parts، لعرض عدد الملفات في كل جزء بيانات. #94337 (Match). - إضافة مُجدول عدالة من نوع max-min للتحكم في التزامن. يوفّر عدالة أفضل في حالات فرط الاشتراك الشديد، حيث تتنافس استعلامات كثيرة على خانات CPU محدودة. ولا تتضرر الاستعلامات قصيرة المدة بسبب الاستعلامات طويلة المدة التي راكمت خانات أكثر بمرور الوقت. ويُفعَّل ذلك عبر القيمة
max_min_fairفي إعداد الخادمconcurrent_threads_scheduler. #94732 (Sergei Trifonov). - إضافة إمكانية لعميل ClickHouse لتجاوز قيمة TLS SNI عند الاتصال بالخادم. #89761 (Matt Klein).
- دعم الجداول المؤقتة في استدعاءات الدالة
joinGet. #92973 (Eduard Karacharov). - دعم متجهات الحذف في محرك الجدول
DeltaLake. #93852 (Kseniia Sumarokova). - دعم متجهات الحذف في
deltaLakeCluster. #94365 (Kseniia Sumarokova). - دعم Google Cloud Storage لبحيرات البيانات. #93866 (Konstantin Vedernikov).
ميزة تجريبية
- ترقية
QBitمن Experimental إلى Beta. #93816 (Raufs Dunamalijevs). - إضافة دعم لـ
Nullable(Tuple). اضبطallow_experimental_nullable_tuple_type = 1لتمكينه. #89643 (Nihal Z. Miaji). - إضافة دعم لـ Paimon REST catalog، استكمالًا للعمل في https://github.com/ClickHouse/ClickHouse/pull/84423. #92011 (JIaQi Tang).
تحسين الأداء
- أصبح الإعداد
use_skip_indexes_on_data_readمفعّلاً افتراضياً. يتيح هذا الإعداد إجراء التصفية بأسلوب streaming بالتزامن مع القراءة، مما يحسّن أداء الاستعلام ووقت بدء التشغيل. #93407 (Shankar Iyer). - تحسين أداء
DISTINCTعلى الأعمدةLowCardinality. يُغلق #5917. #91639 (Nihal Z. Miaji). - تحسين aggregate function
distinctJSONPathsبحيث يقرأ مسارات JSON فقط من أجزاء البيانات، لا عمود JSON بالكامل. #92196 (Pavel Kruglov). - دفع المزيد من عوامل التصفية إلى عمليات JOIN. #85556 (Nikita Taranov).
- دعم المزيد من حالات push down انطلاقاً من شرط ON في join عندما يستخدم عامل التصفية مدخلات من جانب واحد فقط. ودعم joins من النوع
ANYوSEMIوANTI. #92584 (Dmitry Novik). - السماح باستخدام sets مكافئة لدفع عوامل التصفية في
SEMI JOIN. يُغلق #85239. #92837 (Dmitry Novik). - تخطي قراءة الجانب الأيسر من hash join عندما يكون الجانب الأيمن فارغاً. سابقاً، كانت قراءة الجانب الأيسر تستمر حتى أول block غير فارغ، ما قد يسبب قدراً كبيراً من العمل عند وجود تصفية مكثفة أو aggregation. #94062 (Alexander Gololobov).
- استخدام طريقة “fastrange” (Daniel Lemire) لتقسيم البيانات داخل query pipeline. قد يحسّن ذلك الفرز المتوازي وعمليات JOIN. #93080 (Alexey Milovidov).
- تحسين أداء window functions عندما يطابق PARTITION BY مفتاح الفرز أو يكون prefix له. #87299 (Nikita Taranov).
- يُدفع عامل التصفية الخارجي إلى views، مما يتيح تطبيق PREWHERE على العُقد المحلية والبعيدة. يعالج #88189. #88316 (Igor Nikonov).
- تنفيذ ترجمات JIT البرمجية لمزيد من الدوال. يُغلق #73509. #88770 (Alexey Milovidov with Taiyang Li).
- إذا كان skip index المستخدم في استعلام
FINALعلى عمود يُعد جزءاً من المفتاح الأساسي، فإن الخطوة الإضافية للتحقق من تقاطع المفتاح الأساسي في الأجزاء الأخرى تكون غير ضرورية، ولذلك لم تعد تُنفَّذ. يعالج #85897. #93899 (Shankar Iyer). - تحسين الأداء واستخدام الذاكرة لكل من
LIMITوOFFSETالكسريين. #91167 (Ahmed Gouda). - إصلاح استخدام منطق القراءة العشوائية الأسرع في أداة الجلب المسبق لـ Parquet Reader V3. يُغلق #90890. #91435 (Arsen Muk).
- تحسين أداء
icebergCluster. يُغلق #91462. #91537 (Yang Jiang). - عدم التصفية حسب الأعمدة الافتراضية عند استخدام عوامل تصفية ثابتة. #91588 (c-end).
- تقليل استخدام الذاكرة في INSERT/merges مع wide parts للجداول شديدة الاتساع من خلال تمكين مخازن الكتابة المؤقتة التكيفية. وإضافة دعم لمخازن الكتابة المؤقتة التكيفية للأقراص المشفرة. #92250 (Azat Khuzhin).
- تحسين أداء full text search باستخدام text index وtokenizer
sparseGramsعبر تقليل عدد الرموز المميزة التي يُبحث عنها في الفهرس. #93078 (Anton Popov). - جرى تحسين الدالة
isValidASCIIللحالات الإيجابية، أي عندما تكون جميع قيم الإدخال من ASCII. #93347 (Robert Schulze). - أصبح تحسين القراءة حسب الترتيب يتعرف على الحالات التي تكون فيها أعمدة ORDER BY ثابتة بسبب شروط WHERE، مما يتيح قراءات فعّالة بالترتيب العكسي. ويفيد ذلك الاستعلامات متعددة المستأجرين مثل
WHERE tenant='42' ORDER BY tenant, event_time DESC، إذ يمكنها الآن استخدام InReverseOrder بدلًا من الحاجة إلى sort كامل. #94103 (matanper). - استحداث صنف Enum AST متخصص لتخزين معاملات القيم في أزواج (string, integer) بدلًا من العناصر الفرعية ASTLiteral، بهدف تحسين استهلاك الذاكرة. #94178 (Ilya Yatsishin).
- تحليل الفهرس الموزع عبر replicas متعددة. وهو مفيد للتخزين المشترك وللكميات الضخمة من البيانات في cluster. وينطبق ذلك على SharedMergeTree (ClickHouse Cloud)، وقد ينطبق أيضًا على أنواع أخرى من جداول MergeTree على تخزين مشترك. #86786 (Azat Khuzhin).
- تقليل overhead الخاص بمرشحات runtime في join عبر تعطيلها في الحالات التالية: - عند تعيين عدد كبير جدًا من البتات في bloom filter - عند تصفية عدد قليل جدًا من الصفوف أثناء runtime. #91578 (Alexander Gololobov).
- استخدام مخزن مؤقت داخل الذاكرة لمدخلات الاستعلامات الفرعية المترابطة لتجنب تقييمها عدة مرات. جزء من #79890. #91205 (Dmitry Novik).
- السماح لجميع replicas بسرقة النطاقات اليتيمة في القراءة باستخدام parallel replicas. وهذا يحسّن موازنة الحمل ويقلل tail latency. #91374 (zoomxi).
- أصبح external aggregation/sorting/join يراعي الآن إعداد الاستعلام
temporary_files_codecفي جميع السياقات. كما أُصلحت profile events المفقودة لخوارزمية grace hash join. #92388 (Vladimir Cherkasov). - جعل اكتشاف استخدام ذاكرة الاستعلام عند spilling to disk أثناء aggregation/sorting أكثر متانة. #92500 (Azat Khuzhin).
- تقدير العدد الإجمالي للصفوف وإحصاءات NDV (عدد القيم المميزة) لأعمدة مفاتيح aggregation. #92812 (Alexander Gololobov).
- تحسين Compression لقائمة postings باستخدام simdcomp. #92871 (Peng Jian).
- إعادة هيكلة معالجة الوضع ordered في S3Queue باستخدام buckets. من شأن ذلك أيضًا تحسين الأداء وتقليل عدد طلبات Keeper. #92889 (Kseniia Sumarokova).
- يمكن الآن للدالتين
mapContainsKeyLikeوmapContainsValueLikeالاستفادة من text index علىmapKeys()أوmapValues()على الترتيب. #93049 (Michael Jarrett). - تقليل استهلاك الذاكرة على الأنظمة غير التابعة لـ Linux (تمكين purge الفوري لـ dirty pages الخاصة بـ jemalloc). #93360 (Eduard Karacharov).
- فرض purge لـ arenas الخاصة بـ jemalloc إذا تجاوزت نسبة حجم dirty pages إلى
max_server_memory_usageالقيمةmemory_worker_purge_dirty_pages_threshold_ratio. #93500 (Eduard Karacharov). - تقليل استهلاك الذاكرة في AST. #93601 (Nikolai Kochetov).
- في بعض الحالات، لاحظنا أن ClickHouse لا يلتزم بـ memory limit عند القراءة من table. تم إصلاح هذا السلوك. #93715 (Nikita Mikhaylov).
- تفعيل extension الخاص بـ Keeper لكل من
CHECK_STATوTRY_REMOVEافتراضيًا. #93886 (Mikhail Artemenko). - تحليل الحدين الأدنى والأعلى لأسماء الملفات المقابلة لعمليات حذف المواضع من entries في manifest file الخاص بـ Iceberg، لتحسين اختيار data files المقابلة. #93980 (Daniil Ivanik).
- إضافة إعدادين آخرين للتحكم في الحد الأقصى لعدد subcolumns الديناميكية في JSON column. الأول هو MergeTree setting
merge_max_dynamic_subcolumns_in_compact_part(مماثل للإعداد المضاف سابقًاmerge_max_dynamic_subcolumns_in_wide_part) ويحدّ من عدد subcolumns الديناميكية التي تُنشأ أثناء merge إلى compact part. والثاني هو إعداد على مستوى query باسمmax_dynamic_subcolumns_in_json_type_parsingيحدّ من عدد subcolumns الديناميكية التي تُنشأ أثناء parsing لبيانات JSON، ما يتيح تحديد الحد عند insert. #94184 (Pavel Kruglov). - تحسين طفيف لعملية squashing الخاصة بـ JSON columns في بعض الحالات. #94247 (Pavel Kruglov).
- خفض أحجام queue الخاصة بـ thread pool استنادًا إلى الخبرة في بيئات production. وإضافة فحص صريح لاستهلاك الذاكرة قبل قراءة أي بيانات من MergeTree. #94692 (Nikita Mikhaylov).
- التأكد من أن scheduler يفضّل thread الخاص بـ MemoryWorker عند شحّ موارد CPU، لأنه يحمي عملية ClickHouse من تهديد وجودي. #94864 (Nikita Mikhaylov).
- تشغيل purge لـ dirty pages الخاصة بـ jemalloc في thread مختلف عن thread الرئيسي لـ MemoryWorker. وإذا كانت عملية purge بطيئة، فقد تؤخر تحديثات استخدام RSS، ما قد يؤدي إلى إنهاء العملية بسبب نفاد الذاكرة. وإضافة config جديد باسم
memory_worker_purge_total_memory_threshold_ratioلبدء purge لـ dirty pages استنادًا إلى نسبة إجمالي استخدام الذاكرة. #94902 (Antonio Andelic).
تحسينات
- أصبح
system.blob_storage_logمتاحًا الآن لـ Azure Blob Storage. #93105 (Alexey Milovidov). - تمت إضافة
blob_storage_logلكلٍّ من Local وHDFS. كما أُصلح خطأ كان يحدث عندما يستخدمS3Queueقيمة غير اسم القرص للتسجيل فيblob_storage_log. وأُضيف العمودerror_codeإلىblob_storage_log. كذلك جرى تقسيم ملف التهيئة الخاص بالاختبارات لتبسيط الاختبار المحلي. #93106 (Alexey Milovidov). - سيقوم
clickhouse-clientوclickhouse-localالآن بإبراز مجموعات الأرقام (الآلاف والملايين وما إلى ذلك) داخل القيم الرقمية الحرفية أثناء الكتابة. هذا يُغلق #93100. #93108 (Alexey Milovidov). - أُضيف دعم في
clickhouse-clientلوسائط سطر الأوامر التي تحتوي على مسافات حول علامة التساوي. يُغلق هذا #93077. #93174 (Cole Smith). - مع
<interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>، يمكن لعميل CLI الآن الرجوع تلقائيًا إلى Ctrl-R للبحث العادي كما كان سابقًا، بينما يُستخدم Ctrl-T للبحث الضبابي. #87785 (Larry Snizek). - كانت العبارة المستخدمة لمسح الذاكرات المؤقتة
SYSTEM DROP [...] CACHEتعطي انطباعًا خاطئًا بأنها تعطل الذاكرة المؤقتة. يدعم ClickHouse الآن العبارةSYSTEM CLEAR [...] CACHEلأنها أوضح. وتظل الصياغة القديمة متاحة. #93727 (Pranav Tiwari). - دعم استخدام عدة أعمدة كمفتاح أساسي في
EmbeddedRocksDB. يُغلق هذا #32819. #33917 (usurai). - أصبح من الممكن الآن استخدام IN غير ثابتة مع القيم scalar (استعلامات مثل
val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi). - منع تمرير الترويسات
x-amz-server-side-encryptionإلى طلبات S3 من نوعHeadObjectوUploadPartوCompleteMultipartUploadلأنها غير مدعومة. #64577 (Francisco J. Jurado Moreno). - تتبّع partitioning الخاص بـ hive في الوضع ordered ضمن S3Queue. يحل هذا #71161. #81040 (Anton Ivashkin).
- تحسين حجز المساحة في filesystem cache. سيُنفَّذ
FileCache::collectCandidatesForEvictionمن دون قفل حصري. #82764 (Kseniia Sumarokova). - دعم استراتيجية rotation مركبة (الحجم + الوقت) لـ server log. #87620 (Jianmei Zhang).
- يمكن لعميل CLI الآن تحديد
<warnings>false</warnings>بدلًا من وسيطة سطر الأوامر--no-warnings. #87783 (Larry Snizek). - إضافة دعم للدالة التجميعية
avgمع قيم Date وDateTime وTime كوسائط. يُغلق #82267. #87845 (Yarik Briukhovetskyi). - أصبح التحسين
use_join_disjunctions_push_downمفعّلًا افتراضيًا. #89313 (Alexey Milovidov). - دعم المزيد من محركات الجداول وأنواع مصادر البيانات في الاستعلامات الفرعية المترابطة. يُغلق #80775. #90175 (Dmitry Novik).
- إذا تم تحديد مخطط العرض ذي المعلمات صراحةً، فسيُعرض. يُغلق #88875، #81385. #90220 (Grigorii Sokolik).
- التعامل بشكل صحيح مع الفجوة في إدخالات سجل Keeper إذا كانت السجلات تسبق آخر فهرس مُعتمد. #90403 (Antonio Andelic).
- تحسين الإعداد
min_free_disk_bytes_to_perform_insertليعمل بشكل صحيح مع وحدات JBOD. #90878 (Aleksandr Musorin). - إتاحة تحديد الإعداد
storage_class_nameفي المجموعات المسماة لمحرك الجدولS3ودالة الجدولs3. #91926 (János Benjamin Antal). - دعم الإدراج في ZooKeeper إضافي عبر
system.zookeeper. #92092 (RinChanNOW). - إضافة مقاييس جديدة إلى Keeper: أحداث profile
KeeperChangelogWrittenBytesوKeeperChangelogFileSyncMicrosecondsوKeeperSnapshotWrittenBytesوKeeperSnapshotFileSyncMicroseconds، بالإضافة إلى مقاييس المدرج التكراريKeeperBatchSizeElementsوKeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). - إضافة إعداد جديد،
trace_profile_events_list، يقيّد التتبّع باستخدامtrace_profile_eventبقائمة أسماء الأحداث المحددة. يتيح ذلك جمع بيانات أدق في أحمال العمل الكبيرة. #92298 (Alexey Milovidov). - دعم SYSTEM NOTIFY FAILPOINT لنقاط الفشل القابلة للإيقاف المؤقت. - دعم SYSTEM WAIT FAILPOINT fp PAUSE/RESUME. #92368 (Shaohua Wang).
- إضافة العمود
creation(implicit/explicit) إلىsystem.data_skipping_indices. #92378 (Raúl Marín). - السماح بتمرير وصف الأعمدة لجداول YTsaurus الديناميكية إلى مصدر القاموس. #92391 (MikhailBurdukov).
- في #63985، أصبح بالإمكان تحديد جميع المعلمات اللازمة لإعداد TLS لكل منفذ على حدة (راجع البروتوكولات القابلة للتركيب)، بحيث لا نعود بحاجة إلى الاعتماد على إعداد TLS عام. ومع ذلك، لا يزال التنفيذ يتطلب ضمنيًا وجود قسم إعداد عام
openSSL.server، وهو ما يتعارض مع البيئات التي تحتاج إلى إعدادات TLS مختلفة لمنافذ مختلفة. على سبيل المثال، في عمليات نشر keeper-in-server، نحتاج إلى إعدادات TLS منفصلة للاتصال بين Keeper واتصالات عميل ClickHouse. #92457 (Miсhael Stetsyuk). - تقديم إعداد جديد
input_format_binary_max_type_complexityيقيّد العدد الإجمالي لعُقد الأنواع التي يمكن فك ترميزها بالتنسيق الثنائي، وذلك لمنع حمولات البيانات الضارة. #92519 (Raufs Dunamalijevs). - إظهار المهام قيد التشغيل في
system.background_schedule_pool{,_log}. وإضافة التوثيق. #92587 (Azat Khuzhin). - تنفيذ الاستعلام الحالي في بحث Ctrl+R داخل العميل إذا لم يتم العثور على أي تطابق في السجل. #92749 (Azat Khuzhin).
- دعم
EXPLAIN indices = 1كاسم بديل لـEXPLAIN indexes = 1. يغلق #92483. #92774 (Pranav Tiwari). - يتيح قارئ Parquet الآن قراءة أعمدة Tuple أو Map بصيغة JSON: يعمل
select x from file(f.parquet, auto, 'x JSON')حتى إذا كان نوع العمودxفيf.parquetهو tuple أو map. #92864 (Michael Kolupaev). - دعم tuple الفارغة في قارئ Parquet. #92868 (Michael Kolupaev).
- التراجع إلى النسخ بأسلوب القراءة والكتابة في Azure Blob Storage عندما تفشل عملية النسخ الأصلية مع BadRequest (على سبيل المثال، عند وجود قائمة block غير صالحة). سابقًا، كان هذا يُنفَّذ فقط عند حدوث الخطأ Unauthorized، والذي كان يظهر عند نسخ blob إلى storage accounts مختلفة. لكننا نرى أيضًا أحيانًا الخطأ “The specified block list is invalid”. لذلك تم الآن تحديث الشرط للتراجع إلى القراءة والكتابة عند فشل أي عملية نسخ أصلية. #92888 (Smita Kulkarni).
- إصلاح تقييد EC2 metadata endpoint عند تشغيل عدد كبير من استعلامات S3 المتزامنة باستخدام بيانات اعتماد ملف تعريف مثيل EC2. سابقًا، كان كل استعلام ينشئ
AWSInstanceProfileCredentialsProviderخاصًا به، مما كان يؤدي إلى طلبات متزامنة إلى خدمة بيانات EC2 الوصفية، وقد يتسبب في حالات timeout وأخطاءHTTP response code: 403. الآن أصبح موفر بيانات الاعتماد يُخزَّن مؤقتًا ويُشارَك بين جميع الاستعلامات. #92891 (Sav). - إعادة العمل على الإعداد
insert_select_deduplicateلإتاحة الحفاظ على التوافق مع الإصدارات السابقة. #92951 (Sema Checherinda). - تسجيل المهام الخلفية الأبطأ من المتوسط (
background_schedule_pool_log.duration_threshold_milliseconds=30) لتجنّب الإفراط في تسجيل المهام. #92965 (Azat Khuzhin). - في الإصدارات السابقة، كانت بعض أسماء دوال C++ تُعرض بشكل غير صحيح (“mangled”) في
system.trace_logوsystem.symbols، ولم تكن الدالةdemangleتتعامل معها جيدًا. يُغلق #93074. #93075 (Alexey Milovidov). - أُضيف إعداد النسخ الاحتياطي
backup_data_from_refreshable_materialized_view_targetsلتخطي النسخ الاحتياطي لأهداف الـ refreshable materialized views. أما RMVs التي تستخدم استراتيجية التحديث APPEND، فيتم دائمًا نسخها احتياطيًا. #93076 (Julia Kartseva). #93658 (Julia Kartseva) - استخدام الحد الأدنى من معلومات Debug بدلًا من عدم تضمين أي معلومات Debug لوحدات الترجمة الثقيلة، مثل الدوال. #93079 (Alexey Milovidov).
- أُضيف دعم التوافق مع MinIO إلى AWS S3 C++ SDK من خلال تنفيذ ربط لرموز الأخطاء الخاصة بـ MinIO. يتيح هذا التغيير لـ ClickHouse التعامل بشكل صحيح مع أخطاء خادم MinIO وإعادة المحاولة عند استخدام عمليات نشر MinIO بدلًا من AWS S3، مما يحسّن الاعتمادية للمستخدمين الذين يشغّلون object storage على clusters MinIO self-hosted. #93082 (XiaoBinMu).
- كتابة ملفات jemalloc profile symbolized، مما يلغي الحاجة إلى binary أثناء generation الخاصة بـ heap profile. #93099 (Azat Khuzhin).
- أُعيد إحياء أداة
clickhouse git-importبعد أن كانت معطلة مع commits الكبيرة وغير الصالحة. راجع https://presentations.clickhouse.com/2020-matemarketing/. #93202 (Alexey Milovidov). - لا تعرض كلمات المرور من URL storage في query log. #93245 (Konstantin Vedernikov).
- دعم النوع
GeometryفيflipCoordinates. #93303 (Bharat Nallan). - تحسين تجربة المستخدم في SYSTEM INSTRUMENT ADD/REMOVE: استخدام قيم
Stringالنصية لأسماء الدوال، وتطبيق التصحيح على جميع الدوال المطابقة، والسماح باستخدام function_name فيREMOVE. #93345 (Pablo Marcos). - إضافة إعداد جديد
materialize_statistics_on_mergeيفعّل/يعطّل materializing للإحصاءات أثناء merge. القيمة الافتراضية هي1. #93379 (Han Fei). - أصبح ClickHouse الآن قادرًا على parse
SELECTدون أقواس في استعلاماتDESCRIBE SELECT. يُغلق #58382. #93429 (Yarik Briukhovetskyi). - إضافة إضفاء الطابع العشوائي على checks الخاصة بصحة cache وفق احتمال محدد. #93439 (Kseniia Sumarokova).
- أُضيف الإعداد
type_json_allow_duplicated_key_with_literal_and_nested_objectللسماح بالمسارات المكررة في JSON عندما تكون إحداها قيمة حرفية والأخرى كائنًا متداخلًا، مثل{"a" : 42, "a" : {"b" : 42}}. ربما تكون بعض البيانات قد أُنشئت قبل إضافة هذا القيد على المسارات المكررة في https://github.com/ClickHouse/ClickHouse/pull/79317، وقد يؤدي التعامل معها الآن إلى حدوث أخطاء. وباستخدام هذا الإعداد، يمكن الاستمرار في استخدام هذه البيانات القديمة من دون أخطاء. #93604 (Pavel Kruglov). - لا تطبع قيم الأنواع البسيطة في Pretty JSON على أسطر منفصلة. #93836 (Pavel Kruglov).
- عند وجود عدد كبير من عبارات
alter table ... modify setting ...، قد يتعذر الحصول على القفل خلال 5 ثوانٍ. من الأفضل إرجاعtimeoutبدلًا منlogical error. #93856 (Han Fei). - منع الإخراج المفرط عند حدوث خطأ في الصياغة. قبل هذا التغيير، كان النظام يطبع سكربت SQL بالكامل، وقد يحتوي على عدد كبير من الاستعلامات. #93876 (Alexey Milovidov).
- أُصلح حساب حجم البايت لطلب
checkمع الإحصاءات في Keeper بشكل صحيح. #93907 (Mikhail Artemenko). - أُضيف الإعداد
use_hash_table_stats_for_join_reorderingللتحكم في ما إذا كانت إحصاءات حجم hash table وقت التشغيل تُستخدم لإعادة ترتيب join. هذا الإعداد مفعّل افتراضيًا، بما يحافظ على السلوك الحالي لـcollect_hash_table_stats_during_joins. #93912 (Vladimir Cherkasov). - يمكن للمستخدمين الآن عرض جزء من إعدادات الخادم العامة المتداخلة في الجدول
system.server_settings(مثلlogger.level). ويقتصر ذلك على الإعدادات ذات البنية الثابتة فقط (من دون قوائم أو تعدادات أو تكرارات وما إلى ذلك). #94001 (Hechem Selmi). - يمكن الآن مقارنة
QBitللتحقق من التساوي. #94078 (Raufs Dunamalijevs). - عندما يكتشف Keeper وجود snapshot تالفة أو سجلات تغييرات غير متسقة، يُطرح استثناء بدلًا من الإنهاء اليدوي أو تنظيف الملفات تلقائيًا. ومن المفترض أن يؤدي ذلك إلى سلوك أكثر أمانًا في Keeper يعتمد على التدخل اليدوي. #94168 (Antonio Andelic).
- إصلاح مشكلة ترك بقايا محتملة في حال فشل
CREATE TABLE. #94174 (Azat Khuzhin). - إصلاح الوصول إلى ذاكرة غير مهيأة (وهو خلل في OpenSSL) عند استخدام مفتاح TLS محمي بكلمة مرور. #94182 (Konstantin Bogdanov).
- ترقية chdig إلى v26.1.1. #94290 (Azat Khuzhin).
- دعم partitioning أكثر عمومية لوضع S3Queue المرتب. #94321 (Bharat Nallan).
- أُضيف alias باسم
use_statisticsللإعدادallow_statistics_optimize. وهذا أكثر اتساقًا مع الإعدادات الحاليةuse_primary_keyوuse_skip_indexes. #94366 (Robert Schulze). - تم تفعيل الإعداد
input_format_numbers_enum_on_conversion_errorللتحويل من Numbers إلى Enums للتحقق من وجود العنصر. #94384 (Elmi Ahmadov). - في وضع ordered لـ S3(Azure)Queue، أصبح تنظيف العُقد الفاشلة يتم عبر تتبّع الحدود (وكان هذا قبل ذلك يُنفَّذ فقط في وضع Unordered لكلٍّ من العُقد الفاشلة والمُعالجة، لذا سيُنفَّذ الآن أيضًا في Ordered ولكن للعُقد الفاشلة فقط). #94412 (Kseniia Sumarokova).
- تم تمكين إدارة الوصول للمستخدم
defaultفي clickhouse-local. كان المستخدم default فيclickhouse-localيفتقد امتياز access_management، مما كان يتسبب في فشل عمليات مثلDROP ROW POLICY IF EXISTSمع الخطأACCESS_DENIED، رغم أنه يُفترض ألا يكون هذا المستخدم مقيّدًا. #94501 (Alexey Milovidov). - تم تمكين named collection لقواميس YTsaurus وجداوله. #94582 (MikhailBurdukov).
- تمت إضافة دعم named collections المعرّفة عبر SQL في BACKUP/RESTORE لكل من S3 وAzure Blob Storage. يُغلق #94604. #94605 (Pablo Marcos).
- دعم التقسيم إلى buckets استنادًا إلى partition key في S3Queue في وضع ordered. #94698 (Bharat Nallan).
- تمت إضافة metric غير متزامن يتضمن الزمن المنقضي لأطول عملية merge قيد التشغيل. #94825 (Raúl Marín).
- تمت إضافة فحص للملف المرتبط قبل تطبيق position delete باستخدام IcebergBitmapPositionDeleteTransform. #94897 (Yang Jiang).
- الآن يعرض
view_duration_msالمدة التي كانت خلالها المجموعة نشطة، لا مجموع مدة الخيوط داخلها. #94966 (Sema Checherinda). - أُزيل الحد الأقصى لعدد tokens البحث في الدالتين
hasAnyTokensوhasAllTokens، والذي كان محددًا بـ 64. مثال:SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]);كان هذا الـ query سيؤدي إلى الخطأBAD_ARGUMENTSلوجود 65 token بحث. مع طلب السحب هذا، أُزيل الحد بالكامل، وأصبح الـ query نفسه يعمل دون خطأ. #95152 (Elmi Ahmadov). - تمت إضافة الإعداد
input_format_numbers_enum_on_conversion_errorللتحويل من Numbers إلى Enums للتحقق من وجود العنصر. يُغلق: #56144. #56240 (Nikolay Degterinsky). - تمت مشاركة موارد محلل format بين قراءة ملف البيانات وملف position delete في جداول Iceberg لتقليل عمليات تخصيص الذاكرة. #94701 (Yang Jiang).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- يُصلح خطأً كانت فيه معالجات الاستعلامات المعرّفة مسبقًا تفسّر المسافات البيضاء اللاحقة على أنها بيانات أثناء عمليات insert. #83604 (Fabian Ponce).
- يُصلح الخطأ INCOMPATIBLE_TYPE_OF_JOIN في Join storage عند تطبيق تحسين تحويل outer join إلى inner join. يحلّ #80794. #84292 (Vladimir Cherkasov).
- يُصلح الاستثناء “Invalid number of rows in Chunk” عند استخدام hash join مع تفعيل
allow_experimental_join_right_table_sorting. #86440 (yanglongwei). - يستبدل أسماء الملفات دائمًا بقيم hash في MergeTree إذا كان filesystem غير حساس لحالة الأحرف. سابقًا، كان هذا قد يؤدي في الأنظمة ذات filesystem غير الحساس لحالة الأحرف (مثل MacOS) إلى تلف البيانات عندما تختلف عدة أسماء column/subcolumn فقط في حالة الأحرف. #86559 (Pavel Kruglov).
- يضيف تحققًا كاملًا من permissions في مرحلة CREATE للاستعلام الأساسي داخل materialized view. #89180 (pufit).
- يُصلح crash في الدالة
icebergHashعند استخدام argument ثابت. #90335 (Michael Kolupaev). - يُصلح logical error يحدث عندما تُعدّل mutation من دون transaction أجزاء parts ضمن transaction نشطة ثم يجري التراجع عنها في النهاية. #90469 (Shaohua Wang).
- يحدّث
system.warningsبشكل صحيح بعد تحويل database عادية إلى database من نوع atomic. #90473 (sdk2). - يُصلح assertion عند القراءة من Parquet file، عندما يُستخدم جزء من تعبير prewhere أيضًا في موضع آخر من الاستعلام. #90635 (Max Kainov).
- يُصلح crash في cluster أحادي العقدة عند القراءة من Iceberg في وضع split-by-buckets. يُغلق هذا #90913. #91553 (Konstantin Vedernikov).
- يُصلح logical error محتملًا في Log engine أثناء قراءة subcolumns. يُغلق #91710. #91711 (Pavel Kruglov).
- يُصلح الخطأ Logical error: ‘Storage does not support transaction’ أثناء ATTACH AS REPLICATED. #91772 (Shaohua Wang).
- إصلاح لعمل Runtime Filters بشكل غير صحيح عندما يحتوي LEFT ANTI JOIN على post-condition إضافي. #91824 (Alexander Gololobov).
- يُصلح خطأً يحدث عند وجود مقارنة null-safe تتضمن النوع Nothing. يُغلق #91834. يُغلق #84870. يُغلق #91821. #91884 (Yarik Briukhovetskyi).
- يُصلح أخطاء في فك ترميز DELTA_BYTE_ARRAY في native Parquet reader تؤثر في بيانات String كثيرة التكرار. #91929 (Daniel Muino).
- خزّن الـ schema فقط للملف الذي استُنتجت منه ضمن globs بدلًا من جميع الملفات أثناء schema inference. يُغلق #91745. #92006 (Pavel Kruglov).
- أصلِح الخطأ
Couldn't pack tar archive: Failed to write all bytesالناتج عن حجم header غير الصحيح لمدخل الأرشيف. يُصلح #89075. #92122 (Julia Kartseva). - حرّر stream الطلب في insert select لمنع إغلاق HTTP connection. #92175 (Sema Checherinda).
- أصلِح logical error في queries التي تتضمن عدة JOINs مع clause
USINGوjoin_use_nulls. #92251 (Vladimir Cherkasov). - أصلِح logical error أثناء إعادة ترتيب join مع join_use_nulls، ويُغلق https://github.com/clickhouse/clickhouse/issues/90795. #92289 (Vladimir Cherkasov).
- أصلِح عدم اتساق تنسيق AST لـ arrayElement مع negate literal. يُغلق #92288 يُغلق #92212 يُغلق #91832 يُغلق #91789 يُغلق #91735 يُغلق #88495 يُغلق #92386. #92293 (Pavel Kruglov).
- أصلِح احتمال حدوث crash مع الإعداد
join_on_disk_max_files_to_merge. #92335 (Bharat Nallan). - issue ذات صلة: #https://github.com/ClickHouse/support-escalation/issues/6365. #92339 (Tuan Pham Anh).
- أصلِح missing access check في
SYSTEM SYNC FILE CACHE. يُغلق #92101. #92372 (Kseniia Sumarokova). - أصلِح تمرير
count_distinct_optimizationعبر window functions وعبر عدة arguments. #92376 (Raúl Marín). - أصلِح الخطأ “Cannot write to finalized buffer” عند استخدام aggregate functions معينة مع window functions. يُغلق #91415. #92395 (Jimmy Aguilar Mena).
- أصلِح logical error مع
CREATE TABLE ... AS urlCluster()وdatabase engine Replicated. يُغلق #92216. #92418 (Kseniia Sumarokova). - ورّث إعدادات معلومات serialization الخاصة بالـ part المصدر أثناء mutation في MergeTree. وهذا يُصلح احتمال ظهور نتيجة query غير صحيحة على part mutated بعد تغييرات في serialization الخاصة بـ data types. #92419 (Pavel Kruglov).
- إصلاح تعارض محتمل بين عمود وعمود فرعي يحملان الاسم نفسه، ما قد يؤدي إلى استخدام serialization غير صحيح وفشل الاستعلامات. يُغلق #90219. يُغلق #85161. #92453 (Pavel Kruglov).
- إصلاح
LOGICAL_ERRORكان يحدث بسبب تعديل غير مقصود في query plan عند تحويل OUTER JOIN إلى INNER JOIN. كما جرى تخفيف متطلبات هذا التحسين ليصبح قابلاً للتطبيق أيضاً في الحالات التي تُطبَّق فيها الدوال الحقنية على مفاتيح التجميع أثناء joins. #92503 (János Benjamin Antal). - إصلاح الخطأ المحتمل
SIZES_OF_COLUMNS_DOESNT_MATCHأثناء فرز عمود Tuple فارغ. يُغلق #92422. #92520 (Pavel Kruglov). - التحقق من وجود paths غير متوافقة من حيث النوع في JSON type. يُغلق #91577. #92539 (Pavel Kruglov).
- إصلاح حالة deadlock في SHOW CREATE DATABASE لقاعدة بيانات Backup. #92541 (Azat Khuzhin).
- استخدام رمز الخطأ الصحيح عند التحقق من hypothesis index. #92559 (Raúl Marín).
- إصلاح resolution للأعمدة الفرعية الديناميكية في aliases الأعمدة داخل analyzer. في السابق، كان العمود الفرعي الديناميكي في alias العمود يُغلَّف داخل
getSubcolumn، وفي بعض الحالات لم يكن يمكن resolve له إطلاقاً. يُغلق #91434. #92583 (Pavel Kruglov). - منع حدوث crash في tokens() عندما تكون الوسيطة الثانية بقيمة NULL. #92586 (Raúl Marín).
- إصلاح crash محتمل ناتج عن mutation موضعي للأعمدة الثابتة الأساسية في PREWHERE. كان يمكن أن يحدث ذلك عند تقليص العمود (
IColumn::shrinkToFit) أو تطبيق filter عليه (IColumn::filter)، وهو ما كان يمكن أن يُحفَّز بالتزامن من عدة threads. #92588 (Arsen Muk). - جرى تعطيل إنشاء text indexes وmaterializing لها مؤقتاً على الجداول التي تحتوي على parts كبيرة (أكثر من 4,294,967,295 صفاً). يمنع هذا القيد ظهور نتائج استعلامات غير صحيحة، لأن التطبيق الحالي للفهرس لا يدعم بعد مثل هذه الأجزاء الكبيرة. #92644 (Anton Popov).
- إصلاح logical error من نوع
Too large size (A) passed to allocatorأثناء تنفيذ عمليات JOIN. يُغلق #92043. #92667 (Yarik Briukhovetskyi). - إزالة خلل كان يؤدي إلى أن indexes من نوع
ngrambf_v1ذات طول ngram (المعامل الأول) > 8 كانت تطرح استثناءً. #92672 (Robert Schulze). - إصلاح استثناء غير ملتقط أثناء إعادة تحميل named collections في الخلفية عند استخدام تخزين ZooKeeper. يُغلق https://github.com/ClickHouse/clickhouse-private/issues/44180. #92717 (Kseniia Sumarokova).
- يُعيد العمل على المنطق غير الصحيح في التحقق من grants الوصول الخاصة بمنح wildcard. كانت المحاولة السابقة https://github.com/ClickHouse/ClickHouse/pull/90928 تعالج ثغرة حرجة، لكنها كانت مقيِّدة أكثر من اللازم، ما أدى إلى فشل بعض عبارات
GRANTالخاصة بـ wildcard بسبب عملياتREVOKEغير مرتبطة. #92725 (pufit). - إصلاح خطأ في منطق تخطي البيانات عند استخدام
not match(...)فيWHERE، ما كان يؤدي إلى نتائج غير صحيحة. يغلق #92492. #92726 (Nihal Z. Miaji). - عدم محاولة حذف الأدلة المؤقتة عند بدء التشغيل إذا أُنشئ جدول MergeTree على قرص للقراءة فقط. #92748 (Alexey Milovidov).
- إصلاح الخطأ “Cannot add action to empty ExpressionActionsChain” في ALTER TABLE REWRITE PARTS (v2). #92754 (Azat Khuzhin).
- تجنّب التعطل بسبب القراءة من
Connectionمنقطعة. #92807 (Raufs Dunamalijevs). - إصلاح الخطأ المنطقي
Failed to set file processing within 100 retriesفيS3Queueضمن وضعOrdered. وقد استُبدل الآن بتحذير. كان يمكن أن يحدث هذا الخطأ قبل الإصدار 25.10 إذا انتهت صلاحية جلسة Keeper، لكنه سيظل مجرد تحذير في إصدارات 25.10+ أيضًا، إذ لا يزال من الممكن نظريًا ظهور هذا الخطأ عند ارتفاع تزامن المعالجة في وضعOrdered. #92814 (Kseniia Sumarokova). - في السابق، كانت بعض queries التي تستخدم sharding بالمفتاح الأساسي PK مع شرط غير صحيح تفشل. الآن لم تعد كذلك. هذا مطلوب من أجل https://github.com/ClickHouse/ClickHouse/pull/89313. #92815 (Yarik Briukhovetskyi).
- إصلاح حساب الأحجام غير المضغوطة للفهارس النصية في جدول
system.parts. #92832 (Anton Popov). - إصلاح استخدام الفهرس الأساسي في lightweight updates التي تحتوي على عبارة
INمع استعلامات فرعية ضمن predicate لعبارةWHERE. #92838 (Anton Popov). - إصلاح إنشاء type hint للمسار ‘skip’ في JSON. يغلق #92731. #92842 (Pavel Kruglov).
- في محرك الجدول S3، يجب تجنّب التخزين المؤقت لمفتاح partition إذا كانت هناك دوال غير حتمية. #92844 (Miсhael Stetsyuk).
- إصلاح خطأ محتمل
FILE_DOESNT_EXISTبعد mutation لعمود sparse معratio_of_defaults_for_sparse_serialization=0.0. يغلق #92633. #92860 (Pavel Kruglov). - إصلاح schema inference في Parquet في قارئ Parquet القديم (غير المستخدم افتراضيًا) عندما يأتي عمود JSON بعد عمود Tuple. وإصلاح فشل قارئ Parquet القديم (غير المستخدم افتراضيًا) مع tuples الفارغة. #92867 (Michael Kolupaev).
- إصلاح خطأ منطقي عند وجود عدة عمليات join على شرط ثابت ومع
join_use_nulls. إغلاق #92640. #92892 (Vladimir Cherkasov). - إصلاح الخطأ المحتمل
NOT_FOUND_COLUMN_IN_BLOCKأثناء insert إلى جدول يحتوي على عمود فرعي ضمن partition expression. إغلاق #93210. إغلاق #83406. #92905 (Pavel Kruglov). - إصلاح الخطأ
NO_SUCH_COLUMN_IN_TABLEفي محرك Merge فوق الجداول التي تحتوي على aliases. إغلاق #88665. #92910 (Pavel Kruglov). - إصلاح حالة
NULL != NULLفي full_sorting_join على عمود LowCardinality(Nullable(T)). #92924 (Vladimir Cherkasov). - إصلاح عدة حالات crash أثناء merges لفهارس نصية في جداول
MergeTree. #92925 (Anton Popov). - استعادة wrappers الخاصة بـ LowCardinality في نتائج تعبيرات SET عند الحاجة أثناء aggregation الخاصة بـ TTL، لمنع الاستثناءات أثناء تحسين الجدول. #92971 (Seva Potapov).
- إصلاح خطأ منطقي أثناء index analysis عند استخدام Array فارغة في الدالة
has. إغلاق #92906. #92995 (Nihal Z. Miaji). - إصلاح احتمال حدوث تعليق عند إنهاء background schedule pool (وقد يؤدي ذلك إلى تعليق server عند الإغلاق). #93008 (Azat Khuzhin).
- إصلاح الخطأ المحتمل FILE_DOESNT_EXIST بعد mutation على عمود sparse عندما جرى تغيير الإعداد
ratio_of_defaults_for_sparse_serializationإلى1.0عبر alter. #93016 (Pavel Kruglov). - إصلاح خلل في منطق data skipping عند استخدام
not materialize(...)أوnot CAST(...)في WHERE، ما يؤدي إلى نتائج غير صحيحة. إغلاق #88536. #93017 (Nihal Z. Miaji). - إصلاح احتمال استخدام outdated parts بسبب سباق TOCTOU للأجزاء المشتركة. #93022 (Azat Khuzhin).
- إصلاح crash عند إلغاء تسلسل aggregate state الخاصة بـ
groupConcatإذا كانت معطوبة وتحتوي على offsets خارج الحدود. #93028 (Raufs Dunamalijevs). - إصلاح ترك connection في حالة معطوبة بعد الإلغاء المبدئي للاستعلامات الموزعة. #93029 (Azat Khuzhin).
- إصلاح نتائج join عندما يكون join key في الطرف الأيمن عمودًا sparse. هذا يُغلق #92920. لم أتمكن من إعادة إنتاج الخلل إلا مع
set compatibility='23.3'. لست متأكدًا مما إذا كان ينبغي backport له. #93038 (Amos Bird). - إصلاح مشكلة محتملة تتمثل في
Cannot finalize buffer after cancellationفيestimateCompressionRatio(). إصلاح: #87380. #93068 (Azat Khuzhin). - إصلاح عمليات دمج الفهارس النصية المبنية فوق تعبيرات معقدة (مثل
concat(col1, col2)). #93073 (Anton Popov). - إصلاح تطبيق projection عندما يحتوي filter على subcolumns. إغلاق #92882. #93141 (Pavel Kruglov).
- إصلاح logical error في بعض الحالات التي تحدث عند إضافة join runtime filters إلى query plan. وكان السبب هو إرجاع أعمدة const مكررة بشكل غير صحيح من أحد طرفي join. #93144 (Alexander Gololobov).
- كانت الدالة الخاصة
__applyFilterالمستخدمة من قِبل join runtime filters تُرجع ILLEGAL_TYPE_OF_ARGUMENT في بعض الحالات الصحيحة. #93187 (Alexander Gololobov). - منع انهيار أعمدة interpolated المختلفة إلى العمود نفسه داخل block عندما تكون أعمدة interpolated في الواقع aliases للعمود نفسه. #93197 (Yakov Olkhovskiy).
- عدم إضافة runtime filter عند إجراء join مع right table ممتلئ مسبقًا. #93211 (Alexander Gololobov).
- إصلاح تنظيف watches الدائمة في Keeper بعد انتهاء session. هذا يغلق #92480. #93213 (Konstantin Vedernikov).
- إصلاح ORDER BY بحسب Tuple في Iceberg. هذا يغلق #92977. #93225 (Konstantin Vedernikov).
- إصلاح خلل في إعداد S3Queue
s3queue_migrate_old_metadata_to_buckets. إغلاق #93392، #93196، #81739. #93232 (Kseniia Sumarokova). - إزالة الأعمدة غير المستخدمة عند إعادة بناء projection أثناء merge. وهذا يقلل memory usage وينشئ parts مؤقتة أقل. #93233 (Nikolai Kochetov).
- إصلاح إزالة الأعمدة غير المستخدمة من subqueries في وجود subquery scalar مترابط. قبل هذا الإصلاح، كان يمكن إزالة العمود إذا كان مستخدمًا فقط داخل subquery المترابط، وكان query سيفشل بالخطأ
NOT_FOUND_COLUMN_IN_BLOCK. #93273 (Dmitry Novik). - إصلاح احتمال فقدان subcolumn في MV أثناء alter لـ source table. إغلاق #93231. #93276 (Pavel Kruglov).
- إصلاح تخطيط الاستعلام لمحرك الجداول
Mergeمع analyzer، والذي كان قد يُطلق الخطأ ILLEGAL_COLUMN معhostName()عند دمج الجداول المحلية والجداول البعيدة/Distributed. يُغلق #92059. #93286 (Jinlin). - إصلاح حالة كانت فيها NOT IN مع وسائط Array غير الثابتة تُرجع قيمة غير صحيحة، مع إضافة دعم دوال Array غير الثابتة. يُغلق #14980. #93314 (Yarik Briukhovetskyi).
- إصلاح الخطأ
Not found columnفي التحسينuse_top_k_dynamic_filtering. يُصلح #93186. #93316 (Nikolai Kochetov). - إصلاح إعادة بناء text indexes المُنشأة فوق subcolumns. #93326 (Anton Popov).
- إصلاح التعامل مع Array فارغة كوسيطة ثانية في الدالتين
hasAllTokensوhasAnyTokens. #93328 (Anton Popov). - إصلاح خطأ منطقي عند استخدام runtime filters في query تحتوي على totals لجدول الجانب الأيمن. #93330 (Alexander Gololobov).
- لم يعد الخادم يتعطل إذا استُدعيت الدالة
tokensباستخدام معاملات tokenizer غير ثابتة (المعاملات الثاني والثالث والرابع)، مثلSELECT tokens(NULL, 1, materialize(1)). #93383 (Robert Schulze). - إصلاح ثغرة تجاوز صحيح في إلغاء تسلسل state الخاصة بـ
groupConcat، والتي كان يمكن أن تتسبب في مشكلات سلامة الذاكرة باستخدام aggregate states مُعدّة خصيصًا. #93426 (Raufs Dunamalijevs). - إصلاح تحليل text index على array columns عندما لا يحتوي الفهرس على أي tokens (إذا كانت جميع المصفوفات فارغة أو كانت جميع tokens يتخطاها tokenizer). #93457 (Anton Popov).
- تجنّب تسجيل الدخول عبر oauth في ClickHouse Client عندما تكون username/password موجودتَين ضمن connection string. #93459 (Krishna Mannem).
- إصلاح دعم credentials المورَّدة لـ Azure ADLS Gen2 في DataLakeCatalog - تحليل مفاتيح
adls.sas-token.*من REST catalogs الخاصة بـ Iceberg وإصلاح parsing لعناوين URL من نوع ABFSS. #93477 (Karun Anantharaman). - إصلاح دعم GLOBAL IN مع analyzer (إذ كانت المجموعة في السابق تُنشأ مرة أخرى على العقدة البعيدة). #93507 (Azat Khuzhin).
- إصلاح استخراج subcolumn أثناء إلغاء التسلسل مباشرةً إلى أعمدة Sparse. #93512 (Pavel Kruglov).
- إصلاح direct read من text index مع استعلامات البحث المكررة. #93516 (Anton Popov).
- إصلاح الخطأ NOT_FOUND_COLUMN_IN_BLOCK عند تمكين runtime filter وكانت الجداول المربوطة تُرجع العمود نفسه عدة مرات (مثل SELECT a, a, a FROM t). #93526 (Alexander Gololobov).
- إصلاح خلل كان يجعل
clickhouse-clientيطلب كلمة المرور مرتين عند الاتصال باستخدام ssh. #93547 (Isak Ellmer). - التأكد من إنهاء
zookeeperبشكل صحيح عند إيقاف التشغيل (مع إصلاح احتمال التعليق أثناء الإيقاف في حالات نادرة جدًا). #93602 (Azat Khuzhin). - إصلاح
LOGICAL_ERRORعند استعادةReplicatedMergeTreeفي حال حدوث حالة تسابق في إزالة التكرار. #93612 (Pablo Marcos). - إصلاح استخدام عمود Sparse لتحديث TTL أثناء فك التسلسل المباشر إلى أعمدة Sparse في بعض تنسيقات الإدخال. ويعالج ذلك احتمال حدوث خطأ منطقي
Unexpected type of result TTL column. #93619 (Pavel Kruglov). - إصلاح تعطل دوال H3 index أحيانًا أو توقفها عند استدعائها بمدخلات غير صالحة. #93657 (Michael Kolupaev).
- أدى استخدام الفهرس
ngram_bfعلى بيانات غير UTF-8 إلى قراءة ذاكرة غير مهيأة، مع قيم قد تنتهي إلى بنية الفهرس الناتجة. يغلق #92576. #93663 (Alexey Milovidov). - التحقق من أن حجم المخزن المؤقت بعد فك الضغط مطابق لما هو متوقع. #93690 (Raúl Marín).
- منع المستخدمين من الحصول على قائمة الأعمدة من جدول من دون التحقق من إذن
SHOW COLUMNSباستخدام محرك الجدولmerge. #93695 (János Benjamin Antal). - إصلاح materialization لفهارس skip المُنشأة فوق subcolumns. #93708 (Anton Popov).
- نخزن المؤشرات المشتركة الخاصة بوحدات التخزين في
QueryPipeline::resources::storage_holdersللتأكد من أن كائناتIStorageلا تُدمَّر ما دامPipelineExecutorقيد التشغيل. #93746 (Miсhael Stetsyuk). - إصلاح إرفاق قواعد بيانات Replicated عند تغيّر مضيف interserver بعد إعادة التشغيل. #93779 (Tuan Pham Anh).
- إصلاح assert
!read_until_positionفيReadBufferFromS3الذي كان يحدث عند تفعيل الذاكرة المؤقتة. #93809 (Kseniia Sumarokova). - إصلاح خطأ منطقي في حالة نادرة عند استخدام Tuple فارغ مع عمود
Map. يغلق #93784. #93814 (Nihal Z. Miaji). - إصلاح تلف
_part_offsetعند إعادة بناء projections أثناء merges، وتحسين معالجة projection عبر تجنب القراءات غير الضرورية للعمود_part_offsetوتخطي الأعمدة غير المطلوبة في حسابات projection. ويواصل ذلك التحسينات التي قُدمت في #93233. #93827 (Amos Bird). - إزالة معالجة ‘Bad version’. #93843 (Anton Ivashkin).
- إصلاح عدم عمل
optimize_inverse_dictionary_lookupمع الاستعلام الموزع عندما يكون المفتاح من نوع عددي صحيح موقّع. يغلق #93259. #93848 (Nihal Z. Miaji). - إصلاح عدم عمل
lag/leadمع استعلامremote()الموزع. يغلق #90014. #93858 (Nihal Z. Miaji). - إصلاح خلل في توزيع system instrument. #93937 (Pablo Marcos).
- في https://github.com/ClickHouse/ClickHouse/pull/89173، أضفنا حقلاً إضافياً إلى البنية التي يرسلها
TraceSenderعبر قناة داخلية. لكن لم يتم تحديث حجم المخزن المؤقت (هنا)، ولذلك أصبحنا نكتب إلى المخزن المؤقت بيانات أكثر مما يسمح بهbuffer_size، ما يؤدي إلى عدة عمليات flush. وبما أنTraceSender::sendيُستدعى من خيوط تنفيذ مختلفة، فقد تتداخل عمليات flush الخاصة بهذه الخيوط، مما يخلّ بالخاصية التي تعتمد عليها جهة الاستقبال (TraceCollector). #93966 (Miсhael Stetsyuk). - إصلاح تحويل النوع إلى النوع الأعلى أثناء عملية join في التخزين
Joinمع عبارةUSING. يصلح #91672. يصلح #78572. #94000 (Dmitry Novik). - إصلاح عدم إضافة FilterStep بالشكل الصحيح عند تطبيق join runtime filter على Merge table. #94021 (Alexander Gololobov).
- كان من الممكن أن يُرجع استعلام
SELECTيحتوي على predicate على عدة أعمدة مع bloom filter skip indexes، ومع وجود الشرطينORوNOT، نتائج غير متسقة. تم إصلاح ذلك الآن. #94026 (Shankar Iyer). - إصلاح CLEAR للعمود مع الفهارس التابعة. #94057 (Raúl Marín).
- إصلاح استخدام قيمة غير مهيأة في
ReadWriteBufferFromHTTP. #94058 (Alexey Milovidov). - إصلاح تحقق غير صحيح من المسارات ذات الأنواع المحددة في JSON. أُضيف هذا التحقق في https://github.com/ClickHouse/ClickHouse/pull/92842 وقد يؤدي إلى حدوث خطأ أثناء بدء تشغيل الجداول الحالية. #94070 (Pavel Kruglov).
- إصلاح الانهيار أثناء تحليل المرشح في وجود
OUTER JOIN. يصلح #90979. #94080 (Dmitry Novik). - إصلاح دقة
uniqThetaعند استخدام مفاتيح aggregation من نوع UInt8 بالتوازي (max_threads> 1 - الافتراضي). #94095 (Azat Khuzhin). - إصلاح الانهيار الناتج عن استثناء تم طرحه من استدعاء
socket.setBlocking(true)داخلSCOPE_EXIT. #94100 (Miсhael Stetsyuk). - إصلاح فقدان البيانات عندما يزيل
DROP PARTITIONالأجزاء التي أنشأتها إدخالات log لاحقة في ReplicatedMergeTree. #94123 (Tuan Pham Anh). - إصلاح المعالجة غير الصحيحة في parquet reader v3 للمصفوفات التي تتجاوز حدود الصفحة. يحدث ذلك مثلًا في الملفات التي يكتبها Arrow من دون تمكين page statistics أو page index. يؤثر هذا فقط في الأعمدة من نوع البيانات Array. ومن الأعراض المحتملة أن تُقتطع مصفوفة واحدة تقريبًا كل ~1 MB من البيانات. إلى حين تطبيق هذا الإصلاح، استخدم هذا الإعداد كحل بديل:
input_format_parquet_use_native_reader_v3 = 0. #94125 (Michael Kolupaev). - إصلاح العدد الزائد من watches في ReplicatedMergeTree أثناء انتظار log entry. #94133 (Azat Khuzhin).
- جعل الدوال
arrayShuffleوarrayPartialShuffleوarrayRandomSampleتُجسِّد الأعمدة الثابتة بحيث تحصل الصفوف المختلفة على نتائج مختلفة. #94134 (Joanna Hulboj). - إصلاح data race عند تقييم table functions داخل materialized views. #94171 (Alexey Milovidov).
- إصلاح إلغاء مرجع nullptr في محركات قاعدة البيانات
PostgreSQL(عندما يكون الاستعلام غير صحيح). يُغلق #92887. #94180 (Alexey Milovidov). - إصلاح تسرّب للذاكرة في refreshable materialized views التي تستخدم استعلامات
SELECTمع عدة subqueries. #94200 (Antonio Andelic). - إصلاح data race بين
DataPartStorageOnDiskBase::removeوsystem.parts. يُغلق #49076. #94262 (Alexey Milovidov). - إزالة محدد
noexceptالخاطئ في عملية إسناد النسخ لـ HashTable، والذي قد يؤدي إلى crash (std::terminate) عند حدوث استثناءات في الذاكرة. #94275 (Nikita Taranov). - سابقًا، كان إنشاء projection بأعمدة مكررة في GROUP BY (مثل
GROUP BY c0, c0) ثم إدراج البيانات يتسبب فيstd::length_errorإذا كانoptimize_row_orderمفعّلًا. يُغلق #94065. #94277 (Alexey Milovidov). - إصلاح خلل غامض في عميل ZooKeeper عند الاتصال، كان يؤدي إلى حالات تعليق وتعطّل. #94320 (Azat Khuzhin).
- إصلاح عدم تطبيق تحسين function to subcolumns على subcolumns. #94323 (Pavel Kruglov).
- إصلاح نتيجة قد تكون غير صحيحة في عمليات RIGHT JOIN المتداخلة عند تمكين
enable_lazy_columns_replication. كان الخلل يتسبب في أن تُرجِع جميع الصفوف في الأعمدة replicated القيمة نفسها بشكل غير صحيح بدلًا من قيمها المميزة. يُغلق #93891. #94339 (Vladimir Cherkasov). - إصلاح دفع التصفية إلى المصدر في
SEMI JOINباستخدام مجموعات التكافؤ. لا تُدفَع التصفية إذا كانت أنواعargumentقد تغيّرت. يُصلح #93264. #94340 (Dmitry Novik). - إصلاح استخدام
DeltaLake CDFمع محرك قاعدة البياناتDataLake(تكامل كتالوجات delta lake). يُغلق #94122. #94342 (Kseniia Sumarokova). - إصلاح القيمة غير الصحيحة للمقياس الحالي
FilesystemCacheSizeLimitعند استخدام سياسة التخزين المؤقتSLRU. #94363 (Kseniia Sumarokova). - أصبح إنشاء محرك قاعدة البيانات
Backupبأقل من وسيطين يعيد رسالة خطأ أكثر وضوحًا (Wrong number of argumentsبدلًا منstd::out_of_range: InlinedVector::at(size_type) const failed bounds check.). #94374 (Robert Schulze). - يتجاهل عمليات
revokeغير الممكنة للامتيازات العامة على مستوى قاعدة البيانات بالنسبة إلى امتيازاتgrantالتي تتضمن خيار grant. #94386 (pufit). - إصلاح قراءة
offsetsالمتفرقة من الأجزاء المدمجة. يُغلق #94385. #94399 (Pavel Kruglov). - لا تمنع
ALTERللأعمدة التي تستخدم فهارس ضمنية، حتى عند استخدام وضعthrowالخاص بـalter_column_secondary_index_mode. #94425 (Raúl Marín). - إصلاح تعطل في
TCPHandlerعندما تقرأ استدعاءات متعددة لـreceivePacketsExpectQueryالقيمةProtocol::Client::IgnoredPartUUIDs. #94434 (Miсhael Stetsyuk). - إصلاح إخفاء البيانات الحساسة في
system.functions. #94436 (Vitaly Baranov). - إصلاح إلغاء مرجع nullptr عند تعطيل
send_profile_events. أُضيفت هذه الميزة مؤخرًا إلى برنامج تشغيل ClickHouse لـ بايثون. يُغلق #92488. #94466 (Alexey Milovidov). - إصلاح عدم توافق
.mrkفي الفهرس النصي أثناء عمليات الدمج. #94494 (Peng Jian). - عند تمكين
read_in_order_use_virtual_row، كان الكود يصل إلى أعمدة الفهرس استنادًا إلى الحجم الكامل للمفتاح الأساسي من دون التحقق مما إذا كان الفهرس قد اقتُطع، مما أدى إلى use-after-free / استخدام ذاكرة غير مهيأة. يُغلق #85596. #94500 (Alexey Milovidov). - إصلاح خطأ ناتج عن عدم تطابق الأنواع عند إرسال الجداول الخارجية للاستعلامات الفرعية التي تستخدم
GLOBAL INإذا كانت الأنواعNullable. يُغلق #94097. #94511 (Alexey Milovidov). - في الإصدارات السابقة، كانت الاستعلامات التي تتضمن عدة شروط فهرس على التعبير نفسه قد تطرح بالخطأ الاستثناء
Not found column. يُغلق #60660. #94515 (Alexey Milovidov). - إصلاح المعالجة غير الصحيحة لعمود join من النوع Nullable في Runtime Filters. #94555 (Alexander Gololobov).
- لم يعد إنشاء workload داخل workload أخرى قيد الاستخدام يتسبب في حدوث crash. #94599 (Sergei Trifonov).
- إصلاح crash أثناء تحسين ANY LEFT JOIN عند تقييم
isNotNullعلى عمود غير موجود. #94600 (Molly). - إصلاح تقييم التعبير default عند الإشارة إلى أعمدة أخرى ذات قيم default محسوبة. #94615 (Alexey Milovidov).
- إصلاح مشكلات permission في عمليات BACKUP/RESTORE. #94617 (Pablo Marcos).
- إصلاح crash ناتج عن تحويل نوع غير صحيح عندما يكون نوع البيانات
Nullable(DateTime64). #94627 (Miсhael Stetsyuk). - إصلاح خلل كان يؤدي إلى أن بعض distributed queries مع
ORDER BYقد تُرجع أعمدةALIASبقيم متبدلة (أي إن العمودaيعرض بيانات العمودbوالعكس صحيح). #94644 (filimonov). - إصلاح تخزين نتائج keeper-bench في ملف. #94654 (Antonio Andelic).
- إصلاح التقديرات غير الدقيقة مع إحصاءات من نوع MinMax عندما يحتوي العمود على قيم floating-point سالبة. #94665 (zoomxi).
- إصلاح قراءة ملفات Parquet عندما يكون مفتاح الـ map من نوع struct. #94670 (Konstantin Vedernikov).
- إصلاح احتمال ظهور JOIN result غير صحيحة في RIGHT join عند استخدام شروط ON معقدة. Close #92913. #94680 (Vladimir Cherkasov).
- الحفاظ على index granularity الثابتة (use_const_adaptive_granularity) بعد Vertical merges. #94725 (Azat Khuzhin).
- إصلاح خلل في mutation متعلق بـ scalar subqueries واعتماديات الجدول. إذا كانت لدى الجدول اعتماديات (index أو projections) على عمود ما، فقد تُقيَّم scalar subqueries وتُخزَّن مؤقتًا بلا بيانات، مما يؤدي إلى تغييرات غير صحيحة. #94731 (Raúl Marín).
- إصلاح fallback الخاص بـ AsynchronousMetrics cpu_pressure عند حدوث error. #94827 (Raúl Marín).
- كانت الدالة
getURLHostRFCتفتقد إلى فحوصات حدود قبل إلغاء الإشارة إلى المؤشرات. وعند تمرير سلسلة فارغة إلىdomainRFC``،كانت تقرأ ذاكرة غير مهيأة، مما يؤدي إلى أخطاء MSan. #94851 (Alexey Milovidov). - إصلاح وضع readonly للأقراص المشفرة. #94852 (Azat Khuzhin).
- إصلاح logical error في
LIMIT/OFFSETالكسري عند استخدام analyzer القديم مع Distributed tables. Closes #94712. #94999 (Ahmed Gouda). - إصلاح تعطل يحدث في بعض الحالات عندما تكون مرشحات runtime لعمليات join مفعّلة افتراضيًا. #95000 (Alexander Gololobov).
- تحسين إخفاء كلمات المرور في عناوين url المستخدمة في محرك الجدول
URL()ودالة الجدولurl(). #95006 (Vitaly Baranov). - أصبحت الدالة
toStartOfIntervalتعمل الآن بالطريقة نفسها التي تعمل بهاtoStartOfX، حيث تكونXإحدى القيمDay, Week, Month, Quarter, Yearعندما يكونenable_extended_results_for_datetime_functionsمفعّلًا. #95011 (Kirill Kopnev). - إصلاح عدم التزام مقارنات السلاسل النصية الثابتة بالإعدادات
cast_string_to_date_time_modeوbool_true_representationوbool_false_representationوinput_format_null_as_default. يُغلق #91681. #95040 (Nihal Z. Miaji). - إصلاح حالة data race في filesystem cache. #95064 (Alexey Milovidov).
- إصلاح race condition نادرة في قارئ Parquet. #95068 (Alexey Milovidov).
- إصلاح تعطل في تحسين top K عندما تكون
LIMITصفرًا. يُغلق #93893. #95072 (Alexey Milovidov). - عند التحويل من DateTime/الأعداد الصحيحة إلى Time64، يُستخرج مكوّن time-of-day باستخدام
toTime، وهو غير رتيب. وقد أشار القالبToDateTimeMonotonicityخطأً إلى أن هذا التحويل رتيب، مما تسبب في الاستثناء “Invalid binary search result in MergeTreeSetIndex” في إصدارات Debug. #95125 (Alexey Milovidov). - أُعيد إنشاء قائمة entries في manifest file فقط عند الضرورة (إذ كان ذلك يُجرى سابقًا في كل تكرار). #95162 (Daniil Ivanik).
تحسينات البناء/الاختبار/التغليف
- إضافة مجموعة أدوات لتوصيف تخصيصات الذاكرة في محلل ClickHouse SQL باستخدام إمكانات توصيف الكومة في jemalloc. #94072 (Ilya Yatsishin).
- أُضيفت أداة تُسهّل استكشاف تخصيصات الذاكرة وإصلاح مشكلاتها في المحلل. تستخدم هذه الأداة المقياس
stats.allocatedفي jemalloc قبل تحليل الاستعلام إلى تمثيل AST وبعده، لعرض ما تم تخصيصه. كما تدعم وضع توصيف الذاكرة الذي يُخرج ملف توصيف قبل العملية وبعدها لبناء تقارير توضّح مواضع حدوث التخصيصات. #93523 (Ilya Yatsishin). - إزالة تضمينات libc++ العابرة. #92523 (Raúl Marín).
- جعل بعض الاختبارات المتسلسلة تعمل بالتوازي: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
- تنظيف بعض خيارات البناء. #93679 (Raúl Marín).
- ترقية c-ares من v1.34.5 إلى v1.34.6. يعالج هذا الثغرة
CVE-2025-62408الخاصة بـ c-ares، لكنها غير ذات صلة بـ ClickHouse. #94129 (Govind R Nair). - استخدام
curl8.18.0. #94742 (Konstantin Bogdanov).