الانتقال إلى المحتوى الرئيسي

علامة إصدار ClickHouse: 24.2.2.15987

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

  • التحقّق من الأنواع المريبة/التجريبية في الأنواع المتداخلة. سابقًا، لم نكن نتحقق من هذه الأنواع (باستثناء JSON) داخل الأنواع المتداخلة مثل Array/Tuple/Map. #59385 (Kruglov Pavel).
  • استُبدلت عبارة الفرز ORDER BY ALL (التي طُرحت مع v23.12) بـ ORDER BY *. وكانت الصياغة السابقة شديدة التعرّض للأخطاء في الجداول التي تحتوي على عمود باسم all. #59450 (Robert Schulze).
  • أُضيف فحص سلامة لعدد الخيوط وأحجام الكتل. #60138 (Raúl Marín).
  • رفض استعلامات INSERT الواردة عندما تكون إعدادات على مستوى الاستعلام async_insert و deduplicate_blocks_in_dependent_materialized_views مُمكّنة معًا. ويتحكم في هذا السلوك الإعداد throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert، وهو مُمكّن افتراضيًا. وهذا استكمال لـ https://github.com/ClickHouse/ClickHouse/pull/59699، وهو مطلوب لإزالة العائق أمام https://github.com/ClickHouse/ClickHouse/pull/59915. #60888 (Nikita Mikhaylov).
  • نُقلت الأداة clickhouse-copier إلى مستودع منفصل على GitHub: https://github.com/ClickHouse/copier. ولم تعد مضمنة في الحزمة، لكنها لا تزال متاحة للتنزيل بشكل منفصل. هذا يغلق: #60734 هذا يغلق: #60540 هذا يغلق: #60250 هذا يغلق: #52917 هذا يغلق: #51140 هذا يغلق: #47517 هذا يغلق: #47189 هذا يغلق: #46598 هذا يغلق: #40257 هذا يغلق: #36504 هذا يغلق: #35485 هذا يغلق: #33702 هذا يغلق: #26702 ### مدخل توثيقي للتغييرات الموجّهة للمستخدم. #61058 (Nikita Mikhaylov).
  • لزيادة التوافق مع MySQL، أصبحت الدالة locate تقبل الآن الوسائط (needle, haystack[, start_pos]) افتراضيًا. ويمكن استعادة السلوك السابق (haystack, needle, [, start_pos]) عبر ضبط function_locate_has_mysql_compatible_argument_order = 0. #61092 (Robert Schulze).
  • تم إعلان أجزاء البيانات القديمة داخل الذاكرة كميزة مهملة منذ الإصدار 23.5، ولم تعد مدعومة منذ الإصدار 23.10. والآن أُزيلت الشيفرة المتبقية. استكمالًا لـ #55186 و #45409. ومن غير المرجح أنك استخدمت أجزاء البيانات داخل الذاكرة، لأنها كانت متاحة فقط قبل الإصدار 23.5، وفقط عند تفعيلها يدويًا عبر تحديد SETTINGS المناسبة لجدول MergeTree. للتحقق مما إذا كانت لديك أجزاء بيانات داخل الذاكرة، شغّل الاستعلام التالي: SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type. ولتعطيل استخدام أجزاء البيانات داخل الذاكرة، نفّذ ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT. قبل الترقية من إصدارات ClickHouse القديمة، تحقّق أولًا من عدم وجود أجزاء بيانات داخل الذاكرة. وإذا وُجدت أجزاء بيانات داخل الذاكرة، فعطّلها أولًا، ثم انتظر إلى أن تختفي تمامًا، وبعد ذلك واصل الترقية. #61127 (Alexey Milovidov).
  • يُحظر افتراضيًا استخدام SimpleAggregateFunction في ORDER BY لجداول MergeTree (كما هو الحال مع AggregateFunction، إذ تُحظر هذه الأنواع لأنها غير قابلة للمقارنة) (استخدم allow_suspicious_primary_key للسماح بها). #61399 (Azat Khuzhin).
  • يتيح ClickHouse استخدام بيانات ثنائية اعتباطية في نوع البيانات String، رغم أنه يكون عادةً UTF-8. ولا تدعم Strings في Parquet/ORC/Arrow إلا UTF-8. لذلك يمكنك اختيار نوع البيانات في Arrow الذي سيُستخدم مع نوع البيانات String في ClickHouse — String أو Binary. ويُتحكم في ذلك عبر الإعدادات output_format_parquet_string_as_string و output_format_orc_string_as_string و output_format_arrow_string_as_string. ومع أن Binary أدق وأكثر توافقًا، فإن استخدام String افتراضيًا يتوافق مع توقعات المستخدمين في معظم الحالات. يدعم Parquet/ORC/Arrow العديد من طرق الضغط، بما في ذلك lz4 و zstd. كما يدعم ClickHouse جميع طرق الضغط هذه. لكن بعض الأدوات الأقل كفاءة تفتقر إلى دعم طريقة الضغط الأسرع lz4، لذلك جعلنا zstd الخيار الافتراضي. ويُتحكم في ذلك عبر الإعدادات output_format_parquet_compression_method و output_format_orc_compression_method و output_format_arrow_compression_method. لقد غيّرنا القيمة الافتراضية إلى zstd لكل من Parquet و ORC، لكن ليس لـ Arrow (إذ يُستخدم أساسًا في الاستخدامات منخفضة المستوى). #61817 (Alexey Milovidov).
  • إصلاح لمشكلة أمان في العرض المادي، كانت تسمح للمستخدم بالإدخال إلى جدول من دون الامتيازات المطلوبة. ويتحقق هذا الإصلاح من أن المستخدم يملك إذن الإدخال ليس فقط إلى العرض المادي، بل أيضًا إلى جميع الجداول الأساسية التابعة له. وهذا يعني أن بعض الاستعلامات التي كانت تعمل سابقًا قد تفشل الآن برسالة Not enough privileges. ولمعالجة هذه المشكلة، يقدّم هذا الإصدار ميزة جديدة لأمان SQL للعروض https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security. #54901 (pufit)

