الانتقال إلى المحتوى الرئيسي
التغييرات ذات الصلة بخدمات ClickHouse Cloud في إصدار v24.10.

تغيير غير متوافق مع الإصدارات السابقة

  • أصبح من الممكن كتابة 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).
آخر تعديل في ٢٩ يونيو ٢٠٢٦