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

構文

引数

引数は 名前付きコレクション を使用して渡すこともできます。この場合、hostport は別々に指定する必要があります。本番環境ではこの方法を推奨します。 =, !=, >, >=, <, <= のような単純な WHERE 句は、現在 MySQLサーバー上で実行されます。 それ以外の条件と LIMIT のサンプリング制約は、MySQL へのクエリの完了後にのみ ClickHouse で実行されます。

テーブル名の代わりにクエリを渡す

テーブル名の代わりに、3 番目の引数には、そのまま MySQL に渡される SELECT クエリを指定できます。結果として得られるテーブルの構造は、クエリ結果から推論されます。クエリは、サブクエリとして記述することも、query 関数でラップすることもできます。
これにより、JOIN、集計、そのほかの処理を MySQL にプッシュダウンできます。このようなテーブルは読み取り専用であり、INSERT はできません。同じ構文は MySQL テーブルエンジンでもサポートされています。
サブクエリ形式 (SELECT ...) は ClickHouse で解析され、サーバーに送信される前に MySQL の SQL方言 (Identifier をバッククォートで囲む形式) で再シリアライズされます。そのため、有効な ClickHouse SQL である必要があります。ClickHouse が解析しない MySQL 固有の構文を渡すには、query('...') 形式を使用してください。この形式では、テキストがそのまま MySQL に送信されます。渡したクエリに対して、外側の ClickHouse クエリにある WHERELIMIT、集計などがプッシュダウンされることはありません。これらは完全なクエリ結果を取得した後に ClickHouse 側で適用されます。MySQL から読み取るデータを絞り込むには、フィルターを渡すクエリの中に記述してください。external_table_strict_query = 1 を指定すると、プッシュダウンできない外側のフィルターはローカルで適用される代わりに、例外を返して拒否されます。
複数のレプリカをサポートしており、| で区切って指定する必要があります。例えば:
または

戻り値

元の MySQL テーブルと同じカラムを持つテーブルオブジェクトです。
MySQL の一部のデータ型は、複数の ClickHouse の型にマッピングされる場合があります。これはクエリレベルの設定 mysql_datatypes_support_level で制御されます。
INSERT クエリでは、テーブル関数 mysql(...) と、カラム名リスト付きのテーブル名を区別するために、キーワード FUNCTION または TABLE FUNCTION を使用する必要があります。以下の例を参照してください。

MySQLのテーブル:
ClickHouseからデータを取得する:
または、名前付きコレクション を使用する方法:

enable_compression

MySQLプロトコル接続の圧縮を有効にします。 デフォルト値: false この設定は次に適用されます:
  • mysql テーブル関数
  • MySQL テーブルエンジン
  • MySQL データベースエンジン
  • MySQLインテグレーションで使用される名前付きコレクション
有効にすると、ClickHouse は接続に対して圧縮を要求します。 例:
置換と挿入:
MySQLテーブルからClickHouseテーブルへのデータコピー:
または、現在の最大 ID を基準に MySQL から増分バッチのみをコピーする場合:
最終更新日 2026年7月23日