ميزة جديدة

  • دعم وضع Topk/topkweighed، الذي يعيد عدد القيم ومقدار الخطأ فيها. #54508 (UnamedRus).
  • أُضيف بناء نحوي جديد يتيح تحديد المستخدم المعرِّف في view/materialized view. يتيح ذلك تنفيذ عمليات SELECT/INSERT من العروض دون الحاجة إلى grants صريحة على الجداول الأساسية. #54901 (pufit).
  • نُفِّذ التحويل التلقائي لجداول MergeTree بمختلف أنواعها إلى محرك Replicated. أنشئ ملف convert_to_replicated فارغًا في دليل بيانات الجدول (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) وسيُحوَّل هذا الجدول تلقائيًا عند بدء تشغيل الخادم في المرة التالية. #57798 (Kirill).
  • أُضيفت table function mergeTreeIndex. وهي تعرض محتويات ملفات index وmarks الخاصة بجداول MergeTree. ويمكن استخدامها لأغراض introspection. البنية: mergeTreeIndex(database, table, [with_marks = true]) حيث إن database.table هو جدول موجود بمحرك MergeTree. #58140 (Anton Popov).
  • محاولة اكتشاف format الملف تلقائيًا أثناء schema inference إذا كان غير معروف في محركات file/s3/hdfs/url/azureBlobStorage. يُغلق #50576. #59092 (Kruglov Pavel).
  • أُضيفت generate_series بوصفها table function. تُنشئ هذه الدالة جدولًا يحتوي على متتالية حسابية من الأعداد الطبيعية. #59390 (divanik).
  • أُضيف استعلام ALTER TABLE table FORGET PARTITION partition الذي يزيل عقد ZooKeeper المرتبطة بـ partition فارغ. #59507 (Sergei Trifonov).
  • دعم قراءة backups وكتابتها كأرشيفات tar. #59535 (josh-hildred).
  • يوفّر aggregate function جديدة باسم ‘groupArrayIntersect’. متابعة لـ: #49862. #59598 (Yarik Briukhovetskyi).
  • نُفِّذ جدول system.dns_cache، وقد يكون مفيدًا في debugging مشكلات DNS. #59856 (Kirill Nikiforov).
  • نُفِّذ دعم buckets الخاصة بـ S3Express. #59965 (Nikita Taranov).
  • سيقبل codec ‏LZ4HC مستوى جديدًا هو 2، وهو أسرع من المستوى الأدنى السابق 3، مقابل ضغط أقل. في الإصدارات السابقة، كان LZ4HC(2) وما دونه مماثلًا لـ LZ4HC(3). المؤلف: Cyan4973. #60090 (Alexey Milovidov).
  • نُفِّذ جدول system.dns_cache، وقد يكون مفيدًا في debugging مشكلات DNS. وأُضيف server setting جديد هو dns_cache_max_size. #60257 (Kirill Nikiforov).
  • أُضيفت الدالة toMillisecond التي تعيد component الملّي ثانية للقيم من النوع DateTime أو DateTime64. #60281 (Shaun Struwig).
  • دعم الصيغة أحادية الوسيطة لدالة الجدول merge، بالشكل merge(['db_name', ] 'tables_regexp'). #60372 (豪肥肥).
  • جعل جميع أسماء التنسيقات غير حساسة لحالة الأحرف، مثل Tsv أو TSV أو tsv أو حتى rowbinary. #60420 (豪肥肥).
  • أُضيف بناء نحوي جديد يتيح تحديد المستخدم المُعرِّف في view/materialized view. ويتيح ذلك تنفيذ عمليات select/insert من الـ views دون الحاجة إلى grants صريحة على الجداول الأساسية. #60439 (pufit).
  • إضافة أربع خصائص إلى StorageMemory (محرك الذاكرة)، وهي min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep و max_rows_to_keep - إضافة اختبارات لتعكس التغييرات الجديدة - تحديث توثيق memory.md - إضافة خاصية الجدول context إلى MemorySink لتمكين الوصول إلى حدود معاملات الجدول. #60612 (Jake Bamrah).
  • أُضيفت الدالة toMillisecond التي تُرجع مكوّن الملّي ثانية للقيم من النوع DateTime أو DateTime64. #60649 (Robert Schulze).
  • فصل الحدود الخاصة بعدد الاستعلامات المنتظرة وتلك التي قيد التنفيذ. أُضيف إعداد خادم جديد max_waiting_queries يحدّ من عدد الاستعلامات المنتظرة بسبب async_load_databases. ولم تعد الحدود الحالية على عدد الاستعلامات قيد التنفيذ تحتسب الاستعلامات المنتظرة. #61053 (Sergei Trifonov).
  • إضافة دعم لـ ATTACH PARTITION ALL. #61107 (Kirill Nikiforov).

