تغييرات غير متوافقة مع الإصدارات السابقة
تغييرات الاستعلامات وبناء الجملة
- أصبحت دالتا النافذة
RANKوDENSE_RANKترفضان الوسائط وتُطلقان الخطأNUMBER_OF_ARGUMENTS_DOESNT_MATCH، تماشيًا مع معيار SQL. في السابق، كانت استعلامات مثلRANK(x) OVER (ORDER BY id)تُقبل دون تنبيه مع تجاهل الوسيط، وهو ما شكّل مصدرًا متكررًا لالتباس المستخدمين. ولاستعادة السلوك المتساهل السابق، اضبطallow_rank_dense_rank_arguments = 1. #104324 (groeneai).
تغييرات أنواع البيانات
- ترفض
icebergHashوicebergBucketالآن وسيطات من الأنواعInt128وUInt128وInt256وUInt256وDecimal256وتُصدر خطأً صريحًا. سابقًا، كانت تقتطع القيم الأوسع بصمت وتنتج قيم hash متصادمة. لا تحدد مواصفة Iceberg التجزئة إلا للأعداد الصحيحة ذات 32 أو 64 بت وللقيم العشرية بدقة تصل إلى 38؛ حوّل القيم إلىInt64أوDecimal128للحفاظ على السلوك السابق للقيم التي تقع ضمن النطاق. #105866 (Algunenano). - أصبحت الدوال
toUUIDوtoUUIDOrNullوtoUUIDOrZeroوtoUUIDOrDefaultوعمليةCASTإلىUUIDوNullable(UUID)وaccurateCastOrNullإلىUUID، وكذلك تنسيقات الإدخال التي تحلل معرّف UUID من نص (Avro،MsgPack،JSONExtract، …)، ترفض السلاسل النصية التي يكون طولها صحيحًا لكنها تحتوي على محارف غير سداسية عشرية. سابقًا، كانت هذه المدخلات تتحول بصمت إلى معرّف UUID ملفّق نتيجة تجاوز نهاية جدول البحث عن الأرقام السداسية عشرية. أما الآن فتُصدرtoUUIDالخطأCANNOT_PARSE_UUID، بينما تعيد بدائلOr*القيمةNULLأو معرّف UUID الصفري أو القيمة الافتراضية المحددة. #104370 (groeneai). - يجري الآن التحقق من النوعين
DynamicوVariantفي عبارةPARTITION BYالخاصة بالنافذة؛ ولم يكن ذلك يُفحص سابقًا عندما يكونallow_suspicious_types_in_group_byمعطلًا. أما الآن فتُصدر الاستعلامات التي تقسّم نافذة على عمود من النوعDynamicأوVariantخطأً ما لم يكنallow_suspicious_types_in_group_by = 1. #105450 (Avogar).
تغييرات التخزين والفهارس
- رفض Dynamic/Variant المتداخلة في تجميعات min/max وفهارس minmax. سابقًا، كان التحقق يقتصر على Dynamic/Variant في المستوى الأعلى فقط. #105468 (Avogar).
- تتغير القيمة الافتراضية لإعداد الخادم
insert_deduplication_versionمنcompatible_double_hashesإلىnew_unified_hash. تعمل إزالة تكرار الإدراج الآن على كتلة الإدراج بأكملها (لكل عملية إدراج) بدلًا من كل جزء/قسم: تظل إعادة محاولة عملية الإدراج نفسها مُزالة التكرار، لكن لم تعد عمليتا إدراج مختلفتان تنتجان جزءًا متطابقًا تُزالان تكراريًا فيما بينهما، ولم تعد أيضًا عمليات الإدراج التي تُرتَّب فيها الصفوف نفسها ترتيبًا مختلفًا تُزال تكراريًا. اضبطinsert_deduplication_version = compatible_double_hashesلاستعادة السلوك السابق. تخضع إزالة تكرار الإدراج غير المتزامن أيضًا لنافذة المزامنة ضمنnew_unified_hash: إذ يتبع كلٌّ من تمكينها (replicated_deduplication_window) ومدة الاحتفاظ بها (replicated_deduplication_window_seconds، والقيمة الافتراضية ساعة واحدة) إعدادات المزامنة، لذا فإن*_for_async_insertsإعداد قديم ولا ينطبق إلا علىold_separate_hashes/compatible_double_hashes. يجب أن تعمل المثيلات التي تُرقّى مباشرةً من إصدار كانت قيمته الافتراضيةold_separate_hashesأولًا باستخدامcompatible_double_hashesإلى أن تنقضي أطول نافذة لإزالة التكرار ذات صلة (بما في ذلكreplicated_deduplication_window_for_async_inserts، وقيمتها الافتراضية أسبوع واحد، عند استخدام عمليات الإدراج غير المتزامن) قبل الاعتماد علىnew_unified_hash. ينبغي لأحمال العمل غير المتزامنة التي تنتقل منcompatible_double_hashesأن ترفع أولًاreplicated_deduplication_window[_seconds]إلى نافذة الإدراج غير المتزامن (وأن تعمل طوال نافذة غير متزامنة كاملة)، أو أن توقف عمليات الإدراج غير المتزامن مؤقتًا، أو أن تبقى علىcompatible_double_hashes، لأنnew_unified_hashلم يعد يتحقق من معرّفاتasync_blocksذات مدة الاحتفاظ الأطول. #107886 (CheSema). - إصلاح
hasTokenبحيث لا يعيد بصمت نتائج عبر فهرس نصي عند استخدام needle يحتوي على فاصل، بل يطلقBAD_ARGUMENTS. #108189 (Ergus).
الميزات المُزالة
- لم يعد بإمكانك استخدام قارئ وكاتب Parquet المتقادمَين المبنيَّين على Arrow. إذ يُستخدم التنفيذ الأصيل دائمًا بدلًا منهما. أصبحت الإعدادات التي كانت تختار التنفيذات القديمة أو تضبطها متقادمة ويتم تجاهلها:
input_format_parquet_use_native_reader_v3وoutput_format_parquet_use_custom_encoderوoutput_format_parquet_versionوoutput_format_parquet_compliant_nested_typesوoutput_format_parquet_unsupported_types_as_binary. يكتب الكاتب الأصيل دائمًا بصيغة Parquet V2.6+ مع أنواع متداخلة متوافقة، ويُصدر الخطأUNKNOWN_TYPEللأنواع غير المدعومة بدلًا من كتابتها كبيانات ثنائية خام. #100949 (alexey-milovidov). - أُزيل الإعداد المتقادم
allow_experimental_query_deduplicationوسلوك إزالة تكرار الاستعلامات التجريبي غير المدعوم المرتبط به. #99398 (devcrafter). - لم يعد
ALTER TABLE ... REPLACE PARTITION ... FROM ...يحذف بيانات قسم الوجهة بصمت عندما لا يحتوي الجدول المصدر على أجزاء ضمن القسم المطلوب. سابقًا، كان هذا الطلب يزيل قسم الوجهة دون كتابة أي بيانات بديلة. ويُرفض الآن افتراضيًا بالخطأBAD_ARGUMENTS. هذا تغيير غير متوافق مع الإصدارات السابقة: إذ إنREPLACE PARTITIONمن مصدر فارغ، والذي كان ينجح سابقًا (مما يؤدي إلى مسح الوجهة)، سيُصدر الآن استثناءً بعد الترقية. لاستعادة سلوك المسح الصامت السابق، اضبط الإعداد الجديدallow_replace_partition_from_empty_source = 1(لكل استعلام أو ضمن ملف التعريف)، أو اضبطcompatibilityعلى26.5أو إصدار أقدم. ولحذف بيانات الوجهة صراحةً، استخدمALTER TABLE ... DROP PARTITION .... #104939 (groeneai). - أُزيلت دوال KQL (Kusto) التجريبية
array_sort_ascوarray_sort_desc، وعمليات التنفيذ الخلفية المقابلة لها في SQL،kql_array_sort_ascوkql_array_sort_desc. كانت هذه الدوال تجريبية ومنفذة بجودة متدنية، وكانت مصدرًا لأخطاء في صحة النتائج وأخطاء في المحلل. تُرجع الاستعلامات التي تستخدم هذه الأسماء الآنUNKNOWN_FUNCTION. #108101 (groeneai).
الميزات الجديدة
الدالة
- أُضيف دعم دالة PromQL
histogram_quantileفي دوال الجداولprometheusQueryوprometheusQueryRange. يتيح ذلك حساب الكَمّيات على حاويات المُدرَّج التكراري التقليدية في Prometheus، المحددة بالوسمle. #103477 (Yasumoto). - أُضيفت الدالة
h3PolygonToCellsWithContainment، التي تدعم أوضاع الاحتواء القائمة على المركز، والاحتواء الكامل، والتداخل. #104455 (yousefQadry). - يمكن للمستخدم الآن تحديد وسيطة اختيارية للدقة للدوال
formatReadableSizeوformatReadableDecimalSizeوformatReadableQuantityللتحكم في عدد الأرقام بعد الفاصلة العشرية. القيمة الافتراضية هي 2، مع الحفاظ على السلوك السابق. #104648 (antoniofilipovic). - أُضيف الاسمان المستعاران التجميعيان
min_byوmax_byللدالتينargMinوargMax. #105712 (itsjoeoui).
ميزات SQL وميزات الاستعلام
- تقبل
formatReadableTimeDeltaالآن تعبيرINTERVALمن نوع غيرMonthأوYearكمدخل. #64315 (Beetelbrox). - أُضيف دعم صيغة الإخراج PNG، ما يتيح عرض نتائج الاستعلامات مباشرةً كصور PNG. #74691 (m7kss1).
- أُضيفت ميزة حجز الذاكرة لأعباء العمل. راجع وثائق جدولة أعباء العمل. #82414 (serxa).
- أُضيف خيارا
IPV4_PREFIX_BITSوIPV6_PREFIX_BITSللحصص المحددة بـIP_ADDRESSأوFORWARDED_IP_ADDRESS، ما يتيح مشاركة حدود الحصة على مستوى الشبكة الفرعية لـ IP بدلًا من تطبيقها على كل عنوان كامل على حدة. #89270 (adityachopra29). - تنفيذ
ADD ENUM VALUESفي استعلاماتALTER TABLEلتبسيط إضافة قيم جديدة إلى نوع Enum موجود دون الحاجة إلى تحديد جميع قيم Enum الحالية مجددًا. #93830 (ilejn). - إضافة صيغة الإدخال
GeoJSONللقراءة. #98124 (mneedham). - أُضيف معالج لاحق إلى فهرس النصوص لتحويل الرموز بعد تجزئة النص. #98939 (Ergus).
- أُضيف دعم اختياري لعُقد TTL في ClickHouse Keeper. تنتهي صلاحية عُقد TTL تلقائيًا بعد انتهاء عمرها المحدد في التهيئة، ولا يمكن أن تحتوي على عُقد فرعية. #100397 (scanhex12).
- أُضيف تخزين مواضع الرموز لفهارس النصوص لدعم عمليات بحث
hasPhraseالدقيقة. فعّل وسيطة الفهرسsupport_phrase_searchوإعدادMergeTreeallow_experimental_text_index_phrase_search. #103172 (ahmadov). - إضافة الدالتين arrayTopK وarrayBottomK: - تُرجع
arrayTopK(k, array)أكبر K عناصر بترتيب تنازلي - تُرجعarrayBottomK(k, array)أصغر K عناصر بترتيب تصاعدي. #104563 (vitlibar). - إضافة دعم اختيار الأعمدة وفق نمط الاسم باستخدام
* LIKE '<pattern>'و* ILIKE '<pattern>'، بما في ذلك الصيغ المؤهلة مثلtable.* LIKE '<pattern>'وtable.* ILIKE '<pattern>'. يطابقLIKEأسماء الأعمدة مع مراعاة حالة الأحرف، بينما يطابقهاILIKEدون مراعاة حالة الأحرف. #104569 (niyue). - أُضيفت استعلامات مستمرة لجداول
MergeTreeباستخدام سلسلة من قراءات اللقطات. #105114 (Michicosun). - أُضيفت الصيغة
RowBinaryWithNamesAndTypesAndDefaultsلتحسين دعم تطور المخطط. #105736 (mzitnik). - أُضيفت دوال لتقديم Mapbox Vector Tiles مباشرةً من SQL: تُسقِط
MVTEncodeGeomشكلاً هندسياً إلى فضاء البكسل لبلاطة slippy-map وتقتطعه، بينما تُجمِّعMVTEncodeالأشكال الهندسية المُسقطة لمجموعة في بايتات ثنائية لبلاطة أحادية الطبقة، وتُرجعMVTBoundingBox/MVTBoundingBoxMercatorالمربع المحيط بالبلاطة لتقييد الصفوف ضمنه. تدعم الدوال الأشكال الهندسية من نوع Point وline وPolygon. تتوفر أيضاً بالأسماء المستعارة في PostGIS:ST_AsMVTGeomوST_AsMVT. #106107 (saarthak2002). - أُضيفت
LOCALTIMEوLOCALTIMESTAMP(بناء جملة SQL القياسي / PostgreSQL).LOCALTIMESTAMPاسم مستعار لـnow()(ويُرجعDateTime)؛ وتُرجعLOCALTIMEالوقت الحالي من اليوم كقيمةTime. #106139 (thomas-cabral). - أُضيفت استراتيجيتان جديدتان لـ
load_balancing، هماhostname_longest_common_prefixوhostname_longest_common_suffix، وتُفضِّلان النسخة المتماثلة التي يشترك اسم مضيفها مع اسم مضيف البادئ في أطول بادئة مشتركة (أو لاحقة مشتركة، على الترتيب). وهما مفيدتان عندما يكون مركز البيانات مُرمَّزاً كبادئة أو لاحقة في أسماء مضيفين ذات مقاطع رقمية متفاوتة الطول، إذ قد تختار استراتيجيتاnearest_hostnameوhostname_levenshtein_distanceالحاليتان النسخة المتماثلة الخاطئة. #107360 (den-crane). - دالتان جديدتان هما
quantizeBFloat16ToInt8وdequantizeInt8ToBFloat16: codec قياسي يضغط مكوّنات embedding إلى 8 بت باستخدام مُكمِّم غاوسي Lloyd-Max ذي 256 مستوى، ويمكن استخراج رموز Int4/Int2/الثنائية منه عبر اقتطاع البتات. #108102 (alexey-milovidov).
محركات الجداول والتخزين
الإعدادات والتهيئة
- أُضيف الإعداد
output_format_always_write_decimal_point_in_float_and_decimalلطباعة الفاصلة العشرية دائمًا للأرقام ذات الفاصلة العائمة وأرقامDecimalفي التنسيقات النصية، حتى عندما تكون القيمة عددًا صحيحًا. على سبيل المثال، إخراج1.بدلًا من1. يكون هذا الإعداد معطّلًا افتراضيًا. #62614 (qoega). - أُضيف إعداد جديد غير قابل للتغيير في
MergeTreeباسمallow_tuple_element_aggregation، وهو معطّل افتراضيًا. عند تفعيله، تعملSummingMergeTreeوAggregatingMergeTreeوCoalescingMergeTreeعلى تسطيح أعمدةTupleتعاوديًا وتجميع كل عنصر نهائي فيها بصورة مستقلة أثناء عمليات الدمج، كما لو كان عمودًا من المستوى الأعلى: تجمعهSummingMergeTree، وتدمجAggregatingMergeTreeحالة دالة التجميع الخاصة به، وتحتفظCoalescingMergeTreeبآخر قيمة غير NULL له. يجب تحديد هذا الإعداد عند إنشاء الجدول، وتتجاهله المحركات التي لا تدعمه دون إصدار أي تنبيه. #98039 (JingYanchao). - أُضيف الإعداد
output_format_float_precisionللتحكم في عدد المنازل العشرية في المخرجات النصية للأرقام ذات الفاصلة العائمة. #99721 (phulv94). - أُضيف إعدادا جدول
MergeTree، وهماmaterialize_projections_on_insertوmaterialize_projections_on_merge. عندما تكون قيمةmaterialize_projections_on_insert = 0، تتخطى عمليات INSERT إنشاء أجزاء الإسقاط، مما يحسّن معدل إدراج البيانات في الجداول ذات الإسقاطات الكثيرة. وعندما تكون قيمةmaterialize_projections_on_merge = 1، تعيد عملية الدمج إنشاء إسقاط مفقود من جميع أجزائه المصدرية، بحيث يمكن إنشاء الإسقاطات أثناء عمليات الدمج بدلًا من إنشائها عند الإدراج. ولا تزال عمليات الدمج تدمج الأجزاء التي تتشارك المجموعة نفسها من الإسقاطات فقط. #100993 (cwurm). - أُضيف إعداد جديد في S3Queue باسم
after_processing_move_preserve_path. عند تفعيله معafter_processing='move'وafter_processing_move_prefix، تُنقل الكائنات المعالجة مع الاحتفاظ بمسار المصدر الكامل ضمن بادئة الوجهة، بدلًا من تسطيحها لتصبح اسم الملف فقط. #105354 (asya-ch). - أُضيفت عناصر تهيئة لمعالج HTTP هي
url_prefixوfull_url_prefixلمطابقة جميع المسارات التي تبدأ ببادئة محددة، إلى جانب العناصر الصريحةurl_regexpوfull_url_regexpوheaders_regexp. ولا تزال الصيغة القديمة<url>regex:...</url>مدعومة. #107492 (vitlibar).
المصادقة
- أُضيفت بيانات اعتماد اختيارية باسم
external_idللوصول إلى S3 المستند إلى الدور. #106941 (eliangidoni). - أُضيفت معلومات شهادة عميل TLS (subject والرقم التسلسلي والجهة المُصدِرة وفترة الصلاحية) إلى جدول
system.session_logلتحسين قابلية رصد المصادقة المعتمدة على الشهادات. #107679 (alexey-milovidov).
جداول النظام
- أُضيف جدول
system.iceberg_filesالذي يعرض البيانات الوصفية لكل ملف في جداول Iceberg، بصف واحد لكل ملف بيانات أو ملف حذف ضمن اللقطة الحالية لكل جدول. #104415 (asya-ch). - أُضيفت فهارس تخطٍ افتراضية (ماذا لو). استخدم
CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ...لتعريف فهرس تخطٍ افتراضي ضمن نطاق الجلسة، ثم استخدمEXPLAIN WHATIF SELECT ...لتقدير نسبة التخطي وتكلفته دون تجسيده. تظهر الفهارس المعرّفة في جدولsystem.hypothetical_indexesالجديد. #104608 (yariks5s). - أُضيف جدول النظام
system.constraintsالذي يوفر معلومات عن جميع قيود CHECK وASSUME في جميع الجداول، بما في ذلك اسم القيد ونوعه وتعبيره. #105337 (PedroTadim). - أُضيف جدول نظام جديد باسم
system.documentationيجمع وثائق المرجع المضمّنة للمكوّنات الموحّدة في النظام (الدوال ومحركات الجداول وأنواع البيانات والإعدادات والتنسيقات وغيرها) في جدول واحد، مع عرض الوثائق بتنسيق Markdown. #107463 (alexey-milovidov).
الميزات التجريبية
- أُضيفت خوارزمية
dphypالتجريبية لإعادة ترتيب عمليات الربط الداخلية، كخيار لإعدادquery_plan_optimize_join_order_algorithm، إلى جانب إعدادquery_plan_optimize_join_order_max_searched_plansالذي يقيّد البحث عن ترتيب الربط ويعود إلى الخوارزمية التالية في السلسلة عند تجاوز الحد؛ اضبطه على0للاحتفاظ بسلوك البحث السابق غير المقيّد. #98798 (davenger). - أُضيف وضع التطبيق الكسول لقوائم الترحيلات لفهرس النص. عند تمكينه عبر
SET allow_experimental_text_index_lazy_apply = 1وSET text_index_posting_list_apply_mode = 'lazy'، تُفك ترميزات قوائم الترحيلات عند الطلب على مستوى الكتل المعبأة، باستخدام نهج قائم على المؤشر بدلًا من تحويلها بالكامل إلى Roaring Bitmaps، مما يقلل استخدام الذاكرة ووقت المعالجة لاستعلامات فهرس النص الانتقائية. #100035 (fastio). - أصبح بالإمكان إرفاق معالجات prometheus بمنفذ http الرئيسي مع بادئة اختيارية. #104975 (JTCunning).
- أُضيف إعداد MergeTree تجريبي
packed_skip_index_max_bytesيضم التدفقات الفرعية الصغيرة لفهرس التخطي في أرشيفskp_idx.packedواحد لكل جزء، مما يقلل الضغط على inodes عند تعريف العديد من فهارس التخطي في جدول. يُتخذ القرار لكل تدفق فرعي وقت الكتابة: تُضاف إلى الأرشيف التدفقات الفرعية التي يبقى حجمها المتسلسل دون العتبة، بينما يحتفظ أي تدفق أكبر بالتخطيط المستقلskp_idx_<name>.idx2/.mrk2. يمكن للجزء الواحد أن يجمع بين التخطيطين. فهارس النص الكامل غير مدعومة وتُخزَّن دائمًا في ملفات منفصلة. القيمة الافتراضية هي 0 (التعبئة معطلة). #105321 (Algunenano). - دعم تسلسل
Buffersلدوال WebAssembly UDF باستخدامABI BUFFERED_V1، وإضافةwebassembly_udf_enable_fuelكإعداد دائم لدالة WASM UDF. #105574 (antonio2368). - تنفيذ الاستعلامات الموزعة متعدد المراحل: يقسم المخطط خطة الاستعلام إلى مراحل متصلة بتبادلات scatter / broadcast / gather / shuffle، ويوزع أجزاء الخطة على العقد العاملة. تُنقل البيانات بين المراحل عبر TCP أو عبر ملفات مؤقتة في تخزين كائنات مشترك، ويدعم هذا المسار عمليات ربط التجزئة من نوع shuffle وbroadcast، والتجميع من نوع shuffle، والفرز الموزع. هذه الميزة تجريبية ومعطلة افتراضيًا. #106020 (davenger).
- يمكن لمحرك خطة الاستعلامات الموزعة التجريبي (
make_distributed_plan) الآن استخدام منفذ مختلف لتوزيع المهام وتبادل البث لكل عامل، يُضبط لكل نسخة متماثلة في<remote_servers>باستخدامstateless_worker_portوstreaming_exchange_port. عند عدم ضبطهما، تُستخدم منافذ مستوى الخادم السابقة (stateless_worker_client.portوdistributed_query.streaming_exchange_port). يتيح ذلك تشغيل عدة عمال على مضيف واحد. #107885 (davenger).
تحسينات الأداء
أداء JOIN
- تطبيق فهارس selector وreplication بشكل كسول عند وجود JOIN يتبعه LIMIT انتقائي أو TopN أو JOIN آخر. للتحكم في عدد أعمدة payload اللازمة لتفعيل فهارس selector الكسولة، استخدم الإعداد
query_plan_min_columns_for_join_lazy_indexing(تعني القيمة 0 أن التحسين معطّل). وللتحكم في قيمة LIMIT التي يُطبَّق عليها التحسين، استخدم الإعدادquery_plan_max_limit_for_join_lazy_indexing. #98883 (m-selmi). - السماح لـ
ASOF JOINباستخدام خوارزمية join parallel_hash، مع توزيع عملية البناء بالتوازي بين قيم مفاتيح المساواة المختلفة. سابقًا، كان ASOF مستبعدًا دائمًا منparallel_hash. #105375 (gregakinman). - مشاركة FixedHashMap الخاصة بـ hash join بوصفها عامل تصفية وقت التشغيل لـ join على جانب probe. عندما يكون جدول hash على جانب البناء من نوع FixedHashMap، أو يمكن تحويله إليه، يُنشر بوصفه عامل تصفية وقت التشغيل ويحل محل
Set/BloomFilterالذي كانBuildRuntimeFilterStepسيثبّته بخلاف ذلك. يتحكم في ذلك الإعداد الجديدenable_join_runtime_filter_shared_fixed_hash_table(القيمة الافتراضيةtrue). #105640 (wudidapaopao). - أصبح مسموحًا الآن بإعادة ترتيب DP JOIN مع النسخ المتماثلة المتوازية. #105889 (nickitat).
- تحسين خطة الاستعلام عند استخدام JOIN لعوامل تصفية وقت التشغيل (الإعداد
enable_join_runtime_filtersمفعّل افتراضيًا): أصبح نموذج تكلفة إعادة ترتيب join يتجاوزWindowTransform(وخطوات الخطة الأخرى التي تحافظ على الصفوف) في الشجرة الفرعية اليمنى، ويستخدم عدد الصفوف الأساسي وNDV لكل عمود بدلًا من افتراض عدم وجود إحصاءات. #107229 (UnamedRus).
تحسين الاستعلامات
- تحسين أداء تحليل فهرس النصوص في عمليات البحث متعددة الرموز عبر تحسين التعامل مع الرموز النادرة. #98226 (CurtizJ).
- تحسين أداء الدوال
encryptوdecryptوhalfMD5عبر تجنب عمليات البحث الضمنية عن موفّر OpenSSL لكل صف في OpenSSL 3.x. #99105 (thevar1able). - دمج كتل المصدر قبل
projection.calculate()أثناءMATERIALIZE PROJECTIONلتقليل عدد أجزاء الإسقاط المؤقتة والعبء الإضافي لعملية الدمج. تسريع بمقدار 3.4 مرات تقريبًا على جدول يضم 50 مليون صف. #100047 (amosbird). - يستفيد المستخدمون الآن من تحسّن أداء عوامل تصفية وقت التشغيل التقريبية وفهارس مرشح Bloom. #100201 (cv4g).
- تسريع استعلامات
ORDER BY ... LIMIT BYعبر تشغيلLIMIT BYضمن كل تدفق فرز متوازٍ أثناءSortعندما تكون أعمدةLIMIT BYبادئة لأعمدةORDER BY. يقلل ذلك عدد الصفوف التي تمر عبر دمج الفرز النهائي وأي خطوات لاحقة في خط المعالجة. يتحكم في هذا التحسين الإعداد الجديدquery_plan_push_limit_by_into_sort(مفعّل افتراضيًا). #104000 (nihalzp). - تقليل العبء الإضافي لكل استعلام في استعلامات SELECT البسيطة (التحليل النحوي والتحليل والتخطيط). على سبيل المثال، أصبح
SELECT count() FROM hitsمن اتصال واحد أسرع بنحو 50%. #104513 (Algunenano). - تحسين أداء
bitmapContainsلحالاتgroupBitmapغيرUInt64عبر تجنب استدعاءاتrb_maxالمتكررة أثناء التحقق من النطاق. #105960 (niyue). - تحسين أداء الإدراج لأعمدة
LowCardinalityذات فهارسbloom_filter. #106410 (EmeraldShift). - تحسين أداء الدالتين
L2DistanceTransposedوcosineDistanceTransposedلنوع البياناتQBit. #106701 (rienath). - تحسين أداء تحليل الاستعلامات على الجداول ذات الأعمدة الكثيرة: تجنب حساب تجزئات عقد الأعمدة (التي تتضمن تعبير جدول المصدر بالكامل) عند عدم الحاجة إليها. أصبح تحليل الاستعلامات الفرعية المتداخلة
SELECT *على جدول يضم نحو 1200 عمود أسرع بنحو 50 مرة. #106957 (novikd). - تحسين أداء الدوال
encryptوdecryptوtryDecryptوaes_encrypt_mysqlوaes_decrypt_mysqlبما يصل إلى عشرة أضعاف، مع استعادة الأداء المفقود عند الترحيل من BoringSSL إلى OpenSSL 3.x (24.4). #107339 (thevar1able). - تحسين تنفيذ
arrayElementعلىArray(LowCardinality(String))ودوال LIKE للخرائط ذات المفاتيح أو القيم من نوعLowCardinality(String)عبر تجنب إنشاء السلاسل فعليًا دون حاجة. #107450 (EmeraldShift). - تقليل استخدام CPU وتحسين أداء تقييم فهرس التخطي للاستعلامات التي تصفي أعمدة
DateTime64. #107707 (shankar-iyer). - تحسين أداء عمليات البحث عن السلاسل الفرعية غير الحساسة لحالة الأحرف، بما في ذلك
positionCaseInsensitiveUTF8وILIKEوmultiSearchAnyCaseInsensitiveUTF8. #107882 (Algunenano). - إصلاح تراجع في معدل النقل بنحو 16% في برنامج الترميز
FPCللأعداد ذات الفاصلة العائمة على ARM، والذي أُضيف عند بدء جداول التنبؤ الخاصة به باستخدامVectorWithMemoryTracking. #108182 (groeneai). - إصلاح تراجع في الأداء كان فيه تنفيذ
DELETEخفيف واحد يعطّل ذاكرة التخزين المؤقت لشروط الاستعلام للجدول بأكمله. وكانت الاستعلامات الانتقائية المتكررة على جدول سبق أن تأثر بحذف خفيف تتوقف عن تقليم الحبيبات وتلجأ إلى قراءة كل علامة. #112947 (fm4v). - تقييد تكلفة تقدير انتقائية
col IN (...)من إحصاءات الأعمدة، إذ كان ذلك قد يضيف مئات المللي ثانية إلى تخطيط استعلام واحد. لم يعد المقدِّر يشغّل الاستعلام الفرعي فيcol IN (subquery)لملء مجموعة لا يحتاج منها إلا إلى قيمة انتقائية واحدة، بل يتجاوز المجموعة غير المنشأة. وبالنسبة إلى مجموعة أكبر من الإعداد الجديدstatistics_max_set_size_for_exact_selectivity_estimation(القيمة الافتراضية 10000)، تُستمد الانتقائية الآن من حجم المجموعة ونطاقها المحدود. #114389 (nickitat).
أداء الدوال والتجميع
- تحسين تحليل فهرس المفتاح الأساسي للمفاتيح الأساسية الطويلة وعالية الكاردينالية. بالنسبة إلى المفتاح الأساسي الطويل، يعتمد زمن تحليل الفهرس الآن أساسًا على مدى تعقيد عامل تصفية الاستعلام (أي أعمدة المفتاح التي يستخدمها فعليًا)، لا على طول المفتاح الأساسي؛ لذا فإن توسيع مفتاح الفرز يضيف عبئًا ضئيلًا على تحليل الفهرس للاستعلامات التي تُجري التصفية على عدد قليل فقط من أعمدته. أما بالنسبة إلى مفتاح أساسي عالي الكاردينالية، حيث يحتفظ ClickHouse في الذاكرة ببادئة انتقائية فقط من أعمدة المفتاح ولا يحمّل الأعمدة اللاحقة، فإن تحليل الفهرس يعمل الآن على هذه البادئة الموجودة في الذاكرة فقط بدلًا من المفتاح بأكمله. هذا التحسين مفعّل افتراضيًا ويمكن إيقافه باستخدام الإعداد الجديد
use_lightweight_primary_key_index_analysis. #91836 (nihalzp). - تقليل ذروة استخدام الذاكرة عند دمج نتائج التجميع الجزئية ثنائية المستوى ذات حالات التجميع الكبيرة (مثل
groupArray)، عبر تحرير حالات المصدر لكل حاوية تدريجيًا أثناء الدمج بدلًا من إبقائها جميعًا في الذاكرة حتى اكتمال الدمج. #102330 (yurifedoseev). - تحسين جديد لـ
GROUP BYللمفاتيح عالية الكاردينالية والموزعة بالتساوي، يوزّع الصفوف بين الخيوط باستخدام تجزئة مفتاح التجميع، بحيث يجمع كل خيط مجموعة فرعية منفصلة من المفاتيح دون مرحلة دمج. عيّنenable_sharding_aggregator = 1لتفعيله. #104233 (nihalzp). - تسريع استعلامات
LIMIT BYعلى جداولMergeTreeالمقسمة إلى أقسام، بتشغيلLIMIT BYبالتوازي داخل تدفق كل قسم، بدلًا من دمج جميع التدفقات في تدفق واحد قبل تطبيق الحد. ينطبق ذلك عندما يكون تعبير القسم دالة حتمية لأعمدةLIMIT BY، بحيث لا يمكن لأي مجموعةLIMIT BYأن تمتد عبر قسمين. يتحكم فيه الإعداد الجديدallow_limit_by_partitions_independently(مفعّل افتراضيًا). #105126 (nihalzp). - تسريع استعلامات
SELECT ... LIMIT N BY <cols>عندما تكون<cols>بادئة لمفتاح فرز الجدول، أو تصبح كذلك بعد أن يثبّتWHERE col = constالأعمدة البادئة. عند تفعيل ذلك، يقرأMergeTreeالبيانات بترتيب المفتاح الأساسي، ويطبّقLIMIT BYأولًا التصفية في وضع التدفق باستخدام ذاكرة O(1) لكل تدفق مُرتب، مما يستبعد معظم البيانات، ثم يطبّقLIMIT BYالعادي على البيانات المتبقية للحصول على النتيجة النهائية. يتحكم فيه الإعداد الجديدoptimize_limit_by_in_order(مفعّل افتراضيًا). #105135 (nihalzp). - تسريع استعلامات
LIMIT BYعبر إزالة تعبيرات المفاتيح الزائدة: يُحذف المفتاح الذي يكون دالة حتمية للمفاتيح الأخرى (مثلًا، يصبحLIMIT 5 BY x, f(x)هوLIMIT 5 BY x)، وتُستبدل الدالة الحقنية المطبقة على مفتاح بوسيطها (مثلًا، يصبحLIMIT 5 BY toString(x)هوLIMIT 5 BY x). يؤدي ذلك إلى تقييم عدد أقل من التعبيرات الأقل تكلفة لكل صف. يتحكم فيه الإعدادان الجديدانoptimize_limit_by_function_keysوoptimize_injective_functions_in_limit_by، وكلاهما مفعّل افتراضيًا. #106818 (nihalzp). - تسريع تحليل الاستعلامات التي تحتوي على عدد كبير من استدعاءات الدوال أو استدعاءات دوال متداخلة بعمق، عبر إزالة تجزئة زائدة لشجرة الاستعلام من ذاكرة التخزين المؤقت لحل الدوال. #107516 (novikd).
- موازاة معالجة نتائج CTE تعاودي: لم تعد عملية
GROUP BYأو أي عملية أخرى على نتيجة كبيرة لـWITH RECURSIVEمقتصرة على خيط واحد. #107694 (alexey-milovidov).
أداء التخزين والإدخال/الإخراج
- تتشارك عملاء S3 الذين يستخدمون نقطة النهاية والحاوية نفسيهما ذاكرة تخزين مؤقت واحدة، مما يجنب تكرار اكتشاف المنطقة. #96802 (zvonand).
- تحسين أداء النسخ في تخزين الكائنات عبر نسخ الكائنات الثنائية بالتوازي. #105089 (asya-ch).
- تجنب قراءة محتويات الملفات عند استخدام تنسيق الإدخال One مع دوال الجداول الشبيهة بالملفات، مثل file وs3. #105157 (niyue).
- يمكن للمفتاح الأساسي وفهارس التخطي في
MergeTreeالآن استبعاد الحبيبات عند استخدام عوامل تصفية تلتف فيهاifNullأوcoalesceحول شرط، مثلifNull(key = 0, 0)أوcoalesce(key = 0, 0). كانت هذه المسندات — التي غالبًا ما تنشئها مولدات الاستعلامات لتحويل مقارنة قد تكون بـNULLإلى قيمة منطقية محددة — غير قابلة للتحليل سابقًا من جانب الفهارس، لذا لم يكن بالإمكان تخطي الحبيبات. يوسّع هذا إعدادallow_key_condition_coalesce_rewriteالحالي (المفعّل افتراضيًا). #106272 (andyzzhao). - تحسين أداء فك الترميز لأعمدة Parquet من نوعي
FLOATوDOUBLEالمشفرة بـBYTE_STREAM_SPLIT. #106376 (Algunenano). - إصلاح حالات التوقف الطويلة عند تسجيل الدخول وبدء الاستعلامات في تخزين الوصول المكرّر عند تغيير عدد كبير من كيانات الوصول (سياسات الصفوف والأدوار والحصص وملفات تعريف الإعدادات) دفعة واحدة. تعيد الآن ذاكرة التخزين المؤقت لكل كيان احتسابها مرة واحدة لكل دفعة إشعارات بدلًا من مرة لكل كيان متغير، مما يزيل العمل التربيعي الذي كان قد يحتجز قفل الوصول لدقائق. #107672 (azat).
- إصلاح تراجع في الأداء أدى إلى توقف الجلب المسبق عند قراءة عدد كبير من الملفات الصغيرة من تخزين الكائنات عبر
s3ودوال الجداول الأخرى، والرجوع إلى القراءات المتزامنة، مما أبطأ بشكل ملحوظ القراءات أحادية الخيط أو منخفضة التزامن لعدد كبير من الملفات الصغيرة. #108872 (fm4v). - تفعيل الجلب المسبق الأولي للكائنات الصغيرة عندما تمر قراءات تخزين الكائنات عبر ذاكرة التخزين المؤقت لنظام الملفات (
filesystem_cache_name). سابقًا، ظلت قراءات عدد كبير من الملفات الصغيرة، مثل إدخالS3Queue، متزامنة ومقيدة بزمن الاستجابة عند تفعيل ذاكرة التخزين المؤقت لنظام الملفات. #109478 (fm4v). - تحسين
PREWHEREللأعمدة الفرعية منMapعبر مراعاة حجمها على القرص. #110623 (Avogar). - يُطبّق الآن التحويل الكسول على الاستعلامات التي تتضمن
FINALوعامل تصفية وLIMITصغيرًا، حتى دونORDER BY(لـReplacingMergeTree). #110722 (KochetovNicolai). - تقليل وقت CPU اللازم لإزالة التكرار عند تفريغ عمليات الإدراج غير المتزامن التي تمتد عبر العديد من الأقسام. #111150 (valerypetrov).
- إصلاح تراجع في أداء CPU للاستعلامات التي تنفذ عددًا كبيرًا من القراءات الصغيرة المستقلة من جزء
MergeTreeنفسه عندما يحتوي الجدول على أعمدةLowCardinality. كان الفحص الذي يحدد ما إذا كان الجزء يحتوي على قاموس مشترك واحد يمسح كل علامة في الجزء بأكمله لكل مهمة قراءة؛ أما الآن فيعثر على كل سلسلة من العلامات المتساوية باستخدام البحث الثنائي. كانت الاستعلامات بهذا النمط على الجداول ذاتindex_granularityصغير أبطأ بما يصل إلى عدة مرات منذ الإصدار 26.6. #116134 (groeneai).
تحسين استخدام الذاكرة
- خُفِّضت الذاكرة المستخدمة في البيانات الوصفية للنوع
Enumبما يصل إلى 10 مرات في الجداول التي تحتوي على أعمدةEnum. تظل عمليات البحث من القيمة إلى الاسم مماثلة في الأداء أو أسرع، بينما قد تكون عمليات البحث من الاسم إلى القيمة أثناء التحليل وإلغاء التسلسل أبطأ. #95668 (qoega). - خُفِّض ذروة استخدام الذاكرة في
BACKUPعبر عدم نسخ القائمة الداخلية لمعلومات الملفات عند كتابة إدخالات النسخ الاحتياطي، وهو أمر مهم للنسخ الاحتياطية التي تحتوي على ملايين الملفات. #111162 (jkartseva).
تحسينات
الاستعلامات وSQL
- تحديد الأعمدة حسب موضعها (بدلاً من أسمائها) عند إزالة الأعمدة غير المستخدمة من خطة الاستعلام. يتيح ذلك إزالة الأعمدة غير المستخدمة عند وجود أسماء أعمدة مكررة. #100586 (antaljanosbenjamin).
- إضافة
SESSION_USERكاسم مستعار لـcurrentUser()غير حساس لحالة الأحرف، لتحقيق التوافق مع PostgreSQL / معيار SQL. #106081 (takumihara). - تقليل زمن استجابة الإلغاء للاستعلامات التي تعمل عبر بروتوكول MySQL: أصبح KILL QUERY يقاطع تسلسل المخرجات داخل جزء واحد بدلاً من انتظار إرسال الجزء بالكامل إلى العميل. #106535 (rvasin).
- إصلاح الخطأ
ILLEGAL_TYPE_OF_ARGUMENTفي الاستعلامات الموزعة التي تحتوي علىserialize_query_plan = 1وتتضمن لامبدا ذات وسيطة ثابتة (مثلarrayMap(t -> t.2, ...)). تُحفظ الآن الأعمدة الثابتة لعُقدINPUTفيActionsDAGعند تسلسل خطة الاستعلام. #107124 (alexey-milovidov). - تقليل زمن استجابة الإلغاء للاستعلامات التي تعمل عبر بروتوكول MySQL: أصبح KILL QUERY يقاطع تسلسل المخرجات داخل جزء واحد بدلاً من انتظار إرسال الجزء بالكامل إلى العميل. #107228 (rvasin).
الدوال
- أصبح
EXPLAIN SYNTAXينسّق عوامل التشغيل باستمرار على هيئة استدعاءات دوال في مخرجات الشرح (مثلplus(1, 2)بدلًا من1 + 2). #94681 (1abdelhalim). - أصبح النمط بأسلوب PostgreSQL
expr OP SOME(array)/expr OP ALL(array)(عندما لا يكون الطرف الأيمن استعلامًا فرعيًا) مدعومًا، ويُعاد تحويله إلىhas/NOT hasمع=/<>، أو إلى دوال لامبداarrayExists/arrayAllمع عوامل المقارنة الأخرى. لا تُقبلANYفي صيغة المصفوفة لأنanyهي أيضًا دالة تجميعية؛ استخدمSOMEبدلًا منها. وتظل صيغة الاستعلام الفرعي لـANY/SOME/ALLتُحوَّل إلىIN/NOT IN. #105129 (alexey-milovidov). - أُضيف دعم الدوال
multiSearchAnyوmultiSearchAnyUTF8وmultiMatchAnyفي فهارس النص. كما تحسّن تحليل فهرس النص للدالةmatch: إذ بات بإمكان الأنماط ذات المجموعات البديلة تخطي المزيد من الحبيبات. #106279 (CurtizJ). - تفرض الدالة
h3PolygonToCellsالآن الحد الأقصى لحجم المصفوفة على جميع المضلعات ضمنMultiPolygon، وتتحقق من رموز الإرجاع الخاصة بمكتبة H3، وترفض وسائطMultiLineStringبدلًا من إرجاع نتيجة فارغة بصمت. #106399 (Algunenano). - يتحقق إلغاء تسلسل حالات الدوال التجميعية
contingencyوcramersVوcramersVBiasCorrectedوtheilsUالآن من أن الأعداد المخزنة تُشكّل جدول توافق متسقًا، ويُطلق استثناءCORRUPTED_DATAخلاف ذلك. #107185 (nihalzp). - تحسين تقدير الكاردينالية في محسّن خطة الاستعلام: يرث العمود الناتج من دالة حتمية ذات وسيطة واحدة (مثل
toYear(date)) الآن عدد القيم المميزة لوسيطتها بوصفه حدًا أعلى، بدلًا من بقائه دون إحصاءات، مما يؤدي إلى إعادة ترتيب أدق لعمليات الربط. #107757 (davenger).
محركات الجداول والتخزين
- إصلاح مستهلكي محرك جداول Kafka الذين ظلوا يستخدمون فترة استطلاع قصيرة بعد إسناد القسم، بحيث يعودون إلى قيمة
kafka_poll_timeout_msالمضبوطة ويتجنبون عمليات الاستطلاع الفارغة المفرطة، وأجزاء البيانات المُدرجة الأصغر، وأعباء الدمج الإضافية بعد إعادة التوازن. #100431 (sugaf1204). - يمكن لمحركات جداول بحيرة البيانات، بما في ذلك
IcebergوDeltaLake، الآن استخدام أقراص S3 وAzure المغلفة بذاكرة تخزين مؤقت، مما يتيح للقراءات المتكررة الاستفادة من ذاكرة التخزين المؤقت لنظام الملفات. #102017 (RinChanNOWWW). - السماح بدمج عوامل التصفية المُضافة بعد التحديد الأولي لـ PREWHERE (دفع المسندات، أو عوامل التصفية وقت التشغيل، أو PREWHERE صريح مع WHERE يحدده المخطط) في PREWHERE القائم خلال تمريرة ثانية للمحسّن، بدلًا من بقائها كخطوة Filter منفصلة فوق قراءة MergeTree. #105445 (yariks5s).
- أُضيف الإعداد
wait_for_part_commit_in_dependent_materialized_views. عند تمكينه، يمكن لعرض مادي متسلسل ينضم مجددًا إلى مصدره رؤية الصف الذي يجري إدراجه حاليًا. #105943 (ahmadov). - دعم
EXTRACT(TIMEZONE_HOUR FROM dt)وEXTRACT(TIMEZONE_MINUTE FROM dt)المتوافقين مع PostgreSQL لاستخراج جزئي الساعة والدقيقة من إزاحة المنطقة الزمنية، ودعمEXTRACT(<unit> FROM INTERVAL n <unit>)/date_part('<unit>', INTERVAL n <unit>)لاستخراج القيمة من فترة زمنية. #106227 (vinayakj592). - تنفيذ
SYSTEM RESTART DISK <name>: يعيد الآن تحميل البيانات الوصفية للقرص في الذاكرة ويفحص مجددًا أجزاء بيانات جداول النسخ المتماثلة للقراءة فقط الموجودة عليه. يتيح ذلك لنسخة متماثلة للقراءة فقط من جدول على تخزينplain_rewritableمشترك رصد البيانات التي كتبها خادم آخر عند الطلب، دون انتظارrefresh_parts_intervalأو إعادة تشغيل الخادم. #106645 (jrdi). - تخطي تحميل ملفات العلامات غير الضروري للبيانات المشتركة المتقدمة في JSON. #107051 (Avogar).
- أُضيف الإعداد
materialized_postgresql_use_extended_date_and_time_typesالذي يُضبط عند الإنشاء لمحرك قاعدة البياناتMaterializedPostgreSQL. افتراضيًا (مُمكّن)، تُستنتج أعمدة PostgreSQL من نوعdate/timestampكأنواعDate32/DateTime64؛ ويؤدي ضبطه على0عند تنفيذCREATE DATABASEإلى استنتاج أنواعDate/DateTimeالأضيق. الإعداد غير منطبق على محرك جدولMaterializedPostgreSQL. #107428 (alexey-milovidov). - يمكن لـ MergeTree الآن قراءة تدفق مضغوط تستخدم كتله برامج ترميز مختلفة. هذا هو المتطلب المسبق من جهة القراءة لميزة الاختيار التكيفي لبرنامج الترميز. #108592 (rienath).
- استخدام فهرس التخطي
bloom_filterلمسنداتINعلى عمود مفهرس مباشرةً عندما يكونtransform_null_in = 1ولا تحتوي مجموعةINعلى قيمةNULL. سابقًا، كان يُتخطى الفهرس في مثل هذه الاستعلامات، مما يفرض إجراء فحص كامل. #111329 (groeneai).
S3 والتخزين الكائني
- تسجيل الامتيازات في
system.query_log.used_privilegesلجميع عمليات التحقق من الوصول التي تم منحها، بما في ذلك تلك التي تمر عبر مسارisGrantedغير المُطلق للاستثناءات (checkAccessWithFilter). سابقًا، لم تكن تُسجَّل سوى الامتيازات التي يُتحقق منها عبر نقاط الدخول المُطلقة للاستثناءات (checkAccess/checkGrantOption)، مما كان يجعلREAD ON FILE/READ ON S3/READ ON AZURE/READ ON URLغير ظاهرة في سجل التدقيق لاستعلاماتDESCRIBEوCREATE TABLE ASوالاستعلامات المشابهة التي تستخدم دوال الجداولfile/s3/azure/url. لم يتغير فرض التحكم بالوصول. #104693 (alexbakharew). - إتمام طلب التحميل متعدد الأجزاء النهائي إلى S3 بشكل غير متزامن عبر متعقب المهام، بحيث يمكن أن يتداخل مع رفع الجزء الأخير بدلًا من تنفيذه تسلسليًا أثناء الإنهاء. #105487 (asya-ch).
- زيادة القيمة الافتراضية للإعداد
persistent_processing_node_ttl_secondsلـS3QueueوAzureQueueمن ساعة واحدة إلى ست ساعات، لمنع المعالجة طويلة الأمد أو المعاد تشغيلها من فقدان قفل الحاوية مبكرًا جدًا. #106838 (kssenii). - دعم القيم
REDUCED_REDUNDANCYوSTANDARD_IAوONEZONE_IAوGLACIER_IRوEXPRESS_ONEZONE، بالإضافة إلىSTANDARDوINTELLIGENT_TIERING، للإعدادs3_storage_class_name. #107251 (adityaksolves). - يُحدَّد مسار العينة لتقسيم Hive لجداول التخزين الكائني (مثل
S3) عند الاستخدام الأول للجدول بدلًا منCREATE/ATTACH، لذا لم تعد نقطة نهاية يتعذر الوصول إليها تمنع إنشاء الجدول وبدء تشغيل الخادم. #111842 (evillique).
الإعدادات والضبط
- جعل استراتيجية تقسيم Hive الافتراضية ضمن إعداد التوافق
file_like_engine_default_partition_strategy. #86746 (kssenii). - أُضيفت أربعة إعدادات جديدة لجداول MergeTree للتحكم في المعلمات الافتراضية للفهارس النصية:
text_index_dictionary_block_size، وtext_index_dictionary_block_frontcoding_compression، وtext_index_posting_list_block_size، وtext_index_posting_list_codec. تتيح هذه الإعدادات ضبط سلوك الفهرس النصي على مستوى الجدول دون تحديد المعلمات في كل تعريف فهرس. وتظل الوسيطات الصريحة لكل فهرس ذات أولوية. #100626 (CurtizJ). - أُضيف الإعداد
output_format_pretty_use_nbsp_for_paddingلعرض المسافات الحاشية في تخطيط الجداول ضمن تنسيقاتPrettyذات النمط الجدولي على هيئةU+00A0NO-BREAK SPACE عندما تكون قيمةoutput_format_pretty_grid_charsetهيUTF-8. يساعد ذلك مخرجاتPrettyالمنسوخة على الحفاظ على محاذاة الجداول في الأدوات التي تختزل المسافات العادية. يكون الإعداد معطلاً افتراضياً، وتحتفظ المخرجات بترميز المحارفASCIIبالمسافات العادية. #103559 (ashrithb). - دعم التوافق مع محلل الاستعلامات القديم عبر الإعداد
analyzer_compatibility_allow_non_aggregate_in_having. عند تفعيله، تُنقل الشروط غير التجميعية من HAVING إلى WHERE. #104232 (novikd). - لم تعد عبارة
OPTIMIZE TABLE ... ON CLUSTERوعمليات DDL الأخرى تتعطل عندما يكون لدى الجدول الهدفtable_readonly = 1. يُصدر الإعداد الآن رمز خطأ مخصصاً جديداً هوTABLE_IS_PERMANENTLY_READ_ONLY، ويتعامل معهDDLWorkerعلى أنه غير قابل لإعادة المحاولة، بخلاف الخطأ المؤقتTABLE_IS_READ_ONLYالذي ينشأ أثناء انقطاع الاتصال المؤقت بـ ZooKeeper فيReplicatedMergeTree. كما أصبح إعدادtable_readonlyمرفوضاً صراحةً لـReplicatedMergeTree، سواء عند الإنشاء أو عبرALTER MODIFY SETTING. #105109 (alexey-milovidov). - أصبح ترتيب الفرز التنازلي في مفاتيح فرز
MergeTree(مثلORDER BY (time DESC, key)) مدعوماً دائماً، ولم يعد يتطلب الإعداد التجريبيallow_experimental_reverse_keyالذي أصبح متقادماً. #106440 (nikitamikhaylov). - دعم
keyed_by_normalized_query_hashللحصص المعرّفة في إعدادات الخادم الثابتة (users.xml)، بما يتوافق مع صياغة DDL الحاليةCREATE QUOTA ... KEYED BY normalized_query_hash. #107654 (alexey-milovidov). - لم يعد إعداد التوافق يطبق الإعدادات المتقادمة، لذا لا يعلّمها كمعدّلة ولا يصدر تحذيرات بشأنها. #107737 (UberDever).
- أُضيف الإعداد
analyzer_compatibility_multiple_joins_qualify_column_names(وقيمته الافتراضيةfalse). عند تفعيله، وإذا احتوى بندFROMفي استعلام على عمليتيJOINأو أكثر، تحاكي أسماء أعمدة النتائج التي ينتجها محلل الاستعلامات إعادة كتابة عمليات الربط المتعددة في المحلل القديم: تُسمى الأعمدة الموسعة من*بـ<alias-or-table>.<column>، ويحتفظ مرجع العمود غير المستعار في قائمةSELECTباسمه تماماً كما كُتب. يتيح ذلك للاستعلامات الخارجية التي تشير إلى مثل هذه الأسماء المؤهلة، مثلSELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...)، أن تعمل كما كانت مع المحلل القديم. كما أُصلح فقدان محلل الاستعلامات لأسماء أعمدة النتائج المؤهلة للأعمدة الموسعة من*عند استخدامgroup_by_use_nullsمعROLLUPأوCUBEأوGROUPING SETS، إذ كان ذلك ينتج أسماء أعمدة نتائج مكررة ويعطل الإشارات الخارجية إلى تلك الأعمدة. #110746 (novikd). - أُضيف الإعداد
analyzer_compatibility_apply_final_to_all_joined_tablesلاستعادة السلوك القديم، حيث كان مُعدِّلFINALفي الجدول الواقع أقصى يسار عبارة JOIN يُطبَّق أيضًا على الجداول الأخرى المرتبطة. يُسجَّل هذا الإعداد في سجل تغييرات الإعدادات، لذا فإن استخدامcompatibilityمع إصدارات أقدم من 26.6 يستعيد الدلالات القديمة تلقائيًا. #111589 (fm4v). - أُضيف إعداد MergeTree جديد باسم
text_index_versionللتحكم في إصدار التنسيق المخزَّن على القرص لفهارس النصوص:v0_initialأوv1_with_codecأوv2_with_positions. أثناء الترقية التدريجية أو قبل الرجوع إلى إصدار أقدم، اضبطه على إصدار أقدم لضمان استمرار الخوادم الأحدث في كتابة أجزاء فهرس النصوص بتنسيق يمكن للخوادم الأقدم قراءته؛ ويُعدّله إعداد التوافق تلقائيًا. #111803 (CurtizJ).
جداول النظام والمراقبة
- تعبئة
used_storagesفيsystem.query_logباسم محرك التخزين عند الاستعلام عن الجداول عبر DataLakeCatalog. #100706 (melvynator). - إضافة الأعمدة
current_projectionوcurrent_projection_progressوprojections_completedوprojections_remainingإلىsystem.mergesلعرض تقدّم دمج الإسقاطات. #102611 (amosbird). - باتت محركات الجداول تتضمن وثائق مضمنة يمكن الاطلاع عليها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.table_engines. #106177 (alexey-milovidov). - باتت محركات قواعد البيانات تتضمن وثائق مضمنة يمكن الاطلاع عليها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.database_engines. #106178 (alexey-milovidov). - باتت أنواع البيانات تتضمن وثائق مضمنة يمكن الاطلاع عليها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.data_type_families. #106180 (alexey-milovidov). - باتت تنسيقات الإدخال/الإخراج تتضمن وثائق مضمنة يمكن الاطلاع عليها عبر الأعمدة الجديدة
descriptionوexamplesوintroduced_inوrelatedفي جدولsystem.formats. #106181 (alexey-milovidov). - باتت موفّقات الدوال التجميعية تتضمن وثائق مضمنة يمكن الاطلاع عليها عبر الأعمدة الجديدة
descriptionوsyntaxوexamplesوintroduced_inوrelatedفي جدولsystem.aggregate_function_combinators. #106185 (alexey-milovidov). - أُضيف جدول جديد
system.data_skipping_index_typesيسرد أنواع فهارس تخطي البيانات المتاحة، إلى جانب الوثائق المضمنة (descriptionوsyntaxوexamplesوintroduced_inوrelated). #106186 (alexey-milovidov). - أُضيف جدول جديد
system.disk_typesيسرد أنواع الأقراص المتاحة، إلى جانب الوثائق المضمنة (descriptionوsyntaxوexamplesوintroduced_inوrelated). #106187 (alexey-milovidov). - أُضيفت المقاييس غير المتزامنة
TotalUncompressedBytesOfMergeTreeTablesوTotalUncompressedBytesOfMergeTreeTablesSystem، التي تُبلّغ عن إجمالي الحجم غير المضغوط للبيانات المخزنة في جداول عائلة MergeTree. #106364 (alexey-milovidov). - إضافة حدث الملف التعريفي
GlobalMemoryLimitExceededليتمكن المشغّلون من مراقبة حالات بلوغ حد الذاكرة على مستوى الخادم. #106466 (sacheendra). - أُضيفت المقاييس غير المتزامنة
ExecutableUserDefinedFunctionMemoryResidentBytesوExecutableUserDefinedFunctionProcesses، التي تُبلّغ عن الذاكرة المقيمة (VmRSS) وعدد العمليات النشطة للدوال المعرفة من قبل المستخدمexecutableوexecutable_pool، بما في ذلك العمليات التابعة وعمّال التجمع الخاملون. #107300 (HanziJiang). - أُضيف
show_remote_databases_in_system_tables، وهو مفعّل افتراضيًا، للسماح للمستخدمين بإخفاء قواعد بياناتMySQLوPostgreSQLمنsystem.tablesوsystem.columnsوsystem.completions. ويظلshow_data_lake_catalogs_in_system_tablesمقتصرًا على التحكم في ظهورDataLakeCatalogفقط. #104416 (pamarcos). #109082 (pamarcos).
ClickHouse Keeper
- تغييرات متنوعة على Keeper تجعل أداءه أسرع إجمالًا بنحو الضعف (تحسين التجميع على دفعات، وإرسال الرسائل إلى القائد عبر خط أنابيب، وإلحاق السجلات عبر خط أنابيب). #101757 (al13n321).
- إضافة المزيد من أحداث ملف تعريف Keeper (من جهة الخادم ومن جهة العميل) للمراقبات. #105336 (scanhex12).
- إضافة جدول
system.keeper_snapshotsجديد خاص بـ Keeper يتضمن معلومات عن لقطات ClickHouse Keeper المحلية. #105571 (mstetsyuk). - إضافة جدول
system.keeper_changelogsجديد خاص بـ Keeper يتضمن معلومات عن ملفات سجل التغييرات المحلية لـ ClickHouse Keeper (سجل Raft). #105617 (mstetsyuk). - إضافة جدول
system.keeper_clusterخاص بـ Keeper. يحتوي على صف واحد لكل عضو في مجموعة Raft كما يراه Keeper الحالي. #105646 (mstetsyuk). - تقليل ذروة استخدام الذاكرة عند تطبيق اللقطات المستلمة في ClickHouse Keeper باستخدام
KeeperMemoryStorage. #105851 (antonio2368). - إضافة إعدادات
coordination_settingsفي Keeper للحد من قبول إدخالات السجل غير المثبتة فيNuRaftوخنق الفحص العكسي لعمليات إلحاق الإدخالات. #106108 (antonio2368).
إدارة الذاكرة
- أُصلحت رسائل أخطاء البنية التي قد تتضمن بايتات من ذاكرة مجاورة بعد أن يتراجع المُحلِّل إلى ما بعد نهاية تعليمة. #105086 (groeneai).
- خُفِّض استخدام الذاكرة عند فتح نسخة احتياطية (من أجل
RESTOREأو كأساس لنسخة احتياطية تزايدية باستخدامBACKUP). تُحلَّل الآن البيانات الوصفية.backupكتدفق بدلاً من تحميلها في شجرة مستند XML داخل الذاكرة، مما يتجنب تخصيص شجرة DOM بحجم عدة غيغابايتات للنسخ الاحتياطية الكبيرة، ولا سيما التزايدية. #109107 (jkartseva). - خُفِّض ذروة استخدام الذاكرة عند إنهاء
BACKUP. لم تعد كتابة البيانات الوصفية للنسخة الاحتياطية تنسخ معلومات جميع الملفات إلى متجه مؤقت (وهو ما كان يستهلك مؤقتًا عدة غيغابايتات للنسخ الاحتياطية التي تضم ملايين الملفات)؛ بل تُكرَّر المعلومات الآن في موضعها. #109861 (jkartseva).
تنسيقات البيانات
- يمكن للمستخدمين الآن إدراج حقول Avro Fixed لمتغيرات الأعداد الصحيحة ذات 8 بت/16 بت/32 بت/64 بت. #98139 (patrickpichler).
- يعيد تنسيق
AvroConfluentالآن محاولة الاتصال بعميل HTTP لـ Confluent Schema Registry عند حدوث حالات فشل عابرة (انتهاء مهلة النقل، رفض الاتصال، أخطاء DNS، وHTTP5xx/408/429) باستخدام تراجع أُسّي، بدلاً من إلغاء عملية INSERT عند أول خلل في الشبكة. تتحكم الإعدادات الجديدةformat_avro_schema_registry_max_retries(القيمة الافتراضية5) وformat_avro_schema_registry_retry_initial_backoff_ms(القيمة الافتراضية100) في هذه السياسة. وتظل أخطاء التحقق من المخطط (HTTP409وAvro JSON غير السليم) قاتلة. #106661 (groeneai). - حُفظت رموز الخطأ الأصلية لـ ClickHouse للأخطاء المُعادة عبر Apache Arrow. #107267 (azat).
المجموعات المسماة والقواميس
- أُضيف إعداد
enable_compressionإلى دالة الجدولmysqlومحرك الجدولMySQLومحرك قاعدة البياناتMySQLومصدر القاموسSOURCE(MYSQL)والمجموعات المسماة. عند تفعيله، يتفاوض ClickHouse على ضغط على مستوى بروتوكول MySQL لجميع البيانات المنقولة عبر الاتصال. #103229 (bernardlim). - أُضيف جدول جديد
system.dictionary_layoutsيسرد مخططات القواميس المتاحة إلى جانب التوثيق المضمّن (description,syntax,examples,introduced_in,related). #106182 (alexey-milovidov). - أُضيف جدول جديد
system.dictionary_sourcesيسرد مصادر القواميس المتاحة إلى جانب التوثيق المضمّن (description,syntax,examples,introduced_in,related). #106184 (alexey-milovidov). - أصبح نوع التخزين الفعلي للمجموعات المسماة متاحًا الآن باسم
named_collections_storage.typeفيsystem.server_settingsوعبرgetServerSetting('named_collections_storage_type'). #111806 (pamarcos).
تحسينات أخرى
- تحسين تلميحات أسماء الجداول في رسائل الخطأ: لم تعد تقترح الاسم نفسه تمامًا، وأصبحت تتضمن اسم قاعدة البيانات في الاقتراح (مثلًا، “هل تقصد other_db.my_table؟”). #95116 (matt-metivier).
- تحسين رسالة الخطأ الخاصة بالمعرّفات غير المحلولة في الاستعلامات التي لا تتضمن عبارة FROM، بحيث تقترح إضافتها. #101769 (Onyx2406).
- إصلاح عدم استخدام
PREWHEREمع استعلام فرعيINعلى أعمدة المفتاح الأساسي لفهرس المفتاح الأساسي في استبعاد الحبيبات، مما كان يؤدي إلى مسح الجدول بالكامل بدلًا من قراءة الحبيبات ذات الصلة فقط. #102570 (nikitamikhaylov). - أصبحت العروض المادية القابلة للتحديث تواصل التحديث بعد استبدال جدولها الهدف باستخدام
EXCHANGE TABLESوحذف الجدول القديم. سابقًا، كان من الممكن أن تفشل عمليات التحديث بسبب استثناءUNKNOWN_TABLEلأنها احتفظت بـ UUID الخاص بالجدول القديم. #102724 (seva-potapov). - تفعيل
enable_join_transitive_predicatesافتراضيًا. #103724 (davenger). - أصبح العرض المادي القابل للتحديث يدعم الآن
REFRESH DEPENDS ONلتشغيل التحديثات عند تحديث عرض مادي قابل للتحديث آخر، بدلًا من الاعتماد على جدول زمني. (كانREFRESH EVERY ... DEPENDS ONموجودًا بالفعل، لكن لم يكن بالإمكان استخدامه بصورة موثوقة لحالة الاستخدام هذه.) راجع وثائق CREATE MATERIALIZED VIEW. #104440 (al13n321). - إضافة خيار
EXPLAIN PIPELINEلدمج سلاسل المعالجات المتكررة. #104662 (niyue). - إضافة
REGEXP_SUBSTRكاسم مستعار لـregexpExtractغير حساس لحالة الأحرف، للتوافق مع Oracle/MySQL/Snowflake. #105122 (alexey-milovidov). - إضافة
date_part('unit', expr)كصياغة مختصرة لـEXTRACT(unit FROM expr). جميع أنواع Interval القياسية والإضافات الخاصة بـ PostgreSQL (epoch,dow,doy,isodow,isoyear,century,decade,millennium) مدعومة. #105127 (alexey-milovidov). - أصبح
QueryConditionCacheيسجل الآن الحبيبات المستبعدة كلًّا على حدة، حتى ضمن دفعات القراءة التي تجتاز PREWHERE جزئيًا، مما يقلل عدد العلامات التي تعيد الاستعلامات اللاحقة ذات الشرط نفسه قراءتها. #105335 (hanfei1991). - إضافة دعم BFloat16 لدوال الشروط الرقمية. #105391 (mohhddhassan).
- دعم الإحصاءات الأساسية، وهي إحصاءات مدمجة لكل عمود تخزن القيم الرقمية الدنيا/العليا، ومتوسط طول السلاسل النصية، وأعداد NULL عند الاقتضاء. #106048 (hanfei1991).
- دعم المعدّل الختامي
NULL/NOT NULLفيALTER TABLE ... ADD/MODIFY COLUMN، بما يتوافق معCREATE TABLE. #106150 (takumihara). - يجمع مُحسِّن PREWHERE الآن المترابطات التي تشير إلى مجموعة الأعمدة نفسها قبل تقدير الانتقائية، بحيث تُقيَّم شروط مثل
a > 2500 AND a < 2502معًا كنطاق موحّد (انتقائية تقارب 0.02%) بدلًا من تقييمها كمسندين مستقلين (انتقائية تقارب 50% لكل منهما). يوفّر ذلك ترتيبًا أدق لشروط PREWHERE عند توفر إحصاءات الأعمدة. #106337 (hanfei1991). - لا تطبع المقدمة “Stack trace (when copying this message, always include the lines below):” في رسائل الاستثناءات إذا كان تتبّع المكدس فارغًا بالفعل. #106524 (alexey-milovidov).
- تم إصلاح
CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM)على الأقراص المشفّرة، إذ كان ينسخ البيانات بدلًا من إنشاء روابط صلبة لها. #106731 (nikitamikhaylov). - تم إصلاح قواعد بيانات
DataLakeCatalogذاتcatalog_type = 'onelake'لتقرأ بيانات الجداول باستخدام نقطة نهاية OneLake Blob (.blob.fabric.microsoft.com) افتراضيًا. اضبطonelake_use_blob_endpoint = falseللإبقاء على سلوك نقطة نهاية DFS السابقة (.dfs.fabric.microsoft.com). #106843 (scanhex12). - خُفِّض حمل CPU الناتج عن التسجيل غير المتزامن عند ارتفاع معدلات السجل، وذلك بإشعار مستهلك السجل فقط عند انتقال قائمة الانتظار من فارغة إلى غير فارغة، بدلًا من إشعاره عند كل رسالة. #107352 (nikitamikhaylov).
- تم إصلاح قراءة طول
auth_responseفي مصافحة MySQL، إذ كانت بايتات الطول ذات القيمة>= 128تُفسَّر كقيمة بحجم عدة غيغابايت لأنها قُرئت باعتبارهاcharموقّعًا. #107384 (uwezkhan). - يربط
MaterializedPostgreSQLالآن أعمدة PostgreSQL من النوعnumeric(p, 0)التي تتجاوز دقتها 76 (مثلnumeric(78, 0)المستخدم للأعداد الصحيحة ذات 256 بت) بالنوعInt256في ClickHouse بدلًا من الفشل برسالة “Precision too big”. وتُرفض القيم التي لا تتسع فيInt256برسالة خطأ واضحة. #107431 (alexey-milovidov). - أصبح
Nullable(Tuple(...))الآن في مرحلة Beta. وهو معطّل افتراضيًا؛ اضبطenable_nullable_tuple_type = 1لاستخدامه. #107754 (nihalzp). - لم تعد عمليات الإدراج غير المتزامنة تسجّل القائمة الكاملة من
query_ids عند مستوىtrace/debug، إذ كان ذلك قد يؤدي، منذ الإصدار 26.2، إلى تضخمtext_logفي الخدمات ذات حركة الإدراج غير المتزامن الكثيفة. وأصبحت الأسطر التفصيلية الآن عند مستوىtest. #107852 (CheSema). - خُفِّض استخدام البيانات الوصفية لذاكرة التخزين المؤقت لنظام الملفات من خلال تحرير إدخالات priority غير الصالحة فورًا. #107903 (kssenii).
- يُستخدم الآن فهرس التخطي
bloom_filterعلى عمودArrayمعarrayJoin(column) IN (set)وarrayJoin(column) GLOBAL IN (set)وarrayJoin(column) = const، بالطريقة نفسها التي كان يُستخدم بها بالفعل معhasAny(column, set)وhas(column, const). في السابق، كانت صيغarrayJoin ...هذه تلجأ إلى فحص كامل. #109536 (groeneai). - يستخدم
IS NOT DISTINCT FROMوIS TRUEالآن فهارس المفتاح الأساسي وminmax لتجاوز الحبيبات، كما في حالة=. سابقًا، كانk IS NOT DISTINCT FROM 42و(k = 42) IS TRUEيفحصان جميع الحبيبات. #110006 (groeneai).
إصلاحات الأخطاء
إصلاحات JOIN
- إصلاح دالة
nested(المستخدمة داخليًا بواسطةARRAY JOIN) التي كانت تزيلLowCardinalityمن أنواع الأعمدة، مما كان يؤدي إلى تحوّلArray(LowCardinality(String))إلىArray(String)في المخرجات. #98974 (Onyx2406). - إصلاح إعادة ترتيب عمليات الربط التي كانت تُسقط بصمت الصفوف غير المتطابقة من
RIGHT/LEFT JOINعند ربطها بفاصلة (ربط تبادلي) مع جدول آخر، مثلt1 RIGHT JOIN t2 ON t1.c = t2.c, t3. كان الاستعلام يُرجع سابقًا نتيجة الربط الداخلي بدلًا من نتيجة الربط الخارجي. #101684 (groeneai). - إصلاح خطأ
LOGICAL_ERROR(“المنفذ غير متصل”، الرمز 49) الذي قد يحدث عند تنفيذ استعلامات تتضمنVIEWمع تجميع داخلJOIN. #102574 (Ergus). - إصلاح تجاهل
max_rows_to_transferوmax_bytes_to_transferبصمت في استعلاماتGLOBAL INوGLOBAL JOINضمن المحلل الجديد. تُطلق الإعدادات الآنSET_SIZE_LIMIT_EXCEEDED(أو تُوقِف التنفيذ، بحسبtransfer_overflow_mode) عندما يتجاوز الجدول الخارجي المُجسَّد الحد المُهيأ، بما يطابق سلوك المحلل القديم. #104119 (groeneai). - إصلاح نتائج خاطئة أو فشل في استعلامات
JOINالتي تستخدمjoin_algorithm = 'direct'مع جدولMergeTreeعلى الجانب الأيمن، عندما تعيد عملية التحسين ترتيب أعمدة البحث. #104174 (groeneai). - إصلاح خطأ كانت فيه الاستعلامات التي تجمع بين
arrayJoinوORDER BY ... LIMITبعدJOINقد تُرجع صفر صفوف بصمت. لم تعد عملية تحسين خطة الاستعلام التي ترفع تقييم الدالة فوقSortingStepتُطبَّق عندما يحتوي التعبير المرفوع علىarrayJoin، إذ يمكن لـarrayJoinتغيير عدد الصفوف. #104558 (groeneai). - إصلاح خطأ منطقي في
LIMIT BYالسالب في بعض الحالات عند استخدامه معARRAY JOIN. #105403 (nihalzp). - إضافة إعداد توافق جديد
analyzer_compatibility_prefer_alias_over_subcolumn(معطّل افتراضيًا). عند تفعيله، يفضّل المحلل الجديد تفسير بادئة الاسم المستعار على مطابقات الأعمدة الفرعية لـTupleأو الأعمدة المنقطة للمعرّفات متعددة الأجزاء، مستعيدًا سلوك المفسّر السابق. يتجنب ذلك أخطاءAMBIGUOUS_IDENTIFIER(وما يتصل بها) عندما يربط استعلام جدولًا يطابق اسمه جدولًا داخليًا في تعبير جدول شائع/استعلام فرعي يستخدمSELECT *على ربط، إذ قد تتسرب أعمدة أُعيدت تسميتها باستخدام العلامة النجمية (مثلb.id) بمعرّفات الجدول الداخلي إلى النطاق الخارجي. #105491 (vdimir). - إصلاح نتائج قد تكون خاطئة لاستعلامات تجمع بين ربط خارجي وربط داخلي لاحق يشير إلى الجانب الذي يوفّر قيم
NULLفي الربط الخارجي. كان من الممكن أن تختار إعادة ترتيب عمليات الربط خطة تنقل شروط الربط الداخلي إلى عبارةONالخاصة بالربط الخارجي. #105992 (vdimir). - تحسين التوافق مع المحلل القديم. إذا كان للجدول أعمدة مثل
x.a Array, x.b Array, x String، تُفضّل المصفوفات فيARRAY JOIN x. #106069 (KochetovNicolai). - إصلاح استثناء في استعلامات
INNER JOINمع جدولMergeTreeفارغ على الجانب الأيسر عند تفعيلenable_parallel_replicasوquery_plan_use_new_logical_join_stepوquery_plan_optimize_join_order_algorithm = 'greedy'. #106338 (KochetovNicolai). - إصلاح خطأ منطقي (
Left and right columns have same names) في مُحسِّن ترتيب الربط، قد يحدث في عمليات الربط المنفذة باستخدام النسخ المتماثلة المتوازية عندما تشترك علاقتان في مخطط الربط في أسماء الأعمدة. #106418 (alexey-milovidov). - إصلاح استثناء
LOGICAL_ERROR(Invalid number of rows in Chunk) فيJoiningTransformلعمليةLEFT JOINذات مفاتيح فريدة في الجانب الأيمن وشرطONمختلط وقيمة صغيرة لـmax_joined_block_size_rows. #106928 (groeneai). - إصلاح استثناء (
LOGICAL_ERROR) في مرشح JOIN أثناء التشغيل عندما يحتوي مفتاح الربط على نوعVariantأوDynamicمتداخل داخلTupleأوArrayأوMap، ويحتوي الجانب الأيمن من الربط على قيمة مميزة واحدة. #106931 (groeneai). - إصلاح
LOGICAL_ERROR(Expected the argument N to have X rows, but it has Y) عند تنفيذ دالة على عمودDynamicناتج عن JOIN علىDynamic(مثل الصفوف غير المنضمة فيRIGHT/FULL JOIN، أو استعلام فرعيEXISTSمترابط أُزيل ترابطه وحُوِّل إلى ربط). #107095 (groeneai). - إصلاح استثناء خطأ منطقي
Bad cast from type DB::IColumn const* to DB::ColumnNullable const*عندما تُمرَّر نجمة مؤهلة (t.*) عبر مفتاحJOIN ... USINGإلى دالة تجميعية، ويحتوي الجانب الآخر من ربط خارجي على مفتاحNullable(معjoin_use_nulls = 0). #107129 (groeneai). - إصلاح خطأ منطقي (
Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) عندما يدفع تحسين تمرير الفصل المنطقي (المسند الجزئي) شرطًا عبر مفتاحUSINGوسّعه JOIN. وإصلاح أيضًا تعطل للخادم (خطأ تجزئة) في المحلل عند حل المعرّفات في استعلاماتJOIN ... USINGالتي تحتوي على فروعif/multiIfقابلة للطي الثابت وتشير إلى معرّفات غير معروفة. #107407 (groeneai). - إصلاح مرشح JOIN أثناء التشغيل الذي كان ينتج نتائج خاطئة لأعمدة JSON. #107663 (Avogar).
- إصلاح استثناء خطأ منطقي
Bad cast from type DB::ColumnNullable to DB::ColumnVector<...>عندما تختار نجمة مؤهلة (t.*) مفتاحJOIN USINGويكون هذا الربط متداخلًا ضمن ربطPASTE/CROSS/الفاصلة أو ربطONخارجي، معjoin_use_nulls = 0. #108043 (groeneai). - إصلاح خطأ في المحلل الجديد، حيث كان FINAL على أحد جداول JOIN (مثل
FROM t1 FINAL JOIN t2) يُطبَّق بشكل غير صحيح على الجداول الأخرى المنضمة أيضًا، مما قد يجعل هذه الاستعلامات أبطأ. #108979 (vdimir). - مع
analyzer_compatibility_join_using_top_level_identifier = 1، يمكن الآن حل معرّف فيJOIN ... USINGمن اسم مستعار معرّف لتعبير فرعي داخل قائمة SELECT (مثلًا،SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id))، بما يطابق سلوك المحلل القديم. سابقًا، لم تكن تُؤخذ في الاعتبار سوى الأسماء المستعارة للإسقاطات ذات المستوى الأعلى، وكانت هذه الاستعلامات تفشل باستثناءUNKNOWN_IDENTIFIERحتى مع تمكين الإعداد. ويُنتج الآن أيضًا تلميح الخطأ الذي يقترح هذا الإعداد عندما يكون الاسم المستعار المطابق متداخلًا. #110739 (novikd). - تم إصلاح الخطأ
INCOMPATIBLE_TYPE_OF_JOINفي انضمامANYعلى جدول بمحركJoinعندما يسمح عامل تصفيةWHEREعلى عمود في الجانب الأيمن لمخطط الاستعلام بإعادة كتابة الانضمام إلىSEMIأوANTI. يحتوي جدول بمحركJoinعلى صرامة مُعلنة وثابتة لا يمكن تغييرها، لذا لم يعد يُجرى هذا التحويل لهذه الجداول. #111362 (groeneai). - إصلاح
TYPE_MISMATCH(“نوع مفتاح المفتاح المعقد … غير متطابق”) عند استخدامJOINمع قاموس ومفتاح انضمام من نوعNullableأوLowCardinalityأوLowCardinality(Nullable)، بينما يكون مفتاح القاموس غير مغلف. تُوحِّد عملية البحث في القاموس للانضمام المباشر المفتاح الآن وفقًا لنوع المفتاح المُعلن للقاموس (كما يفعلdictGet/dictHasبالفعل)، ولا يتطابق مفتاحNULLمطلقًا. #111857 (groeneai). - إصلاح
AMBIGUOUS_COLUMN_NAME(عدم تطابق بنية الكتلة في (يجب أن تكون الأعمدة ذات الاسم المتطابق ذات بنية متطابقة)) لاستعلام يكرر شرطJOIN ONفيWHEREمعjoin_use_nulls = 1. يعيد هذا الاستعلام نتيجته الآن بدلًا من أن يفشل. #112007 (groeneai). - تم إصلاح النتائج الخاطئة أو إنهاء الخادم في عمليات
JOINالمباشرة مع القاموس عندما يستخدم مفتاحها تسلسلًا متناثرًا. #112327 (groeneai). - تم إصلاح النتائج الخاطئة عندما يحتوي hash join على مفتاح
LowCardinalityواحد من نوع يتجاوز عرضه 8 بايتات (UInt128وInt128وUInt256وInt256وبدائلهاNullable). كان هذا الانضمام يعيد بصمت صفوفًا لا تتساوى قيم مفاتيحها. #113230 (groeneai). - إصلاح تقليم الأجزاء والحبيبات لشرط
JOIN ONيتضمن أعمدة ثابتة من الجانب الآخر. #113484 (vdimir). - إصلاح قيمة خاطئة تُعاد لعمود افتراضي مثل
_tableأو_databaseعند اختياره من الجانب الأيمن لانضمامJOINيُنفَّذ بواسطةDirectKeyValueJoin(تخزين مفتاح-قيمة مثلEmbeddedRocksDBأوKeeperMapأوRedisأو قاموس). كان الاستعلام يعيد محتويات عمود بيانات بدلًا من ذلك، أو يفشل معLOGICAL_ERROR. #113698 (groeneai).
إصلاحات الاستعلامات والمُحلِّل
- إصلاح خطأ يتسبب في طرح splitMultipartQuery للخطأ “استعلام فارغ” عند الاستعلامات التي تنتهي بتعليق بعد فاصلة منقوطة. #85491 (yariks5s).
- إصلاح حالة لا يقبل فيها المحلل اللغوي اسمًا مستعارًا بعد استعلام فرعي في DESCRIBE TABLE، مما يؤدي إلى خطأ في البنية النحوية. #100205 (yariks5s).
- إصلاح استهلاك
INSERTلعبارةFORMATبدلًا من تطبيقها على مخرجاتEXPLAINفيEXPLAIN INSERT INTO ... SELECT ... FORMAT .... #101772 (Onyx2406). - إصلاح البطء الملحوظ في استعلامات SELECT عند تشغيل عمليات INSERT متزامنة. سابقًا، كان مسار INSERT يحجز فتحات CPU حتى
max_threadsعند بدء الاستعلام، حتى عندما لا تُستخدم معظم الفتحات، مما يحرم عمليات SELECT المتزامنة من الموارد. أصبح تخصيص فتحات CPU الآن قائمًا على الطلب: فلا يطلب المسار الفتحات إلا عند دفع عمل قابل للتوازي فعليًا. ينطبق ذلك على كل من التحكم في التزامن ومجدول CPU الاستباقي لأحمال العمل. يعمل إعداد الخادم الجديدconcurrent_threads_lazy_allocation(القيمة الافتراضيةtrue) كآلية للتراجع. #102928 (seva-potapov). - إصلاح خطأ كان يمكن أن يؤدي فيه
ALTER TABLE ... MODIFY SETTINGعلى جدولEmbeddedRocksDBإلى حفظ قيمة إعداد غير صالحة في ملف البيانات الوصفية للجدول، حتى عند رفض الخادم للاستعلام. عند إعادة تشغيل الخادم التالية، كان سيتعذر إرفاق الجدول بسببCANNOT_PARSE_BOOL(أو خطأ تحليل مشابه)، وفي قواعد البيانات التي تكون فيها إخفاقات التحميل قاتلة، كان الخادم يرفض البدء. تُرفض الآن قيم الإعدادات غير الصالحة قبل كتابة أي بيانات وصفية. #103417 (groeneai). - إصلاح
INSERTالمتدفق معinput_format_max_block_wait_msلواجهةHTTPولـINSERT SELECT FROM input، بحيث تُفرَّغ كتل الإدخال الجزئية قبل اكتمال الطلب. #104534 (alexey-milovidov). - إصلاح تعبير
CASEالذي كان يعيد فرعELSEبدلًا من فرعTHENالمطابق عندما تكون كلٌّ من قيمة التعبير وقيمةWHENتساويانNULL. #105556 (Algunenano). - إصلاح دعم استخدام دوال SQL المعرفة من المستخدم
WASMفي تعريفاتMATERIALIZED VIEW. #106161 (niyue). - إصلاح طرح
INTERPOLATE ()للخطأINVALID_WITH_FILL_EXPRESSIONعندما تُمنح أعمدة ORDER BY أسماء مستعارة في قائمة SELECT باستخدام المحلل القديم. #106252 (yakov-olkhovskiy). - أصبحت الدوال
base58Encodeوbase58DecodeوtryBase58Decodeتراعيmax_execution_timeوإلغاء الاستعلامات عند معالجة مدخلات كبيرة، وترفض المدخلات التي تتجاوز 10 كيلوبايت بدلًا من الاستمرار في التشغيل مدة طويلة جدًا. يمكن ضبط الحد عبر الإعداد الجديدfunction_base58_max_input_size(تعطّله القيمة0). #106428 (alexey-milovidov). - إصلاح خطأ يؤدي إلى نتائج غير صحيحة، حيث كانت
WHERE c0 = constلا تعيد أي صفوف للجداول ذاتORDER BY f(c0)عندما تُقيَّمf(const)إلى NaN، مثلORDER BY sqrt(c0)مع ثابت سالب. كان تحليل المفتاح الأساسي يستبعد كل حبيبة على نحو خاطئ ويُفسد ذاكرة التخزين المؤقت لشروط الاستعلامات اللاحقة. #106507 (groeneai). - أُصلحت النتائج الخاطئة للاستعلام
SELECT c, count() FROM t WHERE c GROUP BY cعلى الجداول التي تتضمن الإسقاط الضمني_minmax_count_projectionأو إسقاطًا تجميعيًا صريحًا أو إسقاطًا عاديًا؛ إذ كانت كل مجموعة تُدمج سابقًا في صف واحد بمفتاح ثابت وإجمالي عدد الصفوف. #106590 (groeneai). - أصبح
FORMATيُطبَّق أيضًا على مخرجاتEXPLAINفيEXPLAIN ... INSERT ... SELECT ... FORMAT ...عندما تسبقSETTINGSFORMATأو يكون تنسيق الإخراجValues. #106686 (alexey-milovidov). - أُصلح خطأ
RESOURCE_ACCESS_DENIEDزائف ونادر (“Scheduler queue with resource request is about to be destructed”) لاستعلام مُنح بالفعل حق الوصول إلى مورد حمل عمل، وكان سببه احتفاظ كائن طلب محلي للخيط أُعيد استخدامه بحالة فشل طلب سابق. #106690 (alexey-milovidov). - أُصلحت
matchوextractوextractAllوcountMatchesالتي كانت تُرجع نتائج خاطئة للتعابير النمطية التي تحتوي على تسلسلات هروب سداسية عشرية أو ثمانية. #106709 (ofeliacode). - أُصلح تجاوز سفلي لعدد صحيح في محلّل بروتوكول PostgreSQL السلكي، حيث كانت رسالة بحقل طول أصغر من 4 تؤدي إلى التفاف
size - 4واستدعاءresize/ignoreبحجم كبير جدًا. #107485 (uwezkhan). - عند استخدام
enable_analyzer = 1(الإعداد الافتراضي)، أصبح الاستعلام عن جدول باسمه المجرد، عندما لا يكون موجودًا إلا في قاعدة بيانات أخرى، يقترح الجدول الصحيح؛ فعلى سبيل المثال، يعرضSELECT * FROM functionsالرسالةMaybe you meant system.functions?. سابقًا، كان المحلل الجديد يعرض الخطأUnknown table expression identifierدون تلميح، بينما كان المحلل القديم يقدّم هذا الاقتراح المفيد بالفعل. #107550 (groeneai). - أُصلح إيقاف الخادم (
std::terminate، الإشارة 6) أثناء إنهاء استعلام بخطة موزعة (make_distributed_plan = 1) عندما يفشل فحص حالة العامل في إعادة جدولة الفحص التالي (مثلCANNOT_SCHEDULE_TASKعند الإيقاف أوMEMORY_LIMIT_EXCEEDED). يفشل الاستعلام الآن بصورة سليمة ويواصل الخادم العمل. #107575 (groeneai). - أُصلحت النتائج غير الصحيحة من الاستعلامات الموزعة التي تختار أعمدة
ALIASتشترك في تعبير فرعي واحد؛ إذ كان من الممكن أن تختل محاذاة الأعمدة وتُرجع القيم تحت العمود الخطأ. #107675 (vdimir). - أُصلح الخطأ المنطقي
Inconsistent AST formattingلدالة نافذة بلا وسائط ضمن تعريفCODECأو محرك (مثلCODEC(cume_dist() OVER (...)))؛ إذ تحتفظ هذه الدالة الآن بأقواسها لكي يظل الاستعلام صالحًا بعد دورة تنسيق وتحليل. #107806 (alexey-milovidov). - يُعامل
getClientHTTPHeaderالآن بشكل صحيح بوصفه غير حتمي، لذا لم تعد نتيجته تُعاد استخدامها خطأً بواسطة ذاكرة التخزين المؤقت لنتائج الاستعلامات. #108029 (alexey-milovidov). - أُصلحت النتائج الخاطئة عند استخدام
SELECT [...] SAMPLE [...]مع ذاكرة التخزين المؤقت لشروط الاستعلام (الإعدادuse_query_condition_cache = 1، وهو أيضًا الإعداد الافتراضي). #108488 (groeneai). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKعند استخدام اسم مستعار لمسند مركب فيGROUP BYثم الرجوع إليه، مع تمكينenable_identifier_resolve_cache(الإعداد الافتراضي). لم يكن تحسينoptimize_and_compare_chainثابت النتيجة، ما أدى إلى تراكم رابط اقتراني انتقالي مكرر في عقدة محلولة مشتركة. #108553 (groeneai). - إصلاح الخطأ
NUMBER_OF_COLUMNS_DOESNT_MATCHعندما يقرأ استعلام فرعي من جدولDistributedعمودَيALIASأو أكثر تتوسع إلى التعبير نفسه (مثلًاa1 String ALIAS toString(x), a2 String ALIAS toString(x)) ويُستخدم هذا الاستعلام الفرعي في استعلام خارجي، مثلSELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2). #108725 (groeneai). - إصلاح الخطأ
UNKNOWN_IDENTIFIERفيALTER TABLE ... DROP COLUMNعندما يحتوي عمود آخر على تعبيرDEFAULTأوMATERIALIZEDيعرّف اسمًا مستعارًا مضمّنًا ويشير إليه. #109374 (alexey-milovidov). - إصلاح تجاوز
system.tablesلقواعد البيانات بصمت للمستخدمين ذوي الأذونات الخاصة بكل قاعدة بيانات عندما يقرأ الاستعلام عمودَيname/databaseفقط. أُضيف في 26.2. #109723 (samay-sharma). - إصلاح الخطأ
UNKNOWN_IDENTIFIERللأعمدة المؤهلة باسم تعبير الجدول الشائع (cte_name.column) في الاستعلامات المخزنة في طرق العرض عند تمكين المحلل. #111386 (novikd). - إصلاح
NOT_FOUND_COLUMN_IN_BLOCKعندما يرشّح استعلامFINALبحسب عمود مفتاح فرز غير موجود في قائمةSELECTويُنقل عامل التصفية إلىPREWHERE(مثلًاSELECT s FROM t FINAL WHERE k GROUP BY sمعoptimize_move_to_prewhere_if_final = 1). #111721 (groeneai). - إصلاح فشل بدء تشغيل الخادم وفشل
ATTACHمع ظهور الرسالةWITH RECURSIVE is not supported with the old analyzerلطريقة عرض تحتوي على تعبير جدول شائع تعاودي عندما يكونenable_analyzer = 0هو الإعداد الافتراضي للخادم. #112784 (evillique). - إصلاح تمرير إعدادات الاستعلام ومعالجة NULL في
accurateCastOrDefault. #114912 (alexey-milovidov). - إصلاح إبلاغ
read_rowsوread_bytesوwritten_rowsوwritten_bytesفيsystem.query_thread_logعن إجمالي تراكمي طوال عمر الخيط بدلًا من القيم الخاصة بالاستعلام المسجل. تأثرت صفوف الخيوط المجمعة طويلة العمر، ولا سيما خيطHTTPHandlerالذي يبدأ الاستعلام. #115596 (groeneai).
إصلاحات MergeTree والتخزين
- يمكن الآن إسقاط الأجزاء المفصولة ذات اللاحقة
tryN. #58957 (antaljanosbenjamin). - إصلاح استثناء
MULTIPLE_EXPRESSIONS_FOR_ALIASفي الاستعلامات ذات الأسماء المستعارة المكررة للإسقاطات (مثلSELECT *, day + 365 AS day) ضمن الاستعلامات الفرعية المتداخلة عند استخدام النسخ المتماثلة المتوازية. #80310 (alexey-milovidov). - إصلاح اختيار برنامج ترميز ضغط غير صحيح لأجزاء
MergeTreeعند ضبط إعدادdefault_compression_codecعلى مستوى الجدول صراحةً. كانت الأجزاء المكتوبة عند الإدراج وأثناء عمليات الدمج وللإسقاطات تستخدم برنامج الترميز الافتراضي على مستوى الخادم بدلًا من إعداد مستوى الجدول. ويشمل الإصلاح الآن أيضًا الجزء الفارغ الناتج عن طفرة تحذف جميع البيانات. #101784 (Onyx2406). - إصلاح أخطاء
MULTIPLE_EXPRESSIONS_FOR_ALIASالتي تطرحها النسخ المتماثلة البعيدة عند تشغيل استعلامات تشير إلى أسماء مستعارة للإسقاطات ضمنPREWHERE/WHERE/HAVING/QUALIFY(مثلSELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) أو استعلاماتSELECT *على عمليات الربط الذاتي ذات أسماء الأعمدة المتداخلة، عند استخدام النسخ المتماثلة المتوازية وparallel_replicas_local_plan = 0. #103806 (groeneai). - إصلاح جزء تصحيح معطّل بعد
ALTER TABLE ... DROP PARTITION ID 'patch-...'يتبعهDETACH/ATTACH TABLE. سابقًا، كان الجزء الفارغ المغطي يُكتب دونpartition.datوsource_parts.dat، مما يؤدي إلى ظهور إدخالbroken-on-start_patch-...فيsystem.detached_partsبعد الإرفاق التالي أو إعادة تشغيل الخادم. #104353 (groeneai). - إصلاح الاستبدال الصامت للبيانات بقيم افتراضية عند تشغيل
ALTER TABLE ... RENAME COLUMNبالتزامن معOPTIMIZE TABLE ... FINALأو عملية دمج أخرى في الخلفية. #104822 (groeneai). - إصلاح حالتين من الخطأ
LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materializedتسببت فيهما استعلامات تستخدمenable_materialized_cte: (1) تعبير جدول شائع مادي يُعاد استخدامه ويُصفّى باستخدامIN (subquery)على تعبير جدول شائع مادي آخر، و(2) تعبير جدول شائع مادي يُشار إليه مباشرةً وضمن عامل تصفيةWHERE ... IN (...)يصل إلى مفتاح أساسي لـMergeTreeعبر استعلام فرعيINمتداخل. تأثرEXPLAINللاستعلامات نفسها أيضًا لأن الأخطاء كانت تحدث أثناء تحسين الخطة. #105041 (novikd). - مع
skip_cache_on_disk_failure = 1، تستمر الاستعلامات الآن عند تعذر إنشاءFileCacheدليل ذاكرة تخزين مؤقت على القرص. يُسجَّل الإخفاق بدلًا من أن يفشل الاستعلام. #105250 (Diskein). - إصلاح استثناء الخطأ المنطقي
Mutation of Memory table produced incomplete outputالذي يطرحهALTER TABLE <memory_table> APPLY PATCHESوALTER TABLE <memory_table> APPLY DELETED MASK. لا تمتلك جداولMemoryأجزاء تصحيح أو أقنعة حذف، لذا يُعامل الأمران الآن بشكل صحيح باعتبارهما عمليتين بلا تأثير. #105286 (groeneai). - إصلاح
CANNOT_CONVERT_TYPEعند استخدامMergeفوقMergeفوقDistributedمعdistributed_group_by_no_merge=1. #105330 (azat). - إصلاح إرجاع
singleValueOrNullMergeلقيمة فعلية بدلًا منNULLعند دمج حالة سبق أن رصدت عدة قيم مميزة. #105734 (fallintoplace). - إصلاح تعطل في دالة الجدول
mongodbوتخزين MongoDB ومصدر قاموس MongoDB عندما يكون اسم المجموعة فارغًا أو يحتوي على بايتات NUL. #105776 (Algunenano). - إصلاح رفض
ALTER TABLE ... CLEAR COLUMNلأعمدةcolumns_to_sumالمحددة صراحةً فيSummingMergeTreeوCoalescingMergeTree. #105785 (antonio2368). - إصلاح أخطاء
UNKNOWN_DATABASEعند إنشاء عرض مُعلَّم بمعلمات يُمرَّر اسم قاعدة بياناته عبر معامل استعلام. #105799 (groeneai). - استعادة تحسين القراءة بالترتيب لجداول
Mergeعند استخدام المُحلِّل. #105867 (KochetovNicolai). - إصلاح طفرات
UPDATEوDELETEفي جداول Iceberg التي يُوصَل إليها عبر كتالوج، بما في ذلك التحديثات وعمليات الحذف المتكررة التي لا تطابق أي صفوف. #106111 (scanhex12). - إصلاح عدم تطبيق
optimize_skip_unused_shards(وفشل force_optimize_skip_unused_shards على نحو خاطئ) عند الاستعلام عن جدولDistributedعبر جدولMergeأو دالة الجدولmerge، مع تطبيق الشرط فوقهما. #106250 (KochetovNicolai). - إصلاح الخطأ المنطقي
Column identifier ... is already registeredعندما يحتوي شرط طفرة (DELETE/UPDATE) على استعلام فرعيIN/EXISTSيقرأ من تعبير جدول افتراضي متداخل داخل استعلام فرعي آخر. #106414 (alexey-milovidov). - إصلاح نتائج خاطئة متفرقة لاستعلامات
ORDER BY ... DESCعند قراءة الأجزاء العريضة بترتيب عكسي معread_in_order_use_virtual_row_per_block = 1وقيمة صغيرة لـmax_block_size. #106429 (vdimir). - إصلاح الاستثناء
Bad cast exceptionلقواميس Redis التي تستخدمSTORAGE_TYPE 'simple'مع تخطيطcache/directومفتاح سلسلة واحد (مركب)؛ تعمل هذه القواميس الآن، وتُبلغ المفاتيح المركبة فوق تخزينsimpleعن خطأ واضح. #106501 (vdimir). - إصلاح الاستثناء
Mutation of Memory table produced incomplete outputالذي كانت تُطلقه أوامرALTER TABLE <memory_table>التي لا تؤثر في البيانات على مستوى الصفوف في محركMemory، بما في ذلكAPPLY PATCHESوAPPLY DELETED MASKوMATERIALIZE STATISTICSوMATERIALIZE INDEXوMATERIALIZE PROJECTIONوREWRITE PARTS. لا تمتلك جداولMemoryهذه البُنى، لذا تُعامل هذه الأوامر الآن كعمليات بلا تأثير. #106621 (groeneai). - إصلاح فشل الخادم في البدء مع
Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0)عندما يحتوي جدولMergeTreeعلى جزء فهرس تخطٍّ بعدد حبيبات صفري وملف علامات غير فارغ على القرص. #106675 (groeneai). - إصلاح الحالة التي لا تُطبَّق فيها النسخ المتماثلة المتوازية على عرض يتضمن UNION بسبب وجود جدول فارغ في UNION. #106900 (devcrafter).
- إصلاح استثناء خطأ منطقي
conflicted_part_name.has_value()قد يحدث أثناء إدراج متزامن في جدولReplicatedMergeTreeعندما تكون الكتلة المُدرجة قد أُزيل تكرارها بالكامل، وكانت عقدة إزالة التكرار الخاصة بالجزء المتعارض قد أُزيلت مسبقًا (مثلًا بواسطةDROP PARTITIONمتزامن). #107026 (groeneai). - إصلاح خطأ
LOGICAL_ERRORنادر بعنوان “Attempt to release query context that does not exist” وتعطل الخادم المصاحب له عند قراءة جداولMergeTreeعبر قرص ذاكرة تخزين مؤقت لنظام الملفات تم إنشاؤه باستخدامenable_filesystem_query_cache_limit = 1. #107028 (groeneai). - إصلاح تعطل الخادم عند نقل جزء فارغ إلى قرص
plain_rewritable(مثلًا باستخدامALTER TABLE ... MOVE PARTITION ... TO DISKلجزء فارغ تم الاحتفاظ به بسببremove_empty_parts = 0). #107040 (groeneai). - إصلاح استثناء
Logical error: Too large size passed to allocatorعند تنفيذINSERTفي جدولMergeTreeعندما تُضبطadaptive_write_buffer_initial_sizeعلى قيمة كبيرة للغاية. أصبح الحجم الابتدائي لمخزن الكتابة التكيفي مقيّدًا الآن بالحد الأقصى للمخزن. #107104 (groeneai). - إصلاح دفعات
ALTER TABLE ... ON CLUSTERالتي تجمع بينMODIFY SETTING/RESET SETTINGوتغيير تعليق (مثلًاMODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) إذ كانت تُطبّق على النسخة المتماثلة القائدة فقط، مما يترك النسخ المتماثلة الأخرى غير متطابقة. كذلك إصلاح تصنيفMODIFY COLUMN ... COMMENTالموضعي أو الخاص بكل عمود باستخدامSETTINGSخطأً كتغيير محلي في بيانات التعليق الوصفية فقط، مما كان يستبعد إعادة ترتيب الأعمدة من البيانات الوصفية المتماثلة وقد يتسبب فيINCOMPATIBLE_COLUMNSعند إعادة تشغيل النسخة المتماثلة. #107142 (groeneai). - إصلاح الخطأ
Argument ... of GROUPING function is not a part of GROUP BY clauseللاستعلامات التي تستخدم الدالةgroupingمع تمكين الإعدادgroup_by_use_nulls. #107206 (KochetovNicolai). - إصلاح استعلامات
UPDATEخفيفة الوزن مع تمكين النسخ المتماثلة المتوازية القديمة لجداولMergeTreeغير المتماثلة. #107246 (groeneai). - إصلاح استثناء خطأ منطقي محتمل في SYSTEM SYNC DATABASE REPLICA … STRICT، وجعل المُعدِّل STRICT يسري فعليًا على النسخ المتماثلة لقاعدة البيانات. #107344 (PedroTadim).
- إصلاح
Logical error: 'Duplicate announcement received for replica number N'الذي قد يحدث مع النسخ المتماثلة المتوازية عندما يحتوي استعلام فرعي قيَمي على استعلامات فرعية متداخلة تقرأ الجدول نفسه. #107381 (groeneai). - إصلاح فقدان صامت للبيانات في
MergeTreeالعادي (غير المتماثل) عند تنفيذREPLACE PARTITIONأوMOVE PARTITIONأوDETACH PARTITIONأوDETACH PARTعلى قسم لا تزال فيه تصحيحاتUPDATEخفيفة الوزن غير مطبقة. ترفض هذه العمليات الآن الأمر (كما يفعلReplicatedMergeTreeبالفعل)، مع الإشارة إلىALTER TABLE ... APPLY PATCHES، بدلًا من التراجع بصمت عن التحديث المُعتمد. #107386 (groeneai). - إصلاح توقف
MaterializedPostgreSQLعن تكرار التغييرات بصمت عندما يحتوي اسم قاعدة البيانات أو الجدول في PostgreSQL على أحرف كبيرة (كان مستهلكpgoutputيطلب اسم publication غير مقتبس وبأحرف صغيرة، لا يطابق اسم publication الذي يحافظ على حالة الأحرف). #107423 (alexey-milovidov). - إصلاح خطأ
THERE_IS_NO_COLUMNعندما تكون قيمةoptimize_if_transform_strings_to_enum = 1ويكون تعبيرif/transformالمُحسَّن على القيم النصية الحرفية مفتاحًا فيGROUP BYأوORDER BYلجدول Distributed أو عند استخدام النسخ المتماثلة المتوازية. #107455 (groeneai). - إصلاح مشكلة إرجاع
SELECT ... FINALوOPTIMIZE TABLE ... FINALلصفوف مكررة بعد اعتماد أجزاء منMergeTreeعادي فيReplacingMergeTreeأوSummingMergeTreeأوAggregatingMergeTreeعبرCREATE TABLE ... CLONE ASأوATTACH PARTITION ... FROMأوMOVE PARTITION ... TO TABLE. يُعاد الآن ضبط مستوى دمج الجزء المعتمد إلى 0 عندما تختلف محركات المصدر والوجهة، بحيث تزيل الوجهة تكراره عند الدمج التالي. #107481 (groeneai). - تحسين تتبّع إلغاء الاستعلام أثناء انتظار النصاب في ReplicatedMergeTree. #107513 (nickitat).
- احتساب الذاكرة التي تستخدمها مكتبة rapidjson (في
prettyPrintJSONوJSONMergePatchومحلل JSON الخاص بـ rapidjson) ضمن متعقب الذاكرة، بحيث تُرفض المدخلات الشاذة باستخدامMEMORY_LIMIT_EXCEEDEDبدلًا من تخصيص الذاكرة بلا حدود. #107555 (Algunenano). - إصلاح خطأ
Logical error: Stream ... variant_discr ... is not foundالذي قد يحدث عند دمج أو قراءة جزءMergeTreeناتج عن عملية تغيير في جدول يحتوي على عمودDynamic. #107562 (alexey-milovidov). - إصلاح
LOGICAL_ERROR(updateFormatPrewhereInfo called more than once) الذي قد يحدث عند الاستعلام عن مصدرfile()أوurl()أو تخزين كائنات مع استخدامPREWHEREصريح وWHEREمعًا، بينما يكونoptimize_prewhere_after_pushdownمفعّلًا. #107568 (groeneai). - إصلاح استثناء في الخادم (خطأ منطقي
Digest does not match) كان يمكن أن يحدث عند استخدامRENAME TABLEأوRENAME DATABASEأوCREATE OR REPLACE TABLEمع جدولTimeSeriesداخل قاعدة بياناتReplicated. أصبحت إعادة تسمية جدولTimeSeriesمدعومة الآن. #107583 (groeneai). - إصلاح
DROP TABLEلجدولTimeSeriesفي قاعدة بياناتReplicated، والذي كان يتسبب سابقًا في تسريب الجداول الداخلية وترك مهمة الحذف في الخلفية تعيد المحاولة إلى الأبد (كانDROP TABLE ... SYNCيتوقف عن الاستجابة). #107604 (groeneai). - إصلاح مشكلتين لاجتياز المسارات في بروتوكول جلب الأجزاء المُنسخة متماثلًا، كانتا قد تتيحان لنسخة متماثلة ضارة كتابة ملفات خارج دليل الجزء. #107606 (antonio2368).
- إصلاح
ALTER TABLE ... REPLACE PARTITIONفي جدولMergeTreeعادي، الذي كان يعيد إظهار الأجزاء المستبدلة بعد إعادة تشغيل الخادم، مما يجعل الجدول يعيد كلًا من الصفوف البديلة والصفوف القديمة المستبدلة. #107623 (groeneai). - إصلاح
LOGICAL_ERROR(“Block structure mismatch … betweenConvertingTransformandRemovingReplicatedColumnsTransform”) عند الإدراج في عرض مادي يعرّف جدوله الهدفTOعمودEnumأوسع مما ينتجهSELECTالخاص بالعرض. يُطبَّق الآن توسيعEnumالصالح في مسار إدراج العرض المادي، كما فيINSERT ... SELECTالمباشر. #107648 (groeneai). - إصلاح الخطأ
NUMBER_OF_COLUMNS_DOESNT_MATCHعند الاستعلام عن جدولDistributed(أو عند استخدام النسخ المتماثلة المتوازية) يحتوي على عدة أعمدةALIASتتوسع إلى التعبير نفسه، مع الإشارة إليها معًا فيORDER BY/GROUP BY/HAVING. #107913 (yakov-olkhovskiy). - لم يعد الخطأ العابر أثناء تحديث أجزاء البيانات في جدول للقراءة فقط يوقف مهمة التحديث في الخلفية بشكل دائم. #108034 (alexey-milovidov).
- أصبح
index_granularity_bytesيُراعى الآن لأعمدة حالةAggregateFunction. سابقًا، كان حد البايتات للحبيبة يُتجاهل في هذه الأعمدة (مثل حالاتuniqExactفي جداولAggregatingMergeTreeوالإسقاطات التجميعية)، مما يؤدي إلى حبيبات أكبر بكثير من الحد المُهيأ وزيادة تضخيم القراءة واستهلاك الذاكرة أثناء الاستعلام. #108297 (groeneai). - إصلاح عدم رفض
insert_quorum = 'auto'لعمليات الإدراج مسبقًا عندما يكون عدد النسخ المتماثلة الحية أقل من الأغلبية. تفشل هذه العمليات الآن فورًا بالخطأTOO_FEW_LIVE_REPLICASبدلًا من كتابة جزء محلي ثم انتهاء مهلتها لاحقًا بالخطأUNKNOWN_STATUS_OF_INSERT. #108800 (gagandhakrey). - إصلاح تعطل الخادم عند الإدراج غير المتزامن مع إزالة التكرار، عندما يجعل
optimize_on_insertالكتلة المُدرجة فارغة (مثل الصفوف التي يكون مجموعها صفرًا فيSummingMergeTree). #109229 (Diskein). - إصلاح فقدان بيانات عمود بلا تعبير افتراضي عند تنفيذ عملية دمج بالتزامن مع
ALTER TABLE ... RENAME COLUMN، أو عندما تأتي قيم العمود الوحيدة منUPDATEخفيف الوزن. كان من الممكن إسقاط العمود من الجزء المدمج، فتُقرأ جميع قيمه كـ NULL. #109356 (groeneai). - إصلاح إنهاء نادر للخادم عند دمج حالات التجميع
uniqExactبالتوازي معGROUPING SETSأوROLLUPأوCUBE. #109389 (groeneai). - إصلاح إعادة جدولة عمليات دمج rollup إلى أجل غير مسمى. #109410 (Michicosun).
- إصلاح عمليات mutation لـ
GROUP BYفي الجداول ذات الأعمدة الافتراضية المادية أو الافتراضية الدائمة. #109532 (Michicosun). - إصلاح الخطأ
UNKNOWN_IDENTIFIER: Missing columns: '_block_offset'عند تشغيلALTER TABLE ... MATERIALIZE INDEXعلى فهرس minmax الضمني الذي أنشأهadd_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_columnفي جدول يحتوي على أجزاء مُدرجة حديثًا (بالمستوى 0). يُبنى الفهرس الآن لهذه الأجزاء بدلًا من فشل العملية. #110236 (groeneai). - إصلاح عدم اكتشاف نسخة متماثلة للقراءة فقط في تخزين الكائنات (قرص مُهيأ باستخدام
read_only = true) للأجزاء الجديدة عبرrefresh_parts_interval، ورفضtable_disk = trueعلى مثل هذا القرص مع الرسالة “table_disk غير مدعوم للأقراص غير التابعة لـ ObjectStorage”. #110460 (jkartseva). - إصلاح خطأ LOGICAL_ERROR (“لم تُسجّل أي مجموعة للمفتاح”) في ALTER TABLE … DROP COLUMN وALTER TABLE … DELETE/UPDATE mutations وDELETE خفيف الوزن، في الجداول التي تحتوي على عمود ALIAS يستخدم تعبيره عامل IN، بما في ذلك عبر عمود ALIAS آخر. #111039 (PedroTadim).
- إصلاح الحالات التي لم تُطبَّق فيها سياسة الصفوف على إسقاطات MergeTree أثناء تنفيذ الاستعلام. #112329 (yariks5s).
- إصلاح الخطأ المنطقي
ReadBufferFromEncryptedFile: Wrong file positionعند قراءة جزءCompactمن قرصencryptedباستخدام إدخال/إخراج مباشر، والذي كان يؤدي إلى تعطل عمليات الدمج فيsystem.replication_queue. #112943 (alexey-milovidov). - إصلاح قراءة قاعدة البيانات الداخلية
_temporary_and_external_tablesعبر دالة الجدولmergeومحرك الجداولMerge، إذ كانت تتيح لجلسة قراءة الجداول المؤقتة الخاصة بجلسات ومستخدمين آخرين، وتتسبب في استثناء عند استخدام مسار المحلل القديم. أصبح التعبير النمطي لقواعد البيانات يتجاوز هذه القاعدة الآن، ويُرفض ذكر اسمها صراحةً، تمامًا كما يُرفض الوصول المباشر إليها. #113224 (alexey-milovidov). - إصلاح حالة كانت فيها سياسة صفوف تحتوي على استعلام فرعي قيَمي تُقيَّم مرة واحدة فقط ثم يُعاد استخدامها باستمرار بعد قراءة الجدول عبر جدول
Merge. يُخزَّن شرط السياسة المُحلَّل مؤقتًا ويُشارك بين جميع الاستعلامات، وكانت قراءته عبرMergeتعيد كتابة التعبير المخزَّن مؤقتًا في موضعه، مما تسبب أيضًا في سباق بيانات بين الاستعلامات المتزامنة التي تستخدم السياسة نفسها. #113563 (alexey-milovidov). - إصلاح أخطاء
CANNOT_CONVERT_TYPEعند قراءة جدولMergeيحتوي على جدولDistributedيستخدم نسخًا متماثلة متوازية بمفتاح مخصص. #113742 (alexey-milovidov). - إصلاح الخطأ
Logical error: No set is registered for key ...عند القراءة عبر جدولMergeيتضمن تابعًا يعرّف عمودALIASيحتوي علىIN، مع اختلاف التوابع في القيمة الافتراضية لذلك العمود. #113757 (groeneai). - إصلاح تجاوز لسياسة الصفوف، حيث كانت دالة الجدول mergeTreeIndex تكشف قيم المفتاح الأساسي وفهرس minmax للصفوف المخفية بواسطة سياسة صفوف SELECT على الجدول المصدر؛ ويُرفض الآن استخدام mergeTreeIndex لقراءة جدول لديه سياسة صفوف. #115304 (yariks5s).
إصلاحات نوع البيانات والتسلسل
- إصلاح استثناء في
ARRAY JOINعند استخدام أنواع رقمية منLowCardinality. #91784 (Ergus). - إصلاح إنشاء أعمدة
NOT NULLبصمت كأعمدةNullableعندما تكون قيمةdata_type_default_nullable = 1ويُنشأ الجدول في قاعدة بياناتReplicatedأو عبرON CLUSTER. #97572 (xiaohuanlin). - إصلاح عدد الصفوف الخاطئ الذي يعيده استعلام
MaterializedViewعند ضبطquery_plan_enable_optimizations = 0، عندما يعيّن العرض عمودintegerإلى عمودBool. #100692 (Maximus5). - إصلاح بيانات تعريف الأجزاء غير المتسقة بعد عمليات التعديل على الأعمدة ذات التسلسلات غير الافتراضية. #102817 (korowa).
- إصلاح انتشار
NULLعند قراءة الأعمدة الفرعية المستخرجة من أعمدةNullable(Tuple(...)). على سبيل المثال، بالنسبة إلىtup Nullable(Tuple(s Nullable(String)))، يعيدSELECT tup.sالآنNULLبشكل صحيح في الصفوف التي يكون فيها الصف المركب الخارجيNULL، بدلًا من قيم غير صالحة. يشمل ذلك جميع أنواع العناصر القادرة على تمثيلNULL:NullableوDynamicوVariantوLowCardinality(Nullable(...)). #102942 (nihalzp). - إصلاح قيام
recursiveRemoveLowCardinalityبحذف أسماء أنواع الهندسة المخصصة (مثلLineStringبدلًا منRing، وMultiLineStringبدلًا منPolygon)، مما كان يؤدي إلى تفسير نوع الهندسة بشكل خاطئ. #103041 (jh0x). - إصلاح قيام
dictGetOrNullبالكتابة فوق أعمدة أخرى بصمت بالقيمةNULLفي إسقاطSELECTعند استدعائها باستخدام عمود مفتاحNullableتكون قيمه مفقودة من القاموس. كانت الدالة تعدّل خريطة القيم الفارغة المُعارة من الإدخال في موضعها؛ أما الآن فتُنشئ نسخة عميقة من عمود النتيجة قبل تعديله. #104327 (groeneai). - إصلاح استثناء في الاستعلامات الموزعة التي تحتوي على صف مركب
INفارغ ضمن مفتاح التجزئة عند تفعيلoptimize_skip_unused_shards_rewrite_in. #104966 (alexey-milovidov). - إصلاح تقدير انتقائية
PREWHEREلإحصاءات count-min في أعمدةFloat32، بما في ذلك المقارنات مع قيم حرفية منFloat64. #105047 (hanfei1991). - إصلاح
ILLEGAL_TYPE_OF_ARGUMENTعند دمج حالات التجميعquantileExactWeightedInterpolatedأوquantileDDأوquantilePrometheusHistogramمع نظيراتها بصيغة الجمعquantilesXxxMerge(والعكس صحيح). تشترك الصيغ المفردة والجمع لهذه العائلات الثلاث من الكميات في حالة تجميع داخلية واحدة، لكنها لم تكن مدرجة في جدول تعيين الأسماء الداخلي، لذلك كان يُرفض دمج الحالات بين الدوال، وكذلك تحسين دمج الدوال لهذه العائلات. #105189 (groeneai). - إصلاح النتائج غير الصحيحة للدوال
toStartOfWeekوtoLastDayOfWeekوtoMondayوtoStartOfMonthوtoLastDayOfMonthوtoStartOfQuarterوtoStartOfYearعند تمرير وسيطات من النوعينDate32وDateTime64إذا وقعت النتيجة خارج نطاقDate: فبدلاً من الالتفاف إلى تواريخ عشوائية، أصبحت النتائج التي تسبق1970-01-01مقيَّدة إلى1970-01-01، والنتائج التي تلي2149-06-06مقيَّدة إلى2149-06-06. يصلح هذا أيضاً نتائج الاستعلامات الخاطئة (الأجزاء والحبيبات التي استُبعدت خطأً) عند استخدام هذه الدوال فيWHEREعلى مفتاحDate32أوDateTime64يحتوي على قيم خارج النطاق. #105244 (yariks5s). - إصلاح خطأ منطقي في
arrayRemoveعندما تكون الوسيطة الأولى مصفوفة منVariantوجميع بدائلها غير متوافقة مع نوع الوسيطة الثانية، بينما يكونvariant_throw_on_type_mismatchمعطلاً. تتعامل الدالة الآن مع المقارنة على أنها “غير متساوية أبداً” وتعيد المصفوفة دون تغيير بدلاً من التسبب في فشلassertTypeEqualityمن جانب الخادم. #105248 (groeneai). - إصلاح تجاهل
toFloat64/toUInt32/toString/إلخ. علىDynamicللإعدادcast_keep_nullable. #105467 (Avogar). - إصلاح تعطل الخادم بسبب
segfaultفيuniqStateOrNull/uniqStateOrDefault/uniqOrNullState(وسلاسل combinator مشابهة لـuniq) عند استخدامها معGROUP BY ... WITH ROLLUPأوWITH CUBEأوWITH TOTALSووسيطةNullable. #105470 (groeneai). - إصلاح إرجاع
toStartOfMillisecondوtoStartOfMicrosecondنتيجة تختلف بنحو ثانية تقريباً لقيمDateTime64السالبة (قبل الحقبة)، وإصلاح تجاوز سعة الأعداد الصحيحة الموقعة الذي يرصدُهUndefinedBehaviorSanitizerفيtoStartOfSecondوtoStartOfMillisecondوtoStartOfMicrosecondلمدخلاتDateTime64القريبة منINT64_MIN. #105482 (groeneai). - إصلاح إنهاء الخادم عند إلغاء تسلسل حالات
singleValueOrNullلـJSON. #105535 (Avogar). - إصلاح تجاهل
input_format_try_infer_datetimesأثناء الإدراج في البيانات المشتركة فيJSON. #105544 (Avogar). - إصلاح التفاف
DateTimeللقيم خارج النطاق فيJSONExtractوعمليات إلغاء تسلسل النصوص. #105551 (Avogar). - إصلاح التعطل عند إدراج tuples بأحجام مختلفة في عبارة
VALUESنفسها ضمن عمودString. #105582 (Avogar). - إصلاح خطأ
NOT_IMPLEMENTEDفيtoStringمنDateTimeبمنطقة زمنية تحتوي على قيمةNULL. #105587 (yariks5s). - إضافة تحقق من أعمدة
Dynamicالمسطحة غير الصالحة في إدخالNative. #105666 (Avogar). - إصلاح
LOGICAL_ERROR(Unexpected return type from if) الذي يظهر أثناء تخطيط الاستعلام لتعبيراتifالتي يكون نوع نتيجتهاVariantويكون فرعها الثاني أو الثالث عبارة عنifبشرط ثابت على قيمة حرفية منUInt64تقع ضمن نطاقInt64. #105680 (groeneai). - إصلاح الخطأ
Bad get: has Decimal32, requested Decimal128فيsumMapوsumMapWithOverflowعلى عمودNested(... Nullable(Decimal(P, S)))عند تسلسل حالة التجميع (مثل النسخ المتماثلة المتوازية، واستخدامsumMapStateعبر منسّق حالة ثنائي، والتجميع الخارجي). #105816 (groeneai). - إصلاح الخطأين
Expected ColumnLowCardinality, got String/Bad cast from type DB::ColumnString to DB::ColumnLowCardinalityعند استخدامapply_mutations_on_fly = 1على جدول يحتوي على طفراتUPDATE/DELETEمعلّقة أثناء التنفيذ ومصطفّة قبل طفرةALTER MODIFY COLUMN ... LowCardinality(...). #105847 (Algunenano). - إصلاح الخطأ
Cannot find columnفي الاستعلامات الموزعة التي تستخدم عامل التصفيةIN Array(...)مع المحلل الجديد. #105894 (KochetovNicolai). - إصلاح إنهاء الخادم عند تعديل عمود يتضمن
STATISTICSإلىNullableبينما يحذفهALTERآخر بالتزامن. #105917 (groeneai). - رفض بايتات
IntervalKindالخارجة عن النطاق أثناء فك ترميز النوعRowBinaryWithNamesAndTypes(input_format_binary_decode_types_in_binary_format = 1) مع عرض خطأINCORRECT_DATAواضح، بدلًا من إنشاءDataTypeIntervalبنوع غير صالح قد يؤدي لاحقًا إلى سلوك غير محدد في مسارات التجزئة. #106261 (groeneai). - قراءة العمود الفرعي ‘null’ كمسار JSON في Nullable(JSON) بدلًا من null-map. #106295 (Avogar).
- إصلاح قراءة خارج الحدود في
sipHash64KeyedوsipHash128KeyedوsipHash128ReferenceKeyedعند تجزئة عمود تكون جميع مصفوفاته فارغة ولا يكون المفتاح ثابتًا. #106355 (Algunenano). - إصلاح خطأ كان يمنع المستخدمين من استخدام الاستعلامات الفرعية ذات القيمة المفردة في الوسيط الأول لـ
INعندما يكون الوسيط الثاني صفًا غير ثابت. #106610 (yariks5s). - إصلاح تجاهل
session_timezoneعند تسلسل أعمدةLowCardinality(DateTime)إلى تنسيقات نصية (CSV وTSV وJSONEachRow وغيرها). سابقًا، بعد أول كتابة لعمودLowCardinality(DateTime)على خادم، كانت جميع الاستعلامات اللاحقة التي تكتب هذا العمود تعرض سلسلة الوقت المحلي وفق أول منطقة زمنية تمت رؤيتها، بغض النظر عنsession_timezone. #106634 (groeneai). - إصلاح إنهاء الخادم في
ifوmultiIfعندما يكون الشرط قيمة ثابتة منNullable(Nothing). #106678 (groeneai). - التراجع عن تغيير كان يجعل
sumMap/ الموفّق-Mapيرفضان أنواع القيم الرقمية ذات الأسماء المخصصة (مثلSimpleAggregateFunction(sum, T)وBool) بالرسالةILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed، مما عطّل عمليات التجميع التي كانت تعمل سابقًا. #106729 (fm4v). - إصلاح استثناء
Bad castأثناء تقليم الأجزاء استنادًا إلى إحصاءاتMinMaxعندما يكون العمود المفتاحLowCardinalityوثابت المسند هوLowCardinality(Nullable(...)). #106793 (groeneai). - إصلاح خطأ منطقي في
parseDateTimeعند وجود بايتات إدخال غير ASCII. #106856 (Avogar). - إصلاح استثناء
THERE_IS_NO_COLUMNفي الاستعلامات الموزعة التي تتضمن تحسينoptimize_rewrite_aggregate_function_with_if، عندما تتطلب وسيطة الدالة التجميعية تحويلاً إلى النوعNullable. #106908 (yakov-olkhovskiy). - إصلاح تجاوز في عدد صحيح موقّع (سلوك غير محدد) في
arrayLevenshteinDistanceWeightedوarraySimilarityعندما تحتوي مصفوفات الأوزان على قيم صحيحة كبيرة. تُراكَم المسافة الموزونة الآن في عدد صحيح واسع للأوزان الصحيحة، لذا لم تعد الأوزان الصحيحة الكبيرة تتجاوز السعة وتظل دقيقة. #106934 (groeneai). - إصلاح تعطل (
Source column is not Map/SIGSEGV) عند دمج كتل مرتبة تحتوي على عمودVariantبمتغيرMapيختلف ترتيب تخزينه المحلي عن ترتيبه العام. #107011 (groeneai). - إصلاح الخطأ
TYPE_MISMATCH(“Cannot convert string … to type …”) في استعلاماتORDER BY <numeric column> ... LIMIT nعندما تؤدي المادية الكسولة إلى وضع عمود آخر قبل عمود الفرز. تُقرأ عتبة أعلى K الآن من عمود الفرز الصحيح. #107060 (groeneai). - إصلاح عملية
ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO aمركبة تعيد استخدام اسم عمود تم تحريره (عملية “تبديل”) بين أعمدة من أنواع مختلفة. سجّل الجزء المادي نوع عمود غير صحيح، مما أدى إلى فشلSELECTلاحقاً بالرسالةConversion between numeric types and IPv6 is not supported(أو إيقاف العملية عند تحميل الجزء في إصدارات debug). #107064 (groeneai). - إصلاح النتائج غير الحتمية للدالة
roundDownعندما تحتوي مصفوفة الحدود علىNaN. كان يمكن لقيمة الإدخال نفسها أن تُرجع حداً منتهياً أوNaNبحسب الصفوف المحيطة في الدفعة. تُتجاهل حدودNaNالآن، لذا تعتمد النتيجة فقط على الحدود المنتهية. #107065 (groeneai). - إصلاح قيام
quantileTDigestوquantileTDigestWeightedبإطلاقDECIMAL_OVERFLOWلوسيطاتDateوDateTimeعندما يكون الكوانتايل المُستوفى كسرياً لكنه ضمن النطاق (مثلاًquantileTDigestWeighted(date, weight)على قيم تتسع جميعها ضمن النوع). تُقتطع النتيجة الكسرية الآن إلى نوع النتيجة، بما يتوافق معquantilesTDigestWeighted؛ ولا تزال القيم الفعلية خارج النطاق تثير خطأً. #107066 (groeneai). - إصلاح الاقتطاع الصامت لقيم الأعداد الصحيحة خارج النطاق في تعريفات النوع
Enum8/Enum16. أصبحEnum8('a' = 200)يطلقARGUMENT_OUT_OF_BOUNDبدلاً من إنشاءEnum8('a' = -56)بصمت. #107081 (groeneai). - إصلاح ترتيب الصفوف غير الصحيح (وخطأ
LOGICAL_ERRORبعنوان “Rows are not sorted with permutation” في إصدارات debug) في استعلاماتORDER BY ... LIMITمتعددة الأعمدة التي تفرز حسب أعمدةNullableعندما تتعادل عدة صفوف في الأعمدة الأولى. #107094 (groeneai). - إصلاح
Logical error: 'Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple'عند قراءة عمودArray(Tuple(...))مملوء بقيم افتراضية، مثلًا بعدALTER TABLE ... ADD COLUMNأو بعد طفرةALTER TABLE ... CLEAR COLUMNغير مكتملة تُطبَّق أثناء التنفيذ. #107232 (groeneai). - رفض الاستخدامات غير المدعومة لأعمدة
AggregateFunctionفي تعبيرات TTL عند تنفيذCREATE TABLE(مثلًاTTL toDateTime(state)) بدلًا من الفشل لاحقًا أثناء تنفيذ TTL معILLEGAL_TYPE_OF_ARGUMENT. يشمل ذلك أيضًا الحالات الموجودة ضمن بدائلVariantوقيمDynamic. ولا تزال المستهلكات الصالحة الواعية بالحالة، مثلfinalizeAggregation، مقبولة. #107366 (Ria-K912). - إصلاح
arrayResizeمع وسيطة حجم من نوعDecimal: يُفسَّر الحجم الآن وفقًا لقيمته الفعلية (مثلًا، تُرجعarrayResize([1, 2, 3], 1.5::Decimal(2, 1))عنصرًا واحدًا) بدلًا من التمثيل الخام غير المُقاس. #107389 (alexey-milovidov). - إصلاح
LOGICAL_ERROR: Unexpected return type from materialize(وأخطاء عدم تطابق الأنواع المشابهة) عند استخدامapply_mutations_on_fly = 1على جدول يحتوي علىUPDATEمعلّق يُطبَّق أثناء التنفيذ، ويُقرأ عموده المستهدف أيضًا كمدخل لدالة بواسطةUPDATEسابق يُطبَّق أثناء التنفيذ، قبل طفرةALTER MODIFY COLUMN ... LowCardinality(...). #107475 (groeneai). - إصلاح تحويل قيم NULL بصمت إلى سلاسل فارغة عند إدراج بيانات Arrow/ORC في عمود
LowCardinality(Nullable(...)). كان هذا انحدارًا ظهر في الإصدار 26.5. #107532 (Ergus). - إصلاح
LOGICAL_ERROR(“Input nodes size mismatch in dag”) عند تنفيذ استعلام يتضمنmake_distributed_plan = 1ويربط باستخدام مفتاح مغلّف بدالة، بينما لا يوجد نوع مشترك بين جانبيه (على سبيل المثال،ON intDiv(-1, t1.key) = t2.keyمع مفتاح أيمن من نوعUInt64). #107701 (groeneai). - إصلاح قيام إزالة تكرار الإدراج بحساب تجزئات خاطئة لأعمدة
StringوArrayمع إعداد الخادمinsert_deduplication_version = new_unified_hash: إذ قد تفشل عمليات الإدراج المتطابقة في إزالة التكرار لأن تجزئة إزالة التكرار كانت تعتمد على موضع الصف داخل الكتلة المُدرجة. #107915 (CheSema). - إصلاح إنهاء الخادم في
hasعند البحث فيMapذي مفاتيحDynamicباستخدام وسيطةLowCardinality. #107956 (groeneai). - إصلاح انحدار في أداء الأعمدة الفرعية لـ
Mapالمستخدمة معPREWHERE. #107988 (Avogar). - إصلاح خطأ منطقي عند تحويل عمود
DynamicأوVariantمتداخل داخلTupleإلى نوع عنصر غيرNullableباستخدامaccurateCastOrNullأوaccurateCastOrDefault. #108061 (alexey-milovidov). - إصلاح استثناء الخطأ المنطقي
Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t>عند قراءة استعلامLIKEمن فهرسtextعبر مسار القراءة المباشرة البديل لعمود مخزّن بشكل متفرق. #108068 (groeneai). - إصلاح
LOGICAL_ERROR(“نوع الإرجاع غير المتوقع من if”) عند قراءة عمود معapply_mutations_on_fly = 1بعد تنفيذALTER UPDATE col = ... WHERE <cond>بشرط غير ثابت أو خاطئ، يتبعهALTER MODIFY COLUMN col <new type>. #108128 (groeneai). - إصلاح
signed integer overflow(سلوك غير معرّف) فيdateDiffبوحدتيhourوminuteعند استخدام قيمDateTime64متطرفة قريبة من حدود نطاقInt64. #108229 (groeneai). - إصلاح استثناء في الخادم (
Logical errorفيIColumn::insertFrom) عند تحويلArray(Dynamic)أوArray(Variant)إلىQBitباستخدامaccurateCastOrNull، مثلaccurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)'). #108288 (groeneai). - إصلاح
parseDateTimeBestEffortمع المنطقة الزمنية، إذ كان يطلق CANNOT_PARSE_DATETIME لصفوف NULL فيtoString(Nullable(DateTime64)). #108310 (yariks5s). - إصلاح تعطل الخادم (تجاوز سعة المكدس) الناجم عن تعبيرات متداخلة بعمق مثل
[[[ ... ]]]أوarray(array( ... ))عند ضبطmax_parser_depthعلى قيمة كبيرة. #108493 (Algunenano). - إصلاح إسقاط
SELECT *الذي كان يعيد القيمة الافتراضية لنوع العمود (مثل0) بدلًا من قيمةDEFAULTالخاصة به (مثل-1) عند قراءة عمود أُضيف باستخدامALTER TABLE ... ADD COLUMN ... DEFAULTبعد إنشاء الإسقاط. كانت القراءات من الجدول الأساسي صحيحة بالفعل؛ ولم تتأثر سوى القراءات التي يعالجها الإسقاط، إلى أن أُعيد بناؤه. #108569 (tiandiwonder). - إصلاح تعطيل التقليم حسب القسم والمفتاح الأساسي بصمت عندما يكون عمود مفتاح
LowCardinality(FixedString)(أوLowCardinality(Nullable(FixedString))) مغلفًا بدالة ضمن المفتاح، مثلPARTITION BY sipHash64(k) % NمعWHERE k = 'literal'. كانت هذه الاستعلامات تفحص جميع الأقسام بدلًا من تقليمها. #108777 (groeneai). - الحفاظ على الترتيب الأصلي للمفاتيح في تسلسل Map المستند إلى الحاويات لإصلاح عمليات المقارنة التي تعتمد عليه. #109178 (Avogar).
- إصلاح استنتاج المخطط لتنسيقات
ArrowوArrowStreamوAvroوقارئاتORCوParquetالقديمة، التي كانت تعيدNullable(Tuple)لأعمدةstructالقابلة للقيم الفارغة، رغم أن النوعNullable(Tuple)غير مسموح به (allow_experimental_nullable_tuple_typeمعطل). كانDESCRIBEيعيد نوعًا يرفضهCREATE TABLE، لذلك كان إنشاء جدول أو إدراج بيانات باستخدام المخطط المستنتج يفشل بالخطأNullable Tuple type is not allowed. #109185 (nihalzp). - إصلاح خطأ كانت فيه قيم
DEFAULTللأعمدة لا تُطبّق عند استخدامINSERT INTO TABLE FUNCTION(مثلremote(...)أوfile(...)) مع بياناتVALUESمضمنة، عندما يحلل الخادم البيانات المضمنة بنفسه (send_table_structure_on_insert_with_inline_data = 0). كانت قيمةNULLصريحة تُدرج في عمود غيرNullableذيDEFAULTتصبح0بدلًا من القيمة الافتراضية المعلنة. أصبح السلوك الآن مماثلًا لعمليةINSERTعادية في جدول ولـ HTTP protocol. #109258 (groeneai). - إصلاح خطأ segfault في
groupArrayLastMerge. أصبح إلغاء تسلسل حالة الدالة التجميعية خاضعًا للتحقق، لذا لا تؤدي الحالة التالفة إلى وصول خارج الحدود. #109485 (mstetsyuk). - إصلاح خطأ segfault في الدالة التجميعية
largestTriangleThreeBucketsبرفض حالة الدالة التجميعية التالفة أثناء إلغاء التسلسل. #109492 (mstetsyuk). - إصلاح قراءة عمود Parquet ذي
Tupleغير قابل للقيم NULL عندما يغلّفه نوع ClickHouse المطلوب ضمنNullable(مثلNullable(Tuple(...)))، إذ كانت تفشل سابقًا بالخطأTYPE_MISMATCH. #109615 (groeneai). - أصبح بإمكان القارئ الأصلي لـ Parquet v3 قراءة عمود struct قابل للقيم NULL فعليًا (مجموعة OPTIONAL في Parquet) باعتباره
Nullable(Tuple(...)). وكان يرمي سابقًا الخطأTYPE_MISMATCH. #109898 (groeneai). - إصلاح تعطل الخادم (تجاوز مكدس أصلي) عند نسخ أو إتلاف قيمة حرفية متداخلة بعمق من
Array/Tuple/Map/Object، مثل استعلام يتضمن قيمة حرفية متداخلة بعمق كبير مع رفعmax_parser_depth. #110393 (Algunenano). - إصلاح نتائج
IS NULL/IS NOT NULL/count()غير الصحيحة معoptimize_functions_to_subcolumnsفي عمود أصبحNullableعبرALTER MODIFY COLUMN Tيغيّر البيانات الوصفية فقط إلىNullable(T). بالنسبة إلى الأجزاء المكتوبة قبل التحويل، كان يُملأ العمود الفرعي.nullمن القيمة الافتراضية لنوع التخزين (NULL) بدلًا من اشتقاقه من العمود الأب الموجود فعليًا، لذا كان يُبلّغ خطأً عن الصفوف الموجودة غير NULL على أنها NULL. #110584 (groeneai). - إصلاح
LOGICAL_ERROR(“Bad cast from ColumnString to ColumnLowCardinality”) أثناء تحليل فهرس المفتاح الأساسي عندما يُغلّف عمود مفتاحLowCardinalityضمن سلسلةCASTمتداخلة تعيد إدخالLowCardinality، مثلWHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'. في إصدارات debug وsanitizer كان هذا يوقف الخادم، بينما كان يتسبب في فشل الاستعلام في إصدارات الإصدار. #111050 (groeneai). - إصلاح قراءة بيانات
ArrowوArrowStreamذات أعمدةArrayأوMapمتداخلة وفارغة، والتي أنتجها Apache Arrow Java قبل الإصدار 19.0.0 (المضمّن مع Apache Spark)، إذ كانت تُرفض سابقًا بخطأINCORRECT_DATAيفيد بأن مخزن offsets المؤقت صغير جدًا. #111101 (Algunenano). - إصلاح الخطأ المنطقي
Block structure mismatch(في إصدارات debug وsanitizer) وخطأIllegal types of argumentsفي عمليات المجموعات على أعمدة حالات تجميعية متوافقة (مثلquantileStateوquantilesState(0.9)) متداخلة داخل أعمدة حاوية مثلTupleأوArrayأوMapأوNullableأوVariant. #111191 (alexey-milovidov). - إضافة تحقق من بيانات الفهرس المنسوخ التالفة المستلمة عبر البروتوكول الأصلي. #112331 (Avogar).
- إصلاح قراءة خارج الحدود أثناء إزالة تكرار الإدراج عندما يمر
INSERTعبر عرض مادي يغيّر عدد الصفوف قبل الكتابة إلى جدول هدف مقسّم إلى أقسام. #112649 (CheSema). - تم إصلاح كتابة خارج النطاق عند قراءة عمود
DECIMALمنParquetيكون نوعه الفيزيائي أوسع من النوع الذي تقابله دقته المعلنة، مثلDECIMAL(9, 2)المخزن بالنوع الفيزيائيINT64. هذه الملفات صالحة فيParquetوتنتجها أدوات كتابة أخرى، لكن القارئ كان يحدد حجم العمود الوجهة بناءً على الدقة المعلنة، بينما كان مفكك الترميز يكتب بالعرض الفيزيائي، مما يؤدي إلى تلف الذاكرة. تؤدي قراءة مثل هذا الملف الآن أيضًا إلى ظهورDECIMAL_OVERFLOWعندما لا تتسع قيمة ضمن الدقة المعلنة، بدلًا من إرجاع بيانات تالفة، وتتم القراءة دون فقدان للبيانات عند استخدام تلميح نوع بعرض لا يقل عن عرض النوع الفيزيائي. #113046 (groeneai). - تم إصلاح فشل
ATTACH PARTITION FROMوREPLACE PARTITIONوMOVE PARTITION TO TABLEوإضافة نسخة متماثلة منReplicatedMergeTreeمع ظهور الرسالةTables have different ...أوMETADATA_MISMATCHأوINCOMPATIBLE_COLUMNSللجداول التي كُتبت تعريفاتها بأقواس زائدة، مثلPARTITION BY (a)وORDER BY (b)وINDEX ix (b * c) TYPE minmaxوPROJECTION p (SELECT (b) ...)وCONSTRAINT c CHECK (a > 0)وTTL (d + INTERVAL 10 YEAR)أوDEFAULT (a + 1). #114188 (alexey-milovidov). - تم إصلاح خطأ يؤدي إلى تخزين كيان وصول يحمل إعدادًا بقيمة
Map، مثل ملف تعريف إعدادات يحتوي علىhttp_response_headersأوadditional_table_filters، بصيغة لا يستطيع ClickHouse قراءتها مجددًا، مما يجعل الكيان غير قابل للتحميل بشكل دائم بعد إعادة التشغيل. #114620 (groeneai). - تم إصلاح
hasوindexOfوcountEqualوmapContainsKeyوmapContainsValueوفهرسةMapالتي كانت تُرجع “غير موجود” عند استخدام قيمة بحث ثابتة منLowCardinalityتساوي القيمة الافتراضية لنوع العنصر، مثلStringفارغ أو الرقم صفر. #114624 (groeneai). - تم إصلاح النتائج الخاطئة لتحسين
GROUP BY ... LIMITالبسيط (الإعدادoptimize_trivial_group_by_limit_query) في الاستعلامات التي تحتوي علىDISTINCTأوQUALIFYأو دوال النوافذ أوarrayJoinفي الإسقاط: إذ تستهلك هذه العمليات المجموعات أو تصفيها بعد التجميع، لذلك كان تقييد التجميع عند مفاتيحLIMIT + OFFSETقد يعيد صفوفًا أقل من اللازم أو قيمًا خاطئة. لم يعد التحسين يُطبّق على مثل هذه الاستعلامات. #114695 (alexey-milovidov). - تم إصلاح النتائج الخاطئة لـ
SELECT count(arrayJoin(arr))مع الإعداد الافتراضيoptimize_trivial_count_query = 1. كان يُرجع عدد الصفوف المخزن بدلًا من عدد عناصر المصفوفة، وكان الاستعلام يُرجع0معfile()وurl(). #115227 (groeneai). - تم إصلاح
uniqوuniqExactوuniqHLL12وuniqThetaالتي كانت تُرجع نتيجة خاطئة لوسيطة مغلفة بدالة حقنية تخفي قابلية القيم الفارغة، مثلuniqExact(tuple(x))على عمودNullable. كان تحسينoptimize_injective_functions_inside_uniqيزيل دالة التغليف، فتُتخطى بعد ذلك الصفوف ذات القيمة NULL بدلًا من احتسابها. #115466 (vdimir). - أصبح مسموحًا لقارئات KeeperMap بقبول البيانات الوصفية المشتركة عندما تختلف المفاتيح الأساسية المتكافئة فقط بأقواس خارجية زائدة. #115642 (skuznetsov-clickhouse).
إصلاحات فهرس النص وفهرس التخطي
- إصلاح توقف الخادم عند استخدام استعلام لمقارنات
coalesce/ifNullمتداخلة (مثلWHERE coalesce(a, b, coalesce(c, d), e) = const) على جدولMergeTreeيحتوي على عدة فهارس تخطٍ من نوعminmaxومعuse_skip_indexes_for_disjunctions = 1. تُطبَّق الآن إعادة كتابة فهرس التخطي لـ<op>(coalesce(...), const)بصورة تعاودية على وسائطcoalesceالداخلية، بحيث تتطابق صيغة RPN لـKeyConditionلكل فهرس مع صيغة RPN للقالب، كما يفترض رمز تتبع عمليات الفصل بالفعل. #103929 (groeneai). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKالذي كان يطرحهALTER TABLE ... MATERIALIZE INDEXعلى الأجزاء التي أُنشئت في 25.8 وتحتوي على فهرس تخطٍ لعمود أُضيف عبر أمر مستقلALTER TABLE ... ADD COLUMN. تقرأ عملية التعديل الآن بصورة صحيحة كل عمود مطلوب لكل فهرس تخطٍ وإسقاط موجودين مسبقًا في الجزء أثناء إعادة الحساب القسرية. #105039 (groeneai). - إصلاح نقص صامت في العدد في استعلامات
SELECTعند استخدامuse_query_condition_cache = 1(القيمة الافتراضية). كان استعلام بالشكلPREWHERE pk_prefix = X WHERE non_pk IN (...)على عمود ذي فهرس تخطٍ بمرشح Bloom يفسدQueryConditionCacheللمسندpk_prefix = X، لذا كان استعلام سليم لاحق من الشكلSELECT count() ... WHERE pk_prefix = Xيعيد نتيجة غير صحيحة بعدد أقل من الفعلي. تأثرت جميع إصدارات 26.x. #105686 (groeneai). - إصلاح استثناء يحدث عندما يستخدم استعلام بحث متجهي فهرسًا متجهيًا وفهرس تخطٍ آخر مثل
minmaxمعuse_skip_indexes_on_data_read = 1. #106473 (shankar-iyer). - إصلاح خطأ “عدد كبير جدًا من العلامات” لفهرس نصي على جزء مدمج فارغ. #106867 (azat).
- إصلاح نتائج خاطئة عند الاستعلام عن جدول
ReplacingMergeTreeباستخدامFINALومرشح على فهرس نصي، عندما يكونquery_plan_optimize_lazy_finalمفعّلًا. أنشأ تحسينFINALالكسول خطوات قراءة لم تُحاكِ القراءة المباشرة من الفهرس النصي، مما أدى إلى إسقاط المرشح جميع الصفوف المطابقة. #106894 (Ergus). - إصلاح
LOGICAL ERROR(Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) عند مقارنة قيمة ثابتة من نوعVariantتحتوي على عضوLowCardinalityبعمود مفتاح يكون تعبير مفتاحه دالة حتمية غير رتيبة (مثل فهرس تخطٍ من نوعminmaxعلىsipHash64(col)). #107111 (groeneai). - إصلاح النتائج الخاطئة (والفارغة غالبًا) من
ORDER BY <col> LIMIT nعندما يكون تحسينuse_skip_indexes_for_top_kنشطًا، وكان جزء يحتوي على فهرس تخطٍ من نوعminmaxعلى عمود الفرز قد حُذفت منه صفوف باستخدامDELETEخفيف. لم يعد التحسين يرتب قيمة minmax القديمة في الأجزاء التي حُذفت منها صفوف باستخدامDELETEخفيف قبل الأجزاء التي تحتوي على أعلى الصفوف الحالية. #107320 (groeneai). - إصلاح عدم تقليم فهرس التخطي Set للحبيبات في أعمدة LowCardinality. #107868 (thevar1able).
- يمكن الآن إعادة الإعداد
use_skip_indexes_on_data_readإلى قيمته الافتراضية السابقة للإصدار 26.1 (false) عبر إعدادcompatibility، مما يوفر حلًا مؤقتًا لتراجع في الأداء، حيث يمنع مسار القراءة من البيانات تقليم نطاقات العلامات بواسطة فهارس التخطيminmax/set/bloom_filter. #108330 (egor-click). - أُصلحت القراءة المباشرة من عدة فهارس نصية مجسّدة جزئيًا. #108607 (CurtizJ).
- أُصلحت مشكلة عدم استخدام فهرس نصي مُعرّف على
mapValues(map)أوmapKeys(map)بصمت عند الاستعلام عن جدول عبر جدول بمحركDistributedباستخدام المحلّل. كان الفهرس يُستخدم للجدول المحلي وعبرcluster()/remote()، لكن الاستعلام عبر جدول بمحركDistributedكان يتجاهله (ويفشل بالخطأINDEX_NOT_USEDعند استخدامforce_data_skipping_indices). #109188 (groeneai). - أُصلح تعطل الخادم عند استخدام
CREATE HYPOTHETICAL INDEX ... TYPE set(وngrambf_v1/tokenbf_v1) في حال حذف وسيطة الفهرس المطلوبة. تُرفض هذه العبارات الآن برسالة خطأ واضحة. #109294 (groeneai). - أُصلحت النتائج غير الصحيحة للدوال
hasوmapContainsKeyوmapContainsValueعند استخدام إبرة فارغة مع وجود فهرس نصي. #110246 (rschu1ze). - أُصلح الخطأ
ATTEMPT_TO_READ_AFTER_EOFعند دمج الأجزاء التي تحتوي على فهرس نصي، إذا كان أحد الأجزاء المدمجة فارغًا، مثلًا بعد طفرة حذفت جميع صفوف الجزء. #112490 (CurtizJ). - أُصلح تعليق تحسين خطة الاستعلام عندما تحتوي عبارة
WHEREعلى ثابت سلسلة كبير يحوي عددًا كبيرًا من النقاط، ويحتوي الجدول على فهرس تخطٍ من نوعbloom_filterأوtokenbf_v1أوngrambf_v1أوtext. كانت مطابقة اسم عمود التصفية مع أعمدة الفهرسJSONAllPaths(...)تُعدّد كل تقسيم للاسم عند النقاط، مما جعل بناء شرط فهرس التخطي ذا تعقيد تربيعي بالنسبة إلى طول الثابت. #113289 (groeneai). - أُصلحت مشكلة إرجاع
ORDER BY ... LIMITلصفوف أقل من المطلوب، وربما دون أي صفوف، عندما كانت سياسة الصفوف عامل التصفية الوحيد في الاستعلام وكان عمود الفرز يحتوي على فهرس تخطٍminmax. كان تحسين أعلى K يضيّق نطاق القراءة قبل تطبيق سياسة الصفوف. #114073 (alexey-milovidov).
إصلاحات مستودع البيانات
- إصلاح استثناء خطأ منطقي عند قراءة جداول Iceberg التي تمت ترقية إصدار تنسيقها بواسطة أداة خارجية (مثل Spark). #100407 (alexey-milovidov).
- إصلاح استثناء (
LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') عند قراءة جداول Iceberg التي تحتوي على ملفات بيانات ORC مع تفعيل تحسين PREWHERE. #101206 (groeneai). - إصلاح استثناءات
LOGICAL_ERRORعند قراءة جداول بحيرة البياناتIcebergأوDeltaLakeعبر مسارات قد تصل إلى مسار القراءة دون تثبيتdatalake_table_state، مثل تحديثات البيانات الوصفية المتزامنة لـIcebergأو قراءاتmergeلجداولDeltaLake. #102033 (groeneai). - إصلاح الظهور المتقطع للخطأ
Logical error: 'Database <name> not found'منDataLakeConfiguration::getCatalogعند تحميل جدول بمحركIcebergداخل قاعدة بيانات عادية أثناء التحميل غير المتزامن للبيانات الوصفية. #103775 (groeneai). - إصلاح قراءات مفرطة للبيانات الوصفية من الكتالوج وS3 عندما تشير عبارة INSERT أو DDL إلى جدول غير موجود في قاعدة بيانات كتالوج DataLake مع تفعيل
show_data_lake_catalogs_in_system_tables. كان مسار اقتراح تصحيح الأخطاء المطبعية يحمّل البيانات الوصفية الكاملة لـ Iceberg لكل جدول في الكتالوج بأكمله، مما قد يستنفد الذاكرة في الكتالوجات الكبيرة. #104124 (il9ue). - إصلاح تضخم
read_bytes(والبايتات/ث المشتقة المعروضة فيsystem.query_logوشريط التقدم وغير ذلك) عند قراءة ملفات Parquet. كان التنفيذ السابق يبلّغ عن إجمالي الحجم المضغوط لمجموعة الصفوف في كل مقطع، لذا كانت قراءة K من أصل N من الأعمدة تؤدي إلى احتساب زائد بمقدارN / K. ويُجمع الآن عبر الأعمدة المحددة فقط. كما يُصلح تتبع التقدم على مستوى الملف لجداول Iceberg، الذي لم يكن يبلّغ سابقًا عن حجم ملف البيانات مطلقًا. #105413 (groeneai). - إصلاح النتائج الخاطئة عند قراءة جدول Iceberg مع
iceberg_use_version_hint = 1بعد أن يقوم كاتب آخر، مثل دالة الجدولicebergLocal/icebergS3، بتحديث الجدول دون هذا الإعداد. يُبقىversion-hint.textالآن متزامنًا بواسطة كل كاتب بمجرد وجود الملف، لذا يرى القراء اللاحقون الذين يستخدمون التلميح أحدث لقطة. #105682 (groeneai). - تحافظ عمليات الكتابة إلى Iceberg الآن على قيم NULL في أعمدة التقسيم
Nullable(T). سابقًا، كانت قيمة NULL التي يكتبها ClickHouse تظهر كالقيمة الافتراضية للنوع الداخلي (0لـint) عند قراءتها مجددًا بواسطة Spark أو قارئات Iceberg الأخرى. #105862 (groeneai). - إصلاح عمليات حذف المواضع في
Icebergv2 بنمط الدمج عند القراءة، التي كانت تعيد صفوفًا خاطئة عندما يشير ملف حذف واحد إلى عدة ملفات بيانات وتنطبق عدة ملفات حذف على ملف البيانات نفسه. تُرشّح إدخالات الحذف الآن بحسب مسار الملف المشار إليه. #105888 (groeneai). - إصلاح تحوّل محرك الجدول
IcebergLocalإلى وضع القراءة فقط بعد دورةDETACH+ATTACHأو إعادة تشغيل الخادم، مما كان يؤدي إلى فشل كل عمليةINSERTلاحقة بالرسالةLocal object storage Local is readonly. (READONLY). #106016 (groeneai). - إصلاح تعطيل ذاكرة التخزين المؤقت لنظام الملفات بصمت في Azure Blob Storage (مثل جداول Delta Lake على Azure) لأن البيانات الوصفية للكائن لم تتضمن قيمة ETag للـ blob. #106091 (thewisenerd).
- أُضيف التحقق من صحة المسار لجداول Delta Lake لمنع البيانات الوصفية من الوصول إلى كائنات خارج موقع التخزين المُهيّأ. #106115 (scanhex12).
- أصبح تقليم أقسام Iceberg يتعامل بصورة صحيحة مع عوامل التصفية
WHERE partition_col = (SELECT ... FROM ...)، حيث يغلّف المحلّل نتيجة الاستعلام الفرعي القيَمي داخليًا في_CAST(Const, 'TargetType')عندما يتطابق نوعا المصدر والهدف. في السابق، كانت عوامل التصفية هذه تعطّل تقليم الأقسام وتؤدي إلى فحص كامل للجدول. #106204 (groeneai). - أُصلحت مشكلة الإبلاغ خطأً عن كتالوجات REST لـ
Icebergالتي تحتوي على جداول على أنها فارغة. #106301 (LefterisXefteris). - أُصلح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند الاستعلام عن جدول Iceberg أو S3 باستخدام شرطWHEREمركّب يتضمنIS NOT NULLلعمود غير مدرج في قائمةSELECT، عند استخدام قارئ Parquet V3 الأصلي. #106443 (tiandiwonder). - أُصلح الإبلاغ المتضخم عن التقدم عند القراءة من جداول Iceberg باستخدام عوامل تصفية
_fileأو_path. في السابق، كان تقدمtotal_bytes_to_readيتضمن جميع الملفات في البيان بغض النظر عن التصفية. #106491 (PedroTadim). - أُصلح استثناء في الخادم (خطأ منطقي
std::out_of_range) عند الإدراج في جدولIcebergلا تتطابق فيه أسماء أعمدة كتلة الكتابة مع معرّفات الحقول في أحدث مخطط للجدول (مثلًا، بعد أن يعيد كاتب متزامن تسمية عمود ضمن نافذةiceberg_metadata_staleness_ms). يفشل الإدراج الآن بخطأ استعلام واضح بدلًا من إيقاف الخادم. #107279 (groeneai). - أُصلح احتمال تجاوز مكدس الخادم (تعطله) عند قراءة مخطط أو قيمة متداخلة بعمق في تنسيقات MsgPack وBSON وORC وParquet وJSON وDeltaLake وIceberg وPaimon. ويُرفض الآن هذا الإدخال المتداخل بعمق مع إصدار استثناء. #107341 (Algunenano).
- أُصلح تعطل (
LOGICAL_ERRORفي إصدارات التصحيح) وخطأ صامت يؤدي إلى نتائج غير صحيحة (في إصدارات الإنتاج) عند قراءة جدول Iceberg تعيد بياناته الوصفية ربطschema-idموجود بمخطط مختلف عبر إصدارات البيانات الوصفية. وتُرفض الآن هذه البيانات الوصفية باستخدامICEBERG_SPECIFICATION_VIOLATION. #107370 (groeneai). - أُصلحت قراءة جداول Iceberg v3 التي تحتوي ملفات بيانات Parquet فيها على أعمدة نسب الصفوف المحجوزة (مثل
_row_id)؛ لم يعد قارئ Parquet الأصلي يثيرICEBERG_SPECIFICATION_VIOLATIONلمعرّفات الحقول المحجوزة التي لا تشكل جزءًا من مخطط الجدول. #107377 (gregakinman). - أُصلح استثناء زائف
filesystem error: in last_write_time: No such file or directoryعند سرد دليل تخزين كائنات على قرص محلي (مثل جدول Iceberg على قرصlocal) أثناء استبدال الملفات بشكل متزامن. ويُستبعد الآن الإدخال الذي أُزيل بشكل متزامن من القائمة بدلًا من إيقاف عملية السرد. #107432 (groeneai). - أُصلح الخطأ ‘يجب تحديد الحساب’ عند قراءة جدول Delta Lake عبر Azure. #107620 (SmitaRKulkarni).
- إصلاح تعطل عند قراءة جداول Iceberg التي تحتوي على ملفات حذف بالمساواة. إذا كان عمود في ملف الحذف بالمساواة يقبل NULL بينما لا يقبله في مخطط الجدول (أو العكس)، كانت القيم المقروءة من ملف الحذف تُدرج في عمود من نوع مختلف عبر تحويل غير متحقق منه (التباس في نوع العمود)، مما يفسد العمود ويتسبب في تعطل الخادم. #109551 (mstetsyuk).
- إصلاح خطأ
ICEBERG_SPECIFICATION_VIOLATIONغير صحيح عند قراءة جدول Iceberg يُسلسَل فيه النوع العشري (أو أي نوع أساسي آخر ذو معلمات) بمسافات بيضاء مختلفة في ملفات البيانات الوصفية، مثلdecimal(20,0)في البيانات الوصفية للجدول وdecimal(20, 0)في البيان. تُقارَن الآن سلاسل الأنواع المتكافئة وفقًا للمواصفة مع تجاهل المسافات البيضاء. #109676 (groeneai). - إصلاح قراءة جداول Iceberg التي يشير ترتيب الفرز الافتراضي فيها إلى عمود يحتاج إلى اقتباس (مثل
@timestamp). كانت هذه الجداول غير قابلة للقراءة لأن عبارةORDER BYالخاصة بالتخزين المُنشأة كانت تُبنى من اسم العمود الخام، ولم يكن بالإمكان تحليلها بسببSYNTAX_ERROR. #110233 (groeneai). - إصلاح قراءة جداول Paimon التي تحتوي على عمود
ARRAYأوMAPيقبل NULL. لم يكن بالإمكان قراءة هذه الجداول إطلاقًا، لأن محوّل المخطط كان يغلّف النوع المركب فيNullable، وهو ما لا يسمح به ClickHouse، لذا كان كل منDESCوSELECTيفشل بالرسالةNested type Array(Nullable(Int32)) cannot be inside Nullable type. يُعيَّن الآن العمود المركب الذي يقبل NULL إلى نوع مركب غيرNullable، وتُقرأ قيمةNULLكقيمة فارغة. #113450 (groeneai). - تسجيل مساحة اسم Iceberg في الكتالوج قبل كتابة ملفات الجدول (مطلوب لـ SeaweedFS) #114285 (azat).
إصلاحات S3/Azure/التخزين الكائني
- إصلاح الاستثناء “Distributed task iterator is not initialized” عند استخدام دوال الجدول
urlأوs3أو ما شابهها في استعلامات تكون فيها النسخ المتماثلة المتوازية مفعّلة. #100146 (alexey-milovidov). - إصلاح تعطل محتمل للخادم في دوال جدول الكتلة (
s3Cluster،urlCluster،fileCluster، …) عندما يُنشئ المخطط عبارةSELECTبعلامةrecursive_withمفعّلة، ولكن من دون تعبيرWITH. #105433 (groeneai). - إصلاح دفع عامل التصفية لـ
ParquetوORCلمسنداتIN (subquery)، مما يتيح استبعاد مجموعات الصفوف والصفحات ومرشحات Bloom عند القراءة منfileوurlوs3والتخزين الكائني. #105863 (arsenmuk). - إصلاح استثناء
LOGICAL_ERRORأثناء التنزيل المسبق إلى الذاكرة المؤقتة عندما يُستبدل كائن S3 بعيد بمحتوى أقصر بين الإدراج والقراءة. #106375 (fm4v). - إصلاح تجاهل دالة الجدول
s3بصمت لقيمة موضعية منpartition_strategyمكتوبة بأحرف صغيرة (مثلhive). #107297 (jkartseva). - إصلاح انحدار كان يؤدي فيه تعيين
compatibility = '26.6'(الذي يفعّل ضمنيًا استراتيجية التقسيمhive) إلى قبول{_partition_id}بصمت في مسارات جداولS3والتخزين الكائني بدلًا من إطلاقBAD_ARGUMENTS. #107437 (LefterisXefteris). - إصلاح قيام دالة الجدول
s3ودوال جداول التخزين الكائني الأخرى بإطلاقLOGICAL_ERRORبدلًا منBAD_ARGUMENTSعند تكرار وسيطة مفتاح-قيمة، مثلs3('http://...', format = 'CSV', format = 'TSV'). #107670 (groeneai). - إصلاح استثناء في الخادم (
Logical error: 'index >= result.start') عند تنسيق استعلام غير صالح يمزج بين صيغتي الوسيطة السرية الموضعية والمسمّاة لدوال الجدولs3/gcs، مثلs3('url', 'a', 'b', secret_access_key = 'c'). #107818 (groeneai). - إصلاح أولوية إعدادات S3 بحيث تكون لكتلة نقطة النهاية
<s3>المقيّدة بـ URL أسبقية على إعدادات<s3>الافتراضية في المستوى الأعلى. #109251 (bharatnc). - إصلاح أخطاء
411 Length Requiredالصادرة من خدمات Azure: إذ يعيّن الآن نقل Azure عبر HTTP المستند إلى Poco قيمةContent-Lengthاستنادًا إلى متن الطلب لعملاء SDK الذين لا يعيّنون الترويسة بأنفسهم (مثل Azure Key Vault). #110299 (thevar1able).
إصلاحات S3Queue
- إصلاح تعطل الخادم (وصول خارج النطاق) في
S3Queue/AzureQueueعند استخدامenable_hash_ring_filtering = 1، إذا كانت الدفعة تحتوي على ملف غير قابل للمعالجة وفشل في الوقت نفسه طلب Keeper لتعيين الدفعة قيد المعالجة. #108977 (groeneai). - إصلاح تسرّب بيانات الاعتماد في
SHOW CREATEوsystem.query_logوسجلات الخادم ومخرجاتEXPLAIN. تخفي جميع صيغ محدداتS3الآنsession_tokenوأسرار Google ADC وقيمextra_credentials/headersفي أي موضع للوسيط، ومفاتيح الأسرار المكررة أو المُنشأة بتعبير، والصيغ الموضعية غير الصالحة (تُرفض بأمان)، وبيانات الاعتماد المضمّنة في عناوين URL الخاصة بـ S3. ويشمل ذلك دوال الجدولs3/s3Clusterذات عنوان URL الصريح والمجموعة المسماة، ومحركات الجداول المستندة إلى S3 (S3وGCSومحركات بحيرة البيانات وS3Queue)، ومحرك قاعدة البياناتS3، وBACKUP ... TO S3، ومحرك قاعدة البياناتBackup. بالإضافة إلى ذلك، أصبحت وسائط الأسرار فيencrypt/decrypt/HMAC المُنشأة بتعبير (بما في ذلك المضمّنة من SQL UDF) مخفية في أسماء الإسقاطات وEXPLAIN QUERY TREEوEXPLAIN actions. #109768 (Algunenano). - إصلاح وضع
OrderedفيS3Queue/AzureQueueمع عُقد المعالجة المستمرة: تُحدَّث أقفال الحاويات الآن أثناء البث، بحيث لا تؤدي عملية تنظيف TTL (persistent_processing_node_ttl_seconds) إلى إزالة أقفال معالج نشط. وإذا فُقدت ملكية القفل رغم ذلك، يُكتشف الأمر ويُبلَّغ عنه (خطأ منطقي وحدث ملف التعريفObjectStorageQueueBucketLockLostOwnership)، ويستأنف البث باستخدام مكرّر ملفات جديد. #110292 (kssenii).
إصلاحات الأمان والتحكّم بالوصول
- إصلاح تعطل في الخادم (SIGSEGV) يمكن لأي مستخدم لديه صلاحية
CREATE TABLEاستغلاله عند إرسالCREATE TABLE ... TO INNER UUID '...'دون عبارةENGINEعبر HTTP أو البروتوكول الأصلي. وكان الخطأ نفسه يؤدي أيضًا إلى تعطل العميل. يُبلغ المحلل الآن عن خطأBAD_ARGUMENTSمناسب بدلًا من فك إشارة مرجع لمؤشر فارغ. #105579 (groeneai). - إصلاح تعطل في الخادم عند الاستعلام عن جداول DeltaLake مع تفعيل
allow_experimental_delta_kernel_rsووجود بيانات اعتماد أو خيار يتضمن بايتات غير صالحة (إذ حدث ذعر في Rust FFI عبر حدextern "C"). #106109 (Algunenano). - إصلاح عدة عمليات قراءة خارج حدود الكومة في قارئ تنسيق Arrow IPC (
ArrowColumnToCHColumn). كان يمكن لملف Arrow مشوه أن يعلن عددًا من الصفوف أكبر مما تحتويه مخازنه المؤقتة، أو يعلن أطوالًا لعناصر تابعة من نوع قائمة/بنية/خريطة لا تتسق مع العنصر الأصل، أو يوفر إزاحات قوائم غير رتيبة، أو يقتطع خريطة بتات صلاحية تابعة، مما يؤدي إلى قراءات تتجاوز نهاية تخصيصات الكومة. يمكن لأي مستخدم لديه امتيازSELECTالوصول إلى ذلك عبرfile()أوformat()أو دوال الجداول أو مدخلات ArrowFlight. يجري الآن التحقق من جميع مخازن البيانات والإزاحات وview-struct وخرائط بتات الصلاحية قبل أي وصول إلى مؤشر خام، كما تُفحص أشكال وإزاحات القائمة/البنية/الخريطة للتأكد من اتساقها. #106395 (Algunenano). - إصلاح خطأ كان يسمح لعمودي
used_privilegesوmissing_privilegesفيsystem.query_logباحتواء سلاسل امتيازات متسربة من استعلامات سابقة غير مرتبطة لمستخدم أو قاعدة بيانات أو جلسة مختلفة. #106425 (alexey-milovidov). - إصلاح تجاوز سعة المخزن المؤقت للكومة (تعطل الخادم) في
decodeHTMLComponentعند فك ترميز سلاسل تحتوي على كيانات HTML الموسعة≫⃒أو≪⃒، ويمكن لأي مستخدم تنفيذ ذلك باستعلامSELECTواحد. #106741 (Algunenano). - إصلاح نتائج استعلامات خاطئة تسبب فيها التخزين المؤقت لشروط الاستعلام عندما كانت الطفرات الفورية (
apply_mutations_on_fly) أو أجزاء التصحيح ترشح الصفوف قبلPREWHERE. كان استعلام يقرأ باستخدامapply_mutations_on_fly = 1قد يفسد التخزين المؤقت بحيث يتخطى استعلام لاحق يستخدمapply_mutations_on_fly = 0والمسند نفسه علاماتٍ كان ينبغي قراءتها، ويُرجع عددًا قليلًا جدًا من الصفوف. يغطي الإصلاح نفسه أيضًا سياسات الأمان على مستوى الصفوف، التي تُضاف كعامل تصفية قبلPREWHERE: إذ كان استعلام يُشغَّل ضمن سياسة صفوف تقييدية قد يفسد التخزين المؤقت لاستعلام لاحق يستخدم المسند نفسه دون تلك السياسة. #107145 (groeneai). - إصلاح تجاوز سعة المخزن المؤقت للكومة (تعطل الخادم) في
windowFunnelعند إنهاء حالة مُعدّة لدالة تجميع تتضمن نوع حدث خارج النطاق، ويمكن لأي مستخدم تنفيذ ذلك باستعلامSELECTواحد. #107412 (uwezkhan). - إصلاح تقييم
currentUser()وuser()وSESSION_USERوauthenticatedUser()كسلسلة فارغة في مسار تفريغ الإدراج غير المتزامن (معasync_insert = 1). أثر ذلك في تعبيرات الأعمدةDEFAULT/MATERIALIZEDوالعروض المادية التي تشير إلى هذه الدوال، والتي كانت تخزن بصمت سلسلة فارغة بدلًا من المستخدم الذي ينفذ الإدراج. #107541 (groeneai). - عند تعيين عدة حصص للمستخدم أو الدور نفسه، تُفرض الآن جميعها معًا (يُرفض الاستعلام إذا تم تجاوز أي منها)، بدلًا من فرض حصة واحدة فقط واختيارها بطريقة غير حتمية. يعرض
SHOW QUOTAوsystem.quota_usageالآن جميع الحصص المفروضة على المستخدم الحالي. #107664 (alexey-milovidov). - يتطلب
SYSTEM RESET DDL WORKERالآن امتيازSYSTEM RESET DDL WORKERالجديد. سابقًا، كان بإمكان أي مستخدم تمت مصادقته، بما في ذلك مستخدميreadonly، تشغيله وإعادة تعيين حالة عامل DDL مرارًا، مما يؤدي إلى حظر DDL عبرON CLUSTER. #108460 (groeneai). - أُصلح تحديد هوية المستخدم عبر
ssl_certificateبحيث يطابق الرمز البديل الواحد*مكوّنًا واحدًا من الاسم فقط (RFC 6125 6.4.3). سابقًا، كان الرمز البديل في موضوعCNأو SAN من نوعDNS:(مثل*.corp.example.com) يطابق أيضًا الأسماء متعددة المكوّنات مثلevil.deep.corp.example.com، مما يتيح لحامل شهادة لنطاق فرعي أعمق المصادقة بصفته مستخدم الرمز البديل. لم تتغير مطابقة SAN من نوعURI:. #108472 (groeneai). - تفرض أوامر بروتوكول MySQL السلكي
COM_FIELD_LIST(mysql_list_fields) وCOM_INIT_DB(USE database) الآن نفس ضوابط الوصول التي تفرضها مكافئاتها في SQL، وهي (SHOW COLUMNS/DESCRIBEوUSE). سابقًا، كان بإمكانها كشف أسماء أعمدة الجداول التي لا يملك المستخدم سوى امتيازات جزئية على أعمدتها، وتغيير قاعدة البيانات الحالية دون امتيازSHOW DATABASES. #108508 (groeneai). - طابق
http_forbid_headersدون حساسية لحالة الأحرف. أسماء ترويسات HTTP غير حساسة لحالة الأحرف، لذا فإن حظرAuthorizationيحظر الآن أيضًاauthorizationوAUTHORIZATIONوغيرها من اختلافات حالة الأحرف. تُطابق الآن أنماطheader_regexpالمُهيأة دون حساسية لحالة الأحرف، دون الحاجة إلى علامة(?i)صريحة. #108509 (groeneai). - أُصلحت ثغرة لكشف البيانات الوصفية، إذ كان
DESCRIBE loop('db', 'table')وDESCRIBE loop(<inner table function>)يتجاوزان فحصSHOW COLUMNS/ الوصول إلى المصدر، مما يتيح لمستخدم غير مخوّل قراءة مخطط أعمدة جدول. #108624 (groeneai). - أُصلح فشل عند بدء التشغيل، إذ تعذّر إرفاق قاعدة بيانات
DataLakeCatalogأُنشئت بإصدار أقدم (25.12 أو أقدم) معauth_headerمشوّه بعد الترقية إلى 26.2 أو أحدث، مما منع بدء تشغيل الخادم. يُتحقق الآن منauth_headerعندCREATEفقط، وعندATTACHيُنشأ الكتالوج عند أول استخدام بدلًا من إنشائه أثناء بدء التشغيل، لذا لم تعد قاعدة بيانات كتالوج واحدة مهيأة بشكل خاطئ أو غير قابلة للوصول تمنع بدء تشغيل الخادم. #108674 (groeneai). - عُزّزت اتصالات RabbitMQ ضد إطارات AMQP الكبيرة على نحو ضار، وطُبقت فحوصات
remote_url_allow_hostsبصورة متسقة علىrabbitmq_address. #112479 (kssenii). - أُصلحت حالة كان فيها
CREATE TABLE ... ENGINE = Distributed(...)دون قائمة أعمدة يكشف بنية جدول محلي لا يُسمح للمستخدم المنشئ برؤيتها. عند تنفيذCREATE، ينفذ الخادم المحلي العملية بنفسه، وتُستنتج البنية الآن ضمن سياق المستخدم نفسه، لذا يلزم امتيازSHOW COLUMNSعلى الجدول الهدف، كما هو مطلوب بالفعل لمحركRemote. لا يشمل ذلكCREATEالمُعاد تشغيله من قائمة انتظار DDL، سواء عبرON CLUSTERأو ضمن قاعدة بياناتReplicated. #113220 (groeneai). - أُصلحت حالة كان فيها
CREATE TABLE ... ENGINE = Buffer(...)من دون قائمة أعمدة قد يكشف بنية جدول وجهة لا يملك المستخدم المُنشئ صلاحية رؤيتها. بالنسبة إلىCREATEالذي ينفّذه الخادم المحلي بنفسه، تُستنتج البنية الآن ضمن سياق المستخدم نفسه، لذا يلزم امتلاك صلاحيةSHOW COLUMNSعلى الوجهة، كما هو مطلوب بالفعل لـMergeوRemote. لا يشمل ذلكCREATEالمُعاد تشغيله من قائمة انتظار DDL (ON CLUSTERأو داخل قاعدة بياناتReplicated). #113372 (groeneai). - حُدِّد حجم رسالة بدء التشغيل لبروتوكول PostgreSQL السلكي، والتي تُقرأ قبل المصادقة. #115708 (alexey-milovidov).
إصلاحات النسخ الاحتياطي والاستعادة
- إصلاح توقف الخادم أثناء تنفيذ
RESTOREلنسخ احتياطية تحتوي على جداول ذات تبعيات دورية. #103824 (thevar1able). - إصلاح تجاهل فئة تخزين S3 (
s3_storage_class/s3_storage_class_name) للكائنات المكتوبة عبر التحميل متعدد الأجزاء على أقراصS3والتخزين الكائني، مما كان يؤدي إلى إنشاء الكائنات الكبيرة بالفئة الافتراضيةSTANDARD. يُقبل اسم الخيار الآن بصيغتيs3_storage_classوs3_storage_class_nameللأقراص والتخزين الكائني والنسخ الاحتياطية. #106214 (alexey-milovidov). - إصلاح تجاهل
SYSTEM RELOAD CONFIGلإعدادات Azure Blob Storage الخاصة بكل نقطة نهاية (مثلuse_native_copy)، مما كان يؤدي إلى تجاهل إعدادات القرص المهيأة لعمليتيBACKUP/RESTOREحتى إعادة تشغيل الخادم. #106357 (jkartseva). - إصلاح فشل النسخ الاحتياطية بالخطأ
FILE_DOESNT_EXISTعند جمع هدفREPLACEلعرض مادي قابل للتحديث على قاعدة بيانات Replicated أو Shared، عندما لم يكن العرض المادي قد أُنشئ بعد على النسخة المتماثلة التي بدأت النسخ الاحتياطي. #106411 (jkartseva). - إصلاح تجاهل Azure
BACKUP/RESTOREلإعدادات نقطة النهاية لأقراصazure_blob_storageذات الصيغة القديمة. #106784 (jkartseva). - إصلاح
BACKUPإلىAzureBlobStorage: كان نسخ ملف بيانات داخل نسخة احتياطية يكتب كائن الوجهة خارج دليل النسخ الاحتياطي. تستخدم عمليات التحقق من وجود كائنات النسخ الاحتياطي على وجهاتS3الآن طلباتHeadObjectدقيقة بدلاً من سرد البادئات، مما يمنع المطابقات الخاطئة للمفاتيح ذات البادئات المتشابهة. #107153 (pamarcos). - لم تعد النسخ الاحتياطية التزايدية تخزن بيانات اعتماد
S3في محدد موقع<base_backup>ضمن ملف البيانات الوصفية.backup. تخزن النسخ الاحتياطية التي أُنشئت باستخدامuse_same_s3_credentials_for_base_backup = 1، أو ببيانات اعتماد صريحة للنسخة الاحتياطية الأساسية تطابق محدد موقع هذه النسخة الاحتياطية، علامة غير سرية وتُستعاد دون إعدادات إضافية وقت الاستعادة؛ أما النسخ الاحتياطية التي أُنشئت ببيانات اعتماد صريحة مختلفة للنسخة الاحتياطية الأساسية أو بوسيطات مصادقة إضافية للنسخة الأساسية، فمررها إلىRESTOREباستخدام إعدادbase_backup. تظل النسخ الاحتياطية التي أنشأتها الإصدارات الأقدم ببيانات اعتماد مضمنة قابلة للاستعادة. #107357 (pamarcos). - إصلاح
RESTOREلجداولReplicatedMergeTreeبحيث تُحفظ الأجزاء ذات المحتوى المكرر من النسخة الاحتياطية بدلاً من إزالة تكرارها بصمت. #107652 (pamarcos). - يشير عنصر نائب
{_partition_id}في مسار محرك شبيه بالملفات (S3أوAzureBlobStorageأوURL، إلخ) دونpartition_strategyصريح إلى استراتيجيةwildcardمجددًا، بغض النظر عنfile_like_engine_default_partition_strategy. يعيد هذا التوافق مع الإصدارات السابقة لعبارات DDL السابقة للإصدار 26.6، التي بدأت تفشل بالخطأBAD_ARGUMENTS(“لا يمكن استخدام استراتيجية التقسيم hive مع حرف بدل ‘_partition_id’ في المسار”). #111279 (fm4v).
إصلاحات ClickHouse Keeper
- إصلاح تنظيف اللقطات في
Keeperبعد فشل عمليات الكتابة، بحيث تُنظَّف اللقطات الجزئية بأمان ويمكن إعادة محاولة الكتابة دون تقديمlatest_snapshot_meta. #105779 (antonio2368). - إصلاح حالات فشل
Keeperأثناء لحاق العقدة التابعة، إذ كان يمكن أن تمتلئ قائمة انتظار استجابات موزّع الطلبات الجديد قبل بدء خيط الاستجابة. #106049. - إصلاح تعلّق Keeper أحيانًا عند بدء التشغيل عند ضبط الإعداد
nuraft_max_log_gap_in_streamعلى قيمة غير افتراضية (القيمة الافتراضية هي 0، أي تعطيل تمرير طلباتappend_entriesعبر خط الأنابيب). #106220 (al13n321). - أصبح TLS الداخلي لـ Keeper Raft يراعي الآن الإعداد
openSSL.client.verificationMode. سابقًا، كان التحقق من شهادة النظير مفعّلًا دائمًا لاتصالات Raft بين عقد Keeper بغض النظر عن هذا الإعداد، لذا كان يتم تجاهلnoneبصمت. الآن، يعطّلnoneصراحةً التحقق من شهادات نظراء Raft، بينما يحافظ غياب الإعداد على السلوك السابق الآمن افتراضيًا. ستتوقف التهيئات التي تضبطnoneصراحةً عن التحقق من شهادات نظراء Raft بعد الترقية، بما يتوافق مع الإعداد المقصود. #106726 (antonio2368). - إصلاح إعادة إنشاء جلسة ZooKeeper دون داعٍ عند إعادة تحميل التهيئة. #107096 (azat).
- إصلاح خطأ في ClickHouse Keeper كانت فيه البيانات الوصفية للّقطة المُبلّغ عنها عبر
last_snapshot(وzk_latest_snapshot_sizeفيmntr) قد تتراجع بعد تثبيت لقطة قديمة أو مكررة، مما كان قد يسمح أيضًا للقطة محلية ذات الفهرس نفسه بالكتابة فوق ملف لقطة مسجّل في مكانه بينما كان لا يزال يُبث إلى نظير أو يُرفع إلى S3. #107321 (antonio2368). - إصلاح تعلّق عرض مادي قابل للتحديث إذا فُقد اتصال ZooKeeper في توقيت غير مناسب. #108234 (al13n321).
- إصلاح الطفرات التي تستخدم معلمة استعلام كقسم (
ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type}): كانت قيمة القسم المستبدلة تُسلسَل ضمن إدخال الطفرة بصيغة لا يمكن تحليلها مجددًا، مما كان يعطل تحميل الجدول (بالنسبة إلى الجداول المنسوخة، على كل نسخة متماثلة). أصبحت أوامر الطفرات تُتحقق أيضًا من إمكانية تحليلها مجددًا قبل كتابتها إلى ZooKeeper أو القرص، بحيث يفشل استعلامALTERعند حدوث عدم تطابق مشابه بدلًا من تعطيل الجدول. #111518 (al13n321). - إصلاح تجاوز عددي أثناء تحليل البيانات لـ
system.zookeeper_info. #111629 (kssenii).
إصلاحات الأعطال وتحسينات الاستقرار
- إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عند استخدام LIMIT BY مع أعمدة ثابتة بالتزامن مع DISTINCT وORDER BY في المحلل الجديد. #93195 (ashrithb).
- تحسين استقرار اتصال HiveCatalog بإضافة آلية لإعادة المحاولة تلقائيًا ومنطق لإعادة الاتصال لمعالجة أخطاء TTransportException عند التواصل مع Hive Metastore. #98471 (otselnik).
- إصلاح طيّ الثوابت أثناء التحليل للدوال ذات التقييم المختصر (
if،multiIf،and،or، إلخ)، بحيث لم تعد الفروع التي يتعذر الوصول إليها بصورة ثابتة تثير استثناءات أثناء التحليل. على سبيل المثال، يعيدWITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n))الآن0بشكل صحيح بدلًا من الفشل بسبب خطأ القسمة على صفر. #103157 (fastio). - إصلاح إنهاء الخادم عند استدعاء
runningAccumulateعلى دالة تجميعية تعيد حالتها الخاصة. #105085 (antaljanosbenjamin). - إصلاح
getServerSettingليعيد القيمة السارية الفعلية لإعدادات الخادم القابلة للتغيير أثناء التشغيل (مثلmax_server_memory_usageوmark_cache_sizeوmax_concurrent_queriesوأحجام تجمعات الخيوط، إلخ)، بما يطابق ما يعرضهsystem.server_settings. #105172 (alexey-milovidov). - إصلاح استثناء
NOT_FOUND_COLUMN_IN_BLOCKعند الجمع بينORDER BY ... WITH FILL INTERPOLATEوLIMIT N BYمع تمكين المحلل. #105481 (yakov-olkhovskiy). - إصلاح استثناء في الخادم (خطأ منطقي
Trying to execute PLACEHOLDER action) عند استخدام تعبير جدول شائعMATERIALIZEDيتضمن استعلامًا فرعيًا مترابطًا بوصفه الطرف الأيمن منIN. ويُرفض هذا التعبير الآن أثناء التحليل، اتساقًا مع رفض النمط نفسه عند الإشارة إلى تعبير الجدول الشائع مباشرةً فيFROM. #105518 (groeneai). - إصلاح عدم التقاط
variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=falseللاستثناءات أثناء تنفيذ الدالة. #105543 (Avogar). - إصلاح استثناء NOT_FOUND_COLUMN_IN_BLOCK عندما يشير تعبير TTL إلى عمود فرعي. #105578 (Avogar).
- إصلاح تعطل للخادم قد يحدث عند إلغاء استعلام يقرأ من PostgreSQL — عبر دالة الجدول postgresql، أو محرك جدول PostgreSQL، أو قاموس بمصدر PostgreSQL — (مثلًا باستخدام KILL QUERY) وفشل إلغاء استعلام PostgreSQL البعيد. #105949 (rorylshanks).
- إصلاح تعطل محتمل بسبب سلسلة حرفية كبيرة جدًا مُرسلة ضمن الاستعلام. #105996 (nickitat).
- إصلاح استثناء
INVALID_WITH_FILL_EXPRESSIONعند استخدامINTERPOLATE ()(فارغ) مع بادئة فرز فيORDER BYوتمكينuse_with_fill_by_sorting_prefix. تُستبعد الآن أعمدة بادئة الفرز بشكل صحيح من مجموعة الاستيفاء الضمنية، بما يطابق سلوكINTERPOLATE (col)المحدد صراحةً. #106001 (yakov-olkhovskiy). - تُرفض الآن حالات
AggregateFunction(uniqTheta, ...)غير الصالحة الواردة من إدخالRowBinaryأو معاملات الاستعلام باستخدامCORRUPTED_DATAبدلًا من إنهاء الخادم. #106260 (groeneai). - إصلاح تعطل وخطأ محتمل
NOT_FOUND_COLUMN_IN_BLOCKعند استخدام التحسين المستند إلى القيود (optimize_using_constraints) مع الاستعلامات الفرعية المترابطة. #106349 (Algunenano). - إصلاح استثناء
NUMBER_OF_COLUMNS_DOESNT_MATCHعند الاستعلام عن جدولDistributedيحتوي على عمودين أو أكثر من نوع ALIAS تتوسع إلى التعبير نفسه (مثلًا عند تعريف كليهما كـtoString(x))، أو عند كتابة التعبير نفسه كمرجع لعمود ALIAS ومباشرةً في قائمة SELECT، مع عبارةORDER BY. #106404 (yakov-olkhovskiy). - إصلاح خطأ
LOGICAL_ERROR“Trying to get name of not a column:ExpressionList” الذي تثيره الاستعلامات التي تمرر علامة النجمة داخلmultiIfإلى وسيطة دالة جدول، مثلnumbers(multiIf(*, ...), 2). يُرفض الآن المُطابِق غير القابل للحل باستخدامUNSUPPORTED_METHOD. #106647 (groeneai). - رفض أنماط glob غير السليمة لـ
fileالتي قد تؤدي إلى تكرار غير محدود عند سرد الدليل. يُفرض الآن حد أقصى لعمق التكرار قدره 1000؛ وتُثير الاستعلامات التي تتجاوزهTOO_DEEP_RECURSIONبدلًا من إيقاف الخادم بسبب تجاوز سعة المكدس. #106676 (groeneai). - إصلاح الاستثناء
'Trying to read from input() twice.'الذي يظهر عند تغليف دالة الجدولinputفي تعبير جدول شائع غير MATERIALIZED يُشار إليه من أكثر من موضع في الاستعلام. يُرفض الاستعلام الآن بخطأ واضحINVALID_USAGE_OF_INPUTفي وقت التخطيط. يُعدinputتدفقًا أحادي الاستخدام من العميل، ولا يمكن أن يستهلكه سوى مصدر واحد في خطة الاستعلام. #106682 (groeneai). - إصلاح الأعمدة غير المتسقة (التي تؤدي لاحقًا إلى LOGICAL_ERROR) عند حدوث استثناء (مثل MEMORY_LIMIT_EXCEEDED) أثناء التحليل. #106802 (azat).
- إصلاح تعطل الخادم (SIGSEGV) عند قراءة بيانات Protobuf مقتطعة مع
input_format_allow_errors_num > 0. #106905 (atsarevskiy). - إصلاح تعطل الخادم (إلغاء مرجع لمؤشر فارغ) عند تشغيل
TRUNCATEأوDROPعلى جدولEmbeddedRocksDBتم تحرير مقبض RocksDB الخاص به، مثل جدولread_onlyأُفرغ دليل بياناته بواسطةTRUNCATEسابق. #106940 (groeneai). - إصلاح استثناء (
std::length_errorيُبلّغ عنه بوصفهLOGICAL_ERROR) عند القراءة من دالة جدول*ClusterمثلurlClusterمع إعدادmax_streams_for_files_processing_in_cluster_functionsكبير جدًا. أصبح عدد التدفقات محدودًا الآن بقيمة معقولة. #106946 (groeneai). - إصلاح إنهاء الخادم عند إلغاء استعلام موزع مباشرةً قبل إرساله إلى جزء. #106950 (groeneai).
- أُصلح استثناء في الخادم (خطأ منطقي
this->visited_views == right->visited_views) عند تنفيذINSERTعندما تكتب طريقتا عرض مادي على جدول المصدر نفسه في جدول الهدف نفسه، بينما تقرأ طريقة عرض تابعة ذلك الجدول، مع تمكينmaterialized_views_squash_parallel_inserts. #107027 (groeneai). - أُصلح استثناء
LOGICAL_ERRORعند الإدراج في جدول DeltaLake بأعمدة لا تطابق مخطط الكتابة الخاص به (مثل عمودNestedيُسطَّح إلى أعمدة فرعية، أو دالة جدول ذات مجموعة فرعية صريحة من الأعمدة). تفشل عمليات الإدراج هذه الآن بخطأINCOMPATIBLE_COLUMNSظاهر للمستخدم بدلاً من ذلك. #107058 (groeneai). - أُصلح
LOGICAL_ERROR(“Table expression … data must be initialized”) الذي كان يظهر عندما يشير محدِّد النجمة المؤهَّل (مثلx.*) إلى تعبير جدول شائع تعاودي باسمه ضمن الجزء التعاودي الخاص به. توسِّع هذه المحددات الآن أعمدة الجدول التعاودي، تماماً كما يفعل عمود مؤهَّل (x.a) أو محدِّد غير مؤهَّل (*) في هذا الموضع. #107144 (groeneai). - أُصلح
LOGICAL_ERROR(“Unexpected exception in refresh scheduling”) كان يمكن أن يُدخل الخادم في حلقة تعطل عند إعادة التشغيل عندما تحتوي طريقة عرض مادية قابلة للتحديث على تبعيةREFRESH ... DEPENDS ON <name>يطابق اسمها غير المؤهَّل جدولاً مؤقتاً أو اسم تعبير جدول شائع. #107156 (groeneai). - أُصلح
LOGICAL_ERROR(Variant N (T) has size X, but expected Y) عند تطبيق دالة مثلtoStringأوconcatعلى عمودVariantأوDynamicيحتوي على متغير واحد غير فارغ إلى جانب قيم NULL، بينما تُرجع الدالة عمود الإدخال دون تغيير. #107374 (groeneai). - أُصلح
LOGICAL_ERROR(block.rows() == getRows()) الذي كان يظهر عند تنفيذINSERTغير متزامن في جدولAliasمع تمكينuse_strict_insert_block_limits. #107400 (groeneai). - أُصلح استثناء في الخادم (
Logical error: Not-ready Set is passed as the second argument for function 'in') عندما احتوى تعبير مفتاح (ORDER BYأوPRIMARY KEYأوPARTITION BYأوINDEXللتخطي) على عامل التشغيلINمع جدول في الطرف الأيمن، مثلORDER BY (x IN some_table). تُرفض تعبيرات المفاتيح هذه الآن عند إنشاء الجدول. #107424 (groeneai). - أُصلح تعطل نادر للخادم أثناء معالجة
DISTINCTكان يمكن أن يحدث عند فشل تخصيص الذاكرة (مثل بلوغ حد الذاكرة) أثناء تهيئة مجموعة المفاتيح المميزة. #107467 (groeneai). - أُصلحت عمليات
DeltaLakeالتي كانت تفشل بعد انتهاء صلاحية بيانات اعتماد S3 المؤقتة، وذلك بتحديث بيانات الاعتماد المخزنة مؤقتاً قبل العملية التالية. كما تُحدَّث بيانات اعتماد STS لتولي الدور بعد فشل المصادقة. #107480 (ahmadov). - أُصلح الخطأ
Not-ready Set is passed as the second argument for function 'in'(LOGICAL_ERROR) عند الاستعلام عن جدول بمفتاحPARTITION BYواستعلام فرعيIN/NOT INمُغلَّف داخل تعبير أكبر، مثلWHERE (c0 IN (SELECT ...)) != 0. #107515 (groeneai). - إصلاح تعطل (إلغاء الإشارة إلى مؤشر فارغ) قد يحدث عند تنفيذ خطة استعلام موزّع محليًا (
make_distributed_plan+distributed_plan_execute_locally) معlog_formatted_queries = 1. #107570 (groeneai). - إصلاح تعطل الخادم عند قراءة عرض مادي يكون هدفه جدول
Distributedأثناء تشغيل الاستعلام معenable_analyzer = 0. #107653 (groeneai). - إصلاح تعطل الخادم (SIGSEGV) عند قراءة بيانات Protobuf مع
input_format_allow_errors_num > 0، عندما تسبق رسالة صالحة رسالةً تالفة قابلة للتخطي ضمن الكتلة نفسها. #107739 (atsarevskiy). - إصلاح تعليق دوال الجدول
odbcوjdbcلعدة دقائق وتجاهلها إلغاء الاستعلام (KILL QUERY،max_execution_time) عندما يصبح الجسر غير مستجيب أثناء استنتاج بنية الجدول البعيد. #107809 (alexey-milovidov). - إصلاح تعطل محتمل (إلغاء الإشارة إلى مؤشر فارغ) عندما لا يكون تجاوز
database/dbفي مجموعة مسماة مُمرَّرة إلىremote()/remoteSecure()اسم قاعدة بيانات ثابتًا، مثلremote(nc, database = (SELECT 1)). يفشل الاستعلام الآن برسالة خطأ واضحة بدلًا من التعطل. #108271 (groeneai). - تُرجع استعلامات البحث المتجهي التي تنفذ SELECT على العمود
_distanceالآن خطأً مناسبًا بدلًا من الفشل معLOGICAL_ERROR. #108423 (rschu1ze). - إصلاح تعطل محتمل (تجاوز سعة المخزن المؤقت في الكومة) عند استخدام عمود حالة دالة تجميع من عائلة
quantileTDigestكمفتاحGROUP BYوتسلسله بالتزامن من عدة خيوط. #110263 (groeneai). - إصلاح الاستبعاد غير الصحيح الناتج عن تحليل فهرس المفتاح الأساسي في الجداول ذات مفتاح فرز عكسي (تنازلي) (
ORDER BY (g, r DESC)). إذ كان يمكن استبعاد حبيبة تمتد عبر تغيير في عمود مفتاح رئيسي يليه عمود مفتاح تنازلي بصورة غير صحيحة، ما يؤدي إلى إسقاط صفوف مطابقة. #111059 (nihalzp). - إصلاح خطأ منطقي
block.rows() == getRows()(قراءة خارج الحدود وتعطل إزالة تكرار الإدراج في إصدارات الإنتاج) عندما يمرINSERTعبر عرض مادي تابع يكون هدفهAliasويغيّر استعلامه الداخلي عدد الصفوف، مع وجود جدول يدعم إزالة التكرار يمكن الوصول إليه بعد الاسم المستعار. #111103 (alexey-milovidov). - إصلاح خطأ تجزئة ناتج عن وصول إلى ذاكرة خارج الحدود عند إلغاء تسلسل حالة دالة تجميع تالفة تحتوي على قيمة
String. ويجري الآن التحقق من هذه الحالات ورفضها بدلًا من أن تؤدي إلى أخطاء تجزئة. #111606 (mstetsyuk). - إصلاح تعطل عند قراءة ملف Parquet يحتوي على بيانات وصفية غير متسقة لمرشح بلوم. وكان يمكن لهذه الملفات أيضًا أن تُرجع بصمت عددًا من الصفوف أقل مما ينبغي. #112498 (tiandiwonder).
- يُصلح خطأ segfault وفسادًا صامتًا للبيانات عند إلحاق
INSERTإلى محركFileأو دالة الجدولfileبملف غير فارغ بتنسيق لا يدعم الإلحاق، مثلAvro. كانت الكتابة عبر واصف ملف أو مسار مُقسَّم تتجاوز الفحص الحالي، مما يؤدي إلى حذف بادئة التنسيق وكتابة رأس ثانٍ بعد البايتات الموجودة، فيصبح الملف غير قابل للقراءة. يُرفض الآنINSERTمن هذا النوع بالخطأCANNOT_APPEND_TO_FILE، كما هو الحال بالفعل عند استخدام مسار عادي. #112839 (groeneai). - يُصلح تعليق
DROP TABLEوSYSTEM STOP VIEWعندما تكون طريقة العرض المادية القابلة للتحديث محظورة أثناء تخطيط استعلام تحديثها. #113188 (evillique). - أُصلح إنهاء نادر للخادم عندما كانت إدخالات قائمة انتظار الإدراج غير المتزامن ذات مواعيد نهائية متطابقة. #113363 (mstetsyuk).
- أُصلح فساد في ذاكرة الكومة عند قراءة Parquet عبر صيغة إدخال تملك مخزن القراءة المؤقت الخاص بها، مثل قاموس يحتوي على
SOURCE(FILE(... format 'Parquet')). كان يمكن لمهام الجلب المسبق وفك الترميز في الخلفية متابعة القراءة والكتابة عبر المخزن المؤقت بعد أن حرره خط الأنابيب، مما قد يؤدي إلى إنهاء الخادم. #114668 (groeneai). - أُصلح تعليق عند حذف جدول
TimeSeriesيكون اسمه مرتبًا معجميًا قبل أسماء جداولِه الداخلية، مثل جدول باسم-ts، أو عند حذف طريقة عرض مادية معلنة باستخدامENGINE = TimeSeries. كان الحذف يتسبب في تعطل ذاتي بسبب قفل حماية DDL، ولم يكن بالإمكان إلغاؤه باستخدامKILL QUERY. #114953 (groeneai).
إصلاحات أخرى للأخطاء
- تدعم الدوال
likeوilikeوnotLikeوnotILikeوmatchالآن سلسلة البحث الثابتة مع نمط غير ثابت (مثل'foo' LIKE pattern_column)، بعد أن كان ذلك يؤدي سابقًا إلى ظهورILLEGAL_COLUMN. #100479 (Onyx2406). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKعند الاختيار من VIEW فوق جدول يحتوي على إسقاط عادي. #101218 (amosbird). - رفض قيم Float64 السالبة (مثل
-100.5) في إعدادات عبء العمل، مثلmax_bytes_per_secondوmax_cpusوغيرها. سابقًا، كان التحقق يقتصر على الأعداد الصحيحة السالبة، مما سمح للقيم العشرية السالبة بإنشاء عقد مجدول معطلة بصمت. #101842 (groeneai). - تستجيب عمليات القراءة من تخزين الكائنات الآن بسرعة لإلغاء الاستعلام. #103016 (SmitaRKulkarni).
- إصلاح تجاهل
input_format_max_block_size_bytesبصمت أثناء تحليلINSERTعندما تكون قيمةmax_insert_block_size_bytesهي0(القيمة الافتراضية). يحد الإعداد الآن بشكل صحيح من حجم الكتل التي تنتجها تنسيقات إدخال الصفوف. #103068 (Fgrtue). - إصلاح إنتاج ClickHouse أحيانًا لرموز GSSAPI غير صالحة بسبب إزالة غير صحيحة لبايتات null اللاحقة. #103114 (EmeraldShift).
- يوسّع EXPLAIN SYNTAX العروض ذات المعلمات. #103263 (jrdi).
- إصلاح تلف البيانات عند كتابة Parquet (والتنسيقات الأخرى ذات التذييل، مثل ORC وArrow) إلى HDFS عبر
INSERT INTO FUNCTION hdfs(...). منذ الإصدار 26.1، لم يكنWriteBufferFromHDFSيفرغ المخزن المؤقت العامل عندfinalize()، لذلك كانت تُفقد بصمت آخر بايتات كل ملف، حتىDBMS_DEFAULT_BUFFER_SIZEبايت، بما في ذلك تذييل ParquetPAR1. وكانت قراءة هذه الملفات تُرجعNot a Parquet file (wrong magic bytes at the end of file). #103268 (groeneai). - إصلاح النتائج الخاطئة واحتمال حدوث خطأ منطقي في الاستعلامات الفرعية المترابطة عند تعيين حد لحجم join (
max_rows_in_join/max_bytes_in_join) معjoin_overflow_mode = 'break'. يتجاهل join الذي يُنشأ داخليًا لتقييم استعلام فرعي مترابط الآن حدود المستخدم هذه، لذلك لم يعد بإمكانه التوقف مبكرًا وإسقاط الصفوف. #103322 (groeneai). - إصلاح النتائج الخاطئة أو عدم استخدام الإسقاط عندما يحتوي إسقاط تجميعي على عدة تجميعات
sumIfبشروطIN (...)مختلفة. #104765 (Ergus). - إصلاح إرجاع
deltaSumTimestampلنتائج خاطئة لأنواع الأعداد الصحيحة الموقعة عند عبورها الصفر. #104830 (thevar1able). - إصلاح الخطأ
Logical error: 'Metadata is not initialized'الذي يظهر عند تنفيذDELETE FROMعلى جدولIcebergأوDeltaLakeأوHudiمرفق حديثًا وملف البيانات الوصفية الخاص به تالف أو يتعذر تحميله. يُبلّغ عن استثناء عادي ظاهر للمستخدم بدلًا من ذلك، ويستمر الخادم في العمل. #104917 (groeneai). - أصبحت استعلامات
ATTACH TABLE name <clauses>;التي تتضمن عبارات تخزين (ORDER BYأوPARTITION BYأوPRIMARY KEYأوSAMPLE BYأوTTLأوUNIQUE KEYأوSETTINGSالخاصة بالمحرك) من دونENGINEتُصدر الآن الخطأBAD_ARGUMENTSبدلًا من إعادة إرفاق الجدول بصمت باستخدام تعريفه المخزن وتجاهل العبارات التي يحددها المستخدم. ولا تزالSETTINGSعلى مستوى جلسة الاستعلام (مثلlog_comment) تُطبَّق. استخدمATTACH TABLE t;لإعادة الإرفاق باستخدام البيانات الوصفية المخزنة، أو استخدمALTER TABLE t MODIFY SETTING ...بعدATTACHلتغيير الإعدادات. #105068 (groeneai). - أُصلح تجاوز سعة المخزن المؤقت في الكومة عند قراءة ملفات Arrow أو ArrowStream التي تحتوي على إزاحات وسيطة تالفة في عمود ثنائي أو نصي، وكذلك إلغاء مرجعية مؤشر فارغ عند قراءة أعمدة Arrow الموسومة جغرافيًا. #105449 (Algunenano).
- أُصلح توقف الخادم عند قراءة الأعمدة الفرعية
Dynamicمن جدولMemoryمضغوط بعدALTER. #105464 (Avogar). - تضمين
skip_first_linesفي مفتاح ذاكرة التخزين المؤقت للمخطط لتنسيقاتWithNames. #105469 (Avogar). - إصلاح إنتاج
histogramلنتائج غير صحيحة عند استخدام مدخلات صغيرة غير مرتبة. #105548 (Avogar). - إصلاح استخدام جدول الإدراج في دوال الجداول عند تفعيل
optimize_trivial_insert_select. #105555 (Avogar). - إصلاح فقدان الدالة الإطارية
estimateCompressionRatioللبيانات المتراكمة بين الصفوف. #105581 (Avogar). - أصبح استخراج قيم أقسام Hive يراعي الآن الإعداد
cast_string_to_date_time_mode، ويقبل افتراضيًا الطوابع الزمنية بتنسيق ISO 8601 ذات لواحق المنطقة الزمنية (مثل+0000و+00:00وZ) في مفاتيح التقسيم. #105584 (alexey-milovidov). - إصلاح استرداد الأخطاء في تنسيق الإدخال
Templateبعد الصفوف غير الصحيحة. #105735 (niyue). - إصلاح تنسيق
SYSTEM INSTRUMENT ADDبحيث تفصل مسافة واحدة بين وسيطات المعالج، ورفض قوائم وسيطات instrumentation غير الصالحة لـSLEEPالتي تحتوي على أكثر من قيمتين أو على نطاق يكون حده الأدنى أكبر من حده الأقصى. #105984 (pamarcos). - إصلاح فشل عمليات أقسام
ALTER TABLEبصمت عند استخدام مفاتيح تقسيم من نوع Bool. #106004 (Avogar). - إصلاح
JSONExtractRawوJSONHasلمسارات JSON محددة النوع ذات قيم افتراضية. #106005 (Avogar). - أُصلحت بادئة
/غير الصحيحة لمسارات الأساس الفارغة في تهيئات بحيرة البيانات. #106013 (thewisenerd). - إصلاح إرجاع
system.dictionariesلصفر من الصفوف عند وجود إلغاء جزئي لصلاحيةSHOW DICTIONARIES. #106105 (Avogar). - إصلاح النتائج غير الصحيحة للاستعلامات على الجداول التي يحتوي
ORDER BYفيها على دالة رتيبة تناقصية مثل(c0 / -42)أوintDiv(c0, -42). كان من الممكن أن تؤدي الشروط على العمود الأساسي (مثلc0 < 0) إلى استبعاد حبيبات تحتوي على صفوف مطابقة بالخطأ، ما يؤدي إلى فقدان نتائج. #106136 (nihalzp). - أُضيف التحقق من حالات التجميع
DDSketchغير الصالحة أثناء الإدراج. #106236 (yariks5s). - إصلاح اتساق ذاكرة التخزين المؤقت لنظام الملفات بعد عمليات التخفيض الفاشلة لـ
SLRU، لمنع بقاء الإدخالات عالقة في حالة إخلاء. كما أُصلح تغيير حجم ذاكرة التخزين المؤقت المنقسمةSystem/Dataوتنظيف المساحة الحرة، بحيث تُحدَّث الحدود ذرّيًا ويمكن استعادة المساحة من كلا مقطعي ذاكرة التخزين المؤقت. #106286 (kssenii). - إصلاح تحويل غير صحيح لقيم
Float16دون العادية إلىFloat32(مثلًا عند قراءتها من ملفات Numpy.npy) بسبب إزاحة المانتيسا بمقدار واحد. #106343 (jh0x). - إصلاح
regexpExtract(haystack, pattern)بحيث تُرجع الأنماط التي لا تحتوي على مجموعة التقاط التطابق كاملًا بدلًا من إصدارINDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE. #106374 (groeneai). - إصلاح خطأ منطقي عند إنشاء قاموس مضلعات من بيانات مصدر تحتوي على إحداثيات نقاط
NaNأو لا نهائية. تُرفض هذه الإحداثيات الآن برسالة خطأ واضحة. #106423 (alexey-milovidov). - يمكن لقواميس HTTP الآن تحديد رؤوس الطلبات عبر المجموعات المسماة. #106459 (ZelvaMan).
- يجري الآن التحقق من قيم التعداد
Avroغير الصالحة ورفضها باستثناء، بدلًا من أن تتسبب في قراءة ذاكرة خارج الحدود وإنهاء الخادم. #106476 (mstetsyuk). - إصلاح عدم مراعاة
LIMIT WITH TIESوLIMIT WITH TIESالكسري لقواعد المقارنة منORDER BY ... COLLATEعند تحديد التعادلات. كانت الصفوف المتساوية وفقًا لقواعد المقارنة (مثل'1'و'01'ضمن ترتيب رقمي) تُقارن بايتًا ببايت، لذا حُذفت بعض الصفوف المتعادلة من النتيجة بالخطأ. #106539 (nihalzp). - إصلاح تحسينات
DISTINCTبالترتيب وLIMIT BYبالترتيب (بما في ذلكLIMIT BYالسالب) التي كانت تُرجع نتائج خاطئة عندما يكون الإدخال مرتبًا وفق قواعد مقارنة (ORDER BY ... COLLATE). تُرتب الصفوف المتساوية وفقًا لقواعد المقارنة (مثل'a'و'A'ضمن ترتيب غير حساس لحالة الأحرف) بحسب مفتاح المقارنة، ولا تكون متجاورة بحسب القيمة؛ لذلك يُتخطى الآن التحسين بالترتيب عند استخدام مُقارِن. #106564 (nihalzp). - إصلاح حالة سباق أثناء إيقاف مستهلك NATS، كان من الممكن أن تؤدي إلى إنهاء الخادم. #106692 (mstetsyuk).
- إصلاح عدة مشكلات تتعلق بأمان الذاكرة واستنفاد الموارد في قارئات التنسيقات التي يمكن الوصول إليها عبر إدخال غير موثوق: قراءة خارج حدود الكومة في معالجة طول مستويات التعريف/التكرار لـ
DataPageV2في قارئ Parquet الأصلي، وتجاوز سعة المكدس في ملفات Parquet ذات المخططات المتداخلة بعمق، وعمليات تخصيص تتجاهلmax_memory_usageعند تحليل هندسة GeoParquet بتنسيق WKB/WKT وسلاسل/بايتات Avro. #106739 (Algunenano). - تم إصلاح قيام
keeper_server.http_control.secure_portبإرسال استجابات HTTP بنص عادي إلى عملاء HTTPS. وأصبح المنفذ الآمن يقدّم HTTPS بشكل صحيح. #106822 (linjiayu1025-collab). - تم إصلاح إصدار
SHOW CREATE ROW POLICYللقيمتينrestrictive/permissiveبأحرف صغيرة بدلًا من الأحرف الكبيرة، على نحو لا يتسق مع الكلمات المفتاحية الأخرى. #106865 (valerypetrov). - تم إصلاح وضع علامة «تالف» على الأجزاء وفصلها عند أي إعادة تحميل للجزء (إعادة تشغيل الخادم، أو
DETACH، أوATTACH) في الجداول التي تحتوي على عمودLowCardinality(Nullable(...))ضمن مفتاح التقسيم. منذ الإصدار 26.5، لم يكن ملف فهرس minmax الخاص بكل جزء يُكتب عندما كانت القيمتان الدنيا والعظمى لهذا العمود هماNULL، بينما كان فحص اتساق الجزء لا يزال يتطلب وجود الملف. تفتقر الأجزاء التي أنشأتها الإصدارات المتأثرة إلى ملف فهرس minmax، ولا تزال بحاجة إلى إعادة إرفاقها يدويًا. #106945 (PedroTadim). - تم إصلاح كون
elapsed_usيساوي صفرًا دائمًا، واحتسابread_rows/read_bytesبأقل من قيمتهما الفعلية، فيsystem.processors_profile_logوsystem.query_logلاستعلامات تفريغ الإدراج غير المتزامن (AsyncInsertFlush). #106982 (cwurm). - تم إصلاح خطأ منطقي
Block structure mismatch in UnionStep stream(توقف الخادم في إصدارات التصحيح/المعقّم، وظهورCode: 49في إصدارات الإنتاج) كان يحدث عندما يقرأ أحد فروعUNION/INTERSECT/EXCEPTعمودًا مُسلسلًا بـSparse، بينما يقرأ الفرع الآخر العمود نفسه كاملًا (مثلًا عند الدفع إلى عرض مادي). #107041 (groeneai). - تم إصلاح ترتيب الصفوف غير الصحيح في استعلامات
ORDER BYعلىUNION ALLعند تمكينoptimize_read_in_orderوread_in_order_use_virtual_row. #107053 (vdimir). - تم إصلاح خطأ في البنية عند اتباع
SHOW ROW POLICIESأوSHOW MASKING POLICIESببندFORMATأوSETTINGSأوINTO OUTFILE(مثلًاSHOW ROW POLICIES FORMAT TabSeparated). #107061 (groeneai). - تم إصلاح قيام
trimLeftوtrimRightوtrimBoth(والأسماء المستعارةltrimوrtrimوtrim) بإلقاءTOO_LARGE_STRING_SIZEعندما تكون مجموعة محارف الإزالة المخصصة أطول من 16 محرفًا. وأصبحت مجموعات الإزالة بأي طول مدعومة مجددًا. #107071 (fm4v). - تم إصلاح تجاوز في الأعداد الصحيحة الموقعة في
quantileExactExclusiveوquantilesExactExclusiveوquantileExactInclusiveوquantilesExactInclusiveكان يمكن أن ينتج عنه نتائج خاطئة لمدخلاتInt64التي تمتد على نطاق واسع. #107154 (groeneai). - لم تعد عمليات إعادة تحميل الإعدادات تعيد تشغيل نصوص البدء، مما يمنع إعادة تنفيذ إجراءات البدء التي تُنفَّذ مرة واحدة. #107187 (mstetsyuk).
- تم إصلاح ترتيب النتائج غير الصحيح لـ
ORDER BYعلىUNION ALLعند تمكينoptimize_read_in_order، عندما كان خط أنابيب الاتحاد يُقلَّص بسبب إعداداتmax_streams_for_union_step؛ إذ يُتخطى هذا التقليص الآن عندما تعتمد الخطة على تدفقات إخراجUNIONالمرتبة. #107208 (vdimir). - تم إصلاح احتمال إلغاء مرجع مؤشر فارغ أثناء تحليل إعدادات الوكيل خلال المراحل المتأخرة من إيقاف الخادم. #107231 (PedroTadim).
- إصلاح مشكلة في
ORDER BY ... WITH FILLكانت تؤدي إلى إنشاء صفوف إضافية عندما يستخدم عمودORDER BYالذي يسبق عمود التعبئة ترتيبًاCOLLATE. تُجمَّع الصفوف الآن حسب بادئة الفرز باستخدام ذلك الترتيب، بما يتوافق مع ترتيب الفرز. #107365 (groeneai). - إصلاح سلوك غير معرّف عند تمرير قيمة فاصلة عائمة غير منتهية (مثل
nanأوinf) بوصفها وسيطة الطابع الزمني أو المدة لدالتي الجدولprometheusQuery/prometheusQueryRange. تؤدي هذه الوسيطة الآن إلى ظهورBAD_ARGUMENTSبدلًا من إنتاج طابع زمني غير صالح. #107417 (groeneai). - إصلاح النتائج غير الصحيحة الناتجة عن التحسين
optimize_rewrite_aggregate_function_with_ifللدوال التجميعية التي تحافظ على قيم حمولةNULL(عائلة*_respect_nulls:anyRespectNullsوfirst_value_respect_nullsوanyLast_respect_nullsوlast_value_respect_nulls). لم يعد التحسين يعيد كتابةf(if(cond, x, NULL))إلى صيغة-Ifلهذه الدوال. #107430 (groeneai). - إضافة تحقق من الحدود غير الصحيحة في إدخال ORC. #107580 (al13n321).
- إصلاح ثغرة رفض خدمة غير موثَّقة بسبب استنفاد الذاكرة على منفذ بروتوكول MySQL. #107599 (tiandiwonder).
- إصلاح مشكلة كانت تجعل واجهة MySQL غير قابلة للاستخدام مع
MySQL Connector/J8.2.0 والإصدارات الأحدث، بما فيها 9.x. أصبح حقلinfoفي حزمةOKالآن مرمّزًا بالطول، بما يتوافق مع خادم MySQL، بحيث يتمكن برنامج تشغيل JDBC من الاتصال. #107693 (alexey-milovidov). - إصلاح الخطأ المنطقي
Block structure mismatch in UnionStep stream(توقف الخادم في إصدارات debug/sanitizer، وCode: 49في إصدارات الإصدار) الذي كان يحدث عندما تختلف الفروع الشقيقة لـUNION/INTERSECT/EXCEPTفقط في مسندWHERE، وكان مسند أحد الفروع يُطوى إلى ثابت في عمودConst. #107719 (groeneai). - لم تعد قراءة بيانات
ArrowوArrowStreamذات أعمدةStringأوBinaryفارغة، والتي ينتجها Apache Arrow Java قبل الإصدار 19.0.0، بما في ذلك Apache Spark، تؤدي إلى ظهورINCORRECT_DATA. #107764 (Algunenano). - أصبحت كتل Native غير الصحيحة التي يشير فيها مميّز
Variantإلى متغير غير موجود تُرفض بأمان. #107991 (uwezkhan). - إصلاح تراجع في الأداء عند قراءة أعمدة
Dynamicباستخدام عدة خيوط. #107997 (Avogar). - أصبح إعداد data lake المتقادم
storage_catalog_urlيُرفض الآن بشكل صحيح بواسطة حارس الكتالوج (إذ كان يُتحقق سابقًا منstorage_catalog_typeوstorage_aws_access_key_idفقط)، وتسرد رسالة الخطأ جميع الإعدادات المتقادمة. #108040 (alexey-milovidov). - إصلاح مشكلة رفض دالة/محرك الجدول
ArrowFlightلمجموعة مسماة لا تتضمن المفتاح الاختياريdataset، مع ظهور الخطأNo such key 'dataset'. #108041 (alexey-milovidov). - أصبحت الأسرار وبيانات الاعتماد الآن محجوبة في
system.query_views_log.view_queryبدلاً من كشفها في SQL للعرض المسجّل. #108214 (Fidelaggio). - إصلاح عدم عمل
type_json_allow_duplicated_key_with_literal_and_nested_objectمع المسارات المحددة النوع في JSON. #108218 (Avogar). - إصلاح سلوك غير معرّف (تمرير مؤشر فارغ إلى
memcpy) في الدالتينdetectCharsetوdetectLanguageUnknownعندما تتجاوز سلسلة الإدخال 32768 بايت ولا يمكن اكتشاف أي مجموعة محارف. #108250 (groeneai). - إصلاح الخطأ
NOT_FOUND_COLUMN_IN_BLOCKفي الاستعلامات التي تستخدم الأعمدة الافتراضية_part_starting_offset/_part_offsetفي WHERE مع التجسيد المؤجل. #108287 (vdimir). - إخفاء الوسائط السرية للدوال مثل
encryptوdecryptوHMACفي مخرجاتEXPLAIN actionsوEXPLAIN headerوEXPLAIN PIPELINEعند تعطيلformat_display_secrets_in_show_and_select(وهو الإعداد الافتراضي). #108386 (Algunenano). - ينجح
CREATE OR REPLACEالآن لعرض مادي قابل للتحديث عندما يكون هدفه فيTOمملوكاً بالفعل للعرض نفسه. وتظل الأهداف المملوكة لعرض آخر مرفوضة. #108392 (evillique). - قُيّد مسار نموذج
catboostEvaluateبدليلuser_files، على غرارfile()ومصادر القواميس. في السابق، كانت الدالة تقبل مساراً عشوائياً في نظام الملفات دون التحقق من بقائه ضمن الدليل، مما أتاح التحقق من وجود ملفات خارجuser_filesوتحفيز قراءتها. ويجب الآن أن توجد النماذج داخلuser_files. #108463 (groeneai). - إصلاح مشكلة كانت تجعل
CREATE OR REPLACE MATERIALIZED VIEW ... POPULATEيترك العرض الجديد غير مرتبط بجدول المصدر، مما كان يؤدي بصمت إلى إسقاط كل صف يُدرج بعد الاستبدال. #108728 (alexey-milovidov). - إصلاح خطأ تجزئة عند دمج حالات التجميع
uniqExactمعGROUPING SETSأوROLLUPأوCUBEوmax_threads > 1. #108928 (Algunenano). - إصلاح خطأ منطقي محتمل “تدفق فرعي غير متوقع … للعمود …” أثناء رفع إعداد التوافق. #109496 (Avogar).
- تتعامل الدالة
getClientHTTPHeaderالآن مع أسماء الترويسات بوصفها غير حساسة لحالة الأحرف، وفقاً لـRFC 9110؛ وبالتحديد، تُرشّح ترويسةauthorizationالآن بغض النظر عن حالة الأحرف. #109791 (Felixoid). - إصلاح فقدان صامت للبيانات مع عمليات الإدراج غير المتزامنة وإزالة التكرار (
async_insert=1,async_insert_deduplicate=1). عندما كانت عدة إدخالات async-insert ذات قيم مميزة لـinsert_deduplication_tokenتُدمج في عملية flush واحدة تكتب إلى أقسام منفصلة، كان كل رمز يُسجّل في سجل إزالة التكرار لكل قسم لمسته عملية flush، وليس فقط القسم الذي وصلت إليه صفوفه. ثم كانت عملية إدراج لاحقة تعيد استخدام أحد هذه الرموز في قسم لم تُكتب فيه أي صفوف بهذا الرمز تُزال كتكرار بصمت. تُسجّل الرموز الآن فقط للقسم الذي وصلت إليه صفوفها فعلياً. #111049 (groeneai). - تم إصلاح عمليات الإدراج غير المتزامنة بتنسيق Native، بحيث لم يعد إدخال واحد مخزّن مؤقتًا يصبح غير متوافق بعد
ALTER ... MODIFY COLUMNيتسبب في فشل الدفعة بأكملها. #111108 (Felixoid). - تم إصلاح مشكلة
CREATE OR REPLACEلقاموس باستخدام كائن من نوع آخر، إذ كان يفشل بالخطأCANNOT_DETACH_DICTIONARY_AS_TABLEبعد تثبيت الاستبدال، تاركًا جدول_tmp_replace_*يتيمًا. #111142 (evillique). - تم إصلاح تسرّب في ذاكرة شهادة النظير أثناء مصافحات TLS مع تفعيل التحقق من الشهادات. #111425 (thevar1able).
- تم إصلاح خطأ منطقي
Block structure mismatch in IntersectOrExceptStep stream: different number of columnsقد يحدث عند تشغيل تحسين تقسيم عامل التصفية (query_plan_split_filter) على عبارةWHEREيكون فيها اسم عمود عامل التصفية هو نفسه اسم عمود إدخال. كان التحسين يترك العمود الداخلي__split_filterفي ترويسة مخرجات الفرع، فتختلف عن ترويسة الفرع الشقيق في عملية مجموعات مثلINTERSECTأوUNION. #111930 (groeneai). - تم إصلاح النتائج غير الصحيحة لعوامل التصفية أو تعبيرات
ORDER BYالتي تستخدمtoStringمع قيمTimeأوTime64أوDateTimeفي المناطق الزمنية التي تطبق التوقيت الصيفي. كما استُعيد تحسين القراءة بالترتيب لـORDER BYعلى بادئة من مفتاح فرز الجدول، وللتحويلات منStringإلىNullable(String). #113291 (vdimir). - تم إصلاح
ATTACHلجدولKafkaعندما يتجاوزkafka_num_consumersالحد المستمد من عدد أنوية CPU. #113390 (evillique). - تم تعطيل تحليل الفهرس الموزع عند استخدام الإسقاطات لمنع نتائج الاستعلامات غير الصحيحة. #115132 (azat).
- تم إصلاح خطأ في الدالة
formatRowNoNewlineقد يؤدي إلى نتائج غير صحيحة أو خطأ منطقي عند تنسيق صف إلى نتيجة فارغة. #115669 (alexey-milovidov). - لم تعد نتيجة قيمة حرفية لسلسلة ثنائية لا يكون طولها مضاعفًا للثمانية، أو مفكك ضغط LZ4 عند عدم احتواء كتلة مضغوطة على جسم، تُرجع ذاكرة غير مهيأة. #115704 (alexey-milovidov).
- تم تضمين مسارات الكائنات في تجزئات إزالة التكرار لمنع إزالة تكرار قيم الكائنات المختلفة بشكل غير صحيح. #115866 (Felixoid).