هذه الإعدادات متاحة في system.settings، ويتم توليدها تلقائيًا من الشفرة المصدرية.
analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 25.8 | 1 | إعداد جديد. |
يسمح بإضافة معرّفات مركّبة إلى Nested. هذا إعداد توافق لأنه يغيّر نتيجة الاستعلام. عند تعطيله، لا يعمل SELECT a.b.c FROM table ARRAY JOIN a، ولا يضمّن SELECT a FROM table العمود a.b.c ضمن نتيجة Nested a.
analyzer_compatibility_allow_non_aggregate_in_having
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.7 | 0 | إعداد توافق جديد. عند تمكينه، يحاكي المحلّل سلوك إعادة الكتابة القديم من `HAVING` إلى `WHERE` للأجزاء غير التجميعية المرتبطة بـ AND بدلًا من إصدار `NOT_AN_AGGREGATE`. |
عند تمكينه، يحاكي المحلّل السلوك القديم المتمثل في نقل الأجزاء غير التجميعية المرتبطة بـ AND من HAVING إلى WHERE بدلًا من إصدار NOT_AN_AGGREGATE. ويكون الرفض المتوافق مع المعيار هو السلوك الافتراضي؛ وهذا الإعداد وسيلة مساعدة في الترحيل للاستعلامات التي كان المحلّل القديم يقبلها بصمت (enable_analyzer = 0). وتبقى الأجزاء المرتبطة التي تحتوي على دوال aggregate أو grouping أو دوال غير حتمية في HAVING. وإذا احتوى أي جزء مرتبط على دالة window function أو دالة ذات حالة (مثل rowNumberInBlock)، تُعطَّل إعادة الكتابة لكامل HAVING، بما يطابق سلوك PredicateExpressionsOptimizer القديم. كما يتم تجاهل هذا الإعداد عندما يستخدم GROUP BY WITH CUBE أو WITH ROLLUP أو WITH TOTALS أو GROUPING SETS.
analyzer_compatibility_apply_final_to_all_joined_tables
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.8 | 0 | إعداد جديد على master (القيمة الافتراضية false = السلوك المصحح). يُسجَّل تبدّل السلوك نفسه ضمن 26.6، ويُسجَّل تقديم الإعداد للنقل الخلفي إلى فروع الإصدارات الأقدم (بقيمة افتراضية true) ضمن 26.4. |
| 26.6 | 0 | أُصلح خلل في محلّل كان يؤدي إلى تطبيق FINAL على الجدول الموجود أقصى اليسار في JOIN، بصورة غير صحيحة، على الجداول الأخرى المنضمة أيضًا. تعني previous_value=true أن `compatibility` مع الإصدارات السابقة لـ 26.6 يستعيد السلوك القديم. |
| 26.4 | 1 | إعداد توافق جديد يتحكم في ما إذا كان FINAL على الجدول الموجود أقصى اليسار في JOIN يُطبَّق على الجداول الأخرى المنضمة. قُدِّم بقيمة افتراضية true (السلوك القديم) للنقل الخلفي إلى الإصدارات السابقة لـ 26.6. |
يستعيد سلوك الإصدارات السابقة لـ 26.6، حيث كان المُعدِّل FINAL المحدد على الجدول الموجود أقصى اليسار في JOIN يُطبَّق خطأً أيضًا على جميع الجداول الأخرى المنضمة (للمحركات التي تدعم FINAL، مثل ReplacingMergeTree). افتراضيًا، لا يُطبَّق FINAL إلا على الجدول المكتوب عليه. فعِّل هذا الإعداد للتوافق مع الاستعلامات التي تعتمد على السلوك القديم؛ أما الإصلاح الموصى به فهو كتابة FINAL صراحةً على كل جدول يحتاج إليه.
القيم الممكنة:
- 0 - يُطبَّق
FINALعلى الجدول المحدد عليه فقط. - 1 - يُطبَّق
FINALالموجود على الجدول أقصى اليسار في JOIN على جميع الجداول المنضمة.
analyzer_compatibility_join_using_top_level_identifier
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 24.3 | 0 | فرض حلّ المعرّف في JOIN USING انطلاقًا من الإسقاط |
يفرض حلّ المعرّف في JOIN USING انطلاقًا من الإسقاط (على سبيل المثال، في SELECT a + 1 AS b FROM t1 JOIN t2 USING (b) سيُجرى join باستخدام t1.a + 1 = t2.b بدلًا من t1.b = t2.b). وتُؤخذ أيضًا الأسماء المستعارة المعرّفة في التعبيرات الفرعية ضمن قائمة SELECT في الاعتبار (على سبيل المثال، في SELECT uniqExact(a + 1 AS b) FROM t1 JOIN t2 USING (b) يُجرى join باستخدام t1.a + 1 = t2.b). عندما يُعرَّف الاسم المستعار المطابق في تعبير فرعي ضمن قائمة SELECT بدلًا من تعريفه كاسم مستعار على المستوى الأعلى، تُعطَّل النسخ المتماثلة المتوازية لهذا الاستعلام. بالنسبة إلى الاستعلامات المُرسلة إلى الخوادم البعيدة (جداول Distributed، ودالة الجدول remote)، لا يُرفض هذا الاستعلام مع استثناء إلا إذا تعذر حلّ المعرّف على الخادم البعيد تمامًا؛ وإذا كان الاسم المستعار يحجب عمودًا حقيقيًا في الجدول الأيسر، فإن الخادم البعيد يجري join باستخدام ذلك العمود بدلًا منه، لذا قد تختلف النتائج عن التنفيذ المحلي.
analyzer_compatibility_multiple_joins_qualify_column_names
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.8 | 0 | إعداد توافق جديد. عند تفعيله، يحاكي المحلّل أسماء أعمدة النتائج المؤهَّلة التي كان يستخدمها المحلّل القديم للاستعلامات التي تحتوي عبارة FROM فيها على عمليتي JOIN أو أكثر. |
عند تفعيله، وإذا كانت عبارة FROM في الاستعلام تحتوي على عمليتي JOIN أو أكثر (تُحتسب الجداول المفصولة بفواصل، بينما لا يُحتسب ARRAY JOIN)، يسمّي المحلّل أعمدة النتائج بالطريقة التي كانت تستخدمها إعادة كتابة عمليات الربط المتعددة في المحلّل القديم:
- تُسمّى الأعمدة الناتجة عن توسيع
*أو<table>.*أوCOLUMNS('<regexp>')بالشكل<alias-or-table>.<column>(يكون المؤهِّل هو الاسم المستعار لتعبير الجدول إن وُجد، وإلا فاسم الجدول من دون اسم قاعدة البيانات، وإلا فاسم تعبير الجدول الشائع؛ أما أعمدة الاستعلام الفرعي المربوط الذي لا يحمل اسماً مستعاراً فتظل غير مؤهَّلة). ويحتفظ نوعان من الأعمدة باسميهما غير المؤهَّلين لأنهما ينتميان إلى عملية الربط لا إلى تعبير جدول واحد: عمود ناتج عنARRAY JOIN، ومفتاح مدمج بواسطةJOIN ... USING. لذلك، لا تُحلّ المراجع الخارجية مثلSELECT ll.arrأوSELECT ll.kفي هاتين الحالتين؛ - صيغة قائمة المعرّفات
COLUMNS(col1, col2)ليست توسيعاً لمطابقة: إذ يحتفظ كل عمود بالاسم تماماً كما كُتب معرّفه، لذا ينتجCOLUMNS(x)الاسمxوينتجCOLUMNS(a.x)الاسمa.x؛ - يحتفظ مرجع عمود بلا اسم مستعار في قائمة
SELECTبالاسم تماماً كما كُتب (مثلاً، ينتجSELECT a.xعموداً باسمa.xحتى عندما يكونxغير ملتبس).
يتيح ذلك عمل الاستعلامات الخارجية التي تشير إلى هذه الأعمدة بأسمائها المؤهَّلة، على سبيل المثال:
SELECT ll.Date FROM (SELECT * FROM t AS ll LEFT JOIN t1 ON ll.k = t1.k LEFT JOIN t2 ON ll.k = t2.k);لا يسري مفعوله إلا عند تفعيل محلّل (enable_analyzer = 1).
analyzer_compatibility_prefer_alias_over_subcolumn
سجل الإصدارات
| الإصدار | القيمة الافتراضية | التعليق |
|---|---|---|
| 26.6 | 0 | إعداد توافق جديد |
عندما يمكن أن يشير معرّف متعدد الأجزاء مثل b.id إما إلى العمود id في جدول ذي الاسم المستعار b أو إلى عمود فرعي من نوع Tuple هو b.id لعمود آخر، فامنح الأفضلية لتفسير بادئة الاسم المستعار (أي العمود id في b). افتراضيًا، يفضّل المُحلِّل العمود الفرعي. فعِّل هذا الخيار لمطابقة آلية التحليل في المُحلِّل القديم.