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

> يتيح لـ ClickHouse الاتصال بقواعد البيانات الخارجية عبر ODBC.

# محرك الجدول ODBC

export const CloudNotSupportedBadge = () => {
  return <div 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
        </div>;
};

يتيح لـ ClickHouse الاتصال بقواعد بيانات خارجية عبر [ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity).

لتنفيذ اتصالات ODBC بأمان، يستخدم ClickHouse برنامجًا منفصلًا هو `clickhouse-odbc-bridge`. وإذا جرى تحميل برنامج تشغيل ODBC مباشرةً من `clickhouse-server`، فقد تتسبب مشكلات برنامج التشغيل في تعطّل خادم ClickHouse. ويشغّل ClickHouse تلقائيًا `clickhouse-odbc-bridge` عند الحاجة إليه. ويُثبَّت برنامج جسر ODBC من الحزمة نفسها التي تتضمن `clickhouse-server`.

يدعم هذا المحرّك نوع البيانات [Nullable](/ar/reference/data-types/nullable).

<div id="creating-a-table">
  ## إنشاء جدول
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1],
    name2 [type2],
    ...
)
ENGINE = ODBC(datasource, external_database, external_table)
```

اطّلع على وصف مفصل لاستعلام [CREATE TABLE](/ar/reference/statements/create/table).

يمكن أن تختلف بنية الجدول عن بنية الجدول المصدر:

* يجب أن تكون أسماء الأعمدة مطابقةً لما هي عليه في الجدول المصدر، لكن يمكنك استخدام بعض هذه الأعمدة فقط وبأي ترتيب.
* قد تختلف أنواع الأعمدة عن تلك الموجودة في الجدول المصدر. يحاول ClickHouse [تحويل](/ar/reference/functions/regular-functions/type-conversion-functions#CAST) القيم إلى أنواع بيانات ClickHouse.
* يحدّد الإعداد [external\_table\_functions\_use\_nulls](/ar/reference/settings/session-settings#external_table_functions_use_nulls) كيفية التعامل مع أعمدة Nullable. القيمة الافتراضية: 1. إذا كانت القيمة 0، فلن تُنشئ دالة الجدول أعمدة Nullable، وستُدرج القيم الافتراضية بدلًا من NULL. وينطبق ذلك أيضًا على قيم NULL داخل المصفوفات.

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

* `datasource` — اسم القسم الذي يحتوي على إعدادات الاتصال في ملف `odbc.ini`.
* `external_database` — اسم قاعدة بيانات في نظام إدارة قواعد بيانات خارجي.
* `external_table` — اسم جدول في `external_database`.

يمكن أيضًا تمرير هذه المعلمات باستخدام [المجموعات المسماة](/ar/concepts/features/configuration/server-config/named-collections).

<div id="usage-example">
  ## مثال على الاستخدام
</div>

**استرجاع البيانات من تثبيت MySQL المحلي عبر ODBC**

جرى التحقق من هذا المثال على Ubuntu Linux 18.04 وMySQL server 5.7.

تأكد من تثبيت unixODBC وMySQL Connector.

افتراضيًا (إذا تم التثبيت من الحزم)، يبدأ ClickHouse العمل تحت المستخدم `clickhouse`. لذلك، تحتاج إلى إنشاء هذا المستخدم وتهيئته على MySQL server.

```bash theme={null}
$ sudo mysql
```

```sql theme={null}
mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'localhost' WITH GRANT OPTION;
```

ثم هيِّئ الاتصال في `/etc/odbc.ini`.

```bash theme={null}
$ cat /etc/odbc.ini
[mysqlconn]
DRIVER = /usr/local/lib/libmyodbc5w.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
USER = clickhouse
PASSWORD = clickhouse
```

يمكنك التحقق من الاتصال باستخدام الأداة `isql` المتوفرة ضمن تثبيت unixODBC.

```bash theme={null}
$ isql -v mysqlconn
+-------------------------+
| Connected!                            |
|                                       |
...
```

جدول في MySQL:

```text theme={null}
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0,01 sec)

mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `int_nullable` INT NULL DEFAULT NULL,
    ->   `float` FLOAT NOT NULL,
    ->   `float_nullable` FLOAT NULL DEFAULT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into test.test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from test.test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
|      1 |         NULL |     2 |           NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)
```

جدول في ClickHouse يسترجع البيانات من جدول MySQL:

```sql theme={null}
CREATE TABLE odbc_t
(
    `int_id` Int32,
    `float_nullable` Nullable(Float32)
)
ENGINE = ODBC('DSN=mysqlconn', 'test', 'test')
```

```sql theme={null}
SELECT * FROM odbc_t
```

```text theme={null}
┌─int_id─┬─float_nullable─┐
│      1 │           ᴺᵁᴸᴸ │
└────────┴────────────────┘
```

<div id="see-also">
  ## انظر أيضًا
</div>

* [قواميس ODBC](/ar/reference/statements/create/dictionary/sources/odbc)
* [دالة الجدول ODBC](/ar/reference/functions/table-functions/odbc)
