تغيير غير متوافق مع الإصدارات السابقة
- لم يعد الوصول إلى 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 الخارجيين (مثل Java ZooKeeper 3.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. ويتطلب ذلك تفعيل إعداد MergeTree allow_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).
- أُضيفت مقاييس
ProfileEvents DistributedPlanRemoteTasks و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 السالب بالترتيب، وjoins full_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 في joins ALL صغيرة بقدر نظيراتها في joins ANY لجميع أنواع key. أُجري benchmark على queries join كبيرة من نوع parallel_hash — joins INNER وANY لجداول تضم 100–300 مليون row بمفاتيح UInt64 وString، مع مفاتيح فريدة ومكررة: أصبح وسيط query أسرع بنحو 12% واستخدم Peak memory أقل بنحو 15%، من دون أن تصبح أي query أبطأ. وحققت joins INNER على مفاتيح 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 أو كأساس لـ BACKUP incremental) أصبح تحليل البيانات الوصفية .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 engine MaterializedPostgreSQL. افتراضيًا (عند تمكينه)، يُستدل على أعمدة PostgreSQL من النوعين date/timestamp على أنها Date32/DateTime64؛ أما عند ضبطه على 0 وقت CREATE DATABASE فيُستدل على النوعين الأضيق Date/DateTime. لا ينطبق هذا الإعداد على table engine MaterializedPostgreSQL. #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 engine SQLite). #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، ويستند إلى uniqCombined64 sketch. #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، بحيث يكون الناتج المقصوص صالحًا (تُصلَح الحلقات ذاتية التقاطع) ومحاذيًا للحواف، بما يطابق PostGIS ST_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 (مثل
postgresql table function أو PostgreSQL table 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_ERROR Invalid 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 أو عمليات القراءة عبر merge table function فوق جداول DeltaLake. #102033 (Groene AI).
- إصلاح فشل طلبات HTTP الصادرة (مثل الدالة
aiGenerate، وurl table 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 في queries ALTER التي لا تغيّر 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 functions jdbc/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).
- تم إصلاح قراءة جداول
Iceberg v3 التي تحتوي ملفات بيانات 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 strategy hive) يقبل بصمت {_partition_id} في مسارات جداول S3/object storage بدلًا من إطلاق BAD_ARGUMENTS. #107437 (Lefteris).
- تم إصلاح تسرّب للذاكرة في
mongo-c-driver المضمّن، وكان يمكن أن يحدث عند القراءة من MongoDB (على سبيل المثال، عبر MongoDB Dictionary أو mongodb table 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 تختلف فقط في WHERE predicate، وتم طي 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 من block Native تالف تشير فيه 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).
- أصبحت
mongodb table 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 function values مع 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 على ALIAS column فقط. #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 (القيمة الافتراضية 5 seconds) من configuration، بما يتوافق مع القواميس المعرّفة عبر named collections. #108083 (Alexey Milovidov).
- أصبح استخدام
EXISTS <dictionary> مسموحًا للمستخدم الذي يملك فقط privilege SHOW DICTIONARIES على القاموس (وكان ذلك يتطلب سابقًا SHOW TABLES). #108084 (Alexey Milovidov).
- تم إصلاح مشكلة في
CREATE TABLE dst AS src SETTINGS ... (والصيغ المشابهة مع ORDER BY/PARTITION BY ولكن من دون ENGINE صريح) كانت تؤدي بصمت إلى إسقاط محرك الجدول المصدر، وعبارات التخزين (مثل table TTL والمفاتيح) والإعدادات. وأصبح الآن محرك الجدول وعبارات التخزين التي لم يجرِ تجاوزها تُورَّث من الجدول المصدر، كما تُدمَج الإعدادات المحددة فوق إعدادات الجدول المصدر. #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). سابقًا، كانت عملية lightweight DELETE أو 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 function primes للإلغاء: عند استخدام 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 الذي كان يُرجع ردًا فارغًا لطلبات HTTP OPTIONS عندما لا يكون 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).
- تم إصلاح تعطل في الخادم (خطأ تجزئة) كان يمكن أن يحدث عندما كان استعلام موزع يشير إلى
MATERIALIZED CTE لم يُمثَّل ماديًا بعد بوصفه جدولًا خارجيًا، وكان المصدر البعيد يُنشأ عند الطلب. #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 (رمز HTTP Content-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).
- تم إصلاح تعريف
icebergLocal table function وIcebergLocal engine لنوع 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 بصمت، وكان parameter Identifier غير المعيَّن قد يؤدي إلى الاستثناء 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 الخاصة بالنوع بدلًا من ناتج expression DEFAULT بعد تقييمه، كما كانت دوال 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، إذ كان يعيد بصمت 0 rows لملفات البيانات القديمة. تُرجِع مثل هذه الاستعلامات الآن الصفوف الصحيحة، بما يطابق 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) في قارئ Parquet v3 عندما يشير شرط المفتاح على مستوى 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 عندما كان filter WHERE على عمود من الجهة اليمنى يسمح لـ 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’s limited) ومن دون 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 إلى LTS 20260526.0. #108991 (Konstantin Bogdanov).
تغيير غير متوافق مع الإصدارات السابقة
- يزيل هذا التغيير الميزة
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 functions prometheusQuery و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).
- جرى تحسين التمثيل في الذاكرة لـ
Enum DataType. ويمكن أن يتحسن استهلاك الذاكرة للجداول التي تحتوي على النوع 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_hash join إلى 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، وأخطاء HTTP 5xx/408/429) باستخدام backoff أُسِّي، بدلًا من إيقاف عملية INSERT عند أول خلل شبكي. ويتحكم الإعدادان الجديدان format_avro_schema_registry_max_retries (القيمة الافتراضية 5) وformat_avro_schema_registry_retry_initial_backoff_ms (القيمة الافتراضية 100) في هذه السياسة. وتظل validation error الخاصة بـ schema (HTTP 409 أو 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 functions file / 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 ثانية، يكتب العميل المحرف التحكمي ASCII BEL (\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+00A0 NO-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).
chdig v26.5.1. #105918 (Azat Khuzhin).
chdig v26.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 SYNTAX parameterized views. #103263 (Jordi Villar).
- إصلاح تلف البيانات عند كتابة Parquet (وصيغ أخرى تحتوي على trailer مثل ORC وArrow) إلى HDFS عبر
INSERT INTO FUNCTION hdfs(...). منذ الإصدار 26.1، لم يكن WriteBufferFromHDFS يفرّغ buffer العمل الخاص به عند finalize()، لذا كانت آخر DBMS_DEFAULT_BUFFER_SIZE بايت — أو أقل — من كل ملف تُفقَد بصمت، بما في ذلك footer الخاص بـ Parquet PAR1. وكانت قراءة مثل هذه الملفات تُرجِع 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 التي تستخدم direct join_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 of Memory table produced incomplete output الذي كان يظهر عند تشغيل ALTER TABLE <memory_table> APPLY PATCHES أو ALTER TABLE <memory_table> APPLY DELETED MASK. لا تمتلك جداول Memory patch 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 في window PARTITION 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 action logical error) عند استخدام تعبير جدول شائع MATERIALIZED يكون جسمه استعلامًا فرعيًا مترابطًا كطرف أيمن لـ IN. ويُرفض هذا النوع من التعبيرات الآن في وقت التحليل، اتساقًا مع رفض النمط نفسه بالفعل عند الإشارة إلى تعبير الجدول الشائع مباشرةً في FROM. #105518 (Groene AI).
- إصلاح عدم تطبيق الضغط على stdout/stdin عند تحديد format صراحةً. يغلق #104441. #105528 (Pavel Kruglov).
- إصلاح SEGFAULT في إلغاء التسلسل لـ
singleValueOrNull للنوع JSON. يغلق #103630. #105535 (Pavel Kruglov).
- إصلاح قيام
clickhouse-format --backslash بإسقاط بيانات INSERT VALUES بصمت. يغلق #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 غير الصالحة لـ SLEEP instrumentation التي تحتوي على أكثر من قيمتين أو على نطاق يكون فيه الحد الأدنى أكبر من الحد الأقصى. #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).
- إصلاح دعم استخدام
WASM SQL 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).
- تم إصلاح تحسينات
DISTINCT in order وLIMIT BY in 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 of Memory table 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 function input داخل تعبير جدول شائع غير 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_range logical 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 منه باستخدام lightweight DELETE. لم يعد التحسين يقدّم minmax القديم للأجزاء التي حُذفت منها rows باستخدام lightweight DELETE على الأجزاء التي تحتوي على أعلى 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/J 8.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 من index text عبر مسار 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 مع catalog Shared. #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 لا تزال تحتوي على تصحيحات lightweight UPDATE لم تُطبّق بعد. وترفض هذه العمليات الآن الأمر، كما يفعل 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).
- استخدم
expat 2.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).
تغيير غير متوافق مع الإصدارات السابقة
- تم تغيير القيم الافتراضية لكلٍّ من
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 وإبراز الصياغة. تُرجع tokenizeQuery tokens الخاصة بالمحلل المعجمي مع offsets بالبايت وأنواع tokens؛ وتُرجع highlightQuery ranges لإبراز الصياغة استنادًا إلى 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_merge JOIN. #100945 (Artem Zuikov).
- تقليل طفيف في التخصيص الزائد للذاكرة في
partial_merge JOIN. #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 على dataset hits من 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 setting predicate_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 (مع labels group و 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 عبر rseq TLS في musl المتوافق مع glibc. #104016 (Azat Khuzhin).
- لن يعود العرض المادي القابل للتحديث من النوع Replicated في وضع APPEND إلى إجراء refresh مرتين إذا فُقد الاتصال بـ ZooKeeper لفترة وجيزة أثناء refresh. #104051 (Michael Kolupaev).
- السماح لـ Distributed tables التي لا تحتوي على قائمة أعمدة صريحة بالتحقق من sharding keys مقابل بنية الجدول البعيد المستنتجة. #104111 (Yue).
- إصلاح REST catalog مع المسار
Azure abfss. #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 بدلًا من إعادة المحاولة، وكان السبب أن Poco BufferedStreamBuf::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 عندما تقارن عبارة WHERE Key column من نوع LowCardinality مع ثابت محوَّل إلى نوع يحتوي على LowCardinality متداخل (على سبيل المثال Variant(LowCardinality(Date), String)). #103211 (Groene AI).
- إصلاح
Logical error: 'index < bucket_count' في عائلة aggregate function timeSeries*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 متبوعًا بـ lightweight DELETE). #103538 (Groene AI).
- إصلاح مشكلة قيام
clickhouse-local بإرجاع 0 rows بصمت عند القراءة من الملفين الوهميين /proc و/sys عبر file() table function (مثل SELECT * FROM file('/proc/cpuinfo', 'RawBLOB')). #103548 (Ashrith Bandla).
- إصلاح التعامل مع الوسيط
max_string_length في GenerateRandom table 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 فوق ANY OUTER JOIN على دالة غير 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. Expected UInt8. Got Const(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 cast LOGICAL_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::executeTableFunction concurrent مع القراءة غير المتزامنة داخل مُنشئ النسخ. #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 عند فشل الجدولة: عندما throws scheduleFormatterThreadForUnitWithNumber (مثل CANNOT_SCHEDULE_TASK)، كانت الوحدة تُترك في الحالة READY_TO_FORMAT من دون خيط formatter يعالجها، مما يؤدي إلى تعليق. تُغلَّف الآن استدعاء الجدولة داخل try/catch ويُمرَّر أي فشل عبر onBackgroundException لكي يخرج collector بشكل سليم. #105275 (Azat Khuzhin).
- إصلاح فقدان بيانات صامت في
Distributed async 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).
تغيير غير متوافق مع الإصدارات السابقة
- يستخدم المعامل
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 for SET 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 engine RabbitMQ. #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).
- تقليل استهلاك الذاكرة لهياكل البيانات الداخلية (
ISerialization objects) عبر إدخال مجمّع كائنات. #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 قبل query SELECT. #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 الخاصة بـ
executable table 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).
- إصلاح فشل
KeeperMap CREATE 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).
- أصبحت
splitByString tokenizer ترفض الآن سلاسل الفاصل الفارغة. #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).
- كانت
sparseGrams tokenizer تُولّد 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).
- إصلاح تعطل في
IcebergLocal ALTER 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 بدلًا من إعادة المحاولة، وكان السبب أن Poco BufferedStreamBuf::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).
- استخدام
wasmtime v42.0.1. #98603 (Konstantin Bogdanov).
- استخدام
llvm-project 22.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-cpp 1.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).
- استخدام
wasmtime v43.0.1. #102603 (Konstantin Bogdanov).
- استخدام
openssl 3.5.6. #102606 (Konstantin Bogdanov).
- استخدام
xz 5.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).
تغيير غير متوافق مع الإصدارات السابقة
- قد يؤدي الرجوع إلى إصدار أقدم بعد الترقية إلى فقدان البيانات. انشر إصدارات التسلسل الخاصة بأنواع البيانات إلى أنواع البيانات المتداخلة. على سبيل المثال، كان إصدار التسلسل 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، مما يفعّل المواءمة الصحيحة افتراضيًا من MySQL DATE إلى Date32، ومن DECIMAL/NUMERIC إلى Decimal، ومن DATETIME/TIMESTAMP مع precision إلى DateTime64. سابقًا، كانت أعمدة MySQL DATE تُواءَم إلى 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 وFULL JOIN من خلال التحقق من تعيين 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 file LOGICAL_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 عندما يتضمن تعبير CASE materialize(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 غير قابلة للوصول، وتمرير nullptr TargetMachine غير صحيح إلى LLVM PassBuilder، مما منع تسجيل 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::TableFunctionNode to DB::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).
- زيادة
InsertQuery ProfileEvent من أجل 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، وذلك عبر التحقق من grant CREATE_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-driver 2.2.2. #98304 (Konstantin Bogdanov).
- استخدام
postgres REL_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).
تغيير غير متوافق مع الإصدارات السابقة
- أصبحت إزالة التكرار مفعّلة افتراضيًا لجميع عمليات 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 OUTER JOIN. #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 إذا كانت dropReplicationSlot throws أثناء فك تكدس الاستدعاءات. #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 بحيث لا يعيد Rewrite sum/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 كان يمكن أن يحدث عند استخدام خوارزمية join direct مع جدول 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 الفارغة في queries UNION ALL. #97213 (Alexey Milovidov).
- إصلاح data race أثناء عمليات النسخ متعدد الأجزاء في S3 (مثل أثناء
BACKUP/RESTORE إلى S3)، والتي كان يمكن أن تتسبب في استثناءات عند الوصول المتزامن. #97227 (Azat Khuzhin).
- إصلاح استثناء
LOGICAL_ERROR عندما يُشير arrayJoin في clause WHERE إلى 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 مفهرسة نصيًا مع clause QUALIFY. #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).
- استخدام
libexpat 2.7.3. #95218 (Konstantin Bogdanov).
- استخدام
OpenSSL 3.5.5. #95345 (Konstantin Bogdanov).
- استخدام
simdjson v4.2.4. #97129 (Konstantin Bogdanov).
- استخدام
libarchive 3.8.5. #97131 (Konstantin Bogdanov).
- استخدام
fast_float v8.2.3. #97133 (Konstantin Bogdanov).
- استخدام
abseil-cpp 20260107.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).
تغيير غير متوافق مع الإصدارات السابقة
- أصلِح التنسيق غير المتسق الناتج عن الاستبدال غير الصحيح للأسماء المستعارة في المُنسِّق. يُغلق هذا #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).
- أصبح الإعداد
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).
تحسينات البناء/الاختبار/التغليف
آخر تعديل في ١٤ أغسطس ٢٠٢٦