メインコンテンツまでスキップ
メインコンテンツまでスキップ

MySQL データベースエンジン

Not supported in ClickHouse Cloud

リモート MySQL サーバー上のデータベースに接続し、ClickHouse と MySQL 間でデータを交換するために INSERT および SELECT クエリを実行することができます。

MySQL データベースエンジンはクエリを MySQL サーバーに変換するため、SHOW TABLESSHOW 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 │
└────────┴───────┘