Перейти к основному содержимому
Перейти к основному содержимому

Движок баз данных MySQL

Not supported in ClickHouse Cloud

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

Все остальные типы данных MySQL преобразуются в 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') 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 │
└────────┴───────┘