Позволяет подключаться к базам данных на удалённом сервере MySQL и выполнять запросы INSERT и SELECT для обмена данными между ClickHouse и MySQL.
Движок базы данных MySQL передаёт запросы на сервер MySQL, поэтому вы можете выполнять такие операции, как SHOW TABLES или SHOW CREATE TABLE.
Следующие запросы не поддерживаются:
RENAMECREATE TABLEALTER
Создание базы данных
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— пароль пользователя.
Настройки
enable_compression
Включает сжатие zlib для подключения по протоколу MySQL. Если установлено значение 1, ClickHouse запрашивает у сервера MySQL сжатие на уровне протокола.
Значение по умолчанию: 0.
Пример:
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;TLS/SSL
Учётные данные для зашифрованного подключения к MySQL передаются как ключи именованной коллекции (или как аргументы «ключ-значение»):
| Параметр | Описание |
|---|---|
ssl_ca_pem |
Содержимое CA‑сертификата, по которому проверяется сертификат сервера MySQL. |
ssl_cert_pem |
Содержимое клиентского сертификата для аутентификации на основе сертификата. |
ssl_key_pem |
Содержимое закрытого ключа, соответствующего ssl_cert_pem. |
Значения представляют собой содержимое соответствующих PEM-файлов, которое можно скопировать в именованную коллекцию или включить в запрос. Они маскируются в журналах и в запросах SHOW так же, как пароли.
Те же учётные данные можно также указать в виде путей к файлам на сервере в параметрах ssl_ca, ssl_cert и ssl_key — но только в именованной коллекции, определённой в файле конфигурации сервера; такое значение нельзя переопределить в запросе. Сервер открывает эти файлы со своими привилегиями, поэтому разрешение передавать путь из SQL позволило бы любому пользователю, способному определить источник MySQL, исследовать локальную файловую систему и проходить аутентификацию с помощью сертификата и ключа, к которым у него нет доступа на чтение.
Поддерживаемые типы данных
| 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 |
| POINT | Point |
| LINESTRING | LineString |
| POLYGON | Polygon |
| MULTILINESTRING | MultiLineString |
| MULTIPOLYGON | MultiPolygon |
| MULTIPOINT | MultiPoint |
| GEOMETRY | Geometry |
Преобразованием пространственных типов (за исключением POINT, который преобразуется всегда) управляет флаг geometry настройки mysql_datatypes_support_level, включённой по умолчанию. Общий тип столбца GEOMETRY сопоставляется с универсальным типом Geometry (Variant над конкретными геометрическими типами). Поскольку такой столбец может содержать значение любого подтипа, при чтении значения, подтип которого не имеет аналога в ClickHouse (GEOMETRYCOLLECTION), генерируется исключение; такая несовместимость допустима в обмен на полноценный геометрический тип. Столбцы, объявленные с типом GEOMETRYCOLLECTION, как и все остальные типы данных MySQL, преобразуются в String.
Тип Nullable поддерживается. Пространственный столбец сопоставляется с String (Nullable(String), если он допускает NULL) вместо геометрического типа в трёх случаях: он объявлен как GEOMETRYCOLLECTION; флаг geometry отключён и тип не POINT; или столбец допускает NULL и тип не POINT, поскольку Point — единственный геометрический тип, который можно вложить в Nullable. Во всех трёх случаях строка содержит значение в точности в том виде, в котором его возвращает MySQL: 4-байтовый префикс SRID, за которым следует полезная нагрузка WKB, поэтому перед передачей в декодер WKB удалите эти 4 начальных байта.
Поддержка глобальных переменных
Для лучшей совместимости к глобальным переменным можно обращаться в стиле MySQL — как @@identifier.
Поддерживаются следующие переменные:
versionmax_allowed_packet
Пример:
SELECT @@version;Примеры использования
Таблица в 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;SHOW DATABASES┌─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 │
└────────┴───────┘