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

Движок базы данных 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 │
└────────┴───────┘