> ## 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.

> يتيح هذا المحرك استيراد البيانات وتصديرها إلى SQLite، ويدعم إجراء استعلامات على جداول SQLite مباشرةً من ClickHouse.

# محرك جدول SQLite

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            غير مدعوم في ClickHouse Cloud
        </a>;
};

<CloudNotSupportedBadge />

يتيح هذا المحرك استيراد البيانات إلى SQLite وتصديرها منه، كما يدعم الاستعلام عن جداول SQLite مباشرةً من ClickHouse.

## إنشاء جدول

```sql theme={null}
    CREATE TABLE [IF NOT EXISTS] [db.]table_name
    (
        name1 [type1],
        name2 [type2], ...
    ) ENGINE = SQLite('db_path', 'table')
```

**معلمات المحرّك**

* `db_path` — مسار ملف SQLite الذي يحتوي على قاعدة البيانات.
* `table` — اسم جدول في قاعدة بيانات SQLite، أو استعلام يُمرَّر إلى SQLite كما هو (انظر [تمرير استعلام بدلًا من اسم جدول](#passing-a-query)).

## تمرير استعلام بدلًا من اسم جدول

بدلًا من اسم الجدول، يمكن أن تكون قيمة الوسيطة `table` استعلام `SELECT` يُمرَّر إلى SQLite كما هو. ويُستدل على بنية الجدول من نتيجة الاستعلام. ويمكن كتابة الاستعلام إما كاستعلام فرعي أو بتغليفه داخل الدالة `query`:

```sql theme={null}
CREATE TABLE sqlite_table ENGINE = SQLite('sqlite.db', (SELECT col1, col2 FROM table1 WHERE col2 > 1));
CREATE TABLE sqlite_table ENGINE = SQLite('sqlite.db', query('SELECT col1, col2 FROM table1 WHERE col2 > 1'));
```

مثل هذا الجدول للقراءة فقط: لا يُسمح بتنفيذ `INSERT` فيه. وتدعم دالة الجدول [`sqlite`](/ar/reference/functions/table-functions/sqlite) الصياغة نفسها.

<Note>
  يُحلَّل شكل الاستعلام الفرعي `(SELECT ...)` بواسطة ClickHouse، ثم يُعاد تسلسله قبل إرساله إلى SQLite. لذلك يجب أن يكون صالحًا في ClickHouse SQL. ولتمرير صياغة خاصة بـ SQLite لا يحلّلها ClickHouse، استخدم صيغة `query('...')`، إذ يُرسَل نصها إلى SQLite كما هو.

  أي `WHERE` أو `LIMIT` أو aggregation أو غير ذلك من عناصر استعلام ClickHouse المحيط **لا** يُدفَع إلى داخل الاستعلام المُمرَّر — بل يُطبَّق في ClickHouse بعد جلب نتيجة الاستعلام كاملةً. ولتقييد البيانات المقروءة من SQLite، ضع filter داخل الاستعلام المُمرَّر. ومع [`external_table_strict_query = 1`](/ar/reference/settings/session-settings/external-table#external_table_strict_query)، يُرفَض أي filter خارجي على أعمدة الجدول عبر exception بدلًا من تطبيقه محليًا، لأنه لا يمكن دفعه إلى داخل الاستعلام المُمرَّر. ويشمل هذا الفحص predicate الخاص بـ `WHERE` في المستوى الأعلى وكل عامل من عوامل `AND` في المستوى الأعلى. أما `PREWHERE` على أعمدة هذا الجدول فلا يخضع لهذا الإعداد: فمحرّك الجدول هذا لا يدعم `PREWHERE`، ويُرفَض مثل هذا الاستعلام بالخطأ `ILLEGAL_PREWHERE` بصرف النظر عن الإعداد. ولا يُجرى الفحص إلا حيث يمكن دفع filter أصلًا: عندما يكون هذا الجدول هو الجدول الوحيد في الاستعلام، أو على أي من جانبي `INNER JOIN`، أو على الجانب المحفوظ من outer join (الجانب الأيسر في `LEFT JOIN`، والجانب الأيمن في `RIGHT JOIN`). وعلى الجانب غير المحفوظ من `LEFT`/`RIGHT JOIN` وعلى أي من جانبي `FULL JOIN` لا يُدفَع شيء ولا يُفحَص شيء، لذا يُطبَّق filter على أعمدة هذا الجدول محليًا بعد الـ join حتى في الوضع الصارم. وحيث يُجرى الفحص، فإن predicate يشير إلى جداول أخرى مضمومة في الاستعلام المحيط لا يُدفَع ويُستثنى من الفحص، سواء أشار إلى الجانب المضموم فقط أو خلطه مع هذا الجدول داخل تعبير واحد ليس `AND` (مثل `OR`)؛ ويحتفظ مثل هذا الـ predicate بنقطة تقييمه المعتادة في ClickHouse (`WHERE` بعد الـ join، و`PREWHERE` قبله) ولا يُرفَض.
</Note>

## دعم أنواع البيانات

عند تحديد أنواع أعمدة ClickHouse صراحةً في تعريف الجدول، يمكن تحليل أنواع ClickHouse التالية من أعمدة TEXT في SQLite:

* [Date](/ar/reference/data-types/date), [Date32](/ar/reference/data-types/date32)
* [DateTime](/ar/reference/data-types/datetime), [DateTime64](/ar/reference/data-types/datetime64)
* [UUID](/ar/reference/data-types/uuid)
* [Enum8, Enum16](/ar/reference/data-types/enum)
* [Decimal32, Decimal64, Decimal128, Decimal256](/ar/reference/data-types/decimal)
* [FixedString](/ar/reference/data-types/fixedstring)
* جميع أنواع الأعداد الصحيحة ([UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64](/ar/reference/data-types/int-uint))
* [Float32, Float64](/ar/reference/data-types/float)

راجع [محرك قاعدة بيانات SQLite](/ar/reference/engines/database-engines/sqlite#data_types-support) للاطّلاع على مطابقة الأنواع الافتراضية.

## مثال على الاستخدام

يعرض استعلامًا لإنشاء جدول SQLite:

```sql theme={null}
SHOW CREATE TABLE sqlite_db.table2;
```

```text theme={null}
CREATE TABLE SQLite.table2
(
    `col1` Nullable(Int32),
    `col2` Nullable(String)
)
ENGINE = SQLite('sqlite.db','table2');
```

يُرجِع البيانات من الجدول:

```sql theme={null}
SELECT * FROM sqlite_db.table2 ORDER BY col1;
```

```text theme={null}
┌─col1─┬─col2──┐
│    1 │ text1 │
│    2 │ text2 │
│    3 │ text3 │
└──────┴───────┘
```

**راجع أيضًا**

* محرك [SQLite](/ar/reference/engines/database-engines/sqlite)
* دالة الجدول [sqlite](/ar/reference/functions/table-functions/sqlite)
