تغيير غير متوافق مع الإصدارات السابقة
- أصبح من الممكن كتابة
SETTINGSقبلFORMATفي سلسلة من الاستعلامات التي تستخدمUNIONعندما تكون الاستعلامات الفرعية داخل أقواس. يُغلق هذا #39712. ويغيّر ذلك السلوك عند تحديد عبارة SETTINGS مرتين ضمن التسلسل نفسه. إذ ستكون الأولوية لعبارة SETTINGS الأقرب إلى الاستعلام الفرعي المعني. في الإصدارات السابقة، كان يمكن لعبارة SETTINGS الخارجية أن تكون لها أولوية على الداخلية. #60197#68614 (Alexey Milovidov). - أُعيد تنفيذ النوع Dynamic. الآن، عند بلوغ الحد الأقصى لأنواع البيانات الديناميكية، لا تُحوَّل الأنواع الجديدة إلى String، بل تُخزَّن في بنية بيانات خاصة بتنسيق ثنائي مع ترميز نوع البيانات ثنائياً. كما أصبح بالإمكان قراءة أي نوع أُدرج سابقاً في عمود Dynamic منه كعمود فرعي. #68132 (Pavel Kruglov).
- أصبحت التعبيرات مثل
a[b].cمدعومة في الـ tuples المسماة، وكذلك الفهارس المسماة على تعبيرات اعتباطية، مثلexpr().name. وهذا مفيد لمعالجة JSON. يُغلق هذا #54965. في الإصدارات السابقة، كان التعبير بالشكلexpr().nameيُحلَّل على أنهtupleElement(expr(), name)، وكان محلل الاستعلامات يبحث عن عمودnameبدلاً من عنصر الـ tuple المقابل؛ أما في الإصدار الجديد، فقد أصبحtupleElement(expr(), 'name'). في معظم الحالات، لم يكن السلوك السابق يعمل، لكن يمكن تصوّر حالة نادرة جداً قد يؤدي فيها هذا التغيير إلى عدم توافق: إذا كنت قد خزّنت أسماء عناصر الـ tuple في عمود أو alias، وكان اسمه مختلفاً عن اسم عنصر الـ tuple:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a. من غير المرجح جداً أنك استخدمت مثل هذه الاستعلامات، لكن لا يزال يتعين علينا وسم هذا التغيير بأنه قد يكون غير متوافق مع الإصدارات السابقة. #68435 (Alexey Milovidov). - عند تمكين الإعداد
print_pretty_type_names، سيُعرَض نوع البياناتTupleبصيغة Pretty في عباراتSHOW CREATE TABLE، ودالةformatQuery، والوضع التفاعلي فيclickhouse-clientوclickhouse-local. في الإصدارات السابقة، كان هذا الإعداد يُطبَّق فقط على استعلاماتDESCRIBEوtoTypeName. يُغلق هذا #65753. #68492 (Alexey Milovidov). - أصبح الآن مسموحاً افتراضياً بإعادة ترتيب شروط التصفية من عبارة
[PRE]WHERE. ويمكن تعطيل ذلك بضبطallow_reorder_prewhere_conditionsعلىfalse. #70657 (Nikita Taranov). - إصلاح تحسين
optimize_functions_to_subcolumns(إذ كان يمكن سابقاً أن يؤدي إلى الخطأInvalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String))، وذلك مع الحفاظ على النوعLowCardinalityفيmapKeys/mapValues. #70716 (Azat Khuzhin).
ميزة جديدة
- أصبحت العروض المادية القابلة للتحديث جاهزة لبيئات الإنتاج. #70550 (Michael Kolupaev). وأصبحت العروض المادية القابلة للتحديث مدعومة الآن في قواعد بيانات Replicated. #60669 (Michael Kolupaev).
- أصبحت الدالة
toStartOfInterval()تدعم الآن صيغة تحميل زائد جديدة تحاكي الدالةtime_bucket()في TimescaleDB، وكذلك الدالةdate_bin()في PostgreSQL. (#55619). ويتيح ذلك محاذاة قيم التاريخ أو الطابع الزمني مع مضاعفات فاصل زمني معيّن انطلاقًا من نقطة بداية اعتباطية (بدلًا من 0000-01-01 00:00:00.000 كنقطة بداية ثابتة). على سبيل المثال، يعيدSELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));القيمة2023-01-01 14:44:30، وهي مضاعف لفواصل زمنية مقدارها دقيقة واحدة تبدأ من نقطة البداية2023-01-01 14:35:30. #56738 (Yarik Briukhovetskyi). - أُعيدت هيكلة تكامل MongoDB: الترحيل إلى برنامج التشغيل الجديد mongocxx بدلًا من Poco::MongoDB المصنّف كمهمل، وإزالة دعم البروتوكول القديم المهمل، ودعم الاتصال عبر URI، ودعم جميع أنواع MongoDB، ودعم عبارتي WHERE وORDER BY على جانب MongoDB، وفرض قيود على التعبيرات غير المدعومة من MongoDB. #63279 (Kirill Nikiforov).
- يطبع الخيار الجديد
--progress-tableفي clickhouse-client جدولًا يحتوي على metrics تتغير أثناء تنفيذ query؛ ويرتبط الخيار الجديد--enable-progress-table-toggleبالخيار--progress-table، ويبدّل عرض جدول التقدم عند الضغط على مفتاح التحكم (Space). #63689 (Maria Khristenko). - يتيح هذا منح صلاحية الوصول إلى البوادئ ذات محرف البدل العام.
GRANT SELECT ON db.table_pefix_* TO user. #65311 (pufit). - استُحدث format JSONCompactWithProgress، حيث يُخرج ClickHouse كل صف على هيئة JSON object مفصول بأسطر جديدة، بما في ذلك metadata وdata وprogress وtotals وstatistics. #66205 (Alexey Korepanov).
- إضافة system.query_metric_log، الذي يحتوي على سجل لقيم memory وmetric من الجدول system.events لكل query على حدة، وتُكتب هذه القيم دوريًا إلى القرص. #66532 (Pablo Marcos).
- إضافة الإعداد
input_format_json_empty_as_defaultالذي يتعامل، عند تمكينه، مع الحقول الفارغة في مدخلات JSON على أنها قيم افتراضية. يُغلق #59339. #66782 (Alexis Arnaud). - أُضيفت الدالتان
overlayوoverlayUTF8اللتان تستبدلان أجزاءً من سلسلة نصية بسلسلة نصية أخرى. مثال: يعيدSELECT overlay('Hello New York', 'Jersey', 11)القيمةHello New Jersey. #66933 (李扬). - إضافة أمر جديد، Lightweight Delete In Partition
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny). - تم تنفيذ المقارنة لقيم نوع البيانات
Intervalبحيث تُحوَّل الآن إلى أقل نوعٍ عامٍّ مشترك. #68057 (Yarik Briukhovetskyi). - أُضيف الإعداد create_if_not_exists ليكون السلوك الافتراضي هو IF NOT EXISTS أثناء عبارات CREATE. #68164 (Peter Nguyen).
- أصبح من الممكن قراءة جداول Iceberg في Azure ومحليًا. #68210 (Daniil Ivanik).
- أُضيفت الدوال التجميعية distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes لتحسين استبطان محتوى نوع عمود JSON. #68463 (Pavel Kruglov).
- أصبح بالإمكان الآن حذف إدخالات query cache حسب الوسم. على سبيل المثال، يمكن الآن حذف إدخال query cache الذي أُنشئ بواسطة
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'عبرSYSTEM DROP QUERY CACHE TAG 'abc'(أو بالطبع ببساطة:SYSTEM DROP QUERY CACHEالذي سيمسح query cache بالكامل). #68477 (Michał Tabaszewski). - يمكن كتابة استعلام SELECT بسيط باستخدام SELECT ضمني لتفعيل تعبيرات بأسلوب الآلة الحاسبة، مثل
ch "1 + 2". ويُتحكَّم في ذلك عبر إعداد جديد هوimplicit_select. #68502 (Alexey Milovidov). - دعم وضع —copy في clickhouse local كاختصار لتحويل التنسيق #68503. #68583 (Denis Hananein).
- أُضيفت الدالة
ripeMD160، التي تحسب قيمة hash التشفيرية RIPEMD-160 لسلسلة نصية. مثال:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))تُرجع37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #68639 (Dergousov Maxim). - أُضيف العمود الافتراضي _headers إلى URL table engine. يُغلق #65026. #68867 (flynn).
- أُضيف جدول
system.projectionsلتتبّع projections المتاحة. #68901 (Jordi Villar). - أُضيف دعم الدالة
arrayUnion. #68989 (Peter Nguyen). - أُضيفت الدالة الجديدة
arrayZipUnalignedللتوافق مع Spark (arrays_zip)، وتسمح بالتعامل مع مصفوفات غير متحاذية استنادًا إلىarrayZipالأصلي. ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - دعم الدالة التجميعية
quantileExactWeightedInterpolated، وهي نسخة استيفائية تستند إلى quantileExactWeighted. وقد يتساءل البعض لماذا نحتاج إلىquantileExactWeightedInterpolatedجديدة مع أن لدينا بالفعلquantileExactInterpolatedWeighted. والسبب هو أن الجديدة أكثر دقة من القديمة. كما أنها مخصّصة للتوافق مع Spark في Apache Gluten. #69619 (李扬). - دعم الدالة
arrayElementOrNull. تُرجع null إذا كان فهرس Array خارج النطاق أو إذا لم يتم العثور على مفتاح في map. #69646 (李扬). - دعم نوع Dynamic في معظم الدوال من خلال تنفيذها على الأنواع الداخلية داخل Dynamic. #69691 (Pavel Kruglov).
- إضافة argument
scale(الافتراضي:true) إلى الدالةarrayAUC، ما يتيح تخطي خطوة التطبيع (المشكلة #69609). #69717 (gabrielmcg44). - أُعيدت إضافة الدالة
RIPEMD160، التي تحسب hash التشفير RIPEMD-160 لسلسلة نصية. Example: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))returns 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B. #70087 (Dergousov Maxim). - إتاحة التخزين المؤقت للملفات المقروءة لمحركات الجداول الخاصة بـ object storage وبحيرات البيانات، باستخدام hash من ETag + file path كمفتاح للتخزين المؤقت. #70135 (Kseniia Sumarokova).
- دعم قراءة جداول Iceberg على HDFS. #70268 (flynn).
- إتاحة قراءة/كتابة نوع JSON كسلسلة ثنائية في format RowBinary ضمن الإعدادات
input_format_binary_read_json_as_string/output_format_binary_write_json_as_string. #70288 (Pavel Kruglov). - إتاحة serialize/deserialize عمود JSON كعمود String واحد في Native format. للإخراج، استخدم الإعداد
output_format_native_write_json_as_string. وللإدخال، استخدم serialization version 1قبل column data. #70312 (Pavel Kruglov). - دعم CTE القياسي،
with insert، إذ كان الدعم سابقًا مقتصرًا علىinsert ... with ...فقط. #70593 (Shichao Jin).