التغييرات غير المتوافقة مع الإصدارات السابقة
صيغة البيانات وتغييرات المخطط
- تم تغيير الإعداد الافتراضي
schema_inference_make_columns_nullableبحيث يراعي ما إذا كان العمود من النوعNullableاستنادًا إلى البيانات الوصفية في Parquet/ORC/Arrow، بدلًا من جعل كل شيءNullable. لا تغيير في التنسيقات النصية. #71499 (Michael Kolupaev).
تغييرات الاستعلامات والدوال
- أصبحت ذاكرة التخزين المؤقت لنتائج الاستعلامات تتجاهل الآن الإعداد
log_comment، بحيث إن تغييرlog_commentفقط في الاستعلام لم يعد يؤدي إلى تفويت الذاكرة المؤقتة. هناك احتمال ضئيل أن بعض المستخدمين كانوا يعمدون إلى تقسيم الذاكرة المؤقتة لديهم عبر تغييرlog_comment. يغيّر هذا التغيير ذلك السلوك، ولذلك فهو غير متوافق مع الإصدارات السابقة. يُرجى استخدام الإعدادquery_cache_tagلهذا الغرض. #79878 (filimonov). - في الإصدارات السابقة، كانت الاستعلامات التي تحتوي على دوال جدول تحمل الأسماء نفسها لدوال تنفيذ العوامل تُنسَّق بشكل غير متسق. يُغلق #81601. يُغلق #81977. يُغلق #82834. يُغلق #82835. لن تقوم استعلامات EXPLAIN SYNTAX بتنسيق العوامل — إذ يعكس السلوك الجديد بصورة أفضل الغرض من شرح الصياغة. كما أن
clickhouse-formatوformatQueryوما شابه ذلك لن تتعامل مع الدوال على أنها عوامل إذا كان الاستعلام قد تضمّنها بصيغة دالية. #82825 (Alexey Milovidov). - تم تعطيل العمليات الثنائية غير المنطقية على IPv4/IPv6: فقد تم تعطيل عمليتَي الجمع والطرح بين IPv4/IPv6 ونوع غير صحيح. في السابق، كان ذلك يسمح بإجراء عمليات مع الأنواع العائمة ويتسبب في حدوث أخطاء منطقية مع بعض الأنواع الأخرى (مثل DateTime). #86336 (Raúl Marín).
- أُعيدت تسمية الدالتين
searchAnyوsearchAllإلىhasAnyTokensوhasAllTokensلتحقيق اتساق أفضل مع الدالة الحاليةhasToken. #88109 (Robert Schulze).
تغييرات على أنواع البيانات
- يُحظر استخدام النوع Dynamic في مفاتيح JOIN، إذ قد يؤدي ذلك إلى نتائج غير متوقعة عند مقارنة النوع Dynamic بنوع آخر غير Dynamic. والأفضل إجراء cast لعمود Dynamic إلى النوع المطلوب. #86358 (Pavel Kruglov).
تغييرات التخزين والفهارس
- إيقاف دعم الإعداد
allow_dynamic_metadata_for_data_lakes. الآن تحاول جميع جداول Iceberg جلب مخطط الجدول الأحدث من التخزين قبل تنفيذ كل استعلام. #86366 (Daniil Ivanik). - أُعيد تصميم الفهرس النصي المعكوس من الصفر ليكون قابلًا للتوسّع لمجموعات البيانات التي لا تتسع في RAM. #86485 (Anton Popov).
- أصبح إعداد الخادم
storage_metadata_write_full_object_keyمفعّلًا افتراضيًا، ولم يعد بالإمكان تعطيله. #87335 (Sema Checherinda). - إزالة
cache_hits_thresholdمن ذاكرة التخزين المؤقت لنظام الملفات. أُضيفcache_hits_thresholdقبل إضافة سياسة التخزين المؤقت من نوع SLRU، وليس من الضروري دعم كليهما. #88344 (Kseniia Sumarokova).
تغييرات الإعدادات والتهيئة
- خفض
replicated_deduplication_window_secondsمن أسبوع إلى ساعة واحدة لتخزين عدد أقل منznodeعلى ZooKeeper عندما يكون معدل الإدراج منخفضًا. #87414 (Sema Checherinda). - إعادة تسمية الإعداد
query_plan_use_new_logical_join_stepإلىquery_plan_use_logical_join_step. #87679 (Vladimir Cherkasov). - تتيح الصياغة الجديدة أن تكون مَعلمة
tokenizerأكثر تعبيرًا. #87997 (Elmi Ahmadov). - تغييران طفيفان على كيفية عمل الإعدادين
min_free_disk_ratio_to_perform_insertوmin_free_disk_bytes_to_perform_insert: استخدام البايتات غير المحجوزة بدلًا من البايتات المتاحة لتحديد ما إذا كان يجب رفض عملية insert. وعلى الأرجح لا يكون هذا أمرًا حاسمًا إذا كانت الحجوزات الخاصة بعمليات الدمج في الخلفية وmutations صغيرة مقارنةً بالعتبات المضبوطة، لكنه يبدو أكثر دقة. - لا تطبِّق هذه الإعدادات على جداول النظام. والسبب في ذلك أننا ما زلنا نريد تحديث جداول مثلquery_log. وهذا يساعد كثيرًا في استكشاف الأخطاء وإصلاحها. وعادةً ما تكون البيانات المكتوبة إلى جداول النظام صغيرة مقارنةً بالبيانات الفعلية، لذلك يمكنها الاستمرار لفترة أطول بكثير مع عتبة معقولة لـmin_free_disk_ratio_to_perform_insert. #88468 (c-end).
تغييرات Keeper
- تمكين الوضع غير المتزامن للنسخ الداخلي في Keeper. سيحافظ Keeper على السلوك نفسه كما كان من قبل، مع احتمال تحقيق تحسينات في الأداء. إذا كنت تُحدِّث من إصدار أقدم من 23.9، فعليك إما التحديث أولًا إلى 23.9+ ثم إلى 25.10+، أو يمكنك تعيين
keeper_server.coordination_settings.async_replicationإلى 0 قبل التحديث ثم تمكينه بعد اكتمال التحديث. #88515 (Antonio Andelic).
الميزات الجديدة
الدوال
- إضافة الدالة
naiveBayesClassifierلتصنيف النص باستخدام Naive Bayes استنادًا إلى ngrams. #78700 (Nihal Z. Miaji). - تمت إضافة الدالة
arrayExceptالتي تطرح مصفوفة من أخرى باعتبارها مجموعة. #82368 (Joanna Hulboj). - دالة
convجديدة لتحويل الأرقام بين القواعد، وتدعم حاليًا القواعد من2-36. #83058 (hp). - تمت إضافة الدالة التجميعية
studentTTestOneSample. #85436 (Dylan). - تمت إضافة الدالة
isValidASCIIللتحقق مما إذا كانت السلسلة تحتوي على محارف ASCII فقط. يغلق #85377. #85786 (rajat mohan). - الدالتان التجميعيتان
timeSeriesChangesToGridوtimeSeriesResetsToGrid. تعملان بصورة مشابهة لـtimeSeriesRateToGrid، إذ تقبلان معاملات timestamp البداية وtimestamp النهاية وstep وwindow للرجوع للخلف، بالإضافة إلى وسيطين لـ timestamps وvalues، لكنهما تتطلبان sample واحدًا على الأقل لكل window بدلًا من 2. وتحسبانchanges/resetsفي PromQL، مع احتساب عدد المرات التي تتغير فيها قيمة sample أو تنخفض داخل الـ window المحددة لكل timestamp في الشبكة الزمنية المعرّفة بواسطة المعاملات. نوع الإرجاع هو Array(Nullable(Float64)). #86010 (Stephen Chi). - الدالة التجميعية
quantilePrometheusHistogram، التي تقبل الحدود العليا والقيم التراكمية لـ buckets الخاصة بالمدرج التكراري كوسيطات، وتُجري استيفاءً خطيًا بين الحدين الأعلى والأدنى للـ bucket التي يقع فيها موضع quantile. تعمل بصورة مشابهة للدالةhistogram_quantile()في PromQL على المدرجات التكرارية الكلاسيكية. #86294 (Stephen Chi). - تمت إضافة صيغ محسّنة غير حساسة لحالة الأحرف من الدالتين
startsWithوendsWith:startsWithCaseInsensitiveوendsWithCaseInsensitiveوstartsWithCaseInsensitiveUTF8وendsWithCaseInsensitiveUTF8. #87374 (Guang Zhao).
جداول النظام
- إضافة جدول نظام جديد
database_replicasيتضمن معلومات عن النسخ المتماثلة لقواعد البيانات. #83408 (Konstantin Morozov). - إضافة جدول جديد
system.aggregated_zookeeper_log. يحتوي الجدول على إحصاءات (مثل عدد العمليات، ومتوسط زمن الاستجابة، والأخطاء) لعمليات ZooKeeper، مجمّعة حسب معرّف الجلسة، والمسار الأب، ونوع العملية، وتُكتب دوريًا إلى القرص. #85102 (Miсhael Stetsyuk). - إضافة جدول النظام
iceberg_metadata_logلاسترجاع ملفات البيانات الوصفية الخاصة بـ Iceberg أثناء عبارات SELECT. #86152 (scanhex12). - إضافة تحذيرات بشأن CPU والذاكرة إلى جدول
system.warnings. #86838 (Bharat Nallan). - جدول نظام لملفات البيانات الوصفية الخاصة بـ Delta Lake. #87263 (scanhex12).
محركات الجداول والتخزين
- دعم محرك الجداول Alias. #76569 (RinChanNOW).
- يمكنك الآن استخدام NATS JetStream لاستهلاك الرسائل من خلال تحديد الإعدادات الجديدة
nats_streamوnats_consumerلمحرك NATS. #84799 (Dmitry Novikov). - جداول Iceberg وdelta lake مع إعدادات القرص. يتيح ذلك تحديد جداول المستخدم باستخدام قرص موجود. أُضيف الإعداد
allowed_disks_for_table_enginesالذي يتيح استخدام أقراص محددة مع Iceberg. مثال:CREATE TABLE test ENGINE = Iceberg('path/inside/disk') SETTING datalake_disk_name = '<some_user_disk>';### إضافة توثيقية للتغييرات الظاهرة للمستخدم. #86778 (scanhex12). - أُضيف إعداد جدول جديد
min_level_for_wide_partيتيح تحديد المستوى الأدنى الذي عنده يُنشأ الجزء كـ Wide part. #88179 (Christoph Wurm).
Iceberg وبحيرات البيانات
- إضافة دعم للاستعلام عن Apache Paimon في ClickHouse. يتيح هذا التكامل لمستخدمي ClickHouse التفاعل مباشرةً مع تخزين بحيرة البيانات في Paimon. #84423 (JIaQi).
ALTER UPDATEلمحرك جدول Iceberg. #86059 (scanhex12).
الفهارس والإحصاءات
- فهرس bloom filter جديد من نوع
sparse_gramمفيد للعثور على المقاطع الفرعية الطويلة. #79985 (scanhex12). - أُضيفت إمكانية إنشاء الإحصاءات تلقائيًا لجميع الأعمدة المناسبة في جداول
MergeTree. كما أُضيف الإعداد على مستوى الجدولauto_statistics_types، الذي يخزّن أنواع الإحصاءات المطلوب إنشاؤها مفصولة بفواصل (على سبيل المثالauto_statistics_types = 'minmax, uniq, countmin'). #87241 (Anton Popov).
ميزات SQL والاستعلامات
- أُضيف دعم صياغة
LIMIT BY ALL. وعلى غرارGROUP BY ALLوORDER BY ALL، يوسّعLIMIT BY ALLتلقائيًا ليستخدم جميع التعبيرات غير التجميعية في عبارةSELECTكمفاتيح لـLIMIT BY. على سبيل المثال، فإنSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLتكافئSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name. تُبسّط هذه الميزة الاستعلامات عندما تريد التقييد بحسب جميع الأعمدة غير التجميعية المحددة من دون الحاجة إلى سردها صراحةً. يُغلق #59152. #84079 (Surya Kant Ranjan). - اعتُبر اسم الإعداد المجرّد في إعدادات الاستعلام مساويًا لـ
1(على سبيل المثال،SELECT ... SETTINGS use_query_cacheتكافئuse_query_cache = 1). #85800 (thraeka). - يتيح للمستخدمين إنشاء العروض المؤقتة بالصياغة نفسها المستخدمة مع الجداول المؤقتة. #86432 (Aly Kafoury).
- أُضيف دعم
LIMITالسالب وOFFSETالسالب. يُغلق #28913. #88411 (Nihal Z. Miaji).
ميزات العميل وCLI
- الوصول إلى مثيلات ClickHouse Cloud باستخدام بيانات اعتماد Cloud عبر الخيار
--login. #82753 (Krishna Mannem). - إضافة الخيار
--semicolons_inlineلتنسيق الاستعلامات بحيث توضع الفواصل المنقوطة في السطر الأخير بدلًا من سطر جديد. #88018 (Jan Rada).
تهيئة الخادم وإدارة أعباء العمل
- خيارات تهيئة جديدة: يتيح كلٌّ من
logger.startupLevelوlogger.shutdownLevelتجاوز مستوى التسجيل أثناء بدء تشغيل ClickHouse وإيقافه، على التوالي. #85967 (Lennard Eijsackers). - يضيف آليةً لتحديد تعريفات
WORKLOADوRESOURCEفي SQL باستخدام قسم تهيئة الخادم “resources_and_workloads”. #87430 (Sergei Trifonov).
أوامر النظام
- أُضيف الأمر
SYSTEM RECONNECT ZOOKEEPERلإجبار ZooKeeper على قطع الاتصال ثم إعادة الاتصال (https://github.com/ClickHouse/ClickHouse/issues/87317). #87318 (Pradeep Chhetri). - تقييد عدد المجموعات المُسمّاة من خلال الإعدادين
max_named_collection_num_to_warnوmax_named_collection_num_to_throw. كما أُضيف Metric جديدNamedCollectionوالخطأTOO_MANY_NAMED_COLLECTIONS. #87343 (Pablo Marcos).
Keeper
- إضافة الصيغ العودية للأمرين
cp-cprوmv-mvrإلى عميل Keeper. #88570 (Mikhail Artemenko).
الميزات التجريبية
- تعمل الدالتان
searchAllوsearchAnyالآن أيضًا على الأعمدة التي لا تحتوي على أعمدة نصية. وفي هذه الحالات، تستخدمان مُجزِّئ الرموز الافتراضي. #87722 (Jimmy Aguilar Mena). - جرى تنفيذ نوع البيانات
QBitالذي يخزّن المتجهات بتنسيق bit-sliced، والدالةL2DistanceTransposedالتي تتيح البحث التقريبي في المتجهات، حيث يمكن التحكم في الموازنة بين الدقة والسرعة عبر معلَمة. #87922 (Raufs Dunamalijevs).
تحسينات الأداء
تنفيذ الاستعلامات وتحسينها
- تحسين أداء الاستعلامات عبر إعادة تنظيم ترتيب تكامل Query Condition Cache (QCC) مع تحليل الفهارس. إذ يُطبَّق ترشيح QCC الآن قبل تحليل المفتاح الأساسي وفهرس التخطي، مما يقلل من عمليات حساب الفهارس غير الضرورية. كما جرى توسيع تحليل الفهارس لدعم عدة مرشحات نطاق، وأصبحت نتائج التصفية الناتجة عنه تُخزَّن مجددًا في QCC. ويؤدي ذلك إلى تسريع الاستعلامات بشكل كبير عندما يستحوذ تحليل الفهارس على معظم وقت التنفيذ، وخاصة الاستعلامات التي تعتمد على فهارس التخطي (مثل الفهارس المتجهية أو الفهارس المعكوسة). #82380 (Amos Bird).
- مجموعة من التحسينات الدقيقة لتسريع الاستعلامات الصغيرة. #83096 (Raúl Marín).
- ضغط السجلات وأحداث profile في البروتوكول الأصلي. في المجموعات التي تضم أكثر من 100 نسخة متماثلة، تستهلك أحداث profile غير المضغوطة ما بين 1 و10 ميغابايت/ثانية، ويصبح شريط التقدم بطيئًا على اتصالات الإنترنت البطيئة. هذا يُغلق #82533. #83586 (Alexey Milovidov).
- تحسين PREWHERE للحالات مثل
func(primary_column) = 'xx'وcolumn in (xxx). #85529 (李扬). - تجنب الفحص الكامل لـ
system.tablesعند التصفية حسبuuid(وقد يكون هذا مفيدًا إذا لم يكن لديك سوى UUID من السجلات أو من مسار ZooKeeper). #88379 (Azat Khuzhin).
تحسينات JOIN
- يوفّر آلية لدفع شروط JOIN المنفصلة إلى الأسفل. مثال: في TPC-H Q7، بالنسبة إلى شرط على الجدولين n1 و n2 مثل
(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')، تُستخرج مرشحات جزئية منفصلة لكل جدول:n1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'للجدول n1 وn2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'للجدول n2. #84735 (Yarik Briukhovetskyi). - تم تنفيذ إعادة كتابة لـ JOIN: 1. تحويل
LEFT ANY JOINوRIGHT ANY JOINإلىSEMI/ANTIJOIN إذا كان شرط التصفية دائمًا false للصفوف المتطابقة أو غير المتطابقة. ويُتحكم في هذا التحسين عبر الإعداد الجديدquery_plan_convert_any_join_to_semi_or_anti_join. 2. تحويلFULL ALL JOINإلىLEFT ALLأوRIGHT ALLJOIN إذا كان شرط التصفية دائمًا false للصفوف غير المتطابقة من أحد الجانبين. #86028 (Dmitry Novik). - جرى تحسين أداء
HashJoinبشكل طفيف عند وجود عدد كبير من الصفوف غير المتطابقة فيLEFT/RIGHTjoin. #86312 (Nikita Taranov). - أصبحت إعادة ترتيب Join تستخدم الإحصاءات الآن. ويمكن تمكين هذه الميزة عبر ضبط
allow_statistics_optimize = 1وquery_plan_optimize_join_order_limit = 10. #86822 (Han Fei). - تخطّي إعادة حساب إحصاءات hash table أثناء التشغيل خلال تحسين join. وتمت إضافة أحداث profile جديدة:
JoinOptimizeMicrosecondsوQueryPlanOptimizeMicroseconds. #87683 (Vladimir Cherkasov). - تضمين
AddedColumns::appendFromBlockداخليًا لتحسين أداء join قليلًا في بعض الحالات. #88455 (Nikita Taranov).
تحسينات السلاسل النصية والدوال
- تحسين أداء البحث في السلاسل النصية الحساسة لحالة الأحرف (في عمليات مثل التصفية، على سبيل المثال
WHERE URL LIKE '%google%') باستخدام مكتبة StringZilla، مع الاستفادة من تعليمات SIMD الخاصة بـ CPU عند توفرها. #84161 (Raúl Marín). - تحسين أداء
LIKEمع البادئة أو اللاحقة باستخدام الإعداد الافتراضي الجديدoptimize_rewrite_like_perfect_affix. #85920 (Guang Zhao). - تحسين أداء الدوال
tokensوhasAllTokensوhasAnyTokens. #88416 (Anton Popov).
تحسينات MergeTree وتحسينات التخزين
- إضافة serialization اختيارية للعمود الفرعي
.sizeلأعمدة String ذات المستوى الأعلى في جداول MergeTree، لتحسين الضغط وتمكين الوصول بكفاءة إلى الأعمدة الفرعية. كما أُضيفت إعدادات MergeTree جديدة للتحكم في إصدار serialization وتحسين التعبيرات الخاصة بالسلاسل الفارغة. #82850 (Amos Bird). - تقليل عمليات تخصيص الذاكرة ونسخها عند تنفيذ select من جدول merge tree تجميعي مع FINAL، عندما يحتوي الجدول على أعمدة من النوع
SimpleAggregateFunction(anyLast). #84428 (Duc Canh Le). - تحسين أداء عمليات vertical merge بعد تنفيذ lightweight delete. #86169 (Anton Popov).
- تحسين أداء الاستعلامات السريعة التي تتعامل مع عدد كبير من الأجزاء في الجدول (من خلال تحسين
MarkRangesباستخدامdevectorبدلًا منdeque). #86933 (Azat Khuzhin). - تحسين أداء تطبيق patch parts في وضع join. #87094 (Anton Popov).
- تمكين حفظ marks في cache وتجنّب direct IO لقارئ MergeTreeLazy. #87989 (Nikita Taranov).
- أصبح تنفيذ استعلام SELECT مع عبارة
FINALعلى جدولReplacingMergeTreeالذي يحتوي على العمودis_deletedأسرع الآن، بفضل تحسين التوازي الناتج عن تحسينين موجودين: 1) تحسينdo_not_merge_across_partitions_select_finalلأقسام الجدول التي تحتوي علىpartواحد فقط 2) تقسيم النطاقات المحددة الأخرى في الجدول إلىintersecting / non-intersecting، بحيث لا تحتاج إلى المرور عبر transform دمج FINAL إلا النطاقات المتقاطعة. #88090 (Shankar Iyer).
تحسينات التجميع وGROUP BY
- إصلاح تراجع الأداء الناتج عن مفتاح مُسلسَل كبير عند التجميع حسب عدة أعمدة نصية/رقمية. إغلاق https://github.com/ClickHouse/ClickHouse/pull/83884#issuecomment-3187972297 مع الإشارة إلى @mkmkme. وهذا استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/83884. #85924 (李扬).
- RadixSort: مساعدة المُصرّف على استخدام SIMD، ومساعدة CPU على تنفيذ الجلب المسبق بشكل أفضل. يستخدم التوجيه الديناميكي لتفعيل الجلب المسبق البرمجي مع وحدات CPU من Intel فقط. ويواصل العمل الذي بدأه @taiyang-li في https://github.com/ClickHouse/ClickHouse/pull/77029. #86378 (Raúl Marín).
تحسينات الفهرسة والبحث النصي
- تحسين أداء إنشاء الفهرس النصي للمستندات التي تحتوي في معظمها على رموز قليلة التكرار. #87546 (Anton Popov).
تحسينات بحيرة البيانات
تحسينات داخلية
- تحسينات على
DB::SharedMutex. #87491 (Raúl Marín). - تسريع السيناريو الشائع في مُدمِّر
Field. #87631 (Raúl Marín). - تقليل أثر عدم استخدام fail points. #88196 (Raúl Marín).
تحسينات
تحسين الاستعلام وتنفيذه
- لم يعد
mannWhitneyUTestيطرح استثناءً عندما تحتوي كلتا العيّنتين على قيم متطابقة فقط. وأصبح الآن يعيد نتيجة صحيحة ومتسقة مع SciPy. وهذا يغلق: #79814. #80009 (DeanNeaht). - أُضيف تحسين تجريبي لترتيب join يمكنه إعادة ترتيب عمليات
JOINتلقائيًا لتحسين الأداء (ويُتحكَّم فيه عبر الإعدادquery_plan_optimize_join_order_limit). لاحظ أن تحسين ترتيب join يدعم الإحصاءات حاليًا بشكل محدود، ويعتمد أساسًا على تقديرات عدد الصفوف من محركات التخزين، وستُضاف في الإصدارات المستقبلية آليات أكثر تطورًا لجمع الإحصاءات وتقدير cardinality. إذا واجهت مشكلات في استعلاماتJOINبعد الترقية، يمكنك تعطيل التنفيذ الجديد مؤقتًا بضبطSET query_plan_use_new_logical_join_step = 0والإبلاغ عن المشكلة للتحقيق فيها. ملاحظة حول تحليل المعرّفات منUSING clause: تم تغيير تحليل العمود المدمج من عبارةOUTER JOIN ... USINGليصبح أكثر اتساقًا: سابقًا، عند تحديد كلٍّ من عمود USING والأعمدة المؤهلة (a, t1.a, t2.a) فيOUTER JOIN، كان عمود USING يُحلَّل بشكل غير صحيح إلىt1.a، مما يُظهر 0/NULL للصفوف القادمة من الجدول الأيمن التي لا تطابق لها في الجدول الأيسر. الآن تُحلَّل المعرّفات منUSING clauseدائمًا إلى العمود المدمج، بينما تُحلَّل المعرّفات المؤهلة إلى الأعمدة غير المدمجة، بغضّ النظر عن المعرّفات الأخرى الموجودة في الاستعلام. على سبيل المثال: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) — قبل: a=0, t1.a=0, t2.a=2 (غير صحيح - تم تحليل ‘a’ إلى t1.a) — بعد: a=2, t1.a=0, t2.a=2 (صحيح - ‘a’ هو العمود المدمج). #80848 (Vladimir Cherkasov). - دعم تصفية data parts باستخدام skip indexes أثناء القراءة لتقليل قراءات الفهارس غير الضرورية. ويُتحكَّم في ذلك عبر الإعداد الجديد
use_skip_indexes_on_data_read(وهو معطّل افتراضيًا). يعالج هذا #75774. ويتضمن ذلك بعض الأعمال التمهيدية المشتركة مع #81021. #81526 (Amos Bird). - تؤدي إعادة كتابة transaction الخاصة بـ object storage disk إلى إزالة blobs البعيدة السابقة إذا تم commit لـ metadata transaction. #81787 (Sema Checherinda).
- أصبحت retry strategy الخاصة بـ S3 قابلة للتهيئة، كما أصبحت إعدادات S3 disk قابلة لإعادة التحميل أثناء التشغيل عند تغيير ملف config XML. #82642 (RinChanNOW).
- إصلاح تمريرة التحسين الخاصة بالتعبير المتساوي الزائد عن الحاجة عندما تختلف LowCardinality للنوع الناتج قبل التحسين وبعده. #82651 (Yakov Olkhovskiy).
- يمكن استخدام column خاصة للإشارة إلى وجود جزء من oneof. #82885 (Ilya Golshtein).
- يحصل المستخدمون الآن على إرشادات أوضح عند تحديد إعدادات غير صحيحة لـ Kafka table engine الجديد. #83701 (János Benjamin Antal).
- عندما يضبط عملاء HTTP الترويسة
X-ClickHouse-100-Continue: deferبالإضافة إلىExpect: 100-continue، لا يرسل ClickHouse استجابة100 Continueإلى العميل إلا بعد اجتياز التحقق من الحصة، ما يمنع هدر عرض النطاق الترددي للشبكة في نقل نصوص الطلبات التي سيُتخلَّص منها على أي حال. وهذا مهم لاستعلامات INSERT، حيث يمكن إرسال الاستعلام في سلسلة استعلام URL وإرسال البيانات في نص الطلب. ويؤدي إلغاء الطلب قبل إرسال النص كاملًا إلى منع إعادة استخدام الاتصال مع HTTP/1.1، لكن زمن الانتقال الإضافي الناتج عن فتح اتصالات جديدة يكون عادةً ضئيلًا مقارنةً بالمدة الإجمالية لـ INSERT عند التعامل مع كميات كبيرة من البيانات. #84304 (c-end). - لم يعد من الممكن تحديد المناطق الزمنية للنوع Time. #84689 (Yarik Briukhovetskyi).
- أصبح الإكمال التلقائي في العميل أسرع وأكثر اتساقًا باستخدام
system.completionsبدلًا من تنفيذ عدة استعلامات على جداول النظام. #84694 (|2ustam). - جرى تبسيط المنطق المرتبط بتحليل Time[64] بصيغة
best_effort، مع تجنب بعض الأخطاء أيضًا. #84730 (Yarik Briukhovetskyi). - تسريع بعض استعلامات JOIN عبر بناء bloom filter من الشجرة الفرعية اليمنى وقت التشغيل وتمرير هذا المرشح إلى عملية المسح في الشجرة الفرعية اليسرى. وقد يكون هذا مفيدًا لاستعلامات مثل
SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'. #84772 (Alexander Gololobov). - يمكنك استخدام معلمات الاستعلام بعد
TOعند إنشاء عرض مادي، على سبيل المثال:CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_table. #84899 (Diskein). - إخفاء بيانات اعتماد S3 في السجلات عند استخدام DATABASE ENGINE = Backup مع تخزين S3. #85336 (Kenny Sun).
- تحديث jemalloc إلى إصدار أحدث. وتحسين توصيف التخصيص بالاعتماد على أدوات jemalloc الداخلية. ويمكن الآن تمكين Profiler العام لـ jemalloc باستخدام config
jemalloc_enable_global_profiler. كما يمكن تخزين allocations وdeallocations العامة المأخوذة كعينات فيsystem.trace_logتحت النوعJemallocSampleعبر تمكين configjemalloc_collect_global_profile_samples_in_trace_log. ويمكن الآن أيضًا تمكين profiling لـ jemalloc لكل query على حدة باستخدام settingjemalloc_enable_profiler. ويمكن التحكم في تخزين samples فيsystem.trace_logلكل query باستخدام settingjemalloc_collect_profile_samples_in_trace_log. #85438 (Antonio Andelic). - أُضيفت الدالة deltaLakeAzureCluster (على غرار deltaLakeAzure للعنقود) والدالة deltaLakeS3Cluster (اسم مستعار لـ deltaLakeCluster)، وذلك لمعالجة #85358. #85547 (Smita Kulkarni).
- أُعيدت تسمية InterpreterSystemQuery::dropReplicaImpl إلى InterpreterSystemQuery::dropStorageReplica - في InterpreterSystemQuery::dropDatabaseReplica: - عند الحذف على مستوى قاعدة البيانات أو حذف replica بالكامل: تُحذف أيضًا replica الخاصة بكل table في database - إذا تم تمرير ‘WITH TABLES’، فاحذف replica لكل storage - بخلاف ذلك، يبقى المنطق كما هو، مع استدعاء DatabaseReplicated::dropReplica على databases فقط - عند حذف replica لقاعدة بيانات باستخدام Keeper path: - إذا تم تمرير ‘WITH TABLES’: - استعد قاعدة البيانات كمحرك atomic - استعد جداول RMT من statement في Keeper - احذف قاعدة البيانات (وسيتم أيضًا حذف الجداول المستعادة) - بخلاف ذلك، استدعِ فقط DatabaseReplicated::dropReplica على Keeper path المحدد. #85637 (Tuan Pham Anh).
- إصلاح عدم اتساق formatting الخاصة بـ TTL عندما تحتوي على الدالة
materialize. يُغلق #82828. #85749 (Alexey Milovidov). - تطبيق الإعداد azure_max_single_part_copy_size على عمليات النسخ العادية بالطريقة نفسها المستخدمة في Backup. #85767 (Ilya Golshtein).
- إبطاء threads الخاصة بـ client في S3 عند حدوث retryable errors في S3 object storage. يوسّع هذا الإعداد السابق
backup_slow_all_threads_after_retryable_s3_errorليشمل S3 disks، ويعيد تسميته إلى الاسم الأكثر عموميةs3_slow_all_threads_after_retryable_error. #85918 (Julia Kartseva). - وسم الإعدادات allow_experimental_variant/dynamic/json و enable_variant/dynamic/json بأنها Obsolete. أصبحت الأنواع الثلاثة الآن مُمكّنة دون شروط. #85934 (Pavel Kruglov).
- تحسين table engine S3(Azure)Queue بحيث يمكنه الاستمرار في العمل عند فقدان connection بـ ZooKeeper دون تكرارات محتملة. يتطلب ذلك تمكين إعداد S3Queue
use_persistent_processing_nodes(ويمكن تغييره عبرALTER TABLE MODIFY SETTING). #85995 (Kseniia Sumarokova). - لم تعد حالة Iceberg table تُخزَّن في storage object. من شأن ذلك أن يجعل Iceberg في ClickHouse قابلاً للاستخدام مع queries concurrent. #86062 (Daniil Ivanik).
- إضافة الإعداد
query_condition_cache_selectivity_threshold(default value: 1.0)، والذي يستبعد نتائج المسح الخاصة بـ predicates منخفضة selectivity من insertion في query condition cache. يتيح ذلك تقليل memory consumption الخاصة بـ query condition cache، على حساب انخفاض معدل إصابة cache. #86076 (zhongyuankai). - دعم Filtering باستخدام سلسلة URL الكاملة (
full_urldirective) فيhttp_handlers(بما في ذلك schema و host:port). #86155 (Azat Khuzhin). - إضافة setting تجريبي إلى ميزة delta lake writes، وهو
allow_experimental_delta_lake_writes، ويكون معطّلًا افتراضيًا. #86180 (Kseniia Sumarokova). - إصلاح اكتشاف systemd في سكربت init.d (يُصلح فحص “Install packages”). #86187 (Azat Khuzhin).
- إضافة مقياس بُعدي جديد باسم
startup_scripts_failure_reason. هذا المقياس مطلوب للتمييز بين أنواع الأخطاء المختلفة التي تؤدي إلى فشل نصوص بدء التشغيل. وعلى وجه الخصوص، ولأغراض التنبيه، نحتاج إلى التمييز بين الأخطاء العابرة (مثلMEMORY_LIMIT_EXCEEDEDأوKEEPER_EXCEPTION) والأخطاء غير العابرة. #86202 (Miсhael Stetsyuk). - دعم ملفات بيانات متعددة في عمليات كتابة Iceberg. #86275 (scanhex12).
- المزيد من الأنواع لـ partitions في عمليات كتابة Iceberg. هذا يُغلق #86206. #86298 (scanhex12).
- السماح بحذف الدالة
identity()للقسم في جدول Iceberg. #86314 (scanhex12). - إضافة إمكانية تمكين JSON logging لقناة محددة فقط؛ ولتحقيق ذلك، اضبط
logger.formatting.channelعلى إحدى القيمsyslog/console/errorlog/log. #86331 (Azat Khuzhin). - إضافة حد للصفوف/البايتات لملفات البيانات المُدرجة في delta lake. ويُتحكَّم في ذلك عبر الإعدادات
delta_lake_insert_max_rows_in_data_fileوdelta_lake_insert_max_bytes_in_data_file. #86357 (Kseniia Sumarokova). - السماح باستخدام الأرقام الأصلية في
WHERE. وهي مسموح بها بالفعل كوسائط للدوال المنطقية. وهذا يبسّط تحسينات دفع عوامل التصفية والنقل إلى PREWHERE. #86390 (Nikolai Kochetov). - إصلاح خطأ عند تنفيذ
SYSTEM DROP REPLICAعلى Catalog يحتوي على metadata تالفة. #86391 (Nikita Mikhaylov). - إضافة محاولات إعادة إضافية للتحقق من الوصول إلى disk (
skip_access_check=0) في Azure، لأن تهيئة الوصول قد تستغرق وقتًا طويلًا نسبيًا. #86419 (Alexander Tokmakov). - إعادة تسمية الإعداد
evaluation_timeإلىpromql_evaluation_time. #86459 (Vitaly Baranov). - إضافة إعداد لحذف الملفات عند تنفيذ drop في Iceberg. هذا يُغلق #86211. #86501 (scanhex12).
- تقليل استخدام الذاكرة في عمليات كتابة Iceberg. #86544 (scanhex12).
- جعل الدالة
today()غير حساسة لحالة الأحرف لتكون متسقة مع الدوال الأخرى المرتبطة بالتاريخ/الوقت مثلNOW(). #86561 (Kaviraj Kanagaraj). - جعل نافذة staleness في دوال
timeSeries*()مفتوحة من اليسار ومغلقة من اليمين. #86588 (Vitaly Baranov). - إضافة أحداث profile
FailedInternal*Query. #86627 (Shane Andrade). - جعل قفل bucket في وضع ordered الخاص بـ S3Queue وضعًا دائمًا، على غرار processing nodes في الحالة
use_persistent_processing_nodes = 1. وإضافة حقن أعطال Keeper في الاختبارات. #86628 (Kseniia Sumarokova). - إصلاح التعامل مع المستخدمين الذين تحتوي أسماؤهم على نقطة عند إضافتهم عبر config file. #86633 (Mikhail Koviazin).
- إضافة Metric غير متزامن لاستخدام الذاكرة في queries (
QueriesMemoryUsageوQueriesPeakMemoryUsage). #86669 (Azat Khuzhin). - يمكنك استخدام الخيار
clickhouse-benchmark --preciseللحصول على تقارير أدقّ عن QPS وغيرها من metrics لكل interval. ويساعد ذلك على الحصول على QPS متسق عندما تكون مدد queries مماثلة لـ interval الإبلاغ--delay D. #86684 (Sergei Trifonov). - جعل قيم nice الخاصة بـ threads في Linux قابلة للضبط لإعطاء بعض threads (merge/mutate و query و materialized view و zookeeper client) أولويات أعلى أو أقل. #86703 (Miсhael Stetsyuk).
- إصلاح رسالة الخطأ المضللة “specified upload does not exist”، التي تظهر عند فقدان Exception الأصلي أثناء multipart upload بسبب race condition. #86725 (Julia Kartseva).
- تقييد وصف query plan في query
EXPLAIN. وعدم احتساب الوصف للاستعلامات الأخرى غيرEXPLAIN. وإضافة setting باسمquery_plan_max_step_description_length. #86741 (Nikolai Kochetov). - إضافة إمكانية ضبط الإشارات المعلقة في محاولة لتجاوز CANNOT_CREATE_TIMER (لـ query profiler،
query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns). وكذلك جمعSigQمن/proc/self/statusلأغراض introspection (إذا كانProcessSignalQueueSizeقريبًا منProcessSignalQueueLimit، فمن المرجح ظهور أخطاءCANNOT_CREATE_TIMER). #86760 (Azat Khuzhin). - دعم insert/select الموزع لبحيرات البيانات. #86783 (scanhex12).
- تحسين أداء طلب RemoveRecursive في Keeper. #86789 (Antonio Andelic).
- إزالة المسافات البيضاء الزائدة في PrettyJSONEachRow أثناء إخراج JSON type. #86819 (Pavel Kruglov).
- زيادة نافذة deduplication في replicated حتى 10000. #86820 (Sema Checherinda).
- تُكتب الآن أحجام blobs الخاصة بـ
prefix.pathعند إزالة directory من القرص العادي القابل لإعادة الكتابة. #86908 (alesapin). - جعل الدالة
yesterday()غير حساسة لحالة الأحرف ومتسقة مع الدالةtoday(). #86914 (Kaviraj Kanagaraj). - دعم اختبار الأداء لملفات
.xmlعلى ClickHouse instance بعيدة، بما في ذلك ClickHouse Cloud. مثال على الاستخدام:tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure. #86995 (Raufs Dunamalijevs). - مراعاة حدود الذاكرة في بعض المواضع المعروفة بتخصيص كميات كبيرة من الذاكرة (>16MiB) (الفرز، وعمليات الإدراج غير المتزامنة، وسجل الملفات). #87035 (Azat Khuzhin).
- منع الإعدادات غير البولينية من ترك القيمة غير معيّنة في الاستعلامات. تحسين لـ #85800. #87084 (thraeka).
- دعم التلميحات لأسماء التنسيق. يُغلق #86761. #87092 (flynn).
- تتخطى النسخ المتماثلة البعيدة تحليل فهرس التخطي عند عدم وجود إسقاطات. #87096 (zoomxi).
- طرح استثناء إذا لم يكن الإعداد
network_compression_methodcodec عامًا مدعومًا. #87097 (Robert Schulze). - أصبح جدول النظام
system.query_cacheيعيد الآن جميع إدخالات ذاكرة التخزين المؤقت لنتائج الاستعلام، بينما كان يعيد سابقًا الإدخالات المشتركة فقط أو الإدخالات غير المشتركة للمستخدم والدور نفسيهما. وهذا مقبول لأن الإدخالات غير المشتركة يُفترض ألا تكشف نتائج الاستعلامات، بينما يعيدsystem.query_cacheسلاسل الاستعلامات. وهذا يجعل سلوك جدول النظام أكثر شبهًا بـsystem.query_log. #87104 (Robert Schulze). - إضافة دعم للمصادقة وSSL في دالة الجدول
arrowFlight(). #87120 (Vitaly Baranov). - إضافة مَعلمة جديدة إلى محرك الجدول
S3ودالة الجدولs3باسمstorage_class_nameتتيح تحديد فئة التخزين Intelligent-Tiering المدعومة من AWS. وهي مدعومة بصيغة المفتاح-القيمة وكذلك بالصيغة الموضعية (المهملة). #87122 (alesapin). - السماح بتعطيل ترميز utf8 لجدول ytsaurus. #87150 (MikhailBurdukov).
- دعم Azure لأقراص بحيرات البيانات. #87173 (scanhex12).
- إضافة مَعلمة جديدة للفهرس النصي باسم
dictionary_block_frontcoding_compressionللتحكم في ضغط القاموس. وهي مُمكّنة افتراضيًا لاستخدام ضغطfront-coding. #87175 (Elmi Ahmadov). - تمكين التقييم المختصر للدالة parseDateTime. #87184 (Pavel Kruglov).
- دعم الأمر
alter table ... materialize statistics allلتمثيل جميع إحصاءات الجدول ماديًا. #87197 (Han Fei). - تعطيل
s3_slow_all_threads_after_retryable_errorافتراضيًا. #87198 (Nikita Mikhaylov). - إضافة جدول جديد باسم
system.aggregated_zookeeper_log. يحتوي الجدول على إحصاءات (مثل عدد العمليات، ومتوسط زمن الاستجابة، والأخطاء) لعمليات ZooKeeper، مُجمَّعة حسب معرّف الجلسة، والمسار الأب، ونوع العملية، وتُفرَّغ دوريًا إلى القرص. #87208 (Miсhael Stetsyuk). - إعادة تسمية دالة الجدول
arrowflightإلىarrowFlight. #87249 (Vitaly Baranov). - تم تحديث
clickhouse-benchmarkليقبل استخدام-بدلًا من_في خيارات CLI الخاصة به. #87251 (Ahmed Gouda). - أُضيف إعداد جلسة لاستبعاد قائمة من skip indexes من الـ materialization عند insert (
exclude_materialize_skip_indexes_on_insert). كما أُضيف إعداد لجدول MergeTree لاستبعاد قائمة من skip indexes من الـ materialization أثناء الدمج (exclude_materialize_skip_indexes_on_merge). #87252 (George Larionov). - جُعلت عملية Flushing إلى
system.crash_logأثناء معالجة الإشارات متزامنة. #87253 (Miсhael Stetsyuk). - أُضيف column جديد باسم
statisticsإلىsystem.parts_columns. #87259 (Han Fei). - أُضيف setting باسم
inject_random_order_for_select_without_order_byيُدرجORDER BY rand()في استعلاماتSELECTذات المستوى الأعلى التي لا تحتوي على clauseORDER BY. #87261 (Rui Zhang). - دعم formats أخرى (ORC وAvro) في الكتابة إلى Iceberg. وهذا يُغلق #86179. #87277 (scanhex12).
- تحسين رسالة الخطأ في
joinGetبحيث توضّح بشكل صحيح أن عددjoin_keysلا يساوي عددright_table_keys. #87279 (Isak Ellmer). - جرى Squash للبيانات من جميع threads قبل الإدراج في materialized views وفقًا للإعدادين
min_insert_block_size_rows_for_materialized_viewsوmin_insert_block_size_bytes_for_materialized_views. في السابق، إذا كانparallel_view_processingمُمكّنًا، كان كل thread يُدرج في materialized view معيّن ويُجري Squash للـ insert بشكل مستقل، ما قد يؤدي إلى زيادة عدد parts الناتجة. #87280 (Antonio Andelic). - يضيف هذا التصحيح إمكانية التحقق من stat لأي عقدة Keeper أثناء write tx. ويمكن أن يساعد ذلك في اكتشاف مشكلة ABA. #87282 (Mikhail Artemenko).
- إعادة توجيه طلبات ytsaurus الثقيلة إلى proxies ثقيلة. #87342 (MikhailBurdukov).
- يُصلح هذا التصحيح عمليات التراجع الخاصة بعمليات unlink/rename/removeRecursive/removeDirectory/etc، وكذلك عدد hardlink ضمن أي workloads ممكنة لبيانات metadata من معاملات القرص، كما يُبسّط interfaces لجعلها أكثر عمومية بحيث يمكن إعادة استخدامها في meta stores أخرى. #87358 (Mikhail Artemenko).
- أُضيف parameter في configuration باسم
keeper_server.tcp_nodelayيتيح تعطيلTCP_NODELAYلـ Keeper. #87363 (Copilot). - دعم
--connectionفيclickhouse-benchmarks. وهو مماثل لما يدعمهclickhouse-client؛ إذ يمكنك تحديد connections معرّفة مسبقًا فيconfig.xml/config.yamlالخاص بالعميل تحت المسارconnections_credentials، لتجنّب تحديد المستخدم/كلمة المرور صراحةً عبر argument في سطر الأوامر. كما أُضيف دعم--accept-invalid-certificateإلىclickhouse-benchmark. #87370 (Azat Khuzhin). - أصبح setting
max_insert_threadsالآن ساري المفعول على Iceberg tables. #87407 (alesapin). - أضِف المقاييس المدرّجة والمقاييس متعددة الأبعاد إلى
PrometheusMetricsWriter. وبهذه الطريقة، سيحتوي المعالجPrometheusRequestHandlerعلى جميع المقاييس الأساسية، ويمكن استخدامه لجمع المقاييس في السحابة بشكل موثوق وبأقل عبء إضافي ممكن. #87521 (Miсhael Stetsyuk). - تُرجِع الدالة
hasTokenالآن صفراً من التطابقات للرمز الفارغ (في حين كان هذا يؤدي سابقاً إلى طرح استثناء). #87564 (Jimmy Aguilar Mena). - أضِف دعم الفهرس النصي لقيم
ArrayوMap(mapKeysوmapValues). والدالتان المدعومتان هماmapContainsKeyوhas. #87602 (Elmi Ahmadov). - أضِف مقياس
ZooKeeperSessionExpiredجديداً يشير إلى عدد جلسات ZooKeeper العامة منتهية الصلاحية. #87613 (Miсhael Stetsyuk). - استخدِم عميل تخزين S3 بإعدادات خاصة بالنسخ الاحتياطي (على سبيل المثال، backup_slow_all_threads_after_retryable_s3_error) لإجراء نسخ من جهة الخادم (أصلي) إلى وجهة النسخ الاحتياطي. واجعل s3_slow_all_threads_after_retryable_error متقادماً. #87660 (Julia Kartseva).
- أصلِح المعالجة غير الصحيحة للإعدادين
max_joined_block_size_rowsوmax_joined_block_size_bytesأثناء تسلسل خطة الاستعلام معmake_distributed_planالتجريبي. #87675 (Vladimir Cherkasov). - أصبح الإعداد
enable_http_compressionالآن هو الإعداد الافتراضي. وهذا يعني أنه إذا كان العميل يقبل ضغط HTTP، فسيستخدمه الخادم. ومع ذلك، لهذا التغيير بعض السلبيات. يمكن للعميل طلب طريقة ضغط ثقيلة، مثلbzip2، وهو أمر غير منطقي، وسيزيد من استهلاك موارد الخادم (لكن هذا لن يظهر إلا عند نقل نتائج كبيرة). ويمكن للعميل طلبgzip، وهو ليس سيئاً إلى هذا الحد، لكنه أقل كفاءة منzstd. يُغلق #71591. #87703 (Alexey Milovidov). - أُضيف إعداد جديد
keeper_hostsيعرض قائمة مضيفي [Zoo]Keeper التي يمكن لـ ClickHouse الاتصال بها. #87718 (Nikita Mikhaylov). - أضِف
ALTER TABLE REWRITE PARTS— يعيد كتابة أجزاء الجدول من الصفر باستخدام جميع الإعدادات الجديدة (لأن بعض الإعدادات، مثلuse_const_adaptive_granularity، لا تُطبَّق إلا على الأجزاء الجديدة). #87774 (Azat Khuzhin). - أضِف قيمتَي
fromوtoإلى لوحات معلومات النظام لتسهيل التحقيقات التاريخية. #87823 (Mikhail f. Shiryaev). - أضِف مزيداً من المعلومات لتتبّع الأداء في استعلامات SELECT على Iceberg. #87903 (Daniil Ivanik).
- أضِف الإعداد الجديد
joined_block_split_single_rowلتقليل استخدام الذاكرة في عمليات الربط بالتجزئة التي تتضمن عدداً كبيراً من التطابقات لكل مفتاح. يتيح ذلك تقسيم نتائج الربط إلى أجزاء حتى داخل التطابقات الخاصة بصف واحد من الجدول الأيسر، وهو مفيد بشكل خاص عندما يطابق صف واحد من الجدول الأيسر آلافاً أو ملايين الصفوف من الجدول الأيمن. في السابق، كان يجب إنشاء جميع التطابقات دفعةً واحدة في الذاكرة. وهذا يقلل من ذروة استخدام الذاكرة، لكنه قد يزيد من استخدام وحدة المعالجة المركزية. #87913 (Vladimir Cherkasov). - تحسين filesystem cache: إعادة استخدام مكرّر أولوية ذاكرة التخزين المؤقت بين الخيوط التي تحجز مساحة فيها بالتوازي. #87914 (Kseniia Sumarokova).
- إضافة إمكانية تقييد الطلبات إلى
Keeper(الإعدادmax_request_size، وهو مماثل لـjute.maxbufferفيZooKeeper، والقيمة الافتراضية OFF حفاظًا على التوافق مع الإصدارات السابقة، وسيتم ضبطه في الإصدارات القادمة). #87952 (Azat Khuzhin). - إصلاح
clickhouse-benchmarkبحيث لا يضمّن تتبعات المكدس في رسائل الخطأ افتراضيًا. #87954 (Ahmed Gouda). - تجنّب استخدام thread pool لتحميل العلامات بشكل غير متزامن (
load_marks_asynchronously=1) عندما تكون العلامات موجودة في ذاكرة التخزين المؤقت (لأن pool قد يكون تحت ضغط، ما يضيف كلفة على queries حتى لو كانت العلامات موجودة بالفعل في ذاكرة التخزين المؤقت). #87967 (Azat Khuzhin). - Ytsaurus: السماح بإنشاء table/table functions/dictionaries باستخدام مجموعة فرعية من columns. #87982 (MikhailBurdukov).
- اعتبارًا من الآن، أصبح
system.zookeeper_connection_logمفعّلًا افتراضيًا، ويمكن استخدامه للحصول على معلومات عن جلسات Keeper. #88011 (János Benjamin Antal). - توحيد سلوك TCP وHTTP عند تمرير external tables مكررة. يتيح HTTP تمرير temporary table عدة مرات. #88032 (Sema Checherinda).
- إزالة MemoryPools المخصصة لقراءة Arrow/ORC/Parquet. يبدو أن هذا component لم يعد مطلوبًا بعد https://github.com/ClickHouse/ClickHouse/pull/84082 لأننا الآن نتتبع جميع allocations على أي حال. #88035 (Nikita Mikhaylov).
- السماح بإنشاء قاعدة بيانات
Replicatedدون arguments. #88044 (Pervakov Grigorii). - إضافة دعم للاتصال بمنفذ TLS الخاص بـ clickhouse-keeper، مع الإبقاء على أسماء العلامات كما هي في clickhouse-client. #88065 (Pradeep Chhetri).
- تمت إضافة حدث profile جديد لتتبّع عدد المرات التي رُفض فيها دمج في الخلفية بسبب تجاوز حدود الذاكرة. #88084 (Grant Holly).
- تمت إضافة parameter اختياري
start_valueإلى الدالةgenerateSerialIDلتحديد قيم بداية مخصصة للسلاسل الجديدة. #88085 (Manuel). - تفعيل analyzer للتحقق من صحة تعبيرات القيم الافتراضية للأعمدة في CREATE/ALTER TABLE. #88087 (Max Justus Spransy).
- تحسين داخلي في تخطيط الاستعلامات: استخدام JoinStepLogical في
CROSS JOIN. #88151 (Vladimir Cherkasov). - دعم كامل للمعامل
IS NOT DISTINCT FROM(<=>). #88155 (simonmichal). - تفعيل sampling profiler العمومي افتراضيًا: جمع تتبعات المكدس لجميع الخيوط كل 10 ثوانٍ من وقت CPU والوقت الفعلي. #88209 (Alexander Tokmakov).
- تم إصلاح دعم عمليات
EXCHANGE TABLESعلى الجداول التي تستخدم المحركAlias. أصبح المحرك الآن يخزّن الجدول الهدف على شكل اسم قاعدة البيانات واسم الجدول بدلًا من معرّف تخزين ثابت، مما يتيح له تحديد الهدف بشكل صحيح بعد تبادل الجداول. #88233 (Kai Zhu). - تمت إضافة الإعداد
temporary_files_buffer_sizeللتحكم في حجم المخزن المؤقت لكاتبات الملفات المؤقتة. * تحسين استهلاك الذاكرة في العمليةscatter(المستخدمة، على سبيل المثال، في grace hash join) لأعمدةLowCardinality. #88237 (Vladimir Cherkasov). - تمت إضافة دعم القراءة المباشرة من فهارس النص مع النسخ المتماثلة المتوازية. كما تم تحسين أداء قراءة فهارس النص من التخزين الكائني. #88262 (Anton Popov).
- تدعم الدالة
generateSerialIDالآن وسيطًا غير ثابت لاسم السلسلة. إغلاق #83750. #88270 (Alexey Milovidov). - إضافة قاعدة بيانات catalogs لبحيرات البيانات من أجل المعالجة الموزعة. #88273 (scanhex12).
- تحديث azure sdk ليتضمن إصلاحًا لـ ‘Content-Length’ ظهر مع وظيفتَي النسخ وإنشاء الحاوية. #88278 (Smita Kulkarni).
- جعل الدالة lag غير حساسة لحالة الأحرف لتحقيق التوافق مع MySQL. #88322 (Lonny Kapelushnik).
- إضافة الإعداد
keeper_server.coordination_settings.check_node_acl_on_removeإلى config. عند تفعيله، سيتم التحقق قبل كل حذف لعقدة من ACL الخاصة بكل من العقدة نفسها والعقدة parent. بخلاف ذلك، سيتم التحقق فقط من ACL الخاصة بالعقدة parent. #88513 (Antonio Andelic). - أصبحت أعمدة
JSONالآن تُطبع بتنسيق جميل عند استخدام format Vertical. إغلاق #81794. #88524 (Frank Rosner). - تُخزَّن ملفات
clickhouse-client(مثل سجل query) الآن في المواقع الموصوفة في مواصفة XDG Base Directories بدلًا من جذر الدليل الرئيسي. وسيظل~/.clickhouse-client-historyمستخدمًا إذا كان موجودًا بالفعل. #88538 (Konstantin Bogdanov). - إصلاح تسرّب للذاكرة بسبب
GLOBAL IN(https://github.com/ClickHouse/ClickHouse/issues/88615). #88617 (pranav mehta). - تمت إضافة overload إلى hasAny/hasAllTokens لقبول مُدخل string. #88679 (George Larionov).
- بعد هذه الرقعة، سيُنفَّذ heuristic
to_remove_small_parts_at_rightقبل حساب درجة نطاق الدمج. قبل ذلك، كان merge selector يختار الدمج العريض، ثم يرشّح suffix الخاص به. إصلاح: #85374. #88736 (Mikhail Artemenko). - إضافة خطوة إلى نص ما بعد التثبيت لـ
clickhouse-keeperلتفعيل بدء التشغيل عند الإقلاع. #88746 (YenchangChan). - تحقّق من بيانات الاعتماد في واجهة الويب فقط عند اللصق، بدلًا من التحقّق منها عند كل ضغطة مفتاح. هذا يتجنب مشكلة في خوادم LDAP سيئة الإعداد. وبذلك تُغلَق #85777. #88769 (Alexey Milovidov).
- قَيِّد طول رسالة الاستثناء عند انتهاك أحد القيود. في الإصدارات السابقة، كان من الممكن أن تظهر رسالة استثناء طويلة جدًا عند إدراج سلسلة نصية طويلة جدًا، وينتهي الأمر بكتابتها في query_log. تُغلِق #87032. #88801 (Alexey Milovidov).
إصلاح خطأ (خلل ظاهر للمستخدم في إصدار مستقر رسمي)
- لا يُتحقَّق من نتائج استعلامات alter إلا على العقدة المبادِرة في قواعد البيانات المكررة والجداول المكررة داخليًا. ويعالج هذا الحالات التي قد يتعطل فيها استعلام alter مُعتمَد بالفعل على عقد أخرى. #83849 (János Benjamin Antal).
- تقييد عدد المهام من كل نوع في
BackgroundSchedulePool، لتجنّب الحالات التي تستحوذ فيها مهام من نوع واحد على جميع الخانات بينما تُحرم المهام الأخرى من التنفيذ. كما يمنع أيضًا حالات التوقف المتبادل عندما تنتظر المهام بعضها بعضًا. يتحكم في ذلك إعداد الخادمbackground_schedule_pool_max_parallel_tasks_per_type_ratio. #84008 (Alexander Tokmakov). - إصلاح مشكلة تسبّب GeoParquet في أخطاء في protocol العميل. #84020 (Michael Kolupaev).
- إصلاح تحليل الدوال المعتمدة على المضيف مثل shardNum() في الاستعلامات الفرعية على العقدة المبادِرة. #84409 (Eduard Karacharov).
- إيقاف الجداول بشكل صحيح عند استعادة replica لقاعدة البيانات. وكان الإيقاف غير الصحيح يؤدي إلى LOGICAL_ERROR لبعض محركات الجداول أثناء استعادة replica قاعدة البيانات. #84744 (Antonio Andelic).
- التحقق من access rights أثناء إنشاء تلميحات تصحيح الأخطاء المطبعية لاسم قاعدة البيانات. #85371 (Dmitry Novik).
- إصلاح المعالجة غير الصحيحة للتواريخ السابقة لـ epoch ذات الثواني الكسرية في عدة دوال مرتبطة بالتاريخ والوقت، مثل
parseDateTime64BestEffortوchange{Year,Month,Day}وmakeDateTime64. سابقًا، كان الجزء الكسري من الثانية يُطرح من الثواني بدلًا من إضافته إليها. على سبيل المثال، كانتparseDateTime64BestEffort('1969-01-01 00:00:00.468')تُرجع1968-12-31 23:59:59.532بدلًا من1969-01-01 00:00:00.468. #85396 (xiaohuanlin). -
- LowCardinality لأعمدة hive 2. تعبئة أعمدة hive قبل الأعمدة الافتراضية (مطلوب لـ https://github.com/ClickHouse/ClickHouse/pull/81040) 3. LOGICAL_ERROR عند استخدام تنسيق فارغ لـ hive #85528 4. إصلاح التحقق من أن أعمدة التقسيم في hive هي الأعمدة الوحيدة 5. التأكد من تحديد جميع أعمدة hive في المخطط 6. إصلاح جزئي لـ parallel_replicas_cluster مع hive 7. استخدام حاوية مرتبة في extractkeyValuePairs لأدوات hive المساعدة (مطلوب لـ https://github.com/ClickHouse/ClickHouse/pull/81040). #85538 (Arthur Passos).
- منع التحسين غير الضروري للوسيط الأول في دوال
IN، والذي كان يتسبب أحيانًا في حدوث خطأ عند استخدام تعيين المصفوفات. #85546 (Yakov Olkhovskiy). - لم تكن المواءمة بين معرّفات مصادر Iceberg وأسماء Parquet تُضبط وفقًا للمخطط عند كتابة ملف Parquet. يعالج طلب السحب هذا المخطط المرتبط بكل ملف بيانات Iceberg، وليس المخطط الحالي. #85829 (Daniil Ivanik).
- إصلاح قراءة حجم الملف بشكل منفصل عن فتحه. يرتبط ذلك بـ https://github.com/ClickHouse/ClickHouse/pull/33372، الذي أُضيف استجابةً لخلل في نوى Linux الأقدم من الإصدار
5.10. #85837 (Konstantin Bogdanov). - لم يعد ClickHouse Keeper يفشل في التشغيل على الأنظمة التي يكون فيها IPv6 معطّلًا على مستوى النواة (مثل RHEL مع ipv6.disable=1). وهو يحاول الآن الرجوع إلى مستمع IPv4 إذا فشل مستمع IPv6 الأولي. #85901 (jskong1124).
- يُغلق طلب السحب هذا #77990. إضافة دعم TableFunctionRemote لـ parallel replicas في globalJoin. #85929 (zoomxi).
- إصلاح مؤشر NULL في OrcSchemaReader::initializeIfNeeded(). يعالج طلب السحب هذا المشكلة التالية: #85292. #85951 (yanglongwei).
- إضافة تحقّق يسمح بالاستعلامات الفرعية المترابطة في عبارة FROM فقط إذا كانت تستخدم أعمدة من الاستعلام الخارجي. يُصلح #85469. يُصلح #85402. #85966 (Dmitry Novik).
- إصلاح alter update لعمود له subcolumn مستخدم في expression لعمود materialized آخر. في السابق، لم يكن يتم تحديث العمود materialized الذي يحتوي تعبيره على subcolumn على نحو صحيح. #85985 (Pavel Kruglov).
- منع تعديل الأعمدة التي تُستخدم subcolumns الخاصة بها في PK أو partition expression. #86005 (Pavel Kruglov).
- إصلاح فشل أوامر ALTER COLUMN IF EXISTS عند تغيّر حالة العمود ضمن عبارة ALTER نفسها. وأصبحت أوامر مثل DROP COLUMN IF EXISTS و MODIFY COLUMN IF EXISTS و COMMENT COLUMN IF EXISTS و RENAME COLUMN IF EXISTS تتعامل الآن بشكل صحيح مع الحالات التي يُحذف فيها عمود بواسطة أمر سابق ضمن العبارة نفسها. #86046 (xiaohuanlin).
- إصلاح قراءة subcolumns عند استخدام وضع ربط الأعمدة غير الافتراضي في محرك DeltaLake. #86064 (Kseniia Sumarokova).
- إصلاح استخدام قيم افتراضية غير صحيحة للمسار الذي يحتوي على تلميح Enum داخل JSON. #86065 (Pavel Kruglov).
- تحسين parsing لعنوان URL الخاص بـ hive catalog في DataLake مع تنقية الإدخال. يُغلق #86018. #86092 (rajat mohan).
- إصلاح خطأ منطقي أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات. يُغلق #86122. يُغلق https://github.com/ClickHouse/clickhouse-core-incidents/issues/473. #86130 (Kseniia Sumarokova).
- استخدام
NonZeroUInt64للقيمةlogs_to_keepفي DatabaseReplicatedSettings. #86142 (Tuan Pham Anh). - كان استعلام
FINALمع skip index يؤدي إلى ظهور Exception إذا كان الجدول (مثلReplacingMergeTree) قد أُنشئ بالإعدادindex_granularity_bytes = 0. وقد أُصلح هذا الـ Exception الآن. #86147 (Shankar Iyer). - إزالة السلوك غير المعرّف وإصلاح مشكلات تحليل partition expression في Iceberg. #86166 (Daniil Ivanik).
- إصلاح استنتاج أنواع Date/DateTime/DateTime64 للتواريخ الواقعة خارج النطاق المدعوم. #86184 (Pavel Kruglov).
- إصلاح تعطل عند وجود blocks ثابتة وغير ثابتة في عملية INSERT واحدة. #86230 (Azat Khuzhin).
- معالجة العناصر المضمّنة من
/etc/metrika.xmlافتراضيًا عند إنشاء disks من SQL. #86232 (alekar). - إصلاح accurateCastOrNull/accurateCastOrDefault من String إلى JSON. #86240 (Pavel Kruglov).
- دعم الأدلة التي لا تحتوي على ’/’ في محرك Iceberg. #86249 (scanhex12).
- إصلاح تعطل في replaceRegex مع haystack من نوع FixedString وneedle فارغة. #86270 (Raúl Marín).
- إصلاح تعطل أثناء ALTER UPDATE Nullable(JSON). #86281 (Pavel Kruglov).
- إصلاح column definer المفقود في system.tables. #86295 (Raúl Marín).
- إصلاح cast من LowCardinality(Nullable(T)) إلى Dynamic. #86365 (Pavel Kruglov).
- إصلاح خطأ منطقي أثناء الكتابة إلى DeltaLake. يُغلق #86175. #86367 (Kseniia Sumarokova).
- إصلاح الخطأ
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resourceعند قراءة blobs فارغة من Azure blob storage للقرص plain_rewritable. #86400 (Julia Kartseva). - إصلاح GROUP BY Nullable(JSON). #86410 (Pavel Kruglov).
- إصلاح خطأ في materialized views: قد لا يعمل MV إذا أُنشئ ثم أُزيل ثم أُنشئ مرة أخرى بالاسم نفسه. #86413 (Alexander Tokmakov).
- فشل القراءة من دوال *cluster إذا كانت جميع النسخ المتماثلة غير متاحة. #86414 (Julian Maicher).
- إصلاح تسرّب
MergesMutationsMemoryTrackingبسبب جداولBuffer، وإصلاحquery_views_logللتدفّق منKafka(وغيره). #86422 (Azat Khuzhin). - إصلاح
show tablesبعد حذف الجدول المرجعي لتخزين alias. #86433 (RinChanNOW). - إصلاح غياب ترويسة chunk عند تمكين send_chunk_header واستدعاء UDF عبر HTTP protocol. #86469 (Vladimir Cherkasov).
- إصلاح احتمال حدوث توقف متبادل عند تمكين عمليات flush لملف تعريف jemalloc. #86473 (Azat Khuzhin).
- إصلاح قراءة الأعمدة الفرعية في محرك الجدول DeltaLake. يغلق #86204. #86477 (Kseniia Sumarokova).
- التعامل مع معرّف مضيف loopback بشكل صحيح لتجنب التصادم عند معالجة مهام DDL:. #86479 (Tuan Pham Anh).
- إصلاح عمليتَي
detach/attachلجداول محرك قاعدة البيانات PostgreSQL ذات الأعمدة الرقمية/العشرية. #86480 (Julian Maicher). - إصلاح استخدام ذاكرة غير مهيّأة في getSubcolumnType. #86498 (Raúl Marín).
- أصبحت الدالتان
searchAnyوsearchAll، عند استدعائهما مع أنماط بحث فارغة، تُرجعان الآنtrue(أي “يطابق كل شيء”). في السابق، كانتا تُرجعانfalse. (المشكلة #86300). #86500 (Elmi Ahmadov). - إصلاح الدالة
timeSeriesResampleToGridWithStaleness()عندما لا تحتوي الـ bucket الأولى على قيمة. #86507 (Vitaly Baranov). - إصلاح تعطل ناتج عن ضبط
merge_tree_min_read_task_sizeعلى 0. #86527 (yanglongwei). - أثناء القراءة، يُؤخذ التنسيق لكل ملف بيانات من البيانات الوصفية لـ Iceberg (وكان يُؤخذ سابقًا من معاملات الجدول). #86529 (Daniil Ivanik).
- إصلاح تعطل كان يمكن أن تتسبب فيه بعض البيانات الصحيحة التي يرسلها المستخدم إلى عمود
AggregateFunction(quantileDD)، بحيث تدخل عمليات الدمج في استدعاء ذاتي لا نهائي. #86560 (Raphaël Thériault). - إصلاح إطلاق محرك قاعدة البيانات Backup استثناءً عند تنفيذ query على ملفات part ذات الحجم الصفري. #86563 (Max Justus Spransy).
- إصلاح غياب ترويسة chunk عند تمكين send_chunk_header واستدعاء UDF عبر HTTP protocol. #86606 (Vladimir Cherkasov).
- إصلاح الخطأ المنطقي في S3Queue “Expected current processor to be equal to ”، والذي حدث بسبب انتهاء صلاحية جلسة Keeper. #86615 (Kseniia Sumarokova).
- أخطاء في قابلية Nullable في عملية insert وpruning. هذا يُغلق #86407. #86630 (scanhex12).
- لا تُعطّل ذاكرة التخزين المؤقت لنظام الملفات إذا كانت ذاكرة التخزين المؤقت للبيانات الوصفية لـ Iceberg معطّلة. #86635 (Daniil Ivanik).
- إصلاح الخطأ ‘Deadlock in Parquet::ReadManager (single-threaded)’ في Parquet reader v3. #86644 (Michael Kolupaev).
- إصلاح دعم IPv6 في
listen_hostلـ ArrowFlight. #86664 (Vitaly Baranov). - إصلاح مشكلة الإغلاق في handler الخاص بـ
ArrowFlight. يُصلح طلب السحب هذا #86596. #86665 (Vitaly Baranov). - إصلاح distributed queries مع
describe_compact_output=1. #86676 (Azat Khuzhin). - إصلاح parsing لتعريف window وتطبيق query parameters. #86720 (Azat Khuzhin).
- إصلاح الاستثناء
Partition strategy wildcard can not be used without a '_partition_id' wildcard.عند إنشاء table باستخدامPARTITION BYولكن من دون wildcard للتقسيم، وهو ما كان يعمل في الإصدارات السابقة لـ 25.8. يُغلق https://github.com/ClickHouse/clickhouse-private/issues/37567. #86748 (Kseniia Sumarokova). - إصلاح خطأ LogicalError عندما تحاول queries متوازية الحصول على قفل واحد. #86751 (Pervakov Grigorii).
- إصلاح كتابة NULL في shared data الخاصة بـ JSON ضمن RowBinary input format، مع إضافة بعض عمليات التحقق الإضافية في ColumnObject. #86812 (Pavel Kruglov).
- دعم أنواع JSON/Dynamic في table مُنشأ باستخدام table function
cluster. #86821 (Pavel Kruglov). - إصلاح permutation الفارغ لـ Tuple مع limit. #86828 (Pavel Kruglov).
- عدم استخدام عقدة Keeper منفصلة لعُقد المعالجة الدائمة. إصلاح لـ https://github.com/ClickHouse/ClickHouse/pull/85995. يُغلق #86406. #86841 (Kseniia Sumarokova).
- إصلاح مشكلة تسبّب جدول محرك TimeSeries في تعطيل إنشاء replica جديدة في Replicated Database. #86845 (Nikolay Degterinsky).
- إصلاح الاستعلام عن
system.distributed_ddl_queueفي الحالات التي تفتقد فيها tasks بعض عُقد Keeper. #86848 (Antonio Andelic). - إصلاح seek عند نهاية block غير المضغوط. #86906 (Pavel Kruglov).
- معالجة الاستثناء الذي يُطرَح أثناء التنفيذ غير المتزامن لـ Iceberg Iterator. #86932 (Daniil Ivanik).
- إصلاح حفظ ملفات إعدادات XML الكبيرة المُعالجة مسبقًا. #86934 (c-end).
- إصلاح تعبئة حقل التاريخ في جدول system.iceberg_metadata_log. #86961 (Daniil Ivanik).
- إصلاح إعادة الاحتساب اللانهائية لـ
TTLمعWHERE. #86965 (Anton Popov). - إصلاح عدم حتمية نتيجة الدالة المحسوبة في CTE داخل الاستعلام. #86967 (Yakov Olkhovskiy).
- إصلاح LOGICAL_ERROR في EXPLAIN عند استخدام pointInPolygon على أعمدة المفتاح الأساسي. #86971 (Michael Kolupaev).
- إصلاح احتمال ظهور نتيجة غير صحيحة للدالة
uniqExactمع المعدّلينROLLUPوCUBE. #87014 (Nikita Taranov). - إصلاح جداول data lake التي تحتوي أسماؤها على تسلسل percent-encoded. يغلق #86626. #87020 (Anton Ivashkin).
- إصلاح تحليل schema الجدول عند استخدام table function
url()عندما يكون الإعدادparallel_replicas_for_cluster_functionsمضبوطًا على 1. #87029 (Konstantin Bogdanov). - تطبيق CAST بشكل صحيح على ناتج PREWHERE بعد تقسيمه إلى عدة خطوات. #87040 (Antonio Andelic).
- إصلاح lightweight updates مع العبارة
ON CLUSTER. #87043 (Anton Popov). - إصلاح توافق بعض aggregate function states مع String argument. #87049 (Pavel Kruglov).
- إصلاح السلوك غير الصحيح لـ
IS NULLعلى nullable columns فيOUTER JOINمعoptimize_functions_to_subcolumns، وإغلاق #78625. #87058 (Vladimir Cherkasov). - إصلاح مشكلة عدم تمرير اسم model من OpenAI. #87100 (Kaushik Iska).
- EmbeddedRocksDB: يجب أن يكون Path داخل user_files. #87109 (Raúl Marín).
- إصلاح جداول KeeperMap المُنشأة قبل 25.1، والتي كانت تترك البيانات في ZooKeeper بعد استعلام DROP. #87112 (Nikolay Degterinsky).
- إصلاح قراءة معرّفات حقول maps وArrays في Parquet. #87136 (scanhex12).
- إصلاح قراءة Array مع subcolumn الخاص بأحجام المصفوفة في lazy materialization. #87139 (Pavel Kruglov).
- تم إصلاح الاحتساب غير الصحيح لعمليات تحرير الذاكرة الخاصة بالبيانات المؤقتة عند تتبّع الحد
max_temporary_data_on_disk_size، وإغلاق #87118. #87140 (JIaQi). - أصبحت الدالة checkHeaders تتحقق الآن بشكل صحيح من headers المقدَّمة وترفض headers المحظورة. المؤلف الأصلي: Michael Anastasakis (@michael-anastasakis). #87172 (Raúl Marín).
- توحيد سلوك
toDateوtoDate32لجميع الأنواع الرقمية. كما يُصلح فحص underflow في Date32 أثناء التحويل من int16. #87176 (Pervakov Grigorii). - إصلاح الدالة CASE عند استخدام arguments من النوع Dynamic. #87177 (Pavel Kruglov).
- إصلاح logical error في parallel replicas للاستعلامات التي تتضمن عدة JOINs، وخصوصًا عند وجود RIGHT JOIN بعد LEFT/INNER JOIN. #87178 (Igor Nikonov).
- مراعاة الإعداد
input_format_try_infer_variantsفي cache الخاصة بـ schema inference. #87180 (Pavel Kruglov). - جعل pathStartsWith يطابق فقط المسارات الواقعة ضمن البادئة. #87181 (Raúl Marín).
- إصلاح قراءة Array فارغة من String فارغ في CSV. #87182 (Pavel Kruglov).
- إصلاح احتمال إرجاع
EXISTSغير المرتبط نتيجة خاطئة. كان هذا السلوك معطّلًا عند استخدامexecute_exists_as_scalar_subquery=1، الذي أُضيف في https://github.com/ClickHouse/ClickHouse/pull/85481 ويؤثر على25.8. إصلاح #86415. #87207 (Nikolai Kochetov). - تم إصلاح logical errors في العمود الافتراضي
_row_numberوعمليات الحذف المموضعة في Iceberg. #87220 (Michael Kolupaev). - إصلاح الخطأ
LOGICAL_ERROR“Too large size passed to allocator” فيJOINبسبب خلط blocks الثابتة وغير الثابتة. #87231 (Azat Khuzhin). - يُصدر error إذا لم يكن iceberg_metadata_log مهيأً بينما يحاول المستخدم الحصول على معلومات Debug لبيانات Iceberg الوصفية. كما يُصلح الوصول إلى nullptr. #87250 (Daniil Ivanik).
- تم إصلاح lightweight updates مع subqueries التي تقرأ من جداول
MergeTreeأخرى. #87285 (Anton Popov). - تم إصلاح تحسين move-to-prewhere، الذي لم يكن يعمل عند وجود row policy. استكمالًا لـ #85118. إغلاق #69777. إغلاق #83748. #87303 (Nikolai Kochetov).
- تم إصلاح تطبيق Patches على columns ذات default expression غير الموجودة في data parts. #87347 (Anton Popov).
- إصلاح ترقية EmbeddedRocksDB. #87392 (Raúl Marín).
- إصلاح القراءة المباشرة من الفهرس النصي على object storage. #87399 (Anton Popov).
- منع إنشاء امتياز لمحرك غير موجود. #87419 (Jitendra).
- قصر تجاهل الأخطاء في
s3_plain_rewritableعلى أخطاء “غير موجود” فقط (إذ قد يؤدي خلاف ذلك إلى شتى أنواع المشاكل). #87426 (Azat Khuzhin). - إصلاح القواميس التي تستخدم مصدر YTSaurus وتخطيطات *range_hashed. #87490 (MikhailBurdukov).
- إصلاح إنشاء Array من Tuples فارغة. #87520 (Pavel Kruglov).
- التحقق من الأعمدة غير الصالحة أثناء إنشاء جدول مؤقت. #87524 (Pavel Kruglov).
- عدم وضع أعمدة partition الخاصة بـ hive مطلقًا في ترويسة format. يُصلح #87515. #87528 (Arthur Passos).
- إصلاح تهيئة القراءة من format في DeltaLake عند استخدام Text format. #87529 (Pavel Kruglov).
- إصلاح التحقق من صلاحيات الوصول عند SELECT و insert في جداول Buffer. #87545 (pufit).
- منع إنشاء data skipping index لجدول S3. #87554 (Bharat Nallan).
- تجنب تسرّب الذاكرة المتتبَّعة في logging غير المتزامن (إذ قد يحدث انحراف كبير يصل خلال 10 ساعات إلى نحو 100GiB) وفي text_log (وقد يحدث انحراف مماثل تقريبًا). #87584 (Azat Khuzhin).
- إصلاح خلل كان قد يؤدي إلى استبدال إعدادات الخادم العامة بإعدادات SELECT الخاصة بـ View أو Materialized View، إذا كان هذا الـ view قد حُذف بشكل غير متزامن وأُعيد تشغيل الخادم قبل اكتمال التنظيف في الخلفية. #87603 (Alexander Tokmakov).
- استبعاد بايتات userspace page cache، إن أمكن، عند حساب تحذير زيادة حمل الذاكرة. #87610 (Bharat Nallan).
- إصلاح خلل كان يمكن أن يؤدي فيه الترتيب غير الصحيح للأنواع أثناء deserialization لـ CSV إلى
LOGICAL_ERROR. #87622 (Yarik Briukhovetskyi). - إصلاح التعامل غير الصحيح مع
command_read_timeoutفي القواميس التنفيذية. #87627 (Azat Khuzhin). - إصلاح سلوك SELECT * REPLACE غير الصحيح في عبارة WHERE مع analyzer الجديد عند التصفية على الأعمدة المستبدلة. #87630 (xiaohuanlin).
- إصلاح two-level aggregation عند استخدام
MergeفوقDistributed. #87687 (c-end). - إصلاح إنشاء block الإخراج في خوارزمية HashJoin عندما لا تُستخدم قائمة الصفوف اليمنى. يُصلح #87401. #87699 (Dmitry Novik).
- كان يمكن اختيار وضع قراءة parallel replicas بشكل غير صحيح إذا لم تكن هناك بيانات للقراءة بعد تطبيق index analysis. يغلق #87653. #87700 (zoomxi).
- إصلاح التعامل مع الأعمدة
timestamp/timestamptzفي Glue. #87733 (Andrey Zvonov). - هذا يغلق #86587. #87761 (scanhex12).
- إصلاح كتابة القيم المنطقية في PostgreSQL interface. #87762 (Artem Yurov).
- إصلاح خطأ الجدول غير المعروف في استعلام insert select مع CTE. #85368. #87789 (Guang Zhao).
- إصلاح قراءة subcolumn null من map من Variants التي لا يمكن أن تكون داخل Nullable. #87798 (Pavel Kruglov).
- إصلاح خطأ في المعالجة عند تعذّر حذف database بالكامل على الـ cluster من العقدة الثانوية. #87802 (Tuan Pham Anh).
- إصلاح عدة مشكلات في skip indices. #87817 (Raúl Marín).
- في AzureBlobStorage، تم التحديث لمحاولة النسخ native أولًا ثم الرجوع إلى القراءة والكتابة عند حدوث خطأ ‘Unauthroized’ (في AzureBlobStorage، إذا كانت storage accounts مختلفة بين source وdestination فسنحصل على خطأ ‘Unauthorized’). وكذلك إصلاح تطبيق “use_native_copy” عندما يكون الـ endpoint معرّفًا في الـ configuration. #87826 (Smita Kulkarni).
- يتعطل ClickHouse إذا كان ملف ArrowStream يحتوي على Dictionary غير فريد. #87863 (Ilya Golshtein).
- إصلاح عملية merge مع projections عندما يكون block الأخير فارغًا. #87928 (Raúl Marín).
- عدم إزالة الدوال injective من GROUP BY إذا كانت types الخاصة بـ arguments غير مسموح بها في GROUP BY. #87958 (Pavel Kruglov).
- إصلاح الاستبعاد غير الصحيح للـ granules/partition للمفاتيح المستندة إلى DateTime عند استخدام الإعداد
session_timezoneفي queries. #87987 (Eduard Karacharov). - إرجاع عدد الصفوف المتأثرة بعد الاستعلام في PostgreSQL Interface. #87990 (Artem Yurov).
- تقييد استخدام filter pushdown مع PASTE JOIN لأنه قد يؤدي إلى نتائج غير صحيحة. #88078 (Yarik Briukhovetskyi).
- يطبّق تطبيع URI قبل التقييم عند التحقق من الأذونات الذي أُضيف في https://github.com/ClickHouse/ClickHouse/pull/84503. #88089 (pufit).
- إصلاح خطأ منطقي عندما لا يطابق
ARRAY JOIN COLUMNS()أي أعمدة في المُحلِّل الجديد. #88091 (xiaohuanlin). - إصلاح التحذير “ارتفاع استخدام الذاكرة في ClickHouse” (مع استبعاد page cache). #88092 (Azat Khuzhin).
- إصلاح احتمال تلف البيانات في جداول
MergeTreeالتي تم تعيينTTLعلى أحد أعمدتها. #88095 (Anton Popov). - إصلاح تعطل في الدالتين
mortonEncodeوhilbertEncodeعند استدعائهما بوسيطة tuple فارغة. #88110 (xiaohuanlin). - ستستغرق استعلامات
ON CLUSTERالآن وقتًا أقل في حال وجود replicas غير نشطة في cluster. #88153 (alesapin). - أصبح عامل DDL الآن ينظّف المضيفين القدماء من مجموعة replicas. سيؤدي ذلك إلى تقليل كمية metadata المخزنة في ZooKeeper. #88154 (alesapin).
- تنفيذ تراجع صحيح عن عملية نقل الدليل في حال حدوث خطأ. نحتاج إلى إعادة كتابة جميع كائنات
prefix.pathالتي تغيّرت أثناء التنفيذ، وليس الكائن الجذر فقط. #88198 (Mikhail Artemenko). - إصلاح تمرير العلامة
is_sharedفيColumnLowCardinality. وقد يؤدي ذلك إلى نتيجةgroup-byغير صحيحة إذا أُدرجت قيمة جديدة في عمود بعد أن تكون قيم hash قد حُسبت مسبقًا وخُزّنت مؤقتًا فيReverseIndex. #88213 (Nikita Taranov). - إصلاح خطأ في workload setting
max_cpu_share. ويمكن الآن استخدامه دون تعيين workload settingmax_cpus. #88217 (Neerav). - إصلاح خلل كان قد يؤدي إلى تعلّق mutations الثقيلة جدًا التي تتضمن subqueries في مرحلة التحضير. وأصبح من الممكن الآن إيقاف هذه mutations باستخدام
SYSTEM STOP MERGES. #88241 (alesapin). - أصبحت correlated subqueries تعمل الآن مع object storage. #88290 (alesapin).
- تجنّب محاولة تهيئة قواعد بيانات DataLake عند الوصول إلى
system.projectionsوsystem.data_skipping_indices. #88330 (Azat Khuzhin). - لن تظهر catalogs الخاصة ببحيرات البيانات الآن في جداول introspection الخاصة بالنظام إلا إذا كان
show_data_lake_catalogs_in_system_tablesمفعّلًا صراحةً. #88341 (alesapin). - إصلاح DatabaseReplicated بحيث يراعي إعداد
interserver_http_host. #88378 (xiaohuanlin). - أصبحت positional arguments معطّلة الآن صراحةً في سياق تعريف Projections، لأنها غير مناسبة في هذه المرحلة الداخلية من الاستعلام. وهذا يصلح #48604. #88380 (Amos Bird).
- إصلاح التعقيد التربيعي في الدالة
countMatches. يُغلق #88400. #88401 (Alexey Milovidov). - جعل أوامر
ALTER COLUMN ... COMMENTالخاصة بجداول KeeperMap متماثلة بحيث تُسجَّل في البيانات الوصفية لقاعدة البيانات Replicated ويجري نشرها عبر جميع النسخ المتماثلة. يُغلق #88077. #88408 (Eduard Karacharov). - إصلاح حالة اعتماد دوري زائف مع Materialized Views في قاعدة البيانات Replicated، كانت تمنع إضافة نسخ متماثلة جديدة إلى قاعدة البيانات. #88423 (Nikolay Degterinsky).
- إصلاح تجميع الأعمدة المتفرقة عندما يكون
group_by_overflow_modeمضبوطًا علىany. #88440 (Eduard Karacharov). - إصلاح خطأ “لم يتم العثور على العمود” عند استخدام
query_plan_use_logical_join_step=0مع عدة عبارات FULL JOIN USING. يُغلق #88103. #88473 (Vladimir Cherkasov). - لدى العناقيد الكبيرة التي يزيد عدد العقد فيها على 10 احتمال مرتفع لفشل عملية الاستعادة مع الخطأ
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try again. وتُعاد كتابة العقدةnum_hostsبواسطة العديد من المضيفين في الوقت نفسه. ويجعل هذا الإصلاح الإعداد المتحكم في عدد المحاولات ديناميكيًا. يُغلق #87721. #88484 (Mikhail f. Shiryaev). - هذا الـ PR مخصّص فقط لتحقيق التوافق مع الإصدار 23.8 وما قبله. وقد أُدخلت مشكلة التوافق عبر هذا الـ PR: https://github.com/ClickHouse/ClickHouse/pull/54240. سيفشل هذا الـ SQL عند استخدام
enable_analyzer=0(قبل 23.8 كان يعمل بشكل صحيح):select * from t1 s final join ( select * from t2 final ) r final on s.key = r.key join ( select * from t3 final ) c final on s.key = c.key، لأنJoinToSubqueryTransformVisitorسيُعيد كتابة هذا الـ SQL إلىSELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c FINAL ) AS `--.t` ON `_--s.key` = `_--c.key`. والمطلوب هو إعادة كتابة هذا الـ SQL إلى (بنقل FINAL الأخيرة فقط):SELECT `_--s.key` AS `s.key`, `_--s.value` AS `s.value`, `_--r.key` AS `r.key`, `_--r.value` AS `r.value`, `_--c.key` AS `c.key`, `_--c.value` AS `c.value` FROM ( SELECT value AS `_--s.value`, key AS `_--s.key`, r.value AS `_--r.value`, r.key AS `_--r.key` FROM t1 AS s FINAL ALL INNER JOIN ( SELECT key, value FROM t2 FINAL ) AS r FINAL ON `_--s.key` = `_--r.key` ) AS `--.s` ALL INNER JOIN ( SELECT value AS `_--c.value`, key AS `_--c.key` FROM ( SELECT key, value FROM t3 FINAL ) AS c ) AS `--.t` FINAL ON `_--s.key` = `_--c.key`. #88491 (JIaQi). - إصلاح تجاوز السعة للأعداد الصحيحة الذي يرصدّه UBSAN في رسالة الخطأ
accurateCastعند تحويل القيم الكبيرة إلى DateTime. #88520 (xiaohuanlin). - إصلاح CoalescingMergeTree لأنواع Tuple. هذا يُغلق #88469. #88526 (scanhex12).
- منع عمليات الحذف عند
iceberg_format_version=1. هذا يُغلق #88444. #88532 (scanhex12). - تُصلح هذه الرقعة عملية النقل على أقراص
plain-rewritableللمجلدات ذات العمق الاعتباطي. #88586 (Mikhail Artemenko). - إصلاح SQL SECURITY DEFINER مع دوال *cluster. #88588 (Julian Maicher).
- إصلاح تعطل محتمل ناتج عن mutation متزامنة للأعمدة الثابتة الأساسية في PREWHERE. #88605 (Azat Khuzhin).
- إصلاح القراءة من text index وتمكين query condition cache (مع Settings المُمكّنة
use_skip_indexes_on_data_readوuse_query_condition_cache). #88660 (Anton Popov). - يتسبب استثناء
Poco::TimeoutExceptionالمُلقى منPoco::Net::HTTPChunkedStreamBuf::readFromDeviceفي تعطل البرنامج مع SIGABRT. #88668 (Miсhael Stetsyuk). - إصلاح الإلحاق بـ
system.zookeeper_connection_logفي حال اتصل ClickHouse للمرة الأولى بعد إعادة تحميل config. #88728 (Antonio Andelic). - إصلاح خلل كان يمكن أن يؤدي فيه تحويل DateTime64 إلى Date مع
date_time_overflow_behavior = 'saturate'إلى نتائج غير صحيحة للقيم الخارجة عن النطاق عند العمل مع المناطق الزمنية. #88737 (Manuel). - المحاولة رقم N لإصلاح الخطأ “having zero bytes error” في S3 table engine عند تفعيل cache. #88740 (Kseniia Sumarokova).
- إصلاح التحقق من صلاحيات الوصول لعمليات select على table function
loop. #88802 (pufit). - التقاط الاستثناءات عند فشل التسجيل غير المتزامن لتجنّب إنهاء البرنامج. #88814 (Raúl Marín).