التغييرات غير المتوافقة مع الإصدارات السابقة
-
تغيير اسم العمود من
duration_msإلىduration_microsecondsفي جدولsystem.zookeeperليعكس أن المدة تُقاس بدقة الميكروثانية. #60774 (Duc Canh Le). -
عدم السماح بتعيين
max_parallel_replicasإلى0لأن ذلك غير منطقي. وقد يؤدي تعيينه إلى0إلى أخطاء منطقية غير متوقعة. إغلاق #60140. #61201 (Kruglov Pavel). -
إزالة دعم استعلام
INSERT WATCH(وهو جزء من الميزة التجريبيةLIVE VIEW). #62382 (Alexey Milovidov). -
تم إهمال استخدام الدوال
neighborوrunningAccumulateوrunningDifferenceStartingWithFirstValueوrunningDifference(لأنها عرضة للأخطاء). ينبغي استخدام دوال النافذة المناسبة بدلاً من ذلك. ولإعادة تفعيلها، اضبطallow_deprecated_error_prone_window_functions=1. #63132 (Nikita Taranov).
التغييرات غير المتوافقة مع الإصدارات السابقة
- في الإصدار الجديد من ClickHouse، ستستخدم الدوال geoDistance وgreatCircleDistance وgreatCircleAngle نوع البيانات ذي الفاصلة العائمة مزدوجة الدقة 64-بت في الحسابات الداخلية، وكذلك كنوع إرجاع إذا كانت جميع الوسيطات من نوع Float64. وبذلك يُغلَق #58476. في الإصدارات السابقة، كانت الدالة تستخدم دائمًا Float32. يمكنك العودة إلى السلوك القديم بتعيين geo_distance_returns_float64_on_float64_arguments إلى false أو تعيين compatibility إلى 24.2 أو أقدم. #61848 (Alexey Milovidov).
- ستعمل الاستعلامات من system.columns بسرعة أكبر عند وجود عدد كبير من الأعمدة، إذا لم يكن امتياز SHOW TABLES ممنوحًا للعديد من قواعد البيانات أو الجداول. لاحظ أنه في الإصدارات السابقة، إذا منحت SHOW COLUMNS لأعمدة منفردة دون منح SHOW TABLES للجداول المقابلة، فسيعرض جدول system.columns هذه الأعمدة، لكنه سيتخطى الجدول بالكامل في الإصدار الجديد. أُزيلت رسائل trace log “Access granted” و”Access denied” التي كانت تُبطئ الاستعلامات. #63439 (Alexey Milovidov).
- إصلاح حالة تعطل في largestTriangleThreeBuckets. يغيّر هذا سلوك هذه الدالة ويجعلها تتجاهل قيم NaN في السلسلة المُمرَّرة. لذلك قد تختلف مجموعة النتائج عن الإصدارات السابقة. #62646 (Raúl Marín).
الميزات الجديدة
- المحلّل الجديد مفعّل افتراضيًا على الخدمات الجديدة.
- يدعم حذف عدة جداول في الوقت نفسه، مثل drop table a,b,c;. #58705 (zhongyuankai).
- يمكن للمستخدم الآن معالجة CRLF مع تنسيق TSV باستخدام الإعداد input_format_tsv_crlf_end_of_line. يُغلق هذا #56257. #59747 (Shaun Struwig).
- أصبح الآن من الممكن منح صلاحيات على محرك الجدول، ولن يؤثر ذلك في سلوك المستخدمين الحاليين. #60117 (jsc0218).
- يضيف تنسيق Form لقراءة/كتابة سجل واحد بتنسيق application/x-www-form-urlencoded. #60199 (Shaun Struwig).
- أُضيفت إمكانية الضغط في CROSS JOIN. #60459 (p1rattttt).
- إعداد جديد input_format_force_null_for_omitted_fields يفرض قيم NULL للحقول المُهمَلة. #60887 (Constantine Peresypkin).
-
دعم join مع شروط عدم مساواة تتضمن أعمدة من كلٍّ من الجدول الأيسر والجدول الأيمن، مثل:
t1.y < t2.y. للتمكين، SET allow_experimental_join_condition = 1. #60920 (lgbo). - إضافة دالة جديدة، getClientHTTPHeader. يُغلق هذا #54665. بالمشاركة في التأليف مع @lingtaolf. #61820 (Alexey Milovidov).
- للتيسير، سيعمل SELECT * FROM numbers() بالطريقة نفسها التي يعمل بها SELECT * FROM system.numbers — من دون حد. #61969 (YenchangChan).
- أصبح تعديل إعدادات جدول Memory عبر ALTER MODIFY SETTING مدعومًا الآن. ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).
- يدعم المحلّل عبارات CTE التعاودية. #62074 (Maksim Kita).
- في السابق، لم تكن وحدة تخزين S3 ودالة جدول S3 تدعمان الاستعلام من ملفات الأرشيف. أُضيف حل يتيح التكرار على الملفات داخل الأرشيفات في S3. #62259 (Daniil Ivanik).
- إضافة دعم للدالة الشرطية clamp. #62377 (skyoct).
- إضافة تنسيق الإخراج npy. #62430 (豪肥肥).
- يدعم المحلّل عبارة QUALIFY. يُغلق هذا #47819. #62619 (Maksim Kita).
- أُضيفت مَعلَمة الاستعلام role إلى واجهة HTTP. وهي تعمل بطريقة مشابهة لـ SET ROLE x، إذ تطبّق الدور قبل تنفيذ العبارة. يتيح ذلك تجاوز أحد قيود واجهة HTTP، إذ لا يُسمح بعدة عبارات، ولا يمكن إرسال كلٍّ من SET ROLE x والعبارة نفسها في الوقت ذاته. ويمكن تعيين عدة أدوار بهذه الطريقة، مثلًا ?role=x&role=y، وهو ما يعادل SET ROLE x, y. #62669 (Serge Klochkov).
- إضافة SYSTEM UNLOAD PRIMARY KEY. #62738 (Pablo Marcos).
- أُضيفت دوال SQL generateUUIDv7 وgenerateUUIDv7ThreadMonotonic وgenerateUUIDv7NonMonotonic (مع مفاضلات مختلفة بين التزايدية والأداء) لتوليد معرّفات UUID من الإصدار 7، أي معرّفات UUID مستندة إلى الطابع الزمني مع مكوّن عشوائي. وأُضيفت أيضًا الدالة الجديدة UUIDToNum لاستخراج البايتات من UUID، والدالة الجديدة UUIDv7ToDateTime لاستخراج مكوّن الطابع الزمني من UUID الإصدار 7. #62852 (Alexey Petrunyaka).
- أُضيف Raw كمرادف لـ TSVRaw. #63394 (Unalian).
- أُضيفت إمكانية تنفيذ CROSS JOIN باستخدام ملف مؤقت إذا تجاوز الحجم الحدود. #63432 (p1rattttt).
تحسينات الأداء
- تخطّي دمج كتل الإسقاط المُنشأة حديثًا أثناء عمليات INSERT. #59405 (Nikita Taranov).
- تقليل الحمل الإضافي لعمليات mutations في استعلامات SELECT (الإصدار 2). #60856 (Azat Khuzhin).
- تحسينات على دفع مرشحات JOIN إلى الأسفل باستخدام مجموعات متكافئة. #61216 (Maksim Kita).
- إضافة مرحلة جديدة في المحلل لتحسين تعبير IN ذي القيمة الواحدة. #61564 (LiuNeng).
- تُعالَج دوال السلاسل النصية XXXUTF8 الآن بطريقة “ASCII” إذا كانت سلاسل الإدخال تتكون بالكامل من محارف ASCII. هذا التحسين مستوحى من apache/doris#29799. وتسارع الأداء الإجمالي بمقدار 1.07x~1.62x. ويُلاحظ أيضًا أن ذروة استخدام الذاكرة انخفضت في بعض الحالات. #61632 (李扬).
- تم تفعيل مُرمّز Parquet السريع افتراضيًا (output_format_parquet_use_custom_encoder). #62088 (Michael Kolupaev).
- تحسين JSONEachRowRowInputFormat عبر تخطّي جميع الحقول المتبقية بعد قراءة كل الحقول المطلوبة. #62210 (lgbo).
- تم تسريع الدالتين splitByChar و splitByRegexp بشكل ملحوظ. #62392 (李扬).
- تحسين عمليات insert select البسيطة من الملفات في table functions من نوع file/s3/hdfs/url/… . وإضافة الإعداد المنفصل max_parsing_threads للتحكم في عدد الخيوط المستخدمة في parsing المتوازي. #62404 (Kruglov Pavel).
- دعم write buffer متوازٍ لـ AzureBlobStorage عبر الإعداد azure_allow_parallel_part_upload. #62534 (SmitaRKulkarni).
- أصبحت الدالتان to_utc_timestamp و from_utc_timestamp الآن أسرع بنحو الضعف. #62583 (KevinyhZou).
- تعمل الدوال parseDateTimeOrNull و parseDateTimeOrZero و parseDateTimeInJodaSyntaxOrNull و parseDateTimeInJodaSyntaxOrZero الآن بسرعة أكبر بكثير (من 10x إلى 1000x) عندما يحتوي الإدخال في الغالب على قيم غير قابلة للتحليل. #62634 (LiuNeng).
- تغيير سلوك HostResolver عند الفشل بحيث يحتفظ بسجل واحد فقط لكل IP. #62652 (Anton Ivashkin).
- إضافة الإعداد الجديد prefer_merge_sort_block_bytes للتحكم في استخدام الذاكرة وتسريع الفرز بمقدار الضعف عند الدمج في حال وجود عدد كبير من الأعمدة. #62904 (LiuNeng).
- تحسين في QueryPlan لتحويل OUTER JOIN إلى INNER JOIN إذا كان filter بعد JOIN يستبعد القيم الافتراضية دائمًا. ويمكن التحكم في هذا التحسين عبر الإعداد query_plan_convert_outer_join_to_inner_join، وهو مفعّل افتراضيًا. #62907 (Maksim Kita).
- تفعيل optimize_rewrite_sum_if_to_count_if افتراضيًا. #62929 (Raúl Marín).
- تحسينات دقيقة على المحلل الجديد. #63429 (Raúl Marín).
- سيعمل تحليل الفهارس إذا تمت مقارنة DateTime مع DateTime64. هذا يُغلق #63441. #63443 (Alexey Milovidov).
- تسريع الفهارس من النوع set قليلًا (بنحو 1.5 مرة) عبر إزالة الأجزاء غير الضرورية. #64098 (Alexey Milovidov).
تحسينات
- أُزيل الإعداد optimize_monotonous_functions_in_order_by لأنه أصبح no-op. #63004 (Raúl Marín).
- يمكن الآن أن تكون مفاتيح Maps من الأنواع Float32 وFloat64 وArray(T) وMap(K,V) وTuple(T1, T2, …). يُغلق هذا #54537. #59318 (李扬).
- إضافة WriteBuffer غير متزامن لـ AzureBlobStorage، على غرار S3. #59929 (SmitaRKulkarni).
- سلاسل multiline النصية مع الحفاظ على الحدود وإمكانية تغيير عرض العمود. #59940 (Volodyachan).
- جعل RabbitMQ ينفّذ nack للرسائل التالفة. يُغلق هذا #45350. #60312 (Kseniia Sumarokova).
- إضافة إعداد first_day_of_week يؤثر في أول يوم من الأسبوع الذي تعتمده الدوال toStartOfInterval(…, INTERVAL … WEEK). يوفّر ذلك اتساقًا مع الدالة toStartOfWeek التي تعتمد يوم الأحد افتراضيًا كأول يوم في الأسبوع. #60598 (Jordi Villar).
- تمت إضافة العمود الافتراضي الدائم _block_offset الذي يخزّن الرقم الأصلي للـ row داخل block عند تعيينه وقت insert. ويمكن تفعيل استمرارية العمود _block_offset عبر الإعداد enable_block_offset_column. كما أُضيف العمود الافتراضي _part_data_version الذي يحتوي إما على الحد الأدنى لرقم block أو إصدار mutation الخاص بالـ part. ولم يعد العمود الافتراضي الدائم _block_number يُعتبر Experimental. #60676 (Anton Popov).
- أصبحت الدالتان date_diff وage تحسبان النتيجة الآن بدقة nanosecond بدلًا من microsecond. كما تدعمان الآن nanosecond (أو nanoseconds أو ns) كقيمة ممكنة للمعامل unit. #61409 (Austin Kothig).
- لم تعد marks تُحمَّل للأجزاء wide parts أثناء merges. #61551 (Anton Popov).
- تفعيل output_format_pretty_row_numbers افتراضيًا، لما يوفّره من سهولة استخدام أفضل. #61791 (Alexey Milovidov).
- سيعمل شريط التقدّم مع queries البسيطة التي تستخدم LIMIT من system.zeros وsystem.zeros_mt (وهو يعمل أصلًا مع system.numbers وsystem.numbers_mt)، وكذلك مع table function generateRandom. وكميزة إضافية، إذا كان العدد الإجمالي للسجلات أكبر من الحد max_rows_to_read، فسيتم throw an exception في وقت أبكر. يُغلق هذا #58183. #61823 (Alexey Milovidov).
- إضافة TRUNCATE ALL TABLES. #61862 (豪肥肥).
- إضافة الإعداد input_format_json_throw_on_bad_escape_sequence، إذ يتيح تعطيله حفظ تسلسلات الهروب غير الصحيحة في JSON input formats. #61889 (Kruglov Pavel).
- تم تصحيح الصياغة من “a” إلى “the” في رسالة التحذير. يوجد Atomic engine واحد فقط، لذا ينبغي أن تكون العبارة “to the new Atomic engine” بدلًا من “to a new Atomic engine”. #61952 (shabroo).
- إصلاح خطأ منطقي عند التراجع عن transaction لعملية quorum insert. #61953 (Han Fei).
- استنتاج Nullable column types تلقائيًا من schema الخاصة بـ Apache Arrow. #61984 (Maksim Kita).
- إتاحة إلغاء الدمج المتوازي لـ aggregate states أثناء التجميع. مثال: uniqExact. #61992 (Maksim Kita).
- لا يُعاد تحميل dictionary source مع INVALIDATE_QUERY مرتين عند بدء التشغيل. #62050 (vdimir).
- سيؤدي OPTIMIZE FINAL في ReplicatedMergeTree الآن إلى انتظار اكتمال عمليات الدمج النشطة حاليًا، ثم إعادة محاولة جدولة دمج نهائي. وهذا يجعله أكثر توافقًا مع سلوك MergeTree المعتاد. #62067 (Nikita Taranov).
- عند read data من Hive Text File، كان السطر الأول من الملف يُستخدم لإعادة ضبط عدد حقول الإدخال، وأحيانًا لا يتطابق عدد الحقول في هذا السطر مع ما هو معرّف في Hive table. على سبيل المثال، قد تكون Hive table معرّفة بحيث تحتوي على 3 columns، مثل test_tbl(a Int32, b Int32, c Int32)، لكن السطر الأول من الملف النصي يحتوي على حقلين فقط. في هذه الحالة، سيُعاد ضبط حقول الإدخال إلى 2، وإذا كان السطر التالي من الملف النصي يحتوي على 3 حقول، فلن تتم قراءة الحقل الثالث بل ستُسند إليه default value وهي 0، وهذا غير صحيح. #62086 (KevinyhZou).
- سيعمل تمييز الصياغة أثناء الكتابة في client على مستوى Syntax (بينما كان يعمل سابقًا على مستوى lexer). #62123 (Alexey Milovidov).
-
إصلاح مشكلة تتسبب في عدم استخدام primary index عند إضافة = 1 أو = 0 بشكل زائد بعد تعبير Boolean يتضمن primary key. على سبيل المثال، فإن كلًا من
SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1وSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0سينفذ فحصًا كاملًا للجدول، رغم إمكانية استخدام primary index. #62142 (josh-hildred). - تمت إضافة الإعداد lightweight_deletes_sync (default value: 2 - انتظار جميع replicas بشكل متزامن). وهو مشابه للإعداد mutations_sync، لكنه يؤثر فقط في سلوك lightweight deletes. #62195 (Anton Popov).
- التمييز بين القيم Boolean والأعداد الصحيحة أثناء parsing values الخاصة بـ custom settings: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
- دعم الوصول إلى S3 عبر endpoints من نوع AWS Private Link Interface. يغلق #60021 و #31074 و #53761. #62208 (Arthur Passos).
- يجب على Client إرسال header ‘Keep-Alive: timeout=X’ إلى server. وإذا تلقّى client استجابة من server تتضمن هذا header، فيجب عليه استخدام القيمة الواردة من server. كما يُفضَّل ألا يستخدم client connection أوشك على انتهاء صلاحيته، تجنبًا لحدوث تسابق عند connection close. #62249 (Sema Checherinda).
- تمت إضافة وحدات nano- و micro- و milliseconds إلى date_trunc. #62335 (Misz606).
- لم يعد query cache يخزّن نتائج queries على system tables (system., information_schema., INFORMATION_SCHEMA.*). #62376 (Robert Schulze).
- قد يتأخر استعلام MOVE PARTITION TO TABLE أو قد يُطلق استثناء TOO_MANY_PARTS لتجنّب تجاوز حدود عدد الأجزاء. تُطبَّق الإعدادات والحدود نفسها كما في استعلام INSERT (راجع max_parts_in_total و parts_to_delay_insert و parts_to_throw_insert و inactive_parts_to_throw_insert و inactive_parts_to_delay_insert و max_avg_part_size_for_too_many_parts و min_delay_to_insert_ms وإعدادات max_delay_to_insert). #62420 (Sergei Trifonov).
- جعل transform يعيد دائمًا أول تطابق. #62518 (Raúl Marín).
- تجنّب تقييم تعبيرات DEFAULT للجدول أثناء تنفيذ RESTORE. #62601 (Vitaly Baranov).
- السماح باستخدام quota key مع مخطط مصادقة مختلف في طلبات HTTP. #62842 (Kseniia Sumarokova).
- إغلاق الجلسة إذا تم بلوغ valid_until الخاص بالمستخدم. #63046 (Konstantin Bogdanov).