يتيح الاتصال بقواعد البيانات على خادم MySQL بعيد وتنفيذ استعلامات INSERT وSELECT لتبادل البيانات بين ClickHouse وMySQL.
يترجم محرك قاعدة البيانات MySQL الاستعلامات إلى خادم MySQL، مما يتيح لك تنفيذ عمليات مثل SHOW TABLES أو SHOW CREATE TABLE.
لا يمكنك تنفيذ الاستعلامات التالية:
RENAME
CREATE TABLE
ALTER
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]
معلمات المحرك
host:port — عنوان خادم MySQL.
database — اسم قاعدة البيانات على الخادم البعيد.
user — مستخدم MySQL.
password — كلمة مرور المستخدم.
الإعدادات
يُفعّل ضغط zlib لاتصال بروتوكول MySQL. عند ضبطه على 1، يطلب ClickHouse ضغطًا على مستوى البروتوكول من خادم MySQL.
القيمة الافتراضية: 0.
مثال:
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;
| MySQL | ClickHouse |
|---|
| UNSIGNED TINYINT | UInt8 |
| TINYINT | Int8 |
| UNSIGNED SMALLINT | UInt16 |
| SMALLINT | Int16 |
| UNSIGNED INT, UNSIGNED MEDIUMINT | UInt32 |
| INT, MEDIUMINT | Int32 |
| UNSIGNED BIGINT | UInt64 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| DATE | Date |
| DATETIME, TIMESTAMP | DateTime |
| BINARY | FixedString |
تُحوَّل جميع أنواع بيانات MySQL الأخرى إلى النوع String.
النوع Nullable مدعوم.
لتحقيق توافق أفضل، يمكنك الإشارة إلى المتغيرات العامة بأسلوب MySQL، بالشكل @@identifier.
المتغيرات التالية مدعومة:
version
max_allowed_packet
حتى الآن، هذه المتغيرات مجرد عناصر وهمية ولا تقابل أي شيء فعليًا.
مثال:
جدول في MySQL:
mysql> USE test;
Database changed
mysql> CREATE TABLE `mysql_table` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)
mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
| 1 | 2 |
+------+-----+
1 row in set (0,00 sec)
قاعدة بيانات في ClickHouse تتبادل البيانات مع خادم MySQL:
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;
┌─name─────┐
│ default │
│ mysql_db │
│ system │
└──────────┘
SHOW TABLES FROM mysql_db
┌─name─────────┐
│ mysql_table │
└──────────────┘
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│ 1 │ 2 │
└────────┴───────┘
INSERT INTO mysql_db.mysql_table VALUES (3,4)
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