> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# لغات بديلة للاستعلام

> استخدم لغات بديلة للاستعلام في ClickHouse

export const ExperimentalBadge = () => {
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#experimental-features" className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            ميزة تجريبية
        </a>;
};

بالإضافة إلى SQL القياسية، يدعم ClickHouse عدة لغات استعلام بديلة للاستعلام عن البيانات.

اللهجات المدعومة حاليًا هي:

* `clickhouse`: [لهجة SQL](/ar/chdb/reference/sql-reference) الافتراضية في ClickHouse
* `prql`: [Pipelined Relational Query Language (PRQL)](https://prql-lang.org/)
* `kusto`: [Kusto Query Language (KQL)](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query)
* `trino`: [Trino SQL](https://trino.io/docs/current/language.html)

تُحدَّد لغة الاستعلام المستخدمة عبر الإعداد `dialect`.

<h2 id="standard-sql">
  SQL القياسية
</h2>

تُعد SQL القياسية لغة الاستعلام الافتراضية في ClickHouse.

```sql theme={null}
SET dialect = 'clickhouse'
```

<h2 id="pipelined-relational-query-language-prql">
  Pipelined Relational Query Language (PRQL)
</h2>

<ExperimentalBadge />

لتمكين PRQL:

```sql theme={null}
SET allow_experimental_prql_dialect = 1; -- this SET statement is required only for ClickHouse versions >= v25.1
SET dialect = 'prql'
```

مثال لاستعلام PRQL:

```prql theme={null}
from trips
aggregate {
    ct = count this
    total_days = sum days
}
```

في الخلفية، يستخدم ClickHouse الترجمة التحويلية من PRQL إلى SQL لتشغيل استعلامات PRQL.

<h2 id="kusto-query-language-kql">
  Kusto Query Language (KQL)
</h2>

<ExperimentalBadge />

لتمكين KQL:

```sql theme={null}
SET allow_experimental_kusto_dialect = 1; -- this SET statement is required only for ClickHouse versions >= 25.1
SET dialect = 'kusto'
```

```kql title="Query" theme={null}
numbers(10) | project number
```

```response title="Response" theme={null}
┌─number─┐
│      0 │
│      1 │
│      2 │
│      3 │
│      4 │
│      5 │
│      6 │
│      7 │
│      8 │
│      9 │
└────────┘
```

لاحظ أن استعلامات KQL قد لا تتمكن من الوصول إلى جميع الدوال المعرَّفة في ClickHouse.

<h2 id="trino-sql">
  Trino SQL
</h2>

<ExperimentalBadge />

لتفعيل لهجة Trino:

```sql theme={null}
SET enable_trino_dialect = 1;
SET dialect = 'trino'
```

تُترجَم الصيغة الخاصة بـ Trino إلى ClickHouse SQL، وتُربَط أسماء دوال Trino بما يكافئها في ClickHouse:

```sql title="Query" theme={null}
SELECT approx_distinct(x) FROM (VALUES 1, 2, 2) AS t(x)
```

```response title="Response" theme={null}
┌─uniq(x)─┐
│       2 │
└─────────┘
```

تشمل الترجمة، من بين أمور أخرى، القيم الحرفية `ARRAY[...]`، و`TRY_CAST`، و`UNNEST` (تُترجم إلى `ARRAY JOIN`)،
ومُنشئات وأنواع `ROW`، وجداول `VALUES`، و`OFFSET` قبل `LIMIT`، و`BETWEEN SYMMETRIC`، وعدة مئات من
الدوال، بما فيها تلك التي ترد أسماؤها في كلا النظامين بدلالات مختلفة (على سبيل المثال، الدالة `length` في Trino
تَعُدّ نقاط ترميز Unicode وتُترجم إلى `lengthUTF8`). أما دوال ClickHouse التي لا تتعارض أسماؤها مع أسماء Trino فتبقى
متاحة، ما يتيح مزج عائلتي الدوال معًا في استعلام واحد.

تُربط قيم `JSON` في Trino بنوع [`JSON`](/ar/reference/data-types/newjson) في 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` لمعرفة كيفية ترجمة استعلام ما.