تحسين الأداء

  • يزيل مجمِّعات min/max/any/anyLast لمفاتيح GROUP BY من قسم SELECT. #52230 (JackyWoo).
  • يحسّن أداء أسلوب التجميع التسلسلي عند وجود عدة أعمدة [nullable]. هذه نسخة عامة من #51399 لا تساوم على سلامة مستوى التجريد. #55809 (Amos Bird).
  • إنشاء ناتج join عند الطلب لتحسين أداء ALL join. #58278 (LiuNeng).
  • تحسينات على الدوال التجميعية ArgMin / ArgMax / any / anyLast / anyHeavy، وكذلك على استعلامات ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1. #58640 (Raúl Marín).
  • تحسين أداء sum/avg الشرطي لأنواع bigint وbig decimal عبر تقليل إخفاقات التنبؤ بالتفرع. #59504 (李扬).
  • تحسين أداء استعلامات SELECT مع mutations النشطة. #59531 (Azat Khuzhin).
  • تحسين بسيط لمرشح الأعمدة. تجنّب تصفية الأعمدة التي لا يكون نوع بياناتها الأساسي رقميًا عند استخدام result_size_hint = -1. يمكن خفض Peak memory إلى 44% من المستوى الأصلي في بعض الحالات. #59698 (李扬).
  • سيستخدم المفتاح الأساسي مقدارًا أقل من الذاكرة. #60049 (Alexey Milovidov).
  • تحسين استخدام الذاكرة للمفتاح الأساسي وبعض العمليات الأخرى. #60050 (Alexey Milovidov).
  • ستُحمَّل المفاتيح الأساسية للجداول إلى الذاكرة عند أول وصول إليها فقط. ويتحكم في ذلك إعداد MergeTree الجديد primary_key_lazy_load، وهو مفعّل افتراضيًا. ويوفر هذا عدة مزايا: - لن تُحمَّل المفاتيح الأساسية للجداول غير المستخدمة؛ - إذا لم تكن الذاكرة كافية، فسيُطرَح استثناء عند أول استخدام بدلًا من وقت بدء تشغيل الخادم. كما أن لهذا عدة عيوب: - ستُدفَع كلفة زمن الوصول لتحميل المفتاح الأساسي عند أول استعلام بدلًا من دفعها قبل قبول الاتصالات؛ وقد يؤدي ذلك نظريًا إلى مشكلة thundering-herd. يغلق هذا #11188. #60093 (Alexey Milovidov).
  • الدالة المتجهية dotProduct المفيدة للبحث المتجهي. #60202 (Robert Schulze).
  • إذا كان المفتاح الأساسي للجدول يحتوي غالبًا على أعمدة غير مفيدة، فلا تُبقَ هذه الأعمدة في الذاكرة. ويتحكم في ذلك إعداد جديد باسم primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns وقيمته الافتراضية 0.9، ما يعني أنه في المفتاح الأساسي المركب، إذا كان أحد الأعمدة يغيّر قيمته في 0.9 على الأقل من جميع الحالات، فلن تُحمَّل الأعمدة التي تليه. #60255 (Alexey Milovidov).
  • نفّذ الدالة multiIf بشكل عمودي عندما يكون النوع الأساسي لـ result_type رقميًا. #60384 (李扬).
  • كما هو موضح في الشكل 1، يمكن أن يؤدي استبدال ”&&” بـ ”&” إلى توليد شيفرة SIMD. image الشكل 1. الشيفرة المترجمة من ’&&’ (يسارًا) و’&’ (يمينًا). #60498 (Zhiguo Zhou).
  • تحسين أداء mutexes لتصبح أسرع (بما يقارب الضعف)؛ إذ كانت أبطأ بسبب ThreadFuzzer. #60823 (Azat Khuzhin).
  • نقل تصريف connection من مرحلة التحضير إلى مرحلة العمل، وتصريف عدة connections بالتوازي. #60845 (lizhuoyu5).
  • تحسين insertManyFrom للقيم العددية Nullable أو السلاسل النصية Nullable. #60846 (李扬).
  • تحسين الدالة dotProduct لتجنب نسخ الذاكرة غير الضروري والمكلف. #60928 (Robert Schulze).
  • ستعاني العمليات على filesystem cache بدرجة أقل من التنافس على القفل. #61066 (Alexey Milovidov).
  • تحسين ColumnString::replicate ومنع تحسين memcpySmallAllowReadWriteOverflow15Impl إلى memcpy المضمّن. إغلاق #61074. تسارعت ColumnString::replicate بمقدار 2.46x على x86-64. #61075 (李扬).
  • تسريع طباعة الأعداد الصحيحة ذات 256 بت بمقدار 30x. #61100 (Raúl Marín).
  • إذا كان query يحتوي على خطأ في Syntax ويتضمن مطابِق COLUMNS مع regular expression، فكان regular expression يُترجم في كل مرة أثناء تراجع parser بدلًا من ترجمته مرة واحدة. كان هذا خطأً جوهريًا. وُضع الـ regexp المترجم داخل AST. لكن الحرف A في AST يعني “abstract”، أي إنه يجب ألا يحتوي على كائنات ثقيلة. ويمكن إنشاء أجزاء من AST والتخلص منها أثناء parsing، بما في ذلك عدد كبير من عمليات التراجع. يؤدي ذلك إلى بطء في parsing، وبالتالي يتيح تنفيذ هجوم DoS من مستخدم readonly. لكن المشكلة الرئيسية هي أنه يعيق إحراز تقدم في fuzzers. #61543 (Alexey Milovidov).

