Skip to main content

MySQL

Позволяет подключаться к базам данных на удалённом 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')

Параметры движка

  • host:port — адрес сервера MySQL.
  • database — имя базы данных на удалённом сервере.
  • user — пользователь MySQL.
  • password — пароль пользователя.

Поддержка типов данных​

MySQLClickHouse
UNSIGNED TINYINTUInt8
TINYINTInt8
UNSIGNED SMALLINTUInt16
SMALLINTInt16
UNSIGNED INT, UNSIGNED MEDIUMINTUInt32
INT, MEDIUMINTInt32
UNSIGNED BIGINTUInt64
BIGINTInt64
FLOATFloat32
DOUBLEFloat64
DATEDate
DATETIME, TIMESTAMPDateTime
BINARYFixedString

Все прочие типы данных преобразуются в String.

Nullable поддержан.

Использование глобальных переменных​

Для лучшей совместимости к глобальным переменным можно обращаться в формате MySQL, как @@identifier.

Поддерживаются следующие переменные:

  • version
  • max_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')
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 │
└────────┴───────┘