التغييرات غير المتوافقة مع الإصدارات السابقة
تغييرات JSON وتنسيقات البيانات
- تعطيل إحاطة الأعداد الصحيحة ذات 64 بت بعلامات اقتباس في تنسيقات JSON افتراضيًا. #74079 (Pavel Kruglov).
- استنتاج
Array(Dynamic)بدلًا منTupleغير المسمّى لمصفوفات القيم ذات الأنواع المختلفة في JSON. لاستخدام السلوك السابق، عطّل الإعدادinput_format_json_infer_array_of_dynamic_from_array_of_different_types. #80859 (Pavel Kruglov). - كتابة القيم من النوع
EnumبصيغةBYTE_ARRAYمع النوع المنطقيENUMفي تنسيق الإخراج Parquet افتراضيًا. #84169 (Pavel Kruglov).
التخزين والتقسيم
- إضافة دعم لعمليات الكتابة بأسلوب تقسيم Hive، مع إعادة هيكلة آلية تنفيذ القراءة (لم تعد أعمدة تقسيم Hive افتراضية). #76802 (Arthur Passos).
- تفعيل إعداد MergeTree
write_marks_for_substreams_in_compact_partsافتراضيًا. يحسّن ذلك بشكل كبير أداء قراءة الأعمدة الفرعية من أجزاء Compact المُنشأة حديثًا. ولن تتمكن الخوادم التي يقل إصدارها عن 25.5 من قراءة أجزاء Compact الجديدة. #84171 (Pavel Kruglov). - منع
RENAME COLUMNأوDROP COLUMNعند تضمين أعمدة مُدرجة صراحةً للتجميع في SummingMergeTree. يُغلق #81836. #82821 (Alexey Milovidov).
تحسينات الدوال
- إضافة وسيطة جديدة
unexpected_quoting_character_strategyإلى الدالةextractKeyValuePairsللتحكم في ما يحدث عند العثور علىquoting_characterبشكل غير متوقع. لمزيد من التفاصيل، راجع وثائق الدالةextractKeyValuePairs. #80657 (Arthur Passos). - سابقًا، كانت الدالة
countMatchesتتوقف عن العد عند أول تطابق فارغ، حتى إذا كان النمط يقبله. ولمعالجة هذه المشكلة، تواصلcountMatchesالآن التنفيذ بالتقدّم حرفًا واحدًا عند حدوث تطابق فارغ. ويمكن للمستخدمين الذين يرغبون في الإبقاء على السلوك القديم تفعيل الإعدادcount_matches_stop_at_empty_match. #81676 (Elmi Ahmadov).
تحسينات على نوع البيانات
- تحسين دقة التحويل من
DecimalإلىFloat32. وإتاحة التحويل منDecimalإلىBFloat16. يُغلق #82660. #82823 (Alexey Milovidov).
الأداء وإدارة الموارد
- سابقًا، لم تكن استعلامات
BACKUPوعمليات الدمج والتعديلات تستخدم محددات المعدل على مستوى الخادم لحركة المرور المحلية (max_local_read_bandwidth_for_serverوmax_local_write_bandwidth_for_server) والبعيدة (max_remote_read_network_bandwidth_for_serverوmax_remote_write_network_bandwidth_for_server)؛ بل كانت تُقيَّد فقط بواسطة إعدادات خادم مخصصة (max_backup_bandwidth_for_serverوmax_mutations_bandwidth_for_serverوmax_merges_bandwidth_for_server). أما الآن، فهي تستخدم كلا النوعين من محددات المعدل في الوقت نفسه. #81753 (Sergei Trifonov). - أُضيف إعداد جديد
cluster_function_process_archive_on_multiple_nodesيزيد أداء معالجة الأرشيفات في دوال العنقود عند ضبطه على true (وهو الإعداد الافتراضي). وينبغي ضبطه علىfalseللتوافق وتجنب الأخطاء أثناء الترقية إلى 25.7+ عند استخدام دوال العنقود مع الأرشيفات في الإصدارات الأقدم. #82355 (Kseniia Sumarokova). - كانت القيمة الافتراضية السابقة لـ
concurrent_threads_schedulerهيround_robin، وقد تبيّن أنها غير عادلة عند وجود عدد كبير من الاستعلامات أحادية الخيط (مثلINSERT). ويجعل هذا التغيير المجدولfair_round_robin، وهو بديل أكثر أمانًا، الخيار الافتراضي. #84747 (Sergei Trifonov). - لا يُفعَّل التجسيد الكسول إلا مع المحلل، لتجنّب الحاجة إلى صيانته من دونه، إذ قد تظهر بعض المشكلات في هذه الحالة (على سبيل المثال، عند استخدام
indexHint()في الشروط). #83791 (Igor Nikonov).
المخطط وبنية SQL
- منع إنشاء جدول من دون أعمدة يمكن الإدراج فيها. #81835 (Pervakov Grigorii).
- اشتراط وضع backticks حول المعرّفات التي تحتوي على نقاط في التعبيرات الافتراضية، لمنع تفسيرها على أنها معرّفات مركّبة. #83162 (Pervakov Grigorii).
- دعم صيغة Heredoc على نمط PostgreSQL:
$tag$ string contents... $tag$، والمعروفة أيضًا باسم السلاسل النصية المحاطة باقتباسات الدولار. في الإصدارات السابقة، كانت القيود المفروضة على الوسوم أقل: إذ كان يمكن أن تحتوي على محارف عشوائية، بما في ذلك علامات الترقيم والمسافات البيضاء. وهذا يسبب غموضًا في التحليل عند وجود معرّفات يمكن أن تبدأ أيضًا بمحرف الدولار. وفي الوقت نفسه، لا يسمح PostgreSQL في الوسوم إلا بمحارف الكلمات. ولحل هذه المشكلة، نقيّد الآن وسوم Heredoc بحيث تحتوي على محارف الكلمات فقط. إغلاق #84731. #84846 (Alexey Milovidov).
الأمان والصلاحيات
- سيؤدي الأمر
SYSTEM RESTART REPLICASإلى إعادة تشغيل النسخ المتماثلة فقط في قواعد البيانات التي تملك فيها إذنSHOW TABLES. في السابق، كان هذا الاستعلام يؤدي إلى إيقاظ الجداول في قاعدة بيانات Lazy حتى دون وجود صلاحية للوصول إلى تلك القاعدة، وذلك أثناء حذف هذه الجداول بالتزامن. #83321 (Alexey Milovidov). - تم تحديث الدوال
azureBlobStorageوdeltaLakeAzureوicebergAzureللتحقق من أذوناتAZUREعلى نحو صحيح. وأصبحت الآن جميع الدوال ذات الصيغة العنقودية (دوال-Cluster) تتحقق من الأذونات بالرجوع إلى نظيراتها غير العنقودية المقابلة. ولتجنّب أخطاء الأذونات، تأكد من أن المستخدمين الذين يستدعون دوال-Clusterلديهم الامتيازات المناسبة (على سبيل المثال:GRANT S3 ON *.* TO user). بالإضافة إلى ذلك، تفرض الدالتانicebergLocalوdeltaLakeLocalالآن أيضًا التحقق من إذنFILE. #84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov
الميزات الجديدة
أنواع البيانات
- إضافة نوعَي بيانات جديدين:
Time([H]HH:MM:SS)وTime64([H]HH:MM:SS[.fractional])، إلى جانب بعض دوال التحويل الأساسية ودوال للتعامل مع أنواع بيانات أخرى. كما أُضيفت إعدادات للتوافق مع الدالة القديمةToTime. #81217 (Yarik Briukhovetskyi).
الدالة
- إضافة
NumericIndexedVector، وهو بنية بيانات متجهية جديدة تعتمد على ضغط roaring-bitmap المقطّع على مستوى البتات، إلى جانب أكثر من 20 دالة للبناء والتحليل وإجراء العمليات الحسابية عنصرًا بعنصر. يمكن أن يقلّل متطلبات التخزين ويُسرّع عملياتjoinوfilterوعمليات التجميع على البيانات المتفرقة. يستند إلى #70582 وورقة البحث “Large-Scale Metric Computation in Online Controlled Experiment Platform” من إعداد T. Xiong وY. Wang من VLDB 2024. #74193 (FriendLey). - إضافة الدوال المالية:
financialInternalRateOfReturnExtended(XIRR)،financialInternalRateOfReturn(IRR)،financialNetPresentValueExtended(XNPV)،financialNetPresentValue(NPV). #81599 (Joanna Hulboj). - إضافة الدالتين الجغرافيتين المكانيتين
polygonIntersectsCartesianوpolygonIntersectsSphericalللتحقق مما إذا كان مضلعان يتقاطعان. #81882 (Paul Lamb). - دعم دوال النافذة
lagوlead. ويغلق هذا #9887. #82108 (Dmitry Novik). - إضافة الدالتين
colorSRGBToOkLCHوcolorOkLCHToSRGBلتحويل الألوان بين فضاءَي الألوان sRGB وOkLCH. #83679 (Fgrtue). - يمكنك الآن إجراء عمليات بحث عن مفاتيح JSON غير الحساسة لحالة الأحرف باستخدام
JSONExtractCaseInsensitive(ومتغيرات أخرى منJSONExtract). #83770 (Alistair Evans). - إضافة دالة جديدة
nowInBlock64. #84178 (Halersson Paris). - إضافة الدالة
dateTimeToUUIDv7لتحويل قيمة DateTime إلى UUIDv7. مثال على الاستخدام:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))تُرجع0198af18-8320-7a7d-abd3-358db23b9d5c. #84319 (samradovich). - إضافة دالتي التجميع
timeSeriesDerivToGridوtimeSeriesPredictLinearToGridلإعادة أخذ عينات البيانات على شبكة زمنية يحدّدها الطابع الزمني للبداية والطابع الزمني للنهاية وstepالمحددة؛ وتحسبانderivوpredict_linearعلى التوالي بأسلوب مشابه لـ PromQL. #84328 (Stephen Chi). - أُضيفت الدالتان
timeSeriesRangeوtimeSeriesFromGrid. #85435 (Vitaly Baranov).
جداول النظام
- إضافة جدول
system.dead_letter_queueللاحتفاظ بالرسائل الواردة الخاطئة من محركات مثل Kafka. #68873 (Ilya Golshtein). - إضافة جدول نظام
system.zookeeper_connection_logلتخزين معلومات تاريخية عن اتصالات ZooKeeper. #79494 (János Benjamin Antal). - إضافة جدول نظام جديد
system.codecsلفحص مرمِّزات الضغط المتاحة. (issue #81525). #81600 (Jimmy Aguilar Mena). - استحداث جدول
system.completions. يُغلق #81889. #83833 (|2ustam).
Iceberg وDeltaLake
- دعم الأنواع المعقدة في schema evolution الخاصة بـ Iceberg. #73714 (scanhex12).
- إضافة دعم الكتابة إلى Iceberg لاستعلامات
insert. #82692 (scanhex12). - دعم الحذف الموضعي في محرك الجدول Iceberg. #83094 (Daniil Ivanik).
- قراءة data files الخاصة بـ Iceberg باستخدام معرّفات الحقول. يُغلق #83065. #83653 (scanhex12).
- دعم الكتابة إلى Iceberg لأوامر CREATE. يُغلق #83927. #83983 (scanhex12).
- دعم الكتابة إلى Glue catalogs. #84136 (scanhex12).
- دعم الكتابة إلى Iceberg REST catalogs. #84684 (scanhex12).
- دمج جميع position delete files في Iceberg ضمن data files. سيؤدي ذلك إلى تقليل عدد ملفات Parquet وأحجامها في تخزين Iceberg. Syntax:
OPTIMIZE TABLE table_name. #85250 (scanhex12). - دعم
DROP TABLEفي Iceberg (الإزالة من REST/Glue catalogs مع إزالة metadata الخاصة بالجدول). #85395 (scanhex12). - دعم mutations من نوع
ALTER DELETEفي Iceberg بتنسيق merge-on-read. #85549 (scanhex12). - دعم الكتابة إلى DeltaLake. يُغلق #79603. #85564 (Kseniia Sumarokova).
- كتابة المزيد من إحصاءات Iceberg (أحجام الأعمدة والحدود الدنيا والعليا) في metadata (manifest entries) لتحسين min-max pruning. #85746 (scanhex12).
- دعم إضافة الأعمدة وحذفها وتعديلها في Iceberg للأنواع البسيطة. #85769 (scanhex12).
MergeTree والتخزين
- تدعم جميع الجداول الآن العمود الافتراضي
_table، وليس جداول النوع Merge فقط. #63665 (Xiaozhe Yu). - أُضيف SZ3 كـ codec ضغط فقدي مع حدٍّ أقصى للخطأ، للأعمدة من النوع
Float32وFloat64. #67161 (scanhex12). - أُضيف دعم التحديثات خفيفة الوزن لجداول عائلة
MergeTree. ويمكن استخدام التحديثات خفيفة الوزن عبر صياغة جديدة:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>. كما أُضيف تنفيذ lightweight deletes من خلال التحديثات خفيفة الوزن، ويمكن تمكينه بتعيينlightweight_delete_mode = 'lightweight_update'. #82004 (Anton Popov). - دعم العمود الافتراضي
_part_granule_offsetفي جداول عائلةMergeTree. يشير هذا العمود إلى الفهرس الصفري للـ granule/mark الذي ينتمي إليه كل صف داخل data part الخاصة به. يعالج هذا #79572. #82341 (Amos Bird).
دعم البروتوكولات والعملاء
- إضافة دعم بروتوكول ArrowFlight RPC عبر إضافة محرك الجدول
arrowflight. #74184 (zakr600). - إضافة دعم الأمر
COPYفي بروتوكول PostgreSQL. #74344 (scanhex12). - إضافة دعم عميل C# لبروتوكول mysql. يُغلق هذا #83992. #84397 (scanhex12).
- فرض استخدام connection آمن لـ
mysql_portوpostgresql_port. #82962 (Shaohua Wang).
ميزات SQL والاستعلامات
- دعم الصيغة
DESCRIBE SELECTبالإضافة إلىDESCRIBE (SELECT ...). #82947 (Yarik Briukhovetskyi). - دعم كتابة
USE DATABASE {name}. #81307 (Yarik Briukhovetskyi). - أُضيف دعم القراءة من الإسقاطات للنسخ المتماثلة المتوازية. وأُضيف إعداد جديد
parallel_replicas_support_projectionللتحكم في تفعيل دعم الإسقاطات. ولتبسيط التنفيذ، لا يُفعَّل دعم الإسقاطات إلا عند تفعيلparallel_replicas_local_plan. #82807 (zoomxi).
التنسيقات
- أُضيف الإعداد
format_schema_sourceالذي يحدّد مصدرformat_schema. #80874 (Tuan Pham Anh). - أُضيف
Hashكتنسيق إخراج جديد. ويحسب قيمة hash واحدة لجميع الأعمدة والصفوف في النتيجة. وهذا مفيد لحساب “بصمة” للنتيجة، على سبيل المثال في حالات الاستخدام التي يشكّل فيها نقل البيانات عنق الزجاجة. مثال:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashيُرجعe5f9e676db098fdb9530d2059d8c23ef. #84607 (Robert Schulze).
إعدادات الخادم وإدارة أعباء العمل
- يُفعّل إعداد الخادم
cpu_slot_preemptionجدولة CPU الاستباقية لأعباء العمل، ويضمن تخصيصًا عادلًا وفق مبدأ max-min لوقت CPU بين أعباء العمل. كما أُضيفت إعدادات جديدة لعبء العمل للتحكم في استهلاك CPU:max_cpusوmax_cpu_shareوmax_burst_cpu_seconds. #80879 (Sergei Trifonov). - أصبح إعداد عبء العمل
max_waiting_queriesمدعومًا. ويمكن استخدامه لتقييد حجم قائمة انتظار الاستعلامات. وإذا جرى بلوغ الحد، فسيتم إنهاء جميع الاستعلامات اللاحقة بخطأSERVER_OVERLOADED. #81250 (Oleg Doronin). - إغلاق اتصال TCP بعد بلوغ العدد المُهيأ من الاستعلامات أو العتبة الزمنية المحددة. يحل #68000. #81472 (Kenny Sun).
التخزين السحابي
- أضِف
extra_credentialsإلىAzureBlobStorageللمصادقة باستخدامclient_idوtenant_id. #84235 (Pablo Marcos).
Keeper
- إضافة إمكانية إعداد مراقبات (watches) مخصّصة في استعلامات Keeper Multi. #84964 (Mikhail Artemenko).
- دعم المقاييس المجمّعة جزئيًا. #85328 (Mikhail Artemenko).
الميزات التجريبية
محركات الجداول ودوال الجداول
- تمت إضافة محرك الجدول YTsaurus ودالة جدول. #77606 (MikhailBurdukov).
تحسينات الفهرس النصي
- إضافة الدالتين
searchAnyوsearchAll، وهما أداتان للأغراض العامة للبحث في الفهارس النصية. #80641 (Elmi Ahmadov). - يدعم الفهرس النصي الآن المُجزِّئ
string. #81752 (Elmi Ahmadov). - تم تغيير قيمة index granularity الافتراضية لفهارس
textإلى 64. وهذا يحسّن الأداء المتوقع لمتوسط query الاختبار في الاختبارات المعيارية الداخلية. #82162 (Jimmy Aguilar Mena). - يخزّن bitmap ذو 256 بت labels الصادرة للحالة بترتيب معيّن، لكن تُحفَظ الحالات الصادرة على القرص حسب ترتيب ظهورها في جدول التجزئة. لذلك قد تشير label إلى الحالة التالية الخاطئة عند القراءة من القرص. #82783 (Elmi Ahmadov).
- حاليًا، تُحفَظ شجرة FST على القرص من دون ضغط. وقد يؤدي ذلك إلى بطء الأداء أو زيادة عرض نطاق I/O أثناء كلٍّ من الكتابة إلى القرص والقراءة منه. #83093 (Elmi Ahmadov).
تحديثات مستوى نضج الميزات
- نُقل catalog إلى مرحلة Beta. #85848 (Melvyn Peignon).
- انتقلت التحديثات خفيفة الوزن من مرحلة Experimental إلى مرحلة Beta. #85952 (Anton Popov).
تحسينات الأداء
تنفيذ الاستعلام والتجميع
- تحسين بسيط لمُعدِّل الدالة التجميعية
-If. #78454 (李扬). - أُضيف منطق جديد (يتحكم فيه الإعداد
enable_producing_buckets_out_of_order_in_aggregation، وهو مفعّل افتراضيًا) يتيح إرسال بعض الـ buckets خارج الترتيب أثناء التجميع الموفّر للذاكرة. وعندما تستغرق بعض buckets التجميع وقتًا أطول بكثير في الدمج مقارنةً بغيرها، يحسّن ذلك الأداء من خلال السماح للعقدة البادئة بدمج buckets ذات المعرّفات الأعلى في أثناء ذلك. والجانب السلبي هو احتمال زيادة استخدام الذاكرة (ومن المفترض ألا تكون الزيادة كبيرة). #80179 (Nikita Taranov). - جعل مسار المعالجة بعد خطوة
TOTALSمتعدد الخيوط. #80331 (UnamedRus). - عندما لا يحتوي استعلام التجميع إلا على دالة
COUNT()واحدة على عمودNOT NULL، يُضمَّن منطق التجميع بالكامل أثناء فحص جدول hash. وهذا يتجنب تخصيص أي حالة تجميع أو الاحتفاظ بها، مما يقلل بشكل كبير من استخدام الذاكرة والعبء على CPU. ويعالج هذا جزئيًا #81982. #82104 (Amos Bird). - حساب المفتاح المتسلسل على مستوى الأعمدة عند التجميع حسب عدة أعمدة نصية أو رقمية. #83884 (李扬).
- تنفيذ
addManyDefaultsلمُعدِّلات-If. #83870 (Raúl Marín).
تحسينات JOIN
- أُضيف الإعداد الجديد
min_joined_block_size_rows(مماثلًا لـmin_joined_block_size_bytes؛ وقيمته الافتراضية 65409) للتحكم في الحد الأدنى لحجم الكتلة (بعدد الصفوف) لكتل الإدخال والإخراج في JOIN (إذا كانت خوارزمية join تدعم ذلك). ستُدمج الكتل الصغيرة. #81886 (Nikita Taranov). - جرى تحسين أداء
HashJoinعبر إزالة الحلقة الإضافية على hash maps في الحالة الشائعة التي يكون فيها هناك عمود مفتاح واحد فقط، كما أُزيلت أيضًا عمليات التحقق منnull_mapوjoin_maskعندما تكون دائمًاtrue/false. #82308 (Nikita Taranov). - طُبِّقت تحسينات
null_mapوJoinMaskمن #82308 على حالة JOIN ذات الشروط المنفصلة المتعددة أيضًا. كما جرى تحسين بنية البياناتKnownRowsHolder. #83041 (Nikita Taranov). - استُخدم
std::vector<std::atomic_bool>مباشرةً لأعلام join لتجنب حساب hash عند كل وصول إلى هذه الأعلام. #83043 (Nikita Taranov). - نُقلت معالجة
max_joined_block_rowsإلى خارج الحلقة الرئيسية لـ hash JOIN. تحسُّن طفيف في الأداء لـ ALL JOIN. #83216 (Nikolai Kochetov). - لم يعد يُجرى تخصيص الذاكرة مسبقًا لأعمدة النتائج عندما يستخدم
HashJoinوضع الإخراجlazy. فهذا ليس مثاليًا، خاصةً عندما يكون عدد المطابقات منخفضًا. إضافةً إلى ذلك، نعرف العدد الدقيق للمطابقات بعد اكتمال عملية join، لذا يمكن إجراء التخصيص المسبق بدقة أكبر. #83304 (Nikita Taranov). - ستُحوَّل جميع عمليات JOIN من نوع
LEFT/INNERتلقائيًا إلىRightAnyإذا كان الجانب الأيمن يتحدد وظيفيًا بواسطة أعمدة مفتاح join (أي إن جميع الصفوف لها قيم فريدة لمفتاح join). #84010 (Nikita Taranov). - تحسين أداء تطبيق patch parts في وضع
Join. #85040 (Anton Popov).
تحسينات الاستعلامات الموزعة
- أُضيف خيار لنقل عمليات الضغط/فك الضغط والتسلسل/إلغاء التسلسل للكتل إلى خيوط مسار المعالجة بدلًا من خيط واحد مرتبط باتصال شبكة. يتحكم في ذلك الإعداد
enable_parallel_blocks_marshalling. ومن المفترض أن يسرّع هذا الاستعلامات الموزعة التي تنقل كميات كبيرة من البيانات بين العقدة البادئة والعقد البعيدة. #78694 (Nikita Taranov). - أصبح
INSERT SELECTالموزع المتوازي مفعّلًا افتراضيًا في الوضع الذي يُنفَّذ فيهINSERT SELECTعلى كل shard بشكل مستقل؛ راجع الإعدادparallel_distributed_insert_select. #80425 (Igor Nikonov). - تم ضغط السجلات وأحداث profile في البروتوكول الأصلي. في clusters التي تضم أكثر من 100 replica، تستهلك أحداث profile غير المضغوطة 1..10 ميغابايت/ثانية، ويصبح شريط التقدم بطيئًا على اتصالات الإنترنت البطيئة. ويغلق هذا #82533. #82535 (Alexey Milovidov).
- أصبح
INSERT SELECTالموزع المتوازي مفعّلًا افتراضيًا في الوضع الذي يُنفَّذ فيهINSERT SELECTعلى كل shard بشكل مستقل؛ راجع الإعدادparallel_distributed_insert_select. #83040 (Igor Nikonov). - تم إصلاح حساب الحد الأدنى لحجم المهمة للـ parallel replicas. #84752 (Nikita Taranov).
تحسينات الفهارس
- تكتمل استعلامات البحث المتجهي التي تستخدم فهرس تشابه المتجهات بزمن استجابة أقل بفضل تقليل عمليات القراءة من التخزين وخفض استخدام CPU. #79103 (Shankar Iyer).
- مراعاة
merge_tree_min_{rows,bytes}_for_seekفيfilterPartsByQueryConditionCacheلمواءمته مع الطرق الأخرى التي تُجري التصفية باستخدام الفهارس. #80312 (李扬). - معالجة فهارس min-max ذات التحبّب الأعلى أولًا. إغلاق #75381. #83798 (Maruth Goyal).
- يُستخدَم الآن فهرس bloom filter مع شروط مثل
has([c1, c2, ...], column)، حيث لا يكونcolumnمن النوعArray. وهذا يحسّن أداء مثل هذه الاستعلامات، ويجعلها بالكفاءة نفسها التي يحققها المعاملIN. #83945 (Doron David). - تُعالَج الفهارس بترتيب تصاعدي حسب حجم الملف. ويمنح ترتيب الفهارس الناتج الأولوية لفهارس minmax وفهارس المتجهات (نظرًا إلى البساطة والانتقائية على التوالي)، ثم للفهارس الصغيرة بعد ذلك. وضمن فهارس minmax/المتجهات، تُفضَّل أيضًا الفهارس الأصغر. #84094 (Maruth Goyal).
- سابقًا، كانت بيانات فهرس النص تُقسَّم إلى عدة مقاطع (وكان حجم كل مقطع افتراضيًا 256 MiB). وقد يقلل ذلك من استهلاك الذاكرة أثناء بناء فهرس النص، لكنه يزيد من متطلبات المساحة على القرص ويزيد زمن استجابة الاستعلام. #84590 (Elmi Ahmadov).
تحسينات الاستعلامات الفرعية
- تحسين الخطة المُولَّدة للاستعلامات الفرعية المترابطة عبر إزالة عمليات
JOINالزائدة باستخدام فئات التكافؤ. وإذا كانت هناك تعبيرات مكافئة لجميع الأعمدة المترابطة، فلن يُنتَجCROSS JOINعند تمكين الإعدادquery_plan_correlated_subqueries_use_substitution. #82435 (Dmitry Novik). - قراءة الأعمدة المطلوبة فقط في الاستعلام الفرعي المترابط عندما يظهر كوسيطة للدالة
EXISTS. #82443 (Dmitry Novik).
تحسينات Azure Blob Storage
- أصبح محرك الجدول
azureBlobStorageالآن يخزّن مؤقتًا رموز مصادقة الهوية المُدارة ويعيد استخدامها متى أمكن لتجنّب تقييد المعدل. #79860 (Nick Blakely). - استُبدل عميل HTTP curl بعميل HTTP poco في Azure Blob Storage. وأُضيفت إعدادات متعددة لهذين العميلين تماثل الإعدادات في S3. كما أُضيفت مهلات اتصال قصيرة جدًا لكلٍّ من Azure وS3. وتحسّنت أيضًا إمكانات الاستبطان لأحداث profile ومقاييس Azure. والعميل الجديد مفعّل افتراضيًا، ويوفّر زمن استجابة أفضل بكثير للاستعلامات الباردة على Azure Blob Storage. ويمكن العودة إلى عميل
Curlالقديم عبر ضبطazure_sdk_use_native_client=false. #83294 (alesapin).
تحسينات محرك التخزين
- إصلاح التصفية حسب المفتاح في وحدات تخزين Redis وKeeperMap. #81833 (Pervakov Grigorii).
- لم يعد
ATTACH PARTITIONيؤدي إلى إسقاط جميع الذاكرات المؤقتة. #82377 (Alexey Milovidov). - تجنّب الاحتفاظ بالقفل أثناء إنشاء بيانات لقطة التخزين، لتقليل التزاحم على القفل عند الأحمال المتزامنة المرتفعة. #83510 (Duc Canh Le).
- قد تستغرق إزالة الأجزاء المؤقتة بعض الوقت (خصوصًا مع S3)، وننفّذ ذلك حاليًا مع الاحتفاظ بقفل عام في
MergeTreeBackgroundExecutor. وعندما نحتاج إلى إعادة تشغيل جميع الجداول بسبب فقدان الاتصال وننتظر انتهاء المهام الخلفية، قد تظل الجداول عالقة لمدة تصل إلى ساعة في وضعreadonly. لكن يبدو أننا لا نحتاج إلى هذا القفل لاستدعاءcancel. #84311 (Alexander Tokmakov).
تحسينات التنسيق
- تنفيذ جديد لقارئ Parquet. وهو أسرع عمومًا ويدعم pushdown لعوامل التصفية على مستوى الصفحة و
PREWHERE. وهو تجريبي حاليًا. استخدم الإعدادinput_format_parquet_use_native_reader_v3لتمكينه. #82789 (Michael Kolupaev). - تحسين أداء تنسيق الإدخال ProtobufSingle من خلال إعادة استخدام المُسلسِل عند عدم حدوث أخطاء في التحليل. #83613 (Eduard Karacharov).
تحسينات نوع البيانات والتسلسل
- تحسين أداء قراءة الأعمدة الفرعية
JSONمن البيانات المشتركة في MergeTree بشكل كبير، وذلك عبر تطبيق عمليات تسلسل جديدة على بياناتJSONالمشتركة في MergeTree. #83777 (Pavel Kruglov). - تحسين فك تسلسل السلاسل النصية عبر تبسيط الشيفرة. يُغلق #38564. #84561 (Alexey Milovidov).
تحسينات مسار المعالجة والتنفيذ
- تقليل عمليات نسخ الذاكرة في ترويسات المنافذ أثناء إنشاء مسار المعالجة. PR الأصلي من heymind. #83381 (Raúl Marín).
- تحسين أداء بناء مسار المعالجة. #83631 (Raúl Marín).
- تحسين MergeTreeReadersChain::getSampleBlock. #83875 (Raúl Marín).
- تحسين تجسيد الثوابت في الحالات التي لا يُجرى فيها هذا التجسيد إلا لإرجاع صف واحد. #85071 (Alexey Milovidov).
تحسينات الذاكرة والموارد
- ضبط بعض إعدادات jemalloc لتحسين الأداء. #81807 (Antonio Andelic).
- إضافة محاذاة إلى Counter في ProfileEvents للحد من المشاركة الزائفة. #82697 (Jiebin Sun).
- تقليل عمليات استدعاء memcpy غير الضرورية في CompressedReadBufferBase::readCompressedData. #83986 (Raúl Marín).
تخطيط الاستعلامات وتحليلها
- تسريع QueryTreeHash. #82617 (Nikolai Kochetov).
تحسينات في التسجيل
- إضافة التسجيل غير المتزامن. #82516 (Raúl Marín).
تحسينات الدوال
- تحسين
largestTriangleThreeBucketsبإزالة البيانات المؤقتة. #84479 (Alexey Milovidov). - تم تحسين تنفيذ العديد من الدوال الخاصة بمعالجة السلاسل النصية وتبسيطه. كما صُحِّح التوثيق الخاطئ لعدة دوال. ملاحظة: تغيّر ناتج
byteSizeلأعمدة String والأنواع المعقدة التي تحتوي على أعمدة String من 9 بايتات لكل سلسلة فارغة إلى 8 بايتات لكل سلسلة فارغة، وهذا سلوك متوقع. #85063 (Alexey Milovidov).
تحسينات Keeper
- تحسين Keeper عبر التحميل الأولي لـ rocksdb. #83390 (Antonio Andelic).
تحسينات بحيرة البيانات
- تحسين المعالجة المتوازية للملفات باستخدام الواجهة الخلفية لـ delta-kernel-rs. #85642 (Azat Khuzhin).
تحسينات
التحكم في الوصول والأمان
- أُضيف نوعا وصول جديدان:
READوWRITEللمصادر، وأُوقِفت جميع أنواع الوصول السابقة المرتبطة بالمصادر. سابقًا:GRANT S3 ON *.* TO user، أما الآن:GRANT READ, WRITE ON S3 TO user. ويتيح ذلك أيضًا فصل أذوناتREADوWRITEللمصادر، على سبيل المثال:GRANT READ ON * TO user،GRANT WRITE ON S3 TO user. تتحكم في هذه الميزة الإعدادaccess_control_improvements.enable_read_write_grants، وهي معطّلة افتراضيًا. #73659 (pufit). - السماح باستخدام المعلمات في استعلامات
CREATE USERلأسماء المستخدمين. #81387 (Diskein). - استبعاد البيانات الحساسة من ملفات التفريغ الأساسية. أُضيف مخصّصا ذاكرة:
AwsNodumpMemoryManagerالمتوافق مع مكتبة AWS وJemallocNodumpSTLAllocatorالمتوافق مع STL. وكلاهما عبارة عن wrapper لمخصّص jemalloc. ويستخدمان امتدادات hooks الخاصة بـ jemalloc وmadviseلوَسم صفحات الذاكرة بأنها “لا تُفرَّغ”. ويُستخدم ذلك مع بيانات اعتماد S3، وبيانات اعتماد المستخدم، وبعض بيانات الاستعلام. #82441 (Miсhael Stetsyuk). - ستخزّن العروض التي ينشئها المستخدمون المؤقتون الآن نسخة من المستخدم الفعلي، ولن تعود تُلغى صلاحيتها بعد حذف المستخدم المؤقت. #84763 (pufit).
- مطابقة
forward_headersللمصادقة الخارجية دون حساسية لحالة الأحرف. #84737 (ingodwerust). - إضافة عمود
parameterإلىsystem.grantsلتحديد نوع المصدر فيGRANT READ/WRITEومحرك الجدول فيGRANT TABLE ENGINE. #85643 (MikhailBurdukov).
النسخ الاحتياطي والاستعادة
- إتاحة إنشاء نسخ احتياطية لقواعد بيانات PostgreSQL وMySQL وDataLake. لن يحفظ النسخ الاحتياطي لمثل هذه قواعد البيانات سوى التعريف، دون البيانات الموجودة بداخلها. #79982 (Nikolay Degterinsky).
- ضبط جميع رسائل السجل الخاصة بكتابة ملفات النسخ الاحتياطي على TRACE. #82907 (Hans Krutzer).
- إضافة
backup_restore_s3_retry_initial_backoff_msوbackup_restore_s3_retry_max_backoff_msوbackup_restore_s3_retry_jitter_factorلتهيئة استراتيجية backoff لإعادة المحاولة في S3 والمستخدمة أثناء عمليات النسخ الاحتياطي والاستعادة. #84421 (Julia Kartseva). - إضافة إعداد جديد
backup_slow_all_threads_after_retryable_s3_errorلتقليل الضغط على S3 أثناء موجات إعادة المحاولة الناتجة عن أخطاء مثلSlowDown، وذلك بإبطاء جميع الخيوط بمجرد رصد خطأ واحد قابل لإعادة المحاولة. #84854 (Julia Kartseva).
سلامة البيانات والتحقق
- تحقّق من أن للجزء ملف
checksum.txtمتسقًا مباشرةً قبل اعتماده نهائيًا. #76625 (Sema Checherinda). - منع بدء mutation من نوع
RENAME COLUMNإذا كان سيعيد تسمية عمود متأثر حاليًا بـ mutation بيانات غير مكتملة. #81823 (Mikhail Artemenko). - ستُبنى الآن snapshot الخاصة بـ mutations انطلاقًا من snapshot الأجزاء المرئية. كما ستُعاد أيضًا إعادة احتساب counters الخاصة بـ mutations المستخدمة في snapshot من mutations المضمّنة. #82945 (Mikhail Artemenko).
- إضافة إمكانية تحليل بادئة الجزء ولاحقته، وكذلك التحقق من التغطية للأعمدة غير الثابتة. #83377 (Mikhail Artemenko).
محرك الجدول Iceberg
- دعم عمليات الحذف الموضعي في محرك الجدول Iceberg. #80237 (YanghongZhong).
- يدعم ClickHouse الآن ملفات
metadata.jsonالمضغوطة في Iceberg. يعالج هذا المشكلة #70874. #81451 (alesapin). - إصلاح قراءة Iceberg باستخدام معرّفات الحقول للأنواع المعقّدة. #84821 (scanhex12).
- دعم كتابة Iceberg بحيث يمكن قراءتها من pyiceberg. #84466 (scanhex12).
- إضافة snapshot version إلى محركات جداول بحيرة البيانات. #84659 (Pete Hampton).
- دعم كتابة ملف version-hint مع Iceberg. يغلق هذا #85097. #85130 (scanhex12).
- دعم ملف
.metadata.jsonالمضغوط عبر الإعدادiceberg_metadata_compression_method. وهو يدعم جميع methods الضغط في ClickHouse. يغلق هذا #84895. #85196 (scanhex12). - تحسين استخدام الذاكرة لملفات الحذف الموضعي في Iceberg. فبدلاً من تحميل جميع بيانات ملف الحذف إلى الذاكرة، لا يُحتفَظ في RAM إلا بمجموعة الصفوف الحالية من ملفات حذف Parquet. ويؤدي ذلك إلى تقليل استهلاك الذاكرة بشكل ملحوظ عند العمل مع ملفات حذف موضعي كبيرة. #85329 (scanhex12).
- السماح بالتكرار غير المتزامن على الكائنات من جدول Iceberg من دون تخزين الكائنات لكل ملف بيانات على نحو صريح. #85369 (Daniil Ivanik).
- دعم عمليات الحذف بالتساوي في Iceberg. #85843 (Han Fei).
محرك الجدول DeltaLake
- تحسين محرك الجدول
DeltaLake: يوفّر delta-kernel-rs واجهة برمجة تطبيقاتExpressionVisitor، وقد جرى تنفيذها في طلب السحب هذا وتطبيقها على تحويل تعبيرات أعمدة partition (وستحل محل أسلوب قديم Deprecated ضمن delta-kernel-rs كان مستخدمًا سابقًا في شيفرتنا). وفي المستقبل، سيتيحExpressionVisitorأيضًا تنفيذ pruning المعتمد على الإحصاءات وبعض الميزات الخاصة بـ Delta Lake. بالإضافة إلى ذلك، يهدف هذا التغيير إلى دعم partition pruning في محرك الجدولDeltaLakeCluster(إذ ستُسلسَل نتيجة التعبير المُحلَّل - ActionsDAG - وتُرسَل من العقدة البادئة مع data path، لأن هذا النوع من المعلومات اللازم لعملية pruning لا يتوفر إلا بوصفه meta information ضمن سرد data files، وهي عملية ينفذها العقدة البادئة فقط، لكن يجب تطبيقها على البيانات في كل server يقرأها). #81136 (Kseniia Sumarokova). - إصلاح partition pruning في دوال عنقود بحيرة البيانات. #82131 (Kseniia Sumarokova).
- إصلاح قراءة البيانات المُقسَّمة إلى partition في table function DeltaLakeCluster. في طلب السحب هذا، جرى رفع protocol version لدوال العنقود، مما يتيح إرسال معلومات إضافية من العقدة البادئة إلى replicas. وتتضمن هذه المعلومات الإضافية تعبير التحويل delta-kernel، اللازم لتحليل partition columns (وبعض الأمور الأخرى مستقبلًا، مثل generated columns، وما إلى ذلك). #82132 (Kseniia Sumarokova).
- أصبحت قاعدة البيانات Datalake الآن تعرض Exception أوضح. يُصلح #81211. #82304 (alesapin).
- تنفيذ Filtering الداخلي لـ
delta-kernel-rs(الإحصاءات وpartition pruning) في وحدة التخزينDeltaLake. #84006 (Kseniia Sumarokova). - إضافة إعداد
delta_lake_enable_expression_visitor_loggingلتعطيل سجلات expression visitor، لأنها قد تكون verbose جدًا حتى بالنسبة إلى log level الخاص بالاختبارات عند إجراء debugging. #84315 (Kseniia Sumarokova). - إضافة الإعداد
delta_lake_snapshot_versionللسماح بقراءة snapshot version محدد في محرك الجدولDeltaLake. #85295 (Kseniia Sumarokova).
تكامل بحيرة البيانات
- تسريع إدراج الجداول في كتالوج البيانات من خلال طلبات غير متزامنة. #81084 (alesapin).
- دعم
TimestampTZفي Glue catalog. يُغلق هذا #81654. #83132 (scanhex12). - تقسيم
FormatParserGroupإلى بنيتيstructمستقلتين: الأولى مسؤولة عن مواردcomputeوIOالمشتركة، والثانية مسؤولة عن مواردfilterالمشتركة (ActionDagوKeyConditionالخاصة بالتصفية). وقد أُنجز ذلك لإتاحة استخدام مشترك أكثر مرونة لهذه البُنى عبرthreadsمختلفة. #83997 (Daniil Ivanik). - إضافة
partition_columns_in_data_fileالمفقود إلىconfigurationالخاصة بـ Azure. #85373 (Arthur Passos). - إضافة الراية
show_data_lake_catalogs_in_system_tablesللتحكم في إضافة جداول بحيرة البيانات إلىsystem.tables، ما يعالج #85384. #85411 (Smita Kulkarni).
S3 وobject storage
- تنفيذ الطريقتين
moveFileوreplaceFileفيs3_plain_rewritableلدعمه كـ disk لقاعدة البيانات. #79424 (Tuan Pham Anh). - أصبحت طلبات القراءة والكتابة في S3 خاضعة لتحديد المعدل على مستوى مقبس HTTP (بدلًا من طلبات S3 كاملة) لتجنّب المشكلات المرتبطة بتقييد
max_remote_read_network_bandwidth_for_serverوmax_remote_write_network_bandwidth_for_server. #81837 (Sergei Trifonov). - يضيف طلب السحب هذا jitter إلى آلية retry في S3 عند تمكين إعداد
s3_slow_all_threads_after_network_error. #81849 (zoomxi). - تنفيذ authentication في AWS S3 باستخدام IAM role مُحدَّد صراحةً. كما تم تنفيذ OAuth لـ GCS. كانت هذه الميزات متاحة سابقًا فقط في ClickHouse Cloud، وهي الآن open-source. كذلك جرت مزامنة بعض interfaces مثل serialization لمعلمات connection الخاصة بـ object storage. #84011 (Alexey Milovidov).
- إتاحة استخدام أي storage policy (أي object storage مثل S3) في external aggregation/الفرز الخارجي. #84734 (Azat Khuzhin).
- جمع جميع الكائنات المحذوفة لتنفيذ عملية حذف واحدة في object storage. #85316 (Mikhail Artemenko).
محرك الجدول S3Queue
- يمكن الآن استخدام وحدات الماكرو مثل
{uuid}في إعدادkeeper_pathضمن محرك الجدول S3Queue. #82463 (Nikolay Degterinsky). - إضافة إعداد جديد على مستوى الخادم
s3queue_disable_streamingيعطّل التدفّق في الجداول التي تستخدم محرك الجدول S3Queue. ويمكن تغيير هذا الإعداد دون إعادة تشغيل الخادم. #82515 (Kseniia Sumarokova). - إضافة العمودين
commit_timeوcommit_idإلىsystem.s3queue_log. #83016 (Kseniia Sumarokova). - إضافة سجلات لعملية إيقاف S3Queue. #83163 (Kseniia Sumarokova).
- إيقاف تدفّق S3(Azure/etc)Queue قبل إيقاف أي جداول عند إيقاف تشغيل الخادم. #83530 (Kseniia Sumarokova).
- دعم تغيير إعدادات الإدراج الخاصة بـ MV على مستوى جدول
S3Queue. تمت إضافة إعدادات جديدة على مستوىS3Queue:min_insert_block_size_rows_for_materialized_viewsوmin_insert_block_size_bytes_for_materialized_views. افتراضيًا، ستُستخدم إعدادات مستوى profile، وستتجاوزها إعدادات مستوىS3Queue. #83971 (Kseniia Sumarokova). - إصلاح للوضع المرتّب في S3Queue: الخروج مبكرًا إذا طُلب الإيقاف. #84463 (Kseniia Sumarokova).
تكامل Kafka
- عدّ الرسائل المستهلكة يدويًا لتجنّب الاعتماد على قيمة OFFSET السابقة المعتمدة في StorageKafka2. #81662 (János Benjamin Antal).
- دمج
StorageKafka2فيsystem.kafka_consumers. #82652 (János Benjamin Antal).
تحسينات ClickHouse Keeper
- تحسين في Keeper: نقل ملفات changelog بين الأقراص ضمن سلسلة تنفيذ في الخلفية. سابقًا، كان نقل changelog إلى قرص مختلف يعطّل Keeper بالكامل حتى يكتمل النقل. وكان هذا يؤدي إلى تراجع في الأداء إذا كانت عملية النقل طويلة (مثل النقل إلى قرص S3). #82485 (Antonio Andelic).
- تحسين في Keeper: إضافة إعداد جديد
keeper_server.cleanup_old_and_ignore_new_acl. عند تفعيله، ستُزال ACL من جميع العقد، مع تجاهل ACL للطلبات الجديدة. وإذا كان الهدف هو إزالة ACL بالكامل من العقد، فمن المهم إبقاء هذا الإعداد مفعّلًا إلى أن يتم إنشاء لقطة جديدة. #82496 (Antonio Andelic). - تحسين في Keeper: دعم أذونات محددة لـ ACL world:anyone. #82755 (Antonio Andelic).
- إضافة دعم لتحديد ACL إضافية لـ Keeper للمسارات في الإعدادات. إذا كنت تريد إضافة ACL إضافية لمسار محدد، فعرّفها في الإعدادات تحت
zookeeper.path_acls. #82898 (Antonio Andelic). - إضافة ProfileEvent عند رفض Keeper عملية كتابة بسبب حد الذاكرة المرن. #82963 (Xander Garbett).
- تفعيل علامات الميزات
create_if_not_existsوcheck_not_existsوremove_recursiveفي Keeper افتراضيًا، ما يتيح أنواعًا جديدة من الطلبات. #83488 (Antonio Andelic). - إضافة دعم لتطبيق ACL إضافية على عقد Keeper محددة باستخدام الإعداد
apply_to_children. #84137 (Antonio Andelic). - إضافة الأمر
get_aclإلى KeeperClient. #84641 (Antonio Andelic). - إضافة 4LW في Keeper، وهو
lgrq، لتبديل تسجيل الطلبات الواردة. #84719 (Antonio Andelic). - تقليل التنازع على قفل التخزين في Keeper. #84732 (Antonio Andelic).
- تدعم أداة
encrypt_decryptالآن اتصالات ZooKeeper المشفرة. #84764 (Roman Vasin). - تقييد حجم ذاكرة التخزين المؤقت لإدخالات سجل Keeper بحسب عدد الإدخالات باستخدام
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdوkeeper_server.coordination_settings.commit_logs_cache_entry_count_threshold. #84877 (Antonio Andelic).
نوعا JSON وDynamic
- إضافة الملف
columns_substreams.txtإلى جزء Wide لتتبّع جميع التدفقات الفرعية المخزّنة في الجزء. يساعد ذلك على تتبّع التدفقات الديناميكية في نوعَي JSON وDynamic، وبالتالي تجنّب قراءة عيّنة من هذه الأعمدة للحصول على قائمة التدفقات الديناميكية (على سبيل المثال، لحساب أحجام الأعمدة). كما أصبحت الآن جميع التدفقات الديناميكية تظهر أيضًا فيsystem.parts_columns. #81091 (Pavel Kruglov). - السماح باستخدام
ALTER UPDATEفي أعمدة JSON وDynamic. #82419 (Pavel Kruglov). - يمكنك الآن استخدام النوعين
TimeوTime64داخل نوع JSON. #83784 (Yarik Briukhovetskyi). - إضافة الإعداد
json_type_escape_dots_in_keysلتهريب النقاط في مفاتيح JSON أثناء تحليل نوع JSON. يكون هذا الإعداد معطّلًا افتراضيًا. #84207 (Pavel Kruglov).
تنسيقات Parquet وORC
- إضافة إعدادات لضبط حجم كتلة ضغط ORC، وتحديث القيمة الافتراضية من 64KB إلى 256KB للحفاظ على الاتساق مع Spark أو Hive. #80602 (李扬).
- دعم كتابة enum في Parquet على هيئة مصفوفة بايتات وفقًا لما تنص عليه المواصفة. سأضيف مزيدًا من المعلومات لاحقًا. #81090 (Arthur Passos).
- دعم الكتابة إلى GeoParquet كتنسيق إخراج. #81784 (scanhex12).
الاستعلامات الموزعة والنسخ المتماثلة المتوازية
- أُضيف إعداد جديد، enable_add_distinct_to_in_subqueries. عند تمكينه، سيضيف ClickHouse تلقائيًا DISTINCT إلى الاستعلامات الفرعية في عبارات IN ضمن الاستعلامات الموزعة. يمكن أن يقلل هذا بشكل كبير من حجم الجداول المؤقتة المنقولة بين الشظايا ويحسّن كفاءة الشبكة. ملاحظة: هذا ينطوي على مفاضلة—ففي حين يقل نقل البيانات عبر الشبكة، يلزم إجراء دمج إضافي (إزالة التكرار) على كل عقدة. فعّل هذا الإعداد عندما يكون نقل البيانات عبر الشبكة هو عنق الزجاجة وتكون تكلفة الدمج مقبولة. #81908 (fhw12345).
- أُضيف دعم دوال الجدول
remote-()مع النسخ المتماثلة المتوازية إذا تم توفير cluster في الوسيطaddress_expression. ويعالج ذلك أيضًا #73295. #82904 (Igor Nikonov). - تستخدم عمليات JOIN مع النسخ المتماثلة المتوازية الآن الخطوة المنطقية للربط. إذا واجهت أي مشكلات في استعلامات JOIN التي تستخدم النسخ المتماثلة المتوازية، فجرّب
SET query_plan_use_new_logical_join_step=0وأبلِغ عن مشكلة. #83801 (Vladimir Cherkasov).
الإعدادات والتهيئة
- وسم الإعداد
allow_experimental_join_conditionعلى أنه متقادِم. #80566 (Vladimir Cherkasov). - لا يُعاد ضبط محددات معدل نقل الشبكة، الإجمالية منها والخاصة بكل مستخدم، مطلقًا، ما يضمن عدم تجاوز الحدود
max_network_bandwidth_for_all_usersوmax_network_bandwidth_for_all_usersأبدًا. #81729 (Sergei Trifonov). - تقديم الإعداد
optimize_rewrite_regexp_functions(مفعّل افتراضيًا)، والذي يتيح للمُحسِّن إعادة كتابة بعض استدعاءاتreplaceRegexpAllوreplaceRegexpOneوextractإلى صيغ أبسط وأكثر كفاءة عند اكتشاف أنماط تعبير نمطي محددة. (issue #81981). #81992 (Amos Bird). - ضبط قائمة انتظار خوادم TCP (64 افتراضيًا) استنادًا إلى
listen_backlog(4096 افتراضيًا). #82045 (Azat Khuzhin). - إضافة إمكانية إعادة تحميل
max_local_read_bandwidth_for_serverوmax_local_write_bandwidth_for_serverأثناء التشغيل دون إعادة تشغيل الخادم. #82083 (Kai Zhu). - تقديم الإعداد
enable_vector_similarity_indexالذي يجب تفعيله لاستخدام فهرس تشابه المتجهات. أما الإعداد الحاليallow_experimental_vector_similarity_indexفأصبح الآن متقادِمًا. ولا يزال يعمل لمن يحتاج إليه. #83459 (Robert Schulze). - إضافة
max_joined_block_size_bytesإلى جانبmax_joined_block_size_rowsلتقييد استخدام الذاكرة في عمليات JOIN ذات الأعمدة الثقيلة. #83869 (Nikolai Kochetov). - إصلاح التوافق للإعداد
cluster_function_process_archive_on_multiple_nodes. #83968 (Kseniia Sumarokova). - تفعيل دعم الاستعلامات الفرعية المترابطة افتراضيًا. #85107 (Dmitry Novik).
- إضافة إعدادات
database_replicatedالتي تحدد القيم الافتراضية لـDatabaseReplicatedSettings. وإذا لم يكن الإعداد موجودًا في استعلام إنشاء قاعدة بيانات Replicated، فستُستخدم القيمة من هذا الإعداد. #85127 (Tuan Pham Anh). - السماح بوسائط مفتاح-قيمة في محرك الجدول/الدالة
s3أوs3Cluster، مثلs3('url', CSV, structure = 'a Int32', compression_method = 'gzip'). #85134 (Kseniia Sumarokova). - تنفيذ
EXISTSغير المترابط باعتباره استعلامًا فرعيًا scalar. يتيح ذلك استخدام ذاكرة التخزين المؤقت للاستعلامات الفرعية scalar وطيّ النتيجة كثابت، وهو ما يفيد الفهارس. ولأجل التوافق، أُضيف الإعداد الجديدexecute_exists_as_scalar_subquery=1. #85481 (Nikolai Kochetov). - دعم تحليل المزيد من الحالات الخاصة بالمُعرّفات المركّبة. وعلى وجه الخصوص، يحسّن ذلك توافق
ARRAY JOINمع analyzer القديم. وتقديم إعداد جديدanalyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedللحفاظ على السلوك القديم. #85492 (Nikolai Kochetov).
جداول النظام والرصد
- إضافة مقاييس الضغط إلى المقاييس غير المتزامنة في ClickHouse. #80779 (Xander Garbett).
- إضافة المقاييس
MarkCacheEvictedBytesوMarkCacheEvictedMarksوMarkCacheEvictedFilesلتتبّع عمليات الإزالة من ذاكرة mark cache. (issue #60989). #80799 (Shivji Kumar Jha). - يحتوي جدول
system.formatsالآن على معلومات موسّعة عن التنسيقات، مثل نوع محتوى HTTP وإمكانات استدلال المخطط وغير ذلك. #81505 (Alexey Milovidov). - إضافة دعم لمسح جميع التحذيرات من جدول
system.warningsباستخدامTRUNCATE TABLE system.warnings. #82087 (Vladimir Cherkasov). - إدراج تراخيص حزم Rust في
system.licenses. #82440 (Raúl Marín). - تقدير تعبيرات CNF/DNF المعقّدة، مثل
(a < 1 and a > 0) or b = 3، بالاعتماد على الإحصاءات. #82663 (Han Fei). - في بعض الحالات، نحتاج إلى أبعاد متعددة لمقاييسنا. على سبيل المثال، عدّ عمليات الدمج أو التعديلات الفاشلة حسب رموز الأخطاء بدلًا من الاكتفاء بعدّاد واحد. #83030 (Miсhael Stetsyuk).
- إضافة مقاييس موارد العملية (مثل
UserTimeMicrosecondsوSystemTimeMicrosecondsوRealTimeMicroseconds) إلى profile events فيpart_logلإدخالاتMergeParts. #83460 (Vladimir Cherkasov). - تُبلَّغ الآن مقاييس مستوى Cgroup والمقاييس على مستوى النظام معًا. تحمل مقاييس مستوى Cgroup الأسماء
CGroup<Metric>، بينما تحمل مقاييس مستوى نظام التشغيل (المجمّعة من procfs) الأسماءOS<Metric>. #84317 (Nikita Taranov). - إضافة مقاييس متعددة الأبعاد لمراقبة حجم الطوابير المتزامنة المقيّدة، مع وسمها بحسب نوع الطابور وinstance ID لتحسين الرصد. #84675 (Miсhael Stetsyuk).
- يوفّر جدول
system.columnsالآنcolumnبوصفه اسمًا مستعارًا للعمودnameالحالي. #84695 (Yunchi Pang). - إضافة عمود format string إلى
system.errors. هذا العمود مطلوب لإجراء التجميع حسب نوع الخطأ نفسه في قواعد التنبيه. #84776 (Miсhael Stetsyuk). - جعل الحدود قابلة للضبط في Async Log وإضافة إمكانات الاستبطان. #85105 (Raúl Marín).
- تجاهل
UNKNOWN_DATABASEأثناء جلب أحجام أعمدة الجداول لـsystem.columns. #85632 (Azat Khuzhin).
محركات قواعد البيانات
تحسينات النظام والتحسينات الداخلية
- إصلاح إلحاق قواعد البيانات التي تستخدم أقراصًا بعيدة للقراءة فقط، وذلك عبر إضافة معرّفات UUID الخاصة بالجداول يدويًا إلى DatabaseCatalog. #82670 (Tuan Pham Anh).
- تحسين التعامل مع مهام DDL عند استخدام
distributed_ddl_output_mode='*_only_active'من خلال عدم انتظار النسخ المتماثلة الجديدة أو المستعادة التي يتجاوز تأخر النسخ المتماثل فيها القيمةmax_replication_lag_to_enqueue. يساعد ذلك على تجنب أخطاءDDL task is not finished on some hostsعندما تصبح نسخة متماثلة جديدة نشطة بعد التهيئة أو التعافي، لكنها تكون قد راكمت سجلًا كبيرًا للنسخ المتماثل. كما جرى تنفيذ الاستعلامSYSTEM SYNC DATABASE REPLICA STRICTالذي ينتظر حتى ينخفض تأخر النسخ المتماثل إلى ما دونmax_replication_lag_to_enqueue. #83302 (Alexander Tokmakov). - تغيير ترتيب إيقاف تشغيل SystemLogs ليحدث بعد الجداول العادية (وقبل جداول النظام بدلًا من قبل الجداول العادية). #83134 (Kseniia Sumarokova).
- إضافة إعداد على مستوى الخادوم باسم
logs_to_keepإلى إعدادات قاعدة البيانات Replicated، بما يتيح ضبط المعلمة الافتراضيةlogs_to_keepلقواعد البيانات Replicated. تؤدي القيم الأقل إلى تقليل عدد عقد ZooKeeper (وهو مفيد خصوصًا عند وجود عدد كبير من قواعد البيانات)، بينما تتيح القيم الأعلى للنسخ المتماثلة المفقودة اللحاق بالحالة بعد فترات أطول من التوقف. #84183 (Alexey Khatskevich). - تغيير القيمة الافتراضية لإعداد قاعدة البيانات Replicated المسمى
max_retries_before_automatic_recoveryإلى 10، مما يتيح تعافيًا أسرع في بعض الحالات. #84369 (Alexander Tokmakov). - تحسين عمليات DDL الخاصة بـ
Refreshable Materialized Viewغير المعتمدة علىappendفي قواعد البيانات Replicated، عبر تخطي إنشاء الجداول المؤقتة القديمة وإعادة تسميتها. #84858 (Tuan Pham Anh).
النسخ المتماثل والمزامنة
تحسينات النظام والمكوّنات الداخلية
- تحسين
SYSTEM RESTART REPLICAلإعادة محاولة إنشاء الجدول عند حدوث مشكلات في الاتصال بـ ZooKeeper، مما يمنع فقدان الجداول. #82616 (Nikolay Degterinsky). - إضافة التحقق من UUID في
ReplicatedMergeTree::executeMetadataAlterلمنع تعريفات الجداول غير الصحيحة عند إجراء EXCHANGE للجداول بين الحصول على StorageID واستدعاءIDatabase::alterTable. #82666 (Nikolay Degterinsky). - إزالة منطق
send_metadataالتجريبي المرتبط بميزة النسخ المتماثل بدون نسخ التجريبية. لم يُستخدم هذا الكود مطلقًا، وهو غير مدعوم ويرجّح أنه معطّل، ولا توجد اختبارات للتحقق من عمله. #82508 (alesapin). - إضافة دعم لتوسيع الماكرو في
remote_fs_zero_copy_zookeeper_path. #85437 (Mikhail Koviazin).
الدوال والتعبيرات
- ستستخدم الدالة
addressToSymbolوالجدولsystem.symbolsإزاحات الملفات بدلًا من عناوين الذاكرة الافتراضية. #81896 (Alexey Milovidov). - محاولة الحفاظ على أسماء العناصر عند اشتقاق الأنواع الفائقة للـ Tuples المُسمّاة. #81345 (lgbo).
- السماح بدمج قواعد ترتيب مختلفة للعمود نفسه في نوافذ مختلفة. #82877 (Yakov Olkhovskiy).
- إضافة دالة لكتابة الأنواع بتنسيق
wkb. #82935 (scanhex12). - إضافة إمكانية تحليل
TimeوTime64بصيغ MM:SS أو M:SS أو SS أو S. #83299 (Yarik Briukhovetskyi). - تدعم الدالة
reinterpret()الآن التحويل إلىArray(T)حيث يكونTنوع بيانات ثابت الحجم (المشكلة #82621). #83399 (Shankar Iyer). - إصلاح الدالتين
structureToProtobufSchemaوstructureToCapnProtoSchemaلإضافة بايت إنهاء صفري بشكل صحيح بدلًا من استخدام محرف سطر جديد، ما يمنع غياب أسطر جديدة في المخرجات واحتمال حدوث تجاوز سعة في المخزن المؤقت في الدوال التي تعتمد على البايت الصفري (مثلlogTraceوdemangleوextractURLParameterوtoStringCutToZeroوencrypt/decrypt). يُغلق #85062. #85063 (Alexey Milovidov). - إصلاح تخطيط القاموس
regexp_treeلدعم معالجة السلاسل النصية التي تحتوي على بايتات صفرية. #85063 (Alexey Milovidov). - إصلاح الدالة
formatRowNoNewlineالتي كانت تقتطع آخر محرف من المخرجات بالخطأ عند استدعائها مع تنسيقValuesأو أي تنسيق لا يحتوي على سطر جديد في نهاية الصفوف. #85063 (Alexey Milovidov). - إصلاح خطأ في أمان الاستثناءات في الدالة
stemكان يمكن أن يؤدي إلى تسرّب للذاكرة في حالات نادرة. #85063 (Alexey Milovidov). - إصلاح الدالة
initcapلوسائطFixedStringلكي تتعرّف بشكل صحيح على بداية الكلمات عند بداية السلاسل النصية عندما كانت السلسلة السابقة فيblockتنتهي بمحرف من محارف الكلمات. #85063 (Alexey Milovidov). - إصلاح ثغرة أمنية في تنسيق Apache
ORCكان يمكن أن تؤدي إلى كشف ذاكرة غير مهيأة. #85063 (Alexey Milovidov). - تغيير سلوك
replaceRegexpAllواسمه المستعارREGEXP_REPLACEللسماح بالمطابقات الفارغة في نهاية السلاسل النصية حتى عندما تكون المطابقة السابقة قد عالجت السلسلة بالكامل (مثل^a*|a*$أو^|.*)، بما يتوافق مع دلالات JavaScript وPerl وبايثون وPHP وRuby، مع اختلافه عن PostgreSQL. #85063 (Alexey Milovidov). - تحسين وتبسيط تنفيذ العديد من الدوال الخاصة بالتعامل مع السلاسل النصية. وتم تصحيح التوثيق غير الدقيق لعدة دوال. ملاحظة: تغيّر ناتج
byteSizeلأعمدة String والأنواع المعقدة التي تحتوي على أعمدة String من 9 بايتات لكل سلسلة فارغة إلى 8 بايتات لكل سلسلة فارغة، وهو السلوك المتوقع. #85063 (Alexey Milovidov). - السماح بأن تكون قيمة الخطوة صفرًا في الدوال
timeSeries*ToGrid(). وهذا هو الجزء#3من https://github.com/ClickHouse/ClickHouse/pull/75036. #85390 (Vitaly Baranov). - دعم المصفوفات الداخلية للدالة
nested. #85719 (Nikolai Kochetov).
تحسينات MergeTree
- تعطيل فهارس التخطي التي تعتمد على الأعمدة المُحدَّثة أثناء القراءة أو بواسطة أجزاء التصحيح، ولكن بصورة أكثر دقة. الآن، لا تُعطَّل فهارس التخطي إلا في الأجزاء المتأثرة بالتعديلات أثناء القراءة أو أجزاء التصحيح؛ أما سابقًا، فكانت تلك الفهارس تُعطَّل لجميع الأجزاء. #84241 (Anton Popov).
- إضافة إعداد MergeTree
search_orphaned_parts_drivesلتضييق نطاق البحث عن الأجزاء، مثلًا بحسب الأقراص التي تحتوي على بيانات وصفية محلية. #84710 (Ilya Golshtein). - إضافة الدعم المفقود لـ
read_in_order_use_virtual_rowفيWHERE. يتيح ذلك تخطي قراءة المزيد من الأجزاء للاستعلامات التي تتضمن شروط تصفية لم تُدفَع بالكامل إلىPREWHERE. #84835 (Nikolai Kochetov). - إصلاح استخدام تسلسل مميّزات النوع Variant بصيغة “compact” في MergeTree. سابقًا، لم يكن يُستخدم في بعض الحالات التي كان يمكن استخدامه فيها. #84141 (Pavel Kruglov).
- إضافة حدّ (إعداد الجدول
max_uncompressed_bytes_in_patches) لإجمالي البايتات غير المضغوطة في أجزاء التصحيح. يمنع ذلك حدوث تباطؤ كبير في استعلاماتSELECTبعد التحديثات الخفيفة، كما يمنع إساءة الاستخدام المحتملة للتحديثات الخفيفة. #85641 (Anton Popov).
إدارة ذاكرة التخزين المؤقت والذاكرة
- إصلاح خطأ منطقي في ذاكرة التخزين المؤقت لنظام الملفات: “Having zero bytes but range is not finished”. #81868 (Kseniia Sumarokova).
- إضافة rendezvous hashing لتحسين محلية ذاكرة التخزين المؤقت. #82511 (Anton Ivashkin).
- إعادة هيكلة ميزة تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات. وأُضيفت المزيد من السجلات لأغراض الاستبطان. #82556 (Kseniia Sumarokova).
- تقليل الكلفة الإضافية لتتبّع ذاكرة الاستعلام للدوال المعرّفة من قبل المستخدم القابلة للتنفيذ. #83929 (Eduard Karacharov).
- أصبحت جميع تخصيصات الذاكرة التي تُجريها المكتبات الخارجية مرئية الآن لمتعقّب الذاكرة في ClickHouse، ويجري احتسابها على نحو صحيح. وقد يؤدي ذلك إلى “زيادة” استخدام الذاكرة المُبلّغ عنه لبعض الاستعلامات أو إلى حدوث حالات فشل مع
MEMORY_LIMIT_EXCEEDED. #84082 (Nikita Mikhaylov). - تخصيص الحد الأدنى من الذاكرة اللازمة لـ encrypted_buffer في المجموعات المسماة المشفّرة. #84432 (Pablo Marcos).
فهرس تشابه المتجهات
- منع المستخدم من استخدام
nanوinfمعNumericIndexedVector. يعالج #82239 وبعض الحالات الإضافية أيضًا. #82681 (Raufs Dunamalijevs). - يدعم فهرس تشابه المتجهات الآن التكميم الثنائي. ويقلّل التكميم الثنائي استهلاك الذاكرة بشكل كبير ويُسرّع عملية بناء فهرس المتجهات (بفضل تسريع حساب المسافات). كما أصبح الإعداد الحالي
vector_search_postfilter_multiplierمتقادمًا، واستُبدل بإعداد أكثر عمومية:vector_search_index_fetch_multiplier. #85024 (Shankar Iyer). - أصبح البحث التقريبي عن المتجهات باستخدام فهارس تشابه المتجهات متاحًا الآن بشكل عام (GA). #85888 (Robert Schulze).
معالجة الأخطاء والرسائل
- يُرسَل ترويس
Connectionفي نهاية الترويسات، عند تحديد ما إذا كان ينبغي الإبقاء على الاتصال. #81951 (Sema Checherinda). - في الإصدارات السابقة، كان ضرب حالة الدالة التجميعية بـ IPv4 يؤدي إلى خطأ منطقي بدلًا من إرجاع رمز خطأ مناسب. يُغلق #82817. #82818 (Alexey Milovidov).
- تحسين معالجة الأخطاء في
AsynchronousMetrics. إذا كان الدليل/sys/blockموجودًا لكنه غير قابل للوصول، فسيبدأ الخادم من دون مراقبة أجهزة التخزين الكتلية. يُغلق #79229. #83115 (Alexey Milovidov). - كان هناك تحقّق غير صحيح من التبعيات لعملية
INSERTمع materialized views التي تحتوي على عباراتSELECTغير صحيحة، وكان المستخدم قد يتلقىstd::exceptionغامضًا بدلًا من خطأ واضح ومفهوم. وقد أُصلح ذلك الآن. هذا يُصلح: #82889. #83190 (Nikita Mikhaylov). - لا تُخرج أوصافًا طويلة جدًا لإجراءات التعابير في رسائل الاستثناء. يُغلق #83164. #83350 (Alexey Milovidov).
- عند إيقاف وحدة التخزين، تُطلق
getStatusاستثناءErrorCodes::ABORTED. في السابق، كان هذا يتسبب في فشل استعلامSELECT. الآن نلتقط استثناءاتErrorCodes::ABORTEDونتجاهلها عمدًا بدلًا من ذلك. #83435 (Miсhael Stetsyuk). - أصبحت رسائل الاستثناء في بعض الحالات أثناء loading وإضافة projections أسهل قراءةً. #83728 (Robert Schulze).
- تحقّق مما إذا كان الاتصال قد أُلغي قبل التحقق من EOF لمنع القراءة من اتصال مغلق. يُصلح #83893. #84227 (Raufs Dunamalijevs).
- تحسين التعامل مع إيقاف تشغيل الخادم لاتصالات العميل من خلال تبسيط عمليات التحقق الداخلية. #84312 (Raufs Dunamalijevs).
- أصبحت الأخطاء منخفضة المستوى أثناء تنفيذ UDF تؤدي الآن إلى الفشل مع رمز الخطأ
UDF_EXECUTION_FAILED، بينما كان يمكن سابقًا إرجاع رموز أخطاء مختلفة. #84547 (Xu Jia).
تحسينات في تنسيق SQL
- إصلاح عدم اتساق تنسيق
CREATE DICTIONARY. إغلاق #82105. #82829 (Alexey Milovidov). - إصلاح عدم اتساق تنسيق
TTLعندما يحتوي على الدالةmaterialize. إغلاق #82828. #82831 (Alexey Milovidov). - إصلاح عدم اتساق تنسيق
EXPLAIN ASTداخل استعلام فرعي عندما يحتوي على خيارات إخراج مثل INTO OUTFILE. إغلاق #82826. #82840 (Alexey Milovidov). - إصلاح عدم اتساق تنسيق التعبيرات الموضوعة بين قوسين ذات الأسماء المستعارة ضمن السياق الذي لا يُسمح فيه بالأسماء المستعارة. إغلاق #82836. إغلاق #82837. #82867 (Alexey Milovidov).
- إصلاح تنسيق CREATE USER مع query مَعلمات (أي
CREATE USER {username:Identifier} IDENTIFIED WITH no_password). #84376 (Azat Khuzhin). - إصلاح تحليل للفاصلة اللاحقة في columns الخاصة باستعلام
CREATE DICTIONARYبعد column يحتوي على مَعلمات، مثل Decimal(8). إغلاق #85586. #85653 (Nikolay Degterinsky).
التكاملات الخارجية
- توحيد أسماء المَعلمات في ODBC وJDBC عند استخدام المجموعات المسماة. #83410 (Andrey Zvonov).
- MongoDB: التحليل الضمني للسلاسل النصية إلى أنواع رقمية. سابقًا، إذا جرى تلقّي قيمة نصية من مصدر MongoDB لعمود رقمي في جدول ClickHouse، كان يُطلَق استثناء. الآن، يحاول المحرّك تحليل القيمة الرقمية من السلسلة النصية تلقائيًا. يُغلق #81167. #84069 (Kirill Nikiforov).
- السماح باستخدام
simdjsonعلى البنى المعمارية غير المدعومة (وكان هذا يؤدي سابقًا إلى أخطاءCANNOT_ALLOCATE_MEMORY). #84966 (Azat Khuzhin).
تحسينات متنوعة
- إضافة محرك جدول YTsaurus ودالة جدول. #77606 (MikhailBurdukov).
- تحسين HashJoin::needUsedFlagsForPerRightTableRow، بحيث يعيد false في حالة الربط التبادلي. #82379 (lgbo).
- السماح بكتابة/قراءة أعمدة Map كمصفوفة من Tuples. #82408 (MikhailBurdukov).
- تم التراجع عن طلب السحب هذا. #82884 (Mithun p).
- السجلات غير المتزامنة: تقييد الحد الأقصى لعدد الإدخالات المحتفَظ بها في قائمة الانتظار. #83214 (Raúl Marín).
- تمكين Date/Date32 كأعداد صحيحة في JSON input formats. #83597 (MikhailBurdukov).
- تحسين دعم Bloom filter indexes (العادية وngram وtoken) بحيث يمكن استخدامها عندما تكون الوسيطة الأولى مصفوفة ثابتة (المجموعة) وتكون الثانية هي العمود المفهرس (المجموعة الفرعية)، مما يتيح تنفيذ الاستعلام بكفاءة أعلى. #84700 (Doron David).
- السماح بتحويل نوع قيم Set عند دفع مرشحات
IN/GLOBAL INإلى المفاتيح الأساسية لتخزين KeyValue (مثل: EmbeddedRocksDB وKeeperMap). #84515 (Eduard Karacharov). - إزالة عمليات الفحص الكاملة في الحالات التي يؤدي فيها تحليل الفهرس إلى نطاقات فارغة عند القراءة باستخدام النسخ المتماثلة المتوازية. #84971 (Eduard Karacharov).
- إصلاح مجموعة من المشكلات التي قد تحدث عند محاولة تشغيل اختبارات التكامل على المضيف المحلي. #82135 (Oleg Doronin).
- تمكين trace_log.symbolize افتراضيًا لعمليات النشر القديمة. #85456 (Azat Khuzhin).
إصلاحات للأخطاء (سلوك خاطئ يلاحظه المستخدمون في إصدار مستقر رسمي)
تحسينات الأداء
- إصلاح تراجع الأداء في SummingMergeTree الذي ظهر في الإصدار 25.5 ضمن https://github.com/ClickHouse/ClickHouse/pull/79051. #82130 (Pavel Kruglov).
- إصلاح تراجع الأداء عند تفعيل المحلّل، حيث كانت الاستعلامات الثانوية تقرأ دائمًا جميع الأعمدة من VIEWs. يعالج #81718. #83036 (Dmitry Novik).
- عدم التحقق من وجود تبعيات دورية عند إنشاء جدول بلا تبعيات. يُصلح هذا تراجع الأداء في حالات الاستخدام التي تتضمن إنشاء آلاف الجداول، والذي ظهر في https://github.com/ClickHouse/ClickHouse/pull/65405. #83077 (Pavel Kruglov).
- جعل تجميعات النوافذ
DISTINCTتعمل بزمن خطي وإصلاح خطأ فيsumDistinct. يغلق #79792. يغلق #52253. #79859 (Nihal Z. Miaji).
إصلاحات تنفيذ الاستعلامات
- بالنسبة إلى الاستعلامات التي تجمع بين
ORDER BY ... LIMIT BY ... LIMIT N، عند تنفيذORDER BYعلى هيئة PartialSorting، أصبح العدادrows_before_limit_at_leastيعكس الآن عدد الصفوف التي يستهلكها بند LIMIT بدلًا من عدد الصفوف التي تستهلكها عملية الفرز. #78999 (Eduard Karacharov). - إصلاح خطأ منطقي في العامل
<=>مع Join storage، وأصبح الاستعلام يعيد الآن رمز الخطأ الصحيح. #80165 (Vladimir Cherkasov). - إصلاح تعطل في الدالة
loopعند استخدامها مع عائلة الدالةremote. كما تم ضمان احترام بند LIMIT فيloop(remote(...)). #80299 (Julia Kartseva). - إصلاح السلوك غير الصحيح للدالتين
to_utc_timestampوfrom_utc_timestampعند التعامل مع التواريخ السابقة لـ Unix epoch (1970-01-01) واللاحقة لأقصى تاريخ (2106-02-07 06:28:15). وأصبحت هاتان الدالتان الآن تقيدان القيم بشكل صحيح عند بداية epoch وعند أقصى تاريخ، على الترتيب. #80498 (Surya Kant Ranjan). - إصلاح تنفيذ
INمعtransform_null_in=1عند وجود NULL في الوسيطة اليسرى ونتيجة استعلام فرعي غير Nullable. #81584 (Pavel Kruglov). - إصلاح المشكلة التي لا تُقرأ فيها الأعمدة المطلوبة أثناء معالجة الاستعلامات الفرعية المترابطة القياسية. ويعالج هذا #81716. #81805 (Dmitry Novik).
- إصلاح تحليل عامل التصفية عندما يكون العمود الوحيد المستخدم في الاستعلام هو عمود alias ثابت. ويعالج هذا #79448. #82037 (Dmitry Novik).
- إصلاح الخطأ
Not found columnفي الاستعلامات التي تحتوي علىarrayJoinضمن شرطWHEREومعIndexSet. #82113 (Nikolai Kochetov). - إصلاح الاستثناء
TOO_DEEP_SUBQUERIESعندما يشير تعريف CTE إلى تعبير جدول آخر يحمل الاسم نفسه. #83413 (Dmitry Novik). - إصلاح النتائج غير الصحيحة للاستعلامات التي تحتوي على البند
WHERE ... IN (<subquery>)مع تفعيل query condition cache (الإعدادuse_query_condition_cache). #83445 (LB7666). - قد يؤدي
INSERT SELECTمعUNION ALLإلى إلغاء مرجعية مؤشر NULL في حالة نادرة. ويغلق هذا #83618. #83643 (Alexey Milovidov). - إصلاح
LOGICAL_ERRORأثناء تحليل التعبير الخاص بـ ROW POLICY للأعمدة المترابطة. #82618 (Dmitry Novik). - إصلاح النتائج الخاطئة عند استخدام query condition cache بالاقتران مع CTEs التكرارية (المشكلة #81506). #84026 (zhongyuankai).
- إصلاح التحليل التكراري اللانهائي لتعريفات
WINDOWغير الصالحة. ويعالج هذا #83131. #84242 (Dmitry Novik). - إصلاح
Not-ready SetفيIN (subquery)ضمن إعدادadditional_table_filters expression. #85210 (Nikolai Kochetov). - إصلاح خطأ منطقي متعلق بالاستعلامات الفرعية المكررة عند تمكين
optimize_syntax_fuse_functions، وإغلاق #75511. #83300 (Vladimir Cherkasov).
إصلاحات Iceberg وDataLake
- إصلاح تحديد البيانات الوصفية عند الاستعلام عن جداول Iceberg عبر REST catalog. … #80562 (Saurabh Kumar Ojha).
- إصلاح حالات تسابق البيانات في Iceberg. #82088 (Azat Khuzhin).
- إصلاح خطأ “Context has expired” في Iceberg. #82146 (Azat Khuzhin).
- أصبح ClickHouse الآن قادرًا على قراءة جداول Iceberg من Glue catalog بعد تطور المخطط. يُصلح #81272. #82301 (alesapin).
- إصلاح حالات تسابق البيانات في Iceberg. #82841 (Azat Khuzhin).
- تعطيل تقليم الملفات المستند إلى الحدود لعناصر Array في Iceberg وقيم Map في Iceberg، بما في ذلك جميع الحقول الفرعية المتداخلة التابعة لها. #83520 (Daniil Ivanik).
- إصلاح عمليات الكتابة إلى Iceberg للأنواع المعقدة. #85330 (scanhex12).
- كتابة الحدود الدنيا والعليا غير مدعومة للأنواع المعقدة. #85332 (scanhex12).
- إصلاح قابلية الحقول لأن تكون NULL في Iceberg. #85977 (scanhex12).
- لم يعد يتم إنشاء ملف حذف فارغ في Iceberg. #86061 (scanhex12).
- تحديث timestamp البيانات الوصفية في عمليات الكتابة إلى Iceberg. #85711 (scanhex12).
- لا يستطيع Spark قراءة position delete files. #85762 (scanhex12).
- لم يعد يأخذ المخطط من manifest files، بل يخزن المخططات ذات الصلة لكل snapshot بشكل مستقل. ويستنتج المخطط المناسب لكل ملف بيانات من snapshot المقابلة له. كان السلوك السابق يخالف مواصفة Iceberg لإدخالات manifest files ذات الحالة existing. #84588 (Daniil Ivanik).
- لم يعد Iceberg يحاول تخزين snapshot version ذات الصلة مؤقتًا بين استعلامات select، بل يحاول دائمًا تحديد snapshot على نحو صحيح. وقد أدت المحاولة السابقة لتخزين snapshot الخاصة بـ Iceberg مؤقتًا إلى مشكلات عند استخدام جدول Iceberg مع time travel. #85038 (Daniil Ivanik).
- إصلاح تحديد البيانات الوصفية عند الاستعلام عن جداول Iceberg عبر REST catalog. … #85531 (Saurabh Kumar Ojha).
- إصلاح إخفاء secrets في دوال الجدول icebergS3Cluster وicebergAzureCluster. #85658 (MikhailBurdukov).
إصلاحات DeltaLake
- إصلاح تشذيب الأعمدة مع delta-kernel في وحدة التخزين
DeltaLake. يُغلق #84543. #84745 (Kseniia Sumarokova). - تحديث بيانات الاعتماد في delta-kernel ضمن وحدة التخزين DeltaLake. #84751 (Kseniia Sumarokova).
- إصلاح segfault في تنفيذ delta-kernel. #85160 (Kseniia Sumarokova).
- إصلاح حالة تسابق في تنفيذ delta-kernel لمحرك
DeltaLake. #85221 (Kseniia Sumarokova). - إصلاح قراءة البيانات المُقسّمة إلى partitions عند تعطيل delta-kernel في محرك
DeltaLake. وكان هذا معطّلًا في الإصدار 25.7 (https://github.com/ClickHouse/ClickHouse/pull/81136). #85223 (Kseniia Sumarokova). - تغيير القيمة السابقة للإصدار 25.5 من
allow_experimental_delta_kernel_rsإلىfalseللتوافق. #84587 (Kseniia Sumarokova). - إصلاح قراءة العدد من ذاكرة التخزين المؤقت لـ delta lake. #85704 (Kseniia Sumarokova).
إصلاحات TTL وMergeTree
- أُعيد احتساب فهرس الحد الأدنى/الحد الأقصى عندما يقلّل TTL عدد الصفوف، لضمان صحة الخوارزميات التي تعتمد عليه، مثل
minmax_count_projection. يعالج هذا #77091. #77166 (Amos Bird). - إصلاح إعادة احتساب TTL بشكل غير صحيح في TTL GROUP BY عند تحديث TTL. #81222 (Evgeniy Ulasik).
- إصلاح الخطأ “Context has expired” أثناء عمليات الدمج عند استخدام dict في تعبير TTL. #81690 (Azat Khuzhin).
- إصلاح LOGICAL_ERROR والانهيار الذي يليه عند استخدام العمود نفسه في TTL لكلٍّ من GROUP BY وSET. #82054 (Pablo Marcos).
- لم يعد MergeTree ينفّذ أي إجراءات متعلقة بـ TTL إذا أُزيلت جميع إعدادات TTL من الجدول. #84441 (alesapin).
- إصلاح عدم تحقّق
ALTER MODIFY ORDER BYمن أعمدة TTL في مفاتيح الفرز. تُرفض أعمدة TTL الآن بشكل صحيح عند استخدامها في clausesORDER BYأثناء عملياتALTER، مما يمنع احتمال تلف الجدول. #84536 (xiaohuanlin).
إصلاحات الإسقاطات
- إصلاح الخطأ المنطقي أثناء تنفيذ materialize للإسقاط عند تغيير نوع العمود إلى Nullable. #80741 (Pavel Kruglov).
- إصلاح الاستخدام غير الصحيح للبيانات الوصفية الأصلية في دالة الجدول
mergeTreeProjectionعندenable_shared_storage_snapshot_in_query = 1. وهذا يخص #82634. #82638 (Amos Bird). - إصلاح تعطل نادر في ClickHouse عندما يحتوي الجدول على إسقاط، وتكون
lightweight_mutation_projection_mode = 'rebuild'، وينفّذ المستخدم عملية حذف خفيفة الوزن تحذف جميع الصفوف من أي block في الجدول. #84158 (alesapin). - إصلاح النسخ الاحتياطي للأجزاء ذات الإسقاطات التالفة. #85362 (Antonio Andelic).
- منع استخدام العمود
_part_offsetفي الإسقاطات في الإصدارات إلى أن يصبح مستقرًا. #85372 (Sema Checherinda).
إصلاحات النسخ المتماثلة المتوازية
- في بعض الاستعلامات المنفَّذة باستخدام النسخ المتماثلة المتوازية، كان يمكن تطبيق تحسينات القراءة بالترتيب على المُبادِر دون العُقد البعيدة. وقد أدى ذلك إلى استخدام أوضاع قراءة مختلفة لدى منسّق النسخ المتماثلة المتوازية (على المُبادِر) وعلى العُقد البعيدة، وهو خطأ منطقي. #80652 (Igor Nikonov).
- تعطيل النسخ المتماثلة المتوازية عندما يحتوي استعلام فرعي على
FINAL#81401 بواسطة . #83455 (zoomxi). - إصلاح
LOGICAL_ERRORفي الاستعلامات التي تستخدم النسخ المتماثلة المتوازية وتحتوي على عدة عمليات INNER join تتبعها عملية RIGHT join. لا تُستخدم النسخ المتماثلة المتوازية لمثل هذه الاستعلامات. #84299 (Vladimir Cherkasov). - قد تنتج الاستعلامات التي تستخدم النسخ المتماثلة المتوازية وتستفيد من تحسين القراءة العكسية بالترتيب نتائج غير صحيحة. #85406 (Igor Nikonov).
المصادقة والأمان
- إصلاح إخفاء قيم المجموعة المسماة في السجلات/
query_log. يغلق #82405. #82510 (Kseniia Sumarokova). - تعيين salt لبيانات المصادقة عند تحليلها من AST بالنوع SCRAM_SHA256_PASSWORD. #82888 (Tuan Pham Anh).
- إخفاء تفاصيل المصادقة الخاصة بـ Avro schema registry بحيث لا تظهر للمستخدم ولا في السجلات. #83713 (János Benjamin Antal).
- إصلاح السلوك غير الصحيح عند تنفيذ
REVOKE S3 ON system.*، إذ كان يسحب أذونات S3 من*.*. هذا يُصلح #83417. #83420 (pufit). - إصلاح تعطل الخادم عندما يحاول مستخدم أُنشئ باستخدام
no_passwordتسجيل الدخول بعد تغيير إعداد الخادمallow_no_passwordإلى 0. #84426 (Shankar Iyer). - تحسين رسالة الخطأ عند محاولة إنشاء مستخدم مُعرَّف باستخدام JWT. #85072 (Konstantin Bogdanov).
- إخفاء بيانات الاعتماد الخاصة بـ
deltaLakeAzureوdeltaLakeClusterوicebergS3ClusterوicebergAzureCluster. #85889 (Julian Maicher). - إصلاح خطأ أُدخل في #79963. عند الإدراج في عرض مُجسَّد له
definer، يجب أن يستخدم فحص الأذونات الامتيازات الخاصة بـdefiner. يُصلح #79951. #83502 (pufit).
إصلاحات النسخ الاحتياطي والاستعادة
- إصلاح مشكلة النسخ الاحتياطي لجدول
Memoryفارغ، والتي كانت تؤدي إلى فشل استعادة النسخة الاحتياطية مع ظهور الخطأBACKUP_ENTRY_NOT_FOUND. #82791 (Julia Kartseva). - إصلاح رسالة خطأ مضللة عند استعادة نسخة احتياطية على قرص في وضع القراءة فقط. #83051 (Julia Kartseva).
- إصلاح بدء نسخ احتياطية داخلية غير ضرورية بعد حدوث مشكلات في الاتصال. #84755 (Vitaly Baranov).
دوال النافذة والتجميع
- إصلاح تعطل محتمل في
Aggregatorعند حدوث استثناء أثناء الدمج. #81450 (Nikita Taranov). - إصلاح تعطل محتمل في
Aggregatorعند حدوث استثناء أثناء الدمج. #82022 (Nikita Taranov). - إصلاح خطأ نسخ ولصق في arraySimilarity، مع منع استخدام الأوزان من نوعي UInt32 وInt32، وتحديث الاختبارات والوثائق. #82103 (Mikhail f. Shiryaev).
- إصلاح تجاوز السعة في الدوال
numericIndexedVectorPointwiseAddوnumericIndexedVectorPointwiseSubtractوnumericIndexedVectorPointwiseMultiplyوnumericIndexedVectorPointwiseDivideالذي كان يحدث عند تطبيقها على أعداد كبيرة. #82165 (Raufs Dunamalijevs).
إصلاحات Parquet وتنسيق الملفات
- إصلاح مشكلة في Parquet bloom filter كانت تتسبب في تطبيق شرط مثل
WHERE function(key) IN (...)بشكل غير صحيح كما لو كانWHERE key IN (...). #81255 (Michael Kolupaev). - إصلاح مشكلة في parquet writer كانت تؤدي إلى إخراج إحصاءات غير صحيحة (الحد الأدنى/الحد الأقصى) لأنواع Decimal. #83754 (Michael Kolupaev).
- إصلاح إلغاء التسلسل لـ
groupArraySample/groupArrayLastفي حالة العناصر الفارغة (إذ قد يتخطى إلغاء التسلسل جزءًا من البيانات الثنائية إذا كان الإدخال فارغًا، ما قد يؤدي إلى تلف أثناء قراءة البيانات وظهور UNKNOWN_PACKET_FROM_SERVER في بروتوكول TCP). لا يؤثر ذلك على الأنواع الرقمية وأنواع التاريخ والوقت. #82763 (Pedro Ferreira). - إصلاح كتابة JSON paths ذات قيم NULL بتنسيق RowBinary. #83923 (Pavel Kruglov).
إصلاحات JOIN
- إصلاح تعديل التصفية للاستعلامات التي تحتوي على تعبير JOIN مع جدول يستخدم محرك التخزين
Merge. يُصلح #82092. #82950 (Dmitry Novik). - إصلاح التعطل عند إجراء JOIN مع تخزين المفتاح-القيمة باستخدام مفتاح أُجري له تحويل نوع. #82497 (Pervakov Grigorii).
- إصلاح خطأ منطقي عند تحليل المُطابِق في استعلام يحتوي على عدة عمليات JOIN، ويغلق #81969. #82421 (Vladimir Cherkasov).
- إصلاح دمج التصفية في شرط JOIN في الحالات التي تكون فيها معاملات المساواة من أنواع مختلفة أو تشير إلى ثوابت. يُصلح #83432. #84145 (Dmitry Novik).
- إصلاح الخطأ المنطقي
Expected single dictionary argument for functionأثناء تنفيذ JOIN على شرط عدم المساواة عندما يكون أحد الأعمدةLowCardinalityوالآخر ثابتًا. يغلق #81779. #84019 (Alexey Milovidov).
إصلاحات قاعدة البيانات المتماثلة
- إصلاح
markReplicasActiveفيDDLWorkerوDatabaseReplicatedDDLWorker. #81395 (Tuan Pham Anh). - إصلاح
DatabaseReplicated::getClusterImpl. إذا كان العنصر الأول (أو العناصر الأولى) فيhostsيحتوي علىid == DROPPED_MARKولم تكن هناك عناصر أخرى للشارد نفسه، فسيكون العنصر الأول فيshardsمتجهًا فارغًا، مما يؤدي إلىstd::out_of_range. #82093 (Miсhael Stetsyuk). - تتبُّع عدد مهام تحميل الجداول غير المتزامنة. إذا كانت هناك مهام قيد التشغيل، فلا تُحدَّث
tail_ptrفيTransactionLog::removeOldEntries. #82824 (Tuan Pham Anh). - إصلاح المشكلة التي تحدث عندما يُنشأ جدول MergeTree مع
add_minmax_index_for_numeric_columns=1أوadd_minmax_index_for_string_columns=1، ثم يُطبَّق الفهرس فعليًا لاحقًا أثناء عملية ALTER، مما يمنع قاعدة البيانات المتماثلة من التهيئة بشكل صحيح على نسخة متماثلة جديدة. #83751 (Nikolay Degterinsky). - إصلاح إنشاء RMV على نسخة متماثلة جديدة من قاعدة البيانات المتماثلة إذا تم حذف DEFINER. #85327 (Nikolay Degterinsky).
- إصلاح استعادة قواعد البيانات المتماثلة عندما يستغرق نقل ملف البيانات الوصفية وقتًا طويلًا. #85177 (Tuan Pham Anh).
- استعادة قاعدة البيانات المتماثلة قسريًا بعد استعادة البيانات الوصفية لقاعدة البيانات في Keeper. #85960 (Tuan Pham Anh).
- إصلاح خطأ في تعافي قاعدة البيانات
Replicated: إذا كان اسم الجدول يحتوي على الرمز%، فقد يُعاد إنشاء الجدول باسم مختلف أثناء التعافي. #85987 (Alexander Tokmakov). - أصبح عامل DDL ينظّف الآن المضيفين القدامى من مجموعة النسخ المتماثلة. سيؤدي ذلك إلى تقليل حجم البيانات الوصفية المخزنة في ZooKeeper. #88154 (alesapin).
إصلاحات التحديثات خفيفة الوزن
- إصلاح التحديثات خفيفة الوزن للجداول التي تستخدم محركي
ReplacingMergeTreeوCollapsingMergeTree. #84851 (Anton Popov). - إصلاح خطأ منطقي في التحديثات خفيفة الوزن التي تحدّث جميع الأعمدة في الجدول. #84380 (Anton Popov).
- إصلاح التحديثات خفيفة الوزن للجداول التي تستخدم المحرك
ReplicatedMergeTreeوالتي أُنشئت على خوادم بإصدار أقدم من 25.7. #84933 (Anton Popov). - إصلاح التحديثات خفيفة الوزن للجداول التي تستخدم محرك
MergeTreeغير المكرّر بعد تشغيل استعلامALTER TABLE ... REPLACE PARTITION. #84941 (Anton Popov). - إصلاح تنظيف أجزاء التصحيح في
ReplicatedMergeTree. في السابق، كان من الممكن ألا تظهر نتيجة التحديث خفيف الوزن مؤقتًا على النسخة المتماثلة إلى أن يُنزَّل من نسخة متماثلة أخرى الجزء المدموج أو المُعدَّل الذي يطبّق أجزاء التصحيح فعليًا. #85121 (Anton Popov).
إصلاحات S3 وتخزين الكائنات
- إصلاح التحقق من صحة المعاملات في دالة الجدول S3 عند إخفاء الأسرار، ما يمنع حدوث
LOGICAL_ERRORمحتمل، مع إغلاق #80620. #82056 (Vladimir Cherkasov). - إصلاح احتمال حدوث توقف متبادل في الاستعلامات البعيدة عندما يكون الخادم تحت ضغط الذاكرة. #82160 (Kirill).
- إضافة وقت انتهاء الصلاحية إلى رمز AWS ECS المميز بحيث يمكن إعادة تحميله. #82422 (Konstantin Bogdanov).
- إصلاح تعطيل محاذاة الحدود للمخزن المؤقت cached في محركات الجداول الخارجية. كان هذا معطّلًا في https://github.com/ClickHouse/ClickHouse/pull/81868. #82493 (Kseniia Sumarokova).
- إصلاح
no_sign_requestفي عميل S3. يمكن استخدامه لتجنب توقيع طلبات S3 صراحةً. ويمكن أيضًا تعريفه لنقاط نهاية محددة باستخدام إعدادات تعتمد على endpoint. #83379 (Antonio Andelic). - تخطي العُقد غير المتاحة أثناء INSERT SELECT من s3Cluster() إلى متماثل MergeTree. #83676 (Igor Nikonov).
- إصلاح شرط الإرجاع المبكر لإبطاء معدل طلبات S3: يجب أن تكون إحدى القيمتين s3_slow_all_threads_after_network_error أو backup_slow_all_threads_after_retryable_s3_error مساوية لـ true لتفعيل سلوك الإبطاء عندما تكون جميع الخيوط متوقفة مؤقتًا بسبب خطأ قابل لإعادة المحاولة، بدلًا من اشتراط القيمتين معًا. #85505 (Julia Kartseva).
- إصلاح خطأ منطقي أثناء القراءة من دوال تخزين الكائنات عبر جدول Distributed أو دالة الجدول البعيدة. إصلاحات: #84658، وإصلاح #85173، وإصلاح #52022. #85359 (alesapin).
- إصلاح الخطأ المنطقي من S3Queue: “Table is already registered”. إغلاق #84433. ظهر الخلل بعد https://github.com/ClickHouse/ClickHouse/pull/83530. #84677 (Kseniia Sumarokova).
- إصلاح تسبّب قيم الإعدادات الكبيرة في تعطل جداول S3Queue وإعادة تشغيل نسخة متماثلة. #86074 (Nikolay Degterinsky).
إصلاحات DynamicAndVariantType
- إصلاح التراجع عن تغييرات عمود Dynamic عند فشل التحليل. #82169 (Pavel Kruglov).
- إصلاح احتمال حدوث تعطل في نوع Variant ضمن UNION. #83295 (Pavel Kruglov).
- إصلاح قراءة عمود Variant مع التجسيد المؤجل. #84400 (Pavel Kruglov).
- عدم التحقق من الأنواع التجريبية/المريبة أثناء تنفيذ تعبير default/materialize عند القراءة من جدول موجود. #81618 (Pavel Kruglov).
إصلاحات Keeper
- إصلاح في Keeper: تحديث العدد الإجمالي لعمليات watch بشكل صحيح عند حذف العقد المؤقتة عند إغلاق الجلسة. #83583 (Antonio Andelic).
- إصلاح الكتابات غير المرتبة في سجل تغييرات Keeper. سابقًا، كان من الممكن أن توجد كتابات قيد التنفيذ إلى سجل التغييرات، لكن التراجع قد يتسبب في تغيير متزامن لملف الوجهة. وكان هذا يؤدي إلى سجلات غير متسقة، مع احتمال فقدان البيانات. #84434 (Antonio Andelic).
- إصلاح تسربات في Keeper مع تخزين RocksDB (إذ لم تكن المكررات تُدمَّر). #84523 (Azat Khuzhin).
- إصلاح مشكلة كان فيها إعداد Keeper
rotate_log_storage_interval = 0يتسبب في تعطل ClickHouse. (المشكلة #83975). #84637 (George Larionov). - إصلاح العدد الإجمالي لعمليات watches الذي يعيده Keeper. #84890 (Antonio Andelic).
- قفل ‘mutex’ عند جلب ZooKeeper من ‘view’ في RefreshTask. #84699 (Tuan Pham Anh).
إصلاحات الفهرسة
- إصلاح التخطي المفرط للحبيبات عند التصفية عبر فهارس token/ngram باستخدام regexp يتضمن alternation ويبدأ ببديل أول غير حرفي. #79373 (Eduard Karacharov).
- كان من الممكن أن يفشل تنفيذ الإعداد
use_skip_indexes_if_final_exact_mode(المُقدَّم في 25.6) في تحديد نطاق مرشح مناسب، وذلك بحسب إعدادات محركMergeTree/ توزيع البيانات. وقد تم حل ذلك الآن. #82667 (Shankar Iyer). - كان من الممكن أن يفشل تحسين الإعداد
use_skip_indexes_if_final_exact_mode(المُقدَّم في 25.6) في تحديد نطاق مرشح مناسب، وذلك بحسب إعدادات محركMergeTree/ توزيع البيانات. وقد تم حل ذلك الآن. #82879 (Shankar Iyer). - سابقًا، لم تكن فهارس
setتأخذ أعمدةNullableفي الاعتبار عند التحقق مما إذا كانت الحبيبات تستوفي شرط عامل التصفية (المشكلة #75485). #84305 (Elmi Ahmadov). - لم تكن المقارنة مع قيمة
nanتستخدم النطاقات الصحيحة أثناء تقييم فهرسMinMax. #84386 (Elmi Ahmadov). - لم تعد محللات الرموز
ngramوno_opتتسبب في تعطل فهرس النص (التجريبي) عند وجود رموز إدخال فارغة. #84849 (Robert Schulze).
إصلاحات العرض المادي
- إصلاح خلل في تبعيات الجدول كان يتسبب في تفويت العروض المادية لاستعلامات INSERT. #82222 (Nikolay Degterinsky).
- بعد https://github.com/ClickHouse/ClickHouse/pull/79963، تعطّل استخدام الأعمدة الفرعية في العروض المادية، وربما تلقّى المستخدم الخطأ
Not found column X in block. تم إصلاح هذا السلوك. ويعالج ذلك المشكلة: #82784. #83221 (Nikita Mikhaylov). - إصلاح الخطأ
illegal_type_of_argumentفي mv عند اختلاف الأنواع. #85135 (Sema Checherinda).
إصلاحات Azure والتخزين السحابي
- في AzureBlobStorage، عند استخدام النسخ الأصلي نقارن بين طرق المصادقة، وإذا حدث استثناء أثناء ذلك، فقد جرى تحديث الشيفرة للرجوع إلى القراءة والنسخ (أي النسخ غير الأصلي). #82693 (Smita Kulkarni).
- إصلاح مشكلة التحرير المزدوج في
AzureIteratorAsync. #85064 (Nikita Taranov).
إصلاحات الأعطال والاستقرار
- إصلاح تعطل محتمل في logging أثناء إنهاء session، إذ قد يكون
user_idفارغًا أحيانًا. #82513 (Bharat Nallan). - إصلاح تعطل في عميل بسبب بقاء connection في حالة انقطاع بعد تنفيذ
INSERTغير صالح. #83253 (Azat Khuzhin). - إصلاح تعطل عند حساب حجم block يحتوي على columns فارغة. #83271 (Raúl Marín).
- إصلاح تعطل قد يحدث مع query تستخدم الإعداد ‘max_threads=1’ عند تنفيذها تحت حمل مع تمكين CPU scheduling. #83387 (Fan Ziqi).
- جعل
zoutofmemoryخطأً عتاديًا، وإلا فسيؤدي إلى throw logical error. راجع https://github.com/clickhouse/clickhouse-core-incidents/issues/877. #84420 (Han Fei). - إصلاح احتمال حدوث إيقاف قسري (بسبب joining threads من task)، وربما أيضًا حالات تعليق (في unit tests) أثناء إيقاف
BackgroundSchedulePool. #83769 (Azat Khuzhin). - إصلاح حالة توقف متبادل تتسبب بها thread الخاصة بفاحص الإلغاء في الخلفية. #84203 (Antonio Andelic).
- إصلاح توقف متبادل عند الإيقاف بسبب قفل Context بشكل تكراري أثناء تنظيف library bridge. #83824 (Azat Khuzhin).
- إصلاح تعطل في عميل بسبب بقاء connection في حالة انقطاع بعد تنفيذ
INSERTغير صالح. #83842 (Azat Khuzhin). - إصلاح احتمال حدوث UB (أعطال) في حالة
MEMORY_LIMIT_EXCEEDEDأثناء deserialization لـ String. #85440 (Azat Khuzhin). - إصلاح تعطل نادر في asynchronous inserts التي تغيّر settings
log_commentأوinsert_deduplication_token. #85540 (Anton Popov).
إصلاحات Glue والكتالوج
- إصلاح خلل في تكامل Glue catalog. يمكن لـ ClickHouse الآن قراءة الجداول ذات أنواع البيانات المتداخلة عندما تحتوي بعض الأعمدة الفرعية على أعداد عشرية، على سبيل المثال:
map<string, decimal(9, 2)>. يُصلح #81301. #82114 (alesapin). - يقرأ ClickHouse الآن الجداول من Glue Catalog عندما يكون نوع الجدول محددًا بأحرف صغيرة. #84316 (alesapin).
- يتجاهل Unity catalog الآن المخططات ذات أنواع البيانات غير المعتادة في حالة الجداول غير التابعة لـ Delta. يُصلح #85699. #85950 (alesapin).
إصلاحات الدوال
- تدعم الدوال
trim{Left,Right,Both}الآن سلاسل الإدخال من النوع “FixedString(N)”. على سبيل المثال، أصبحSELECT trimBoth(toFixedString('abc', 3), 'ac')يعمل الآن. #82691 (Robert Schulze). - إذا استُدعيت الدالة
trimبمدخلات ثابتة بالكامل، فإنها تُنتج الآن سلسلة خرج ثابتة. (الخلل #78796). #82900 (Robert Schulze). - إصلاح الخرج غير الصحيح للدالة
formatDateTimeعند استخدام المُنسِّق%fمع مُنسِّقات ذات حجم متغير (مثل%M). #83020 (Robert Schulze). - إصلاح خلل في معاملات
NULLفي الدالةCASE. #82436 (Yarik Briukhovetskyi). - عدم استخدام أجزاء غير مرتبطة من قاموس مشترك في الدالة
lowCardinalityKeys. #83118 (Alexey Milovidov). - إصلاح colorSRGBToOKLCH/colorOKLCHToSRGB عند مزج معاملات ثابتة وأخرى غير ثابتة. #83906 (Azat Khuzhin).
- إصلاح الإنشاء غير الصحيح لـ tuples فارغة في الدالة
array(). ويعالج هذا #84202. #84297 (Amos Bird). - إصلاح خلل كان يتسبب في ترميز Bech32 وفك ترميزه بشكل غير صحيح. ولم يُكتشف هذا الخلل في الأصل لأن أحد التطبيقات المتاحة عبر الإنترنت للخوارزمية، والمستخدم للاختبار، كان يعاني من المشكلة نفسها. #84257 (George Larionov).
إصلاحات الاستعلامات الموزعة
- كان يُسمح بتنفيذ
INSERT SELECTالموزع المتوازي معLIMIT، وهذا غير صحيح لأنه يؤدي إلى ازدواجية البيانات في جدول الوجهة. #84477 (Igor Nikonov). - عدم محاولة استبدال دوال الجدول ببديلها الخاص بالعنقود عند وجود
JOINأو استعلام فرعي. #84335 (Konstantin Bogdanov). - إضافة فحص للتحقق مما إذا كان استعلام فرعي مترابط مستخدمًا في سياق موزع لتجنب حدوث تعطل. يعالج #82205. #85030 (Dmitry Novik).
- كان استخدام
distributed_depthكمؤشر إلى الدالة*Clusterغير صحيح، وقد يؤدي إلى ازدواجية البيانات؛ ويُستخدمclient_info.collaborate_with_initiatorبدلًا من ذلك. #85734 (Konstantin Bogdanov). - إضافة دعم للثوابت العامة من عبارة
WITHفيINSERT SELECTالموزع المتوازي مع جدول الوجهةDistributed. سابقًا، كان الاستعلام قد يُطلق خطأUnknown expression identifier. #85811 (Nikolai Kochetov). - إصلاح خطأ منطقي عند محاولة
CREATE ... AS (SELECT * FROM s3Cluster(...))معDatabaseReplicated. #85904 (Konstantin Bogdanov). - إضافة عمليات تحقق من
sharding_keyأثناء تنفيذALTERعلى جدولDistributed. سابقًا، كانALTERغير الصحيح يؤدي إلى إفساد تعريف الجدول وتعطيل إعادة تشغيل الخادم. #86015 (Nikolay Degterinsky).
إصلاحات المقاييس والمراقبة
- إصلاح التحقق من صحة إعدادات المقاييس غير المتزامنة
asynchronous_metrics_update_period_sوasynchronous_heavy_metrics_update_period_s. #82310 (Bharat Nallan). - إصلاح مقاييس
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFiles(إذ كانت تُحتسب سابقًا ضمن مقياس من دون السابقةCache). #83730 (Azat Khuzhin). - إصلاح
LOGICAL_ERRORفي QueryMetricLog: لا يمكن أن تكون Mutex بقيمةNULL. #82979 (Pablo Marcos). - إصلاح المقاييس غير الصحيحة KafkaAssignedPartitions وKafkaConsumersWithAssignment. #85494 (Ilya Golshtein).
- إصلاح التقليل من تقدير إحصائية البايتات المُعالجة عند استخدام
PREWHERE(صراحةً أو تلقائيًا). #85495 (Michael Kolupaev). - إصلاح انحراف تتبّع الذاكرة الناتج عن مجموعة الجدولة الخلفية والمنفّذ. #84946 (Azat Khuzhin).
إصلاحات نوع البيانات والتحويل
- إصلاح الحالات التي قد يتسبب فيها تحليل
Timeفي مشكلات msan. يعالج هذا: #82477. #82514 (Yarik Briukhovetskyi). - إصلاح فرز قيم NaN في النوع
LowCardinality(Float32|Float64|BFloat16). #83786 (Pervakov Grigorii). - تم إصلاح تجاوز السعة عند القيم الكبيرة (>2106-02-07) عند التحويل من
DateإلىDateTime64. #83982 (Yarik Briukhovetskyi). - إصلاح مشكلة القراءة الضمنية لقيم
Timeالسالبة إلى الجدول، مع جعل التوثيق أوضح وأقل إرباكًا. #83091 (Yarik Briukhovetskyi). - أصبح codec
DoubleDeltaقابلاً للتطبيق الآن فقط على الأعمدة ذات النوع الرقمي. وعلى وجه الخصوص، لم يعد بالإمكان ضغط أعمدةFixedStringباستخدامDoubleDelta. (يُصلح #80220). #84383 (Jimmy Aguilar Mena). - إصلاح فقدان الدقة في
JSONExtractعند تحويل أرقام JSON إلى أنواعDecimal. والآن تحافظ قيم JSON الرقمية على تمثيلها العشري الدقيق، مما يجنب أخطاء التقريب في الأعداد ذات الفاصلة العائمة. #85665 (ssive7b).
إدارة الذاكرة والموارد
- إصلاح التعامل غير الصحيح مع الذاكرة المرتبط بـ
max_untracked_memory. #83607 (Azat Khuzhin). - منع مشاركة
async_read_countersبين الاستعلامات. #83423 (Azat Khuzhin). - إصلاح أخطاء محتملة ناتجة عن عدم تهيئة File Cache عند استخدامه كتخزين مؤقت للبيانات. #83539 (Bharat Nallan).
- تطبيق
filesystem_prefetches_limitدائمًا (وليس فقط منMergeTreePrefetchedReadPool). #83999 (Azat Khuzhin).
إصلاحات التهيئة والإعدادات
- عند تمرير الإعدادات عبر URI، يُعتدّ بآخر قيمة. #82137 (Sema Checherinda).
- إصلاح سباقات البيانات في العميل (من خلال عدم استخدام السياق العام) وتجاوزات
session_timezone(سابقًا، إذا كانتsession_timezoneمضبوطة مثلًا فيusers.xml/خيارات العميل على قيمة غير فارغة، ثم ضُبطت في سياق الاستعلام على قيمة فارغة، كانت تُستخدم القيمة منusers.xml، وهذا غير صحيح؛ أما الآن فستكون الأولوية دائمًا لسياق الاستعلام على السياق العام). #82444 (Azat Khuzhin). - منع ضبط
threadpool_writer_pool_sizeعلى الصفر لضمان عدم تعلّق عمليات الخادم. #82532 (Bharat Nallan). - معالجة تجاوز طفيف في سعة الأعداد الصحيحة في تهيئة الإعداد
role_cache_expiration_time_seconds(المشكلة #83374). #83461 (wushap). - منع القيمة الصفرية لـ
max_insert_block_sizeلأنها قد تتسبب في خطأ منطقي. #83688 (Bharat Nallan). - إصلاح حلقة لا نهائية في
estimateCompressionRatio()عندblock_size_bytes=0. #83704 (Azat Khuzhin). - كانت معلمات مثل
date_time_input_formatتُتجاهل بالكامل عند استخدام HTTP مع multipart. #85570 (Sema Checherinda).
إصلاحات MongoDB
- سابقًا، كان يمكن لتعريفات محرك الجدول
MongoDBأن تتضمن مكوّن مسار في الوسيطhost:port، وكان يُتجاهَل بصمت. وكان تكامل MongoDB يرفض تحميل مثل هذه الجداول. مع هذا الإصلاح، أصبحنا نسمح بتحميل هذه الجداول ونتجاهل مكوّن المسار إذا كان لمحركMongoDBخمس وسائط، مع استخدام اسم قاعدة البيانات من الوسائط. ملاحظة: لا يُطبَّق هذا الإصلاح على الجداول المُنشأة حديثًا أو على الاستعلامات التي تستخدم دالة الجدولmongo، وكذلك على مصادر القواميس والمجموعات المُسمّاة. #81942 (Vladimir Cherkasov).
تحسينات متفرقة
- في الإصدارات السابقة، كان الخادم يعيد محتوى زائدًا للطلبات الموجَّهة إلى
/js. هذا يُغلق #61890. #81895 (Alexey Milovidov). - إصلاح
InterpreterInsertQuery::extendQueryLogElemImplلإضافة علامات الاقتباس العكسية إلى أسماء قاعدة البيانات والجدول عند الحاجة (مثلًا عندما تحتوي الأسماء على محارف خاصة مثل-). #81528 (Ilia Shvyrialkin). - إصلاح احتمال حدوث سباق بيانات بين خيط الاقتراحات وخيط العميل الرئيسي. #82233 (Azat Khuzhin).
- إصلاح سلامة الاستثناءات في إعادة كتابة union/intersect/except_default_mode. يُغلق هذا #82664. #82820 (Alexey Milovidov).
- عند استخدام تنفيذ Database لا يعتمد على التخزين المؤقت، تُحذف البيانات الوصفية للجدول المقابل بعد إعادة الأعمدة، ويصبح المرجع غير صالح. #82939 (buyval01).
- يُزامَن استدعاء Onprogress في JSONEachRowWithProgress مع الإنهاء. #83879 (Sema Checherinda).
- إصلاح خلل نادر حيث قد يؤدي استعلام
MATERIALIZE COLUMNإلى ظهور ملفات غير متوقعة فيchecksums.txt، وفي النهاية إلى أجزاء بيانات detached. #84007 (alesapin). - التعامل مع الاستثناءات على نحو صحيح أثناء التحديث الدوري للأجزاء. #84083 (Azat Khuzhin).
- إصلاح توليد أسماء الأعمدة للقيم المنطقية الحرفية بحيث يستخدم “true”/“false” بدلًا من “1”/“0”، مما يمنع تعارض أسماء الأعمدة بين القيم المنطقية والحرفية الصحيحة في الاستعلامات. #84945 (xiaohuanlin).
- إصلاح مشكلات محتملة في دقة الفرز في محرك جدول Merge. #85025 (Xiaozhe Yu).
- تنفيذ واجهات برمجة تطبيقات المفقودة لـ DiskEncrypted. #85028 (Azat Khuzhin).
- إضافة إعداد للتوافق مع الإصدارات السابقة للسماح للمحلل الجديد بالإشارة إلى الاسم المستعار الخارجي في جملة
WITHعند تعارض الأسماء. يُصلح #82700. #83797 (Dmitry Novik). - السماح بالإشارة إلى أي جدول في وسيطة
view(...)الخاصة بالدالة الجدولية remoteعند تمكين المحلل. يُصلح #78717. يُصلح #79377. #83844 (Dmitry Novik). - إصلاح الكتابة مع append (في MergeTree المستخدم للمعاملات التجريبية) مع أنواع البيانات الوصفية
plain_rewritable/plain، إذ كان يجري تجاهلها سابقًا. #83695 (Tuan Pham Anh). - إصلاح استخدام logger في
IAccessStorage. #84365 (Konstantin Bogdanov). - إصلاح استبعاد الملفات استنادًا إلى العمود الافتراضي في بحيرات البيانات. #84520 (Kseniia Sumarokova).
- إصلاح مشكلة قد تؤدي فيها عملية الاستعلام عن مصدر بعيد متأخر إلى تجاوز حدود المتجه. #84820 (George Larionov).
- تخزين جميع الإعدادات بشكل صحيح في بيانات تعريف الجدول لمحرك object queue. #84860 (Antonio Andelic).
- إصلاح الخطأ
CORRUPTED_DATAعند استخدام الأعمدة الكسولة مع الفرز الخارجي. #84738 (János Benjamin Antal). - التخلّص من استدعاءات
getStatus()غير الضرورية أثناء استعلاماتSYSTEM DROP REPLICA. ويُصلح ذلك الحالة التي يُحذف فيها جدول في الخلفية ويُطلَق فيها الاستثناءShutdown for storage is called. #85220 (Nikolay Degterinsky). - إضافة عمليات التحقق المفقودة من طول اسم الجدول في استعلامات
CREATE OR REPLACEوRENAME. #85326 (Michael Kolupaev). - إصلاح التعطّل وفساد البيانات أثناء
ALTER UPDATEلـ JSON. #85383 (Pavel Kruglov). - إصلاح segfault في coalescing merge tree للسلاسل النصية الكبيرة. هذا يُغلق #84582. #85709 (scanhex12).
- إصلاح send_logs_source_regexp (بعد إعادة هيكلة التسجيل غير المتزامن في #85105). #85797 (Azat Khuzhin).
- إصلاح احتمال عدم الاتساق في القواميس التي تستخدم update_field عند أخطاء
MEMORY_LIMIT_EXCEEDED. #85807 (Azat Khuzhin). - إصلاح طلبات HTTP التي تُجريها دالة الجدول
url()بحيث تُضمِّن أرقام المنافذ بشكل صحيح في ترويسة Host عند الوصول إلى منافذ غير قياسية. يحلّ هذا حالات فشل المصادقة عند استخدام عناوين URL موقّعة مسبقًا مع خدمات متوافقة مع S3 مثل MinIO التي تعمل على منافذ مخصّصة، وهو أمر شائع في بيئات التطوير. (يُصلح #85898). #85921 (Tom Quist).