تحسينات

  • أثناء تشغيل الاستعلام MODIFY COLUMN للعروض المادية، تحقّق من بنية الجدول الداخلي للتأكد من وجود كل عمود. #47427 (sunny).
  • أُضيف الجدول system.keywords الذي يحتوي على جميع الكلمات المفتاحية من المحلّل parser. وهو مطلوب في الغالب وسيُستخدم لتحسين اختبار fuzzing وتمييز الصياغة. #51808 (Nikita Mikhaylov).
  • أُضيف دعم للعرض ذي المعلمات مع analyzer بحيث لا يتم تحليل create parameterized view. كما أُعيدت هيكلة المنطق الحالي للعرض ذي المعلمات بحيث لا يتم تحليل create parameterized view. #54211 (SmitaRKulkarni).
  • أصبح محرك قاعدة البيانات Ordinary متقادمًا. ستتلقى تحذيرًا في clickhouse-client إذا كان الخادم لديك يستخدمه. هذا يُغلق #52229. #56942 (shabroo).
  • يجب حذف جميع أقفال zero copy المرتبطة بجدول عند حذف الجدول. كما يجب إزالة الدليل الذي يحتوي على هذه الأقفال. #57575 (Sema Checherinda).
  • أُضيفت إمكانية short-circuit للدالة dictGetOrDefault. يُغلق #52098. #57767 (jsc0218).
  • السماح بتعريف enum في بنية external table. #57857 (Duc Canh Le).
  • إن تشغيل ALTER COLUMN MATERIALIZE على عمود يحتوي على expression من نوع DEFAULT أو MATERIALIZED يكتب الآن القيم الصحيحة: القيمة الافتراضية للأجزاء الموجودة ذات القيمة الافتراضية، أو القيمة غير الافتراضية للأجزاء الموجودة ذات القيمة غير الافتراضية. في السابق، كانت القيمة الافتراضية تُكتب لجميع parts الموجودة. #58023 (Duc Canh Le).
  • تم تفعيل منطق backoff (مثل backoff الأسي). وسيساعد ذلك على تقليل CPU usage وmemory usage وأحجام log file. #58036 (MikhailBurdukov).
  • أخذ الصفوف المحذوفة باستخدام lightweight delete في الاعتبار عند اختيار parts لدمجها. #58223 (Zhuo Qiu).
  • السماح بتحديد volume_priority في storage_configuration. #58533 (Andrey Zvonov).
  • أُضيف دعم للنوع Date32 في codec ‏T64. #58738 (Hongbin Ma).
  • يجعل طلب السحب هذا اتصالات http/https قابلة لإعادة الاستخدام في جميع حالات الاستخدام، حتى عندما تكون الاستجابة 3xx أو 4xx. #58845 (Sema Checherinda).
  • أُضيفت تعليقات للأعمدة في المزيد من system tables. استكمالًا لـ https://github.com/ClickHouse/ClickHouse/pull/58356. #59016 (Nikita Mikhaylov).
  • يمكن الآن استخدام virtual columns في PREWHERE. وهذا مفيد للأعمدة الافتراضية غير الثابتة مثل _part_offset. #59033 (Amos Bird).
  • أصبح بالإمكان الآن تحديد إعدادات محرك الجدول Distributed في ملف تهيئة الخادم (على غرار إعدادات MergeTree)، مثلًا: <distributed> <flush_on_detach>false</flush_on_detach> </distributed>. #59291 (Azat Khuzhin).
  • تحسين في Keeper: تخزين كمية محددة فقط من السجلات مؤقتًا في الذاكرة، مع التحكم في ذلك عبر latest_logs_cache_size_threshold وcommit_logs_cache_size_threshold. #59460 (Antonio Andelic).
  • بدلًا من استخدام مفتاح ثابت، أصبح التخزين الكائني الآن يولّد مفتاحًا لتحديد إمكانية إزالة الكائنات. #59495 (Sema Checherinda).
  • لم يعد استنتاج القيم العائمة ذات الصيغة الأسية مفعّلًا افتراضيًا. أُضيف الإعداد input_format_try_infer_exponent_floats لاستعادة السلوك السابق (وهو معطّل افتراضيًا). يغلق #59476. #59500 (Kruglov Pavel).
  • أصبح مسموحًا بإحاطة عمليات ALTER بأقواس. ويمكن التحكم في إخراج الأقواس عبر الإعداد format_alter_operations_with_parentheses. افتراضيًا، تُخرَج الأقواس في الاستعلامات المنسّقة لأننا نخزّن عمليات ALTER المنسّقة في بعض المواضع كبيانات وصفية (مثلًا: mutations). يوضّح النحو الجديد بعض الاستعلامات التي تنتهي فيها عمليات ALTER بقائمة. مثلًا: لا يمكن تحليل ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c بشكل صحيح باستخدام النحو القديم. أمّا في النحو الجديد، فالاستعلام ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) واضح. ولا تستطيع الإصدارات الأقدم قراءة النحو الجديد، لذا قد يسبّب استخدامه مشكلات عند خلط إصدارات أحدث وأقدم من ClickHouse داخل عنقود واحد. #59532 (János Benjamin Antal).
  • تمت ترقية Intel QPL (المستخدَم مع codec DEFLATE_QPL) من v1.3.1 إلى v1.4.0. كما تم إصلاح خلل في آلية مهلة polling، إذ لاحظنا أنه في بعض الحالات لا تعمل المهلة كما ينبغي، وعند حدوثها قد يعالج كل من IAA وCPU الـ buffer بالتزامن. وفي الوقت الحالي، من الأفضل التأكد من أن حالة codec الخاصة بـ IAA ليست QPL_STS_BEING_PROCESSED، ثم الرجوع إلى codec البرمجي. #59551 (jasperzhu).
  • إضافة دعم pread الموضعي في libhdfs3. إذا أردت استدعاء القراءة الموضعية في libhdfs3، فاستخدم الدالة hdfsPread في hdfs.h كما يلي: tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);. #59624 (M1eyu).
  • التحقق من تجاوز سعة المكدس في المحلّلات حتى إذا أساء المستخدم ضبط الإعداد max_parser_depth على قيمة مرتفعة جدًا. يغلق هذا #59622. #59697 (Alexey Milovidov).
  • توحيد سلوك المجموعة المسماة المُنشأة عبر XML وSQL في محرك Kafka. #59710 (Pervakov Grigorii).
  • أصبح استخدام uuid في replica_path مسموحًا إذا كان CREATE TABLE يتضمنه صراحةً. #59908 (Azat Khuzhin).
  • إضافة العمود metadata_version إلى جدول ReplicatedMergeTree في جدول النظام system.tables. #59942 (Maksim Kita).
  • تحسين في Keeper: إضافة إعادة المحاولة عند الإخفاقات في العمليات المرتبطة بالقرص. #59980 (Antonio Andelic).
  • إضافة إعداد config جديد backups.remove_backup_files_after_failure: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>. #60002 (Vitaly Baranov).
  • استخدام عدة threads أثناء قراءة metadata الجداول من نسخة احتياطية عند تنفيذ الأمر RESTORE. #60040 (Vitaly Baranov).
  • الآن، إذا كان StorageBuffer يحتوي على أكثر من shard واحد (num_layers > 1)، فستتم عملية flush في الخلفية بالتوازي لجميع الـ shards باستخدام عدة threads. #60111 (alesapin).
  • دعم تحديد المستخدمين لإعدادات S3 معيّنة في config باستخدام المفتاح user. #60144 (Antonio Andelic).
  • جعل نسخ ملفات S3 احتياطيًا في GCP يعود إلى النسخ عبر buffer في حال أعاد GCP الخطأ Internal Error مع رمز خطأ HTTP GATEWAY_TIMEOUT. #60164 (Maksim Kita).
  • السماح باستخدام “local” كنوع object storage بدلًا من “local_blob_storage”. #60165 (Kseniia Sumarokova).
  • تنفيذ عامل مقارنة لقيم Variant، وإدراج Field بشكل صحيح في عمود Variant. وعدم السماح افتراضيًا بإنشاء النوع Variant مع variant types متشابهة (مع السماح بذلك عبر الإعداد allow_suspicious_variant_types). يغلق #59996. يغلق #59850. #60198 (Kruglov Pavel).
  • تحسين قابلية الاستخدام العامة للأعمدة الافتراضية. يُسمح الآن باستخدام الأعمدة الافتراضية في PREWHERE (وهذا مفيد للأعمدة الافتراضية غير الثابتة مثل _part_offset). كما أصبحت الوثائق المضمّنة متاحة الآن للأعمدة الافتراضية على شكل comment للعمود في استعلام DESCRIBE عند تفعيل الإعداد describe_include_virtual_columns. #60205 (Anton Popov).
  • تنفيذ short circuit للدالة ULIDStringToDateTime. #60211 (Juan Madurga).
  • تمت إضافة عمود query_id إلى الجدولين system.backups وsystem.backup_log. كما أُضيف stacktrace الخاص بالخطأ إلى عمود error. #60220 (Maksim Kita).
  • تنفيذ flush متوازٍ لكتل INSERT المعلّقة في محرك Distributed عند DETACH/إيقاف تشغيل الخادم وSYSTEM FLUSH DISTRIBUTED (لن يعمل Parallelism إلا إذا كانت لديك سياسة متعددة الأقراص للجدول، كما هو الحال مع كل شيء في محرك Distributed حاليًا). #60225 (Azat Khuzhin).
  • إعداد filter غير صحيح في joinRightColumnsSwitchNullability، مع حل #59625. #60259 (lgbo).
  • إضافة إعداد لفرض cache القراءة المباشرة لعمليات الدمج. #60308 (Kseniia Sumarokova).
  • تذكر المسألة #57598 اختلافًا في السلوك يتعلق بمعالجة المعاملات. إذ يُبلَّغ عن تنفيذ COMMIT/ROLLBACK عند عدم وجود معاملة نشطة على أنه خطأ، خلافًا لسلوك MySQL. #60338 (PapaToemmsn).
  • تمت إضافة الوضع none_only_active للإعداد distributed_ddl_output_mode. #60340 (Alexander Tokmakov).
  • تعمل الاتصالات عبر منفذ MySQL الآن تلقائيًا باستخدام الإعداد prefer_column_name_to_alias = 1 لدعم QuickSight مباشرةً. كذلك، أصبح الإعدادان mysql_map_string_to_text_in_show_columns وmysql_map_fixed_string_to_text_in_show_columns مفعّلين افتراضيًا أيضًا، ويؤثران فقط في اتصالات MySQL. وهذا يزيد التوافق مع المزيد من أدوات BI. #60365 (Robert Schulze).
  • عندما يكون تنسيق الإخراج هو Pretty format وتتكون كتلة البيانات من قيمة رقمية واحدة تتجاوز المليون، فسيُطبع رقم مقروء إلى يمين الجدول. على سبيل المثال ┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘. #60379 (rogeryk).
  • أصبح من الممكن تهيئة معالجات إعادة توجيه HTTP لـ clickhouse-server. على سبيل المثال، يمكنك جعل / يعيد التوجيه إلى واجهة Play. #60390 (Alexey Milovidov).
  • أصبحت ألوان Advanced dashboard أفضل قليلًا للرسوم البيانية متعددة الخطوط. #60391 (Alexey Milovidov).
  • إصلاح حالة تسابق في شيفرة JavaScript كانت تؤدي إلى تراكب مخططات مكررة فوق بعضها البعض. #60392 (Alexey Milovidov).
  • التحقق من تجاوز سعة المكدس في المحللات حتى إذا أساء المستخدم تهيئة الإعداد max_parser_depth إلى قيمة مرتفعة جدًا. وهذا يغلق #59622. #60434 (Alexey Milovidov).
  • أصبح للدالة substring اسم مستعار جديد هو byteSlice. #60494 (Robert Schulze).
  • أُعيدت تسمية إعداد الخادم dns_cache_max_size إلى dns_cache_max_entries لتقليل الالتباس. #60500 (Kirill Nikiforov).
  • لم يعد SHOW INDEX | INDEXES | INDICES | KEYS يفرز حسب أعمدة المفتاح الأساسي (وهو ما كان غير بديهي). #60514 (Robert Schulze).
  • تحسين في Keeper: الإيقاف أثناء بدء التشغيل إذا اكتُشفت لقطة غير صالحة لتجنب فقدان البيانات. #60537 (Antonio Andelic).
  • تمت إضافة حقن أعطال لتقسيم نطاقات القراءة في MergeTree إلى نطاقات متقاطعة وغير متقاطعة باستخدام الإعداد merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability. #60548 (Maksim Kita).
  • يحتوي Advanced dashboard الآن على عناصر تحكم تظل مرئية دائمًا أثناء التمرير. يتيح لك ذلك إضافة مخطط جديد دون الحاجة إلى التمرير إلى الأعلى. #60692 (Alexey Milovidov).
  • يمكن استخدام النوعين String وEnums في السياق نفسه، مثل: المصفوفات، واستعلامات UNION، والتعبيرات الشرطية. يُغلق هذا #60726. #60727 (Alexey Milovidov).
  • تحديث tzdata إلى 2024a. #60768 (Raúl Marín).
  • دعم الملفات التي لا تحتوي على امتداد format في قاعدة بيانات Filesystem. #60795 (Kruglov Pavel).
  • تحسين في Keeper: دعم leadership_expiry_ms في إعدادات Keeper. #60806 (Brokenice0415).
  • استنتاج الأعداد ذات الصيغة الأسية دائمًا في JSON formats بغض النظر عن الإعداد input_format_try_infer_exponent_floats. وإضافة الإعداد input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects الذي يتيح استخدام النوع String للمسارات الملتبسة بدلًا من إطلاق استثناء أثناء استنتاج named Tuples من JSON objects. #60808 (Kruglov Pavel).
  • إضافة خيار إلى SMJ للتعامل مع NULL باعتبارها القيمة الكبرى/الصغرى. وبذلك يصبح السلوك متوافقًا مع أنظمة SQL الأخرى، مثل Apache Spark. #60896 (loudongfeng).
  • أُضيف إصدار ClickHouse إلى labels الخاصة بـ Docker. يُغلق #54224. #60949 (Nikolay Monkov).
  • إضافة الإعداد parallel_replicas_allow_in_with_subquery = 1 الذي يتيح عمل subqueries الخاصة بـ IN مع parallel replicas. #60950 (Nikolai Kochetov).
  • يقوم DNSResolver بخلط مجموعة عناوين IP التي تم حلّها. #60965 (Sema Checherinda).
  • دعم اكتشاف output format من امتداد الملف في clickhouse-client وclickhouse-local. #61036 (豪肥肥).
  • التحقق دوريًا من تحديث memory limit. #61049 (Han Fei).
  • تفعيل profiling للـ processors (الوقت المستغرَق والبايتات الداخلة/الخارجة لعمليات الفرز والتجميع وغير ذلك) افتراضيًا. #61096 (Azat Khuzhin).
  • إضافة الدالة toUInt128OrZero، التي سقطت سهوًا (وهذا الخطأ مرتبط بـ https://github.com/ClickHouse/ClickHouse/pull/945). كما أصبحت aliases التوافق FROM_UNIXTIME وDATE_FORMAT (وهما ليستا من ClickHouse-native ولا توجدان إلا للتوافق مع MySQL) غير حساسة لحالة الأحرف، كما هو متوقع من aliases التوافق مع SQL. #61114 (Alexey Milovidov).
  • تحسينات على عمليات التحقق من الوصول، بما يتيح revoke للحقوق غير الممنوحة في حال لم يكن المستخدم المستهدف يمتلك أيضًا grants الخاصة بالسحب. مثال: ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • إصلاح خطأ في التحسين السابق: https://github.com/ClickHouse/ClickHouse/pull/59698: إزالة break لضمان أن يكون أول عمود مُرشَّح بأقل حجم، cc @jsc0218. #61145 (李扬).
  • إصلاح الدالة has() مع عمود Nullable (يُصلح #60214). #61249 (Mikhail Koviazin).
  • أصبح من الممكن الآن تحديد السمة merge="true" في substitutions الخاصة بالإعدادات للأشجار الفرعية <include from_zk="/path" merge="true">. عند تحديد هذه السمة، سيقوم ClickHouse بدمج الشجرة الفرعية مع الإعدادات الحالية، وإلا فسيكون السلوك الافتراضي هو إلحاق محتوى جديد بالإعدادات. #61299 (alesapin).
  • إضافة metrics غير متزامنة لتعيينات الذاكرة الافتراضية: VMMaxMapCount و VMNumMaps. يُغلق #60662. #61354 (Tuan Pham Anh).
  • استخدام الإعداد temporary_files_codec في جميع المواضع التي تُنشأ فيها بيانات مؤقتة، مثل الفرز باستخدام external memory وGROUP BY باستخدام external memory. قبل ذلك، كان يعمل فقط مع خوارزمية JOIN partial_merge. #61456 (Maksim Kita).
  • إزالة الفحص المكرر containing_part.empty()، إذ يجري التحقق منه بالفعل هنا: https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141. #61467 (William Schoeffel).
  • إضافة إعداد جديد max_parser_backtracks يتيح تقييد تعقيد parsing للاستعلامات. #61502 (Alexey Milovidov).
  • تقليل التنافس أثناء تغيير الحجم الديناميكي لذاكرة التخزين المؤقت لنظام الملفات. #61524 (Kseniia Sumarokova).
  • منع الوضع المُجزّأ لـ StorageS3 queue، لأنه ستُعاد كتابته. #61537 (Kseniia Sumarokova).
  • إصلاح خطأ مطبعي: من use_leagcy_max_level إلى use_legacy_max_level. #61545 (William Schoeffel).
  • إزالة بعض الإدخالات المكررة في blob_storage_log. #61622 (YenchangChan).
  • إضافة الدالة current_user كاسم مستعار للتوافق مع MySQL. #61770 (Yarik Briukhovetskyi).
  • استخدام managed identity لعمليات IO الخاصة بالنسخ الاحتياطية عند استخدام Azure Blob Storage. وإضافة إعداد يمنع ClickHouse من محاولة إنشاء Container غير موجودة، وهو ما يتطلب permissions على مستوى storage account. #61785 (Daniel Pozo Escalona).
  • في الإصدار السابق، لم تكن بعض الأرقام في تنسيقات Pretty جميلة بما يكفي. #61794 (Alexey Milovidov).
  • لن تُقتطع القيمة الطويلة في Pretty formats إذا كانت القيمة الوحيدة في مجموعة النتائج، كما في ناتج الاستعلام SHOW CREATE TABLE. #61795 (Alexey Milovidov).
  • وعلى غرار clickhouse-local، سيقبل clickhouse-client الخيار --output-format بوصفه مرادفًا للخيار --format. هذا يُغلق #59848. #61797 (Alexey Milovidov).
  • إذا كان stdout طرفية ولم يُحدَّد تنسيق الإخراج، فسيستخدم clickhouse-client والأدوات المشابهة PrettyCompact افتراضيًا، كما في الوضع التفاعلي. وسيتعامل clickhouse-client وclickhouse-local مع وسيطات سطر الأوامر الخاصة بتنسيقات الإدخال والإخراج بأسلوب موحَّد. هذا يُغلق #61272. #61800 (Alexey Milovidov).
  • فصل مجموعات الأرقام بشرطات سفلية في Pretty formats لتحسين سهولة القراءة. ويُتحكَّم في ذلك عبر إعداد جديد هو output_format_pretty_highlight_digit_groups. #61802 (Alexey Milovidov).

إصلاح خطأ (خلل يظهر للمستخدم في إصدار مستقر رسمي)

  • إصلاح خلل في intDiv عند استخدام وسائط من نوع decimal #59243 (Yarik Briukhovetskyi).
  • إصلاح المشكلة Fix_kql_issue_found_by_wingfuzz #59626 (Yong Wang).
  • إصلاح الخطأ “Read beyond last offset” في AsynchronousBoundedReadBuffer #59630 (Vitaly Baranov).
  • rabbitmq: إصلاح حالة عدم وجود رسائل acked أو nacked #59775 (Kseniia Sumarokova).
  • إصلاح تنفيذ الدالة على const وLowCardinality مع GROUP BY const في analyzer #59986 (Azat Khuzhin).
  • إصلاح تحويل المقياس في DateTime64 #60004 (Yarik Briukhovetskyi).
  • إصلاح INSERT إلى SQLite عند وجود single quote (بالهروب من علامات الاقتباس المفردة باستخدام علامة اقتباس بدلًا من backslash) #60015 (Azat Khuzhin).
  • إصلاح optimize_uniq_to_count الذي يزيل alias للعمود #60026 (Raúl Marín).
  • إصلاح finished_mutations_to_keep=0 في MergeTree (إذ تنص الوثائق على أن 0 يعني الاحتفاظ بكل شيء) #60031 (Azat Khuzhin).
  • إصلاح Exception محتمل من جدول s3queue عند drop #60036 (Kseniia Sumarokova).
  • نطاقات ranges غير صالحة للجزء نفسه في PartsSplitter #60041 (Maksim Kita).
  • استخدام max_query_size من Context في DDLLogEntry بدلًا من القيمة hardcoded وهي 4096 #60083 (Kruglov Pavel).
  • إصلاح formatting غير المتسق للاستعلامات #60095 (Alexey Milovidov).
  • إصلاح formatting غير المتسق لـ explain في subqueries #60102 (Alexey Milovidov).
  • إصلاح crash في cosineDistance مع Nullable #60150 (Raúl Marín).
  • السماح بتحويل bools في string representation إلى قيم bool حقيقية true #60160 (Robert Schulze).
  • إصلاح system.s3queue_log #60166 (Kseniia Sumarokova).
  • إصلاح arrayReduce مع اسم aggregate function قابل لأن يكون Nullable #60188 (Raúl Marín).
  • إصلاح تنفيذ actions أثناء Filtering الأولي (PK وpartition pruning) #60196 (Azat Khuzhin).
  • إخفاء المعلومات الحساسة في s3queue #60233 (Kseniia Sumarokova).
  • التراجع عن “استبدال ORDER BY ALL بـ ORDER BY *#60248 (Robert Schulze).
  • Azure Blob Storage: إصلاح مشكلات نقطة النهاية والبادئة #60251 (SmitaRKulkarni).
  • إصلاح رموز استثناءات HTTP. #60252 (Austin Kothig).
  • إصلاح خلل في cache الخاصة بـ LRUResource (ذاكرة Hive المؤقتة) #60262 (shanfengp).
  • s3queue: إصلاح خلل (ويعالج أيضًا الاختبار غير المستقر flaky test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
  • إصلاح استخدام قيمة غير مهيأة ونتيجة غير صالحة في دوال hash مع IPv6 #60359 (Kruglov Pavel).
  • فرض إعادة التحليل إذا تغيّرت النسخ المتماثلة المتوازية #60362 (Raúl Marín).
  • إصلاح استخدام نوع metadata العادي مع خيار إعداد disks الجديد #60396 (Kseniia Sumarokova).
  • عدم السماح بتعيين max_parallel_replicas إلى 0 لأنه غير منطقي #60430 (Kruglov Pavel).
  • محاولة إصلاح الخطأ المنطقي ‘Cannot capture column because it has incompatible type’ في mapContainsKeyLike #60451 (Kruglov Pavel).
  • إصلاح OptimizeDateOrDateTimeConverterWithPreimageVisitor مع arguments من نوع NULL #60453 (Raúl Marín).
  • محاولة تجنب حساب الاستعلامات الفرعية القياسية في CREATE TABLE. #60464 (Nikolai Kochetov).
  • الدمج #59674. #60470 (Alexey Milovidov).
  • التحقق من المفاتيح بشكل صحيح في s3Cluster #60477 (Antonio Andelic).
  • إصلاح حالة التعطل المتبادل في التحليل المتوازي عندما يتم تخطي الكثير من الصفوف بسبب الأخطاء #60516 (Kruglov Pavel).
  • إصلاح Fix_max_query_size_for_kql_compound_operator: #60534 (Yong Wang).
  • إصلاح في Keeper: إضافة مهلات انتظار عند انتظار سجلات commit #60544 (Antonio Andelic).
  • تقليل عدد الصفوف المقروءة من system.numbers #60546 (JackyWoo).
  • عدم إظهار تلميحات الأرقام لأنواع التاريخ #60577 (Raúl Marín).
  • إصلاح القراءة من MergeTree عند استخدام دوال غير حتمية في عامل التصفية #60586 (Kruglov Pavel).
  • إصلاح خطأ منطقي عند وجود نوع قيمة غير صالح لإعداد التوافق #60596 (Kruglov Pavel).
  • إصلاح عدم اتساق حالات الدوال التجميعية في clusters مختلطة من x86-64 وARM #60610 (Harry Lee).
  • fix(prql): معالج panic أكثر متانة #60615 (Maximilian Roos).
  • إصلاح intDiv لوسيطات Decimal والتاريخ #60672 (Yarik Briukhovetskyi).
  • إصلاح: توسيع CTE في استعلام ALTER MODIFY #60682 (Yakov Olkhovskiy).
  • إصلاح system.parts لمحرك قاعدة البيانات غير Atomic/Ordinary (أي Memory) #60689 (Azat Khuzhin).
  • إصلاح “تعريف تخزين غير صالح في ملف metadata” للعروض ذات المعلمات #60708 (Azat Khuzhin).
  • إصلاح تجاوز سعة المخزن المؤقت في CompressionCodecMultiple #60731 (Alexey Milovidov).
  • إزالة العناصر غير المنطقية من SQL/JSON #60738 (Alexey Milovidov).
  • إزالة فحص sanitize الخاطئ في الدالة التجميعية quantileGK #60740 (李扬).
  • إصلاح خلل insert-select + insert_deduplication_token عبر ضبط streams على 1 #60745 (Jordi Villar).
  • منع تعيين رؤوس بيانات وصفية مخصصة في عمليات الرفع متعدد الأجزاء غير المدعومة #60748 (Francisco J. Jurado Moreno).
  • إصلاح toStartOfInterval #60763 (Andrey Zvonov).
  • إصلاح تعطل في arrayEnumerateRanked #60764 (Raúl Marín).
  • إصلاح تعطل عند استخدام input() في INSERT SELECT JOIN #60765 (Kruglov Pavel).
  • إصلاح تعطل عند اختلاف قيمة allow_experimental_analyzer في الاستعلامات الفرعية #60770 (Dmitry Novik).
  • إزالة الاستدعاء التعاودي عند القراءة من S3 #60849 (Antonio Andelic).
  • إصلاح احتمال التوقف عند حدوث خطأ في HashedDictionaryParallelLoader #60926 (vdimir).
  • إصلاح RESTORE غير المتزامن مع قاعدة بيانات Replicated #60934 (Antonio Andelic).
  • إصلاح حالة توقف تام في عمليات insert غير المتزامنة إلى جداول Log عبر البروتوكول الأصلي #61055 (Anton Popov).
  • إصلاح التنفيذ الكسول للوسيط الافتراضي في dictGetOrDefault لـ RangeHashedDictionary #61196 (Kruglov Pavel).
  • إصلاح عدة أخطاء في groupArraySorted #61203 (Raúl Marín).
  • إصلاح إعادة تهيئة Keeper للملف التنفيذي المستقل #61233 (Antonio Andelic).
  • إصلاح استخدام session_token في محرك S3 #61234 (Kruglov Pavel).
  • إصلاح احتمال ظهور نتيجة غير صحيحة للدالة التجميعية uniqExact #61257 (Anton Popov).
  • إصلاح أخطاء في show database #61269 (Raúl Marín).
  • إصلاح خطأ منطقي في تخزين RabbitMQ مع الأعمدة MATERIALIZED #61320 (vdimir).
  • إصلاح CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
  • إصلاح استعلام ATTACH مع external ON CLUSTER #61365 (Nikolay Degterinsky).
  • إصلاح مشكلة تقسيم DAG لعمليات actions #61458 (Raúl Marín).
  • إصلاح إكمال عملية RESTORE فاشلة #61466 (Vitaly Baranov).
  • تعطيل async_insert_use_adaptive_busy_timeout بشكل صحيح مع إعدادات التوافق #61468 (Raúl Marín).
  • السماح بإضافة طلبات إلى قائمة الانتظار في pool الاستعادة #61475 (Nikita Taranov).
  • إصلاح خطأ عند قراءة system.parts باستخدام UUID (issue 61220). #61479 (Dan Wu).
  • إصلاح تعطل في window view #61526 (Alexey Milovidov).
  • إصلاح repeat مع أنواع أعداد صحيحة غير أصلية #61527 (Antonio Andelic).
  • إصلاح الوسيط -s في client #61530 (Mikhail f. Shiryaev).
  • إصلاح تعطل في arrayPartialReverseSort #61539 (Raúl Marín).
  • إصلاح البحث في string مع موضع ثابت #61547 (Antonio Andelic).
  • إصلاح تسبب addDays في حدوث خطأ عند استخدام datetime64 #61561 (Shuai li).
  • إصلاح system.part_log لميزة async insert مع إزالة التكرار #61620 (Antonio Andelic).
  • إصلاح حالة Non-ready في system.parts. #61666 (Nikolai Kochetov).
آخر تعديل في ٢٩ يونيو ٢٠٢٦