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

mysql テーブル関数

リモートのMySQLサーバーに保存されているデータに対して SELECT および INSERT クエリを実行できるようにします。

構文

パラメータ

  • host:port — MySQLサーバーのアドレス。
  • database — リモートデータベース名。
  • table — リモートテーブル名。
  • user — MySQLユーザー。
  • password — ユーザーパスワード。
  • replace_queryINSERT INTO クエリを REPLACE INTO に変換するフラグ。可能な値:
    • 0 - クエリは INSERT INTO として実行されます。
    • 1 - クエリは REPLACE INTO として実行されます。
  • on_duplicate_clauseINSERT クエリに追加される ON DUPLICATE KEY on_duplicate_clause 式。replace_query = 0 の場合のみ指定できます(同時に replace_query = 1on_duplicate_clause を渡すと、ClickHouseは例外を生成します)。 例: INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1; ここでの on_duplicate_clauseUPDATE c2 = c2 + 1 です。使用できる on_duplicate_clause についてはMySQLのドキュメントを参照してください。

引数は named collections を使用して渡すこともできます。この場合、hostport は別々に指定する必要があります。このアプローチは本番環境で推奨されます。

=, !=, >, >=, <, <= のようなシンプルな 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から増分バッチのみをコピーする場合:

関連項目