clickhouse: لهجة SQL الافتراضية في ClickHouseprql: Pipelined Relational Query Language (PRQL)kusto: Kusto Query Language (KQL)trino: Trino SQL
dialect.
SQL القياسية
تُعد SQL القياسية لغة الاستعلام الافتراضية في ClickHouse.Pipelined Relational Query Language (PRQL)
لتمكين PRQL:Kusto Query Language (KQL)
لتمكين KQL:Query
Response
Trino SQL
لتفعيل لهجة Trino:Query
Response
ARRAY[...]، وTRY_CAST، وUNNEST (تُترجم إلى ARRAY JOIN)،
ومُنشئات وأنواع ROW، وجداول VALUES، وOFFSET قبل LIMIT، وBETWEEN SYMMETRIC، وعدة مئات من
الدوال، بما فيها تلك التي ترد أسماؤها في كلا النظامين بدلالات مختلفة (على سبيل المثال، الدالة length في Trino
تَعُدّ نقاط ترميز Unicode وتُترجم إلى lengthUTF8). أما دوال ClickHouse التي لا تتعارض أسماؤها مع أسماء Trino فتبقى
متاحة، ما يتيح مزج عائلتي الدوال معًا في استعلام واحد.
تُربط قيم JSON في Trino بنوع JSON في ClickHouse:
فتتحول القيم الحرفية JSON '...' وjson_parse إلى تحويلات (casts) إلى JSON، وتتحول json_format إلى toJSONString، وتُترجم دوال
المسار (json_extract, json_extract_scalar, json_value, json_query, json_exists, json_size)
إلى نظائرها في ClickHouse. وبما أن نوع JSON في ClickHouse يخزّن كائنات، فإن المستندات غير الكائنية
(المصفوفات والقيم القياسية على المستوى الأعلى) تُرفض عند تجسيدها كقيم JSON؛ أما دوال المسار فتقبل
أي نص JSON.
بعض دلالات Trino لا يمكن التعبير عنها في نص الاستعلام المترجَم، لذا تُطبَّق على سياق الاستعلام
بدلاً من ذلك: فعمليات الربط الخارجية تُنتج NULL (join_use_nulls)، وعمليات المجموعات تستخدم النوع الأعلى العددي بدلاً من
Variant (use_variant_as_common_type)، ويُشترط تفعيل مُحلِّل الاستعلامات (enable_analyzer). ومع ذلك، تظل الأسبقية
لعبارة SETTINGS الصريحة في الاستعلام على هذه الإعدادات.
أما الدلالات التي لا يمكن معالجتها بالترجمة على مستوى الاستعلام فتبقى كما هي في ClickHouse. وأبرزها أن
معامل القسمة / يُجري قسمة صحيحة في Trino بينما يُجري قسمة عشرية في ClickHouse، وأن
round يستخدم تقريب المصرفيين في ClickHouse مع وسائط Float.
استخدم EXPLAIN SYNTAX لمعرفة كيفية ترجمة استعلام ما.