リモートの MySQL サーバー上のデータベースに接続し、ClickHouse と MySQL の間でデータをやり取りするための INSERT および SELECT クエリを実行できます。
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
MySQLプロトコルの接続で zlib 圧縮を有効にします。1 に設定すると、ClickHouse は MySQLサーバーに対してプロトコルレベルの圧縮を要求します。
デフォルト値: 0。
例:
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;TLS/SSL
MySQL への暗号化接続の認証情報は、named collection のキー (またはキー・バリュー引数) として渡されます。
| パラメータ | 説明 |
|---|---|
ssl_ca_pem |
MySQL サーバー証明書の検証に使用する CA 証明書の内容。 |
ssl_cert_pem |
証明書ベース認証に使用するクライアント証明書の内容。 |
ssl_key_pem |
ssl_cert_pem に対応する秘密鍵の内容。 |
値には対応する PEM ファイルの内容を指定します。これらは named collection またはクエリにコピーできます。パスワードと同様に、ログおよび SHOW クエリではマスクされます。
同じ認証情報は、サーバー上のファイルへのパスとして ssl_ca、ssl_cert、ssl_key に指定することもできます。ただし、サーバー設定ファイルで定義された named collection 内でのみ指定でき、このような値はクエリでオーバーライドできません。サーバーは自身の権限でこれらのファイルを開くため、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 を除く) は、デフォルトで有効になっている mysql_datatypes_support_level 設定の geometry フラグで制御されます。汎用的な GEOMETRY カラム型は、具体的なジオメトリ型の Variant である包括的な Geometry 型にマッピングされます。このようなカラムには任意のサブタイプの値を格納できるため、ClickHouse に対応する型がないサブタイプ (GEOMETRYCOLLECTION) の値を読み取ると、読み取り時に例外が発生します。適切なジオメトリ型を使用するため、この非互換性は許容されています。GEOMETRYCOLLECTION 型で宣言されたカラムは、他のすべての MySQL データ型と同様に、String に変換されます。
Nullable もサポートされています。空間カラムは、次の 3 つの場合、ジオメトリ型ではなく String (nullable の場合は Nullable(String)) にマッピングされます。GEOMETRYCOLLECTION として宣言されている場合、geometry フラグが無効で型が POINT ではない場合、または Point は Nullable 内にネストできる唯一のジオメトリ型であるため、カラムが nullable で型が POINT ではない場合です。いずれの場合も、文字列には 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)MySQLサーバーとデータをやり取りする ClickHouse 内のデータベース:
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 │
└────────┴───────┘