تعيد الجدول المتصل عبر ODBC.
odbc(datasource, external_database, external_table)
odbc(datasource, external_table)
odbc(named_collection)
| الوسيط | الوصف |
|---|
datasource | اسم القسم الذي يتضمن إعدادات الاتصال في ملف odbc.ini. |
external_database | اسم قاعدة بيانات في نظام إدارة قواعد بيانات خارجي. |
external_table | اسم جدول في external_database. |
يمكن أيضًا تمرير هذه المعلمات باستخدام المجموعات المسماة.
لتنفيذ اتصالات ODBC بأمان، يستخدم ClickHouse برنامجًا منفصلًا هو clickhouse-odbc-bridge. وإذا جرى تحميل برنامج تشغيل ODBC مباشرةً من clickhouse-server، فقد تؤدي مشكلات برنامج التشغيل إلى تعطل خادم ClickHouse. ويبدأ ClickHouse تلقائيًا تشغيل clickhouse-odbc-bridge عند الحاجة إليه. ويُثبَّت برنامج جسر ODBC من الحزمة نفسها التي تتضمن clickhouse-server.
تُحوَّل الحقول ذات القيم NULL من الجدول الخارجي إلى القيم الافتراضية لنوع البيانات الأساسي. على سبيل المثال، إذا كان أحد حقول جدول MySQL بعيد من النوع INT NULL، فسيُحوَّل إلى 0 (وهي القيمة الافتراضية لنوع بيانات ClickHouse Int32).
الحصول على البيانات من تثبيت MySQL المحلي عبر ODBC
تم التحقق من هذا المثال على Ubuntu Linux 18.04 وMySQL server 5.7.
تأكد من تثبيت unixODBC وMySQL Connector.
افتراضيًا (إذا كان التثبيت قد تم من الحزم)، يبدأ ClickHouse العمل بالمستخدم clickhouse. لذلك تحتاج إلى إنشاء هذا المستخدم وتهيئته على MySQL server.
mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'clickhouse' WITH GRANT OPTION;
ثم قم بتهيئة الاتصال في /etc/odbc.ini.
$ cat /etc/odbc.ini
[mysqlconn]
DRIVER = /usr/local/lib/libmyodbc5w.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
USERNAME = clickhouse
PASSWORD = clickhouse
يمكنك التحقق من الاتصال باستخدام الأداة isql المضمّنة في تثبيت unixODBC.
$ isql -v mysqlconn
+-------------------------+
| Connected! |
| |
...
الجدول في MySQL:
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 (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
| 1 | NULL | 2 | NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)
استرداد البيانات من جدول MySQL في ClickHouse:
SELECT * FROM odbc('DSN=mysqlconn', 'test', 'test')
┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐
│ 1 │ 0 │ 2 │ 0 │
└────────┴──────────────┴───────┴────────────────┘
آخر تعديل في ٢٥ يونيو ٢٠٢٦