メインコンテンツへスキップ
ExternalDistributed エンジンを使用すると、リモートサーバー上の MySQL または PostgreSQL に格納されているデータに対して SELECT クエリを実行できます。引数として MySQL または PostgreSQL エンジンを指定できるため、シャーディングが可能です。

テーブルの作成

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
) ENGINE = ExternalDistributed('engine', 'host:port', 'database', 'table', 'user', 'password');
CREATE TABLEクエリの詳細な説明を参照してください。 テーブル構造は、元のテーブル構造と異なる場合があります。
  • カラム名は元のテーブルと同じである必要がありますが、それらのうち一部のカラムだけを任意の順序で使用できます。
  • カラムの型は元のテーブルのものと異なる場合があります。ClickHouse は値を ClickHouse のデータ型にCASTしようとします。
エンジンパラメータ
  • engine — テーブルエンジン MySQL または PostgreSQL
  • host:port — MySQL または PostgreSQL サーバーのアドレス。
  • database — リモートデータベース名。
  • table — リモートテーブル名。
  • user — ユーザー名。
  • password — ユーザーのパスワード。

実装の詳細

複数のレプリカに対応しており、レプリカは |、分片は , で列挙する必要があります。例:
CREATE TABLE test_shards (id UInt32, name String, age UInt32, money UInt32) ENGINE = ExternalDistributed('MySQL', `mysql{1|2}:3306,mysql{3|4}:3306`, 'clickhouse', 'test_replicas', 'root', 'clickhouse');
レプリカを指定すると、読み取り時には各分片について、利用可能なレプリカの中から 1 つが選択されます。接続に失敗した場合は次のレプリカが選択され、この処理はすべてのレプリカに対して順に行われます。すべてのレプリカへの接続試行が失敗した場合は、同じ方法で数回再試行されます。 分片の数は任意に指定でき、各分片に対するレプリカの数も任意に指定できます。 関連項目
最終更新日 2026年6月10日