mysql テーブル関数
リモートのMySQLサーバーに保存されているデータに対して SELECT
および INSERT
クエリを実行できるようにします。
構文
パラメータ
host:port
— MySQLサーバーのアドレス。database
— リモートデータベース名。table
— リモートテーブル名。user
— MySQLユーザー。password
— ユーザーパスワード。replace_query
—INSERT INTO
クエリをREPLACE INTO
に変換するフラグ。可能な値:0
- クエリはINSERT INTO
として実行されます。1
- クエリはREPLACE INTO
として実行されます。
on_duplicate_clause
—INSERT
クエリに追加されるON DUPLICATE KEY on_duplicate_clause
式。replace_query = 0
の場合のみ指定できます(同時にreplace_query = 1
とon_duplicate_clause
を渡すと、ClickHouseは例外を生成します)。 例:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1;
ここでのon_duplicate_clause
はUPDATE c2 = c2 + 1
です。使用できるon_duplicate_clause
についてはMySQLのドキュメントを参照してください。
引数は named collections を使用して渡すこともできます。この場合、host
と port
は別々に指定する必要があります。このアプローチは本番環境で推奨されます。
=, !=, >, >=, <, <=
のようなシンプルな WHERE
条件は現在MySQLサーバー上で実行されます。
残りの条件と LIMIT
サンプリング制約は、MySQLへのクエリが終了した後にClickHouseでのみ実行されます。
複数のレプリカをサポートしており、それらは |
で列挙する必要があります。例えば:
または
返される値
オリジナルのMySQLテーブルと同じカラムを持つテーブルオブジェクト。
注記
MySQLの一部のデータ型は異なるClickHouseの型にマッピングされる可能性があります - これはクエリレベルの設定 mysql_datatypes_support_level で対処されています。
注記
INSERT
クエリでは、テーブル関数 mysql(...)
とカラム名のリストを持つテーブル名を区別するために、キーワード FUNCTION
または TABLE FUNCTION
を使用する必要があります。以下の例を参照してください。
例
MySQL内のテーブル:
ClickHouseからデータを選択:
または named collections を使用:
置換および挿入:
MySQLのテーブルからClickHouseのテーブルにデータをコピー:
または、現在の最大IDに基づいてMySQLから増分バッチのみをコピーする場合:
関連項目