SELECT クエリや INSERT クエリを実行できます。
テーブルを作成する
- カラム名は元の MySQL テーブルと同じである必要がありますが、それらの一部のカラムだけを任意の順序で使用できます。
- カラムの型は、元の MySQL テーブルのものと異なっていてもかまいません。ClickHouse は値を ClickHouse のデータ型に cast しようとします。
- external_table_functions_use_nulls 設定は、Nullable カラムをどのように処理するかを定義します。デフォルト値: 1。0 の場合、このテーブル関数は Nullable カラムを作成せず、null の代わりにデフォルト値を挿入します。これは配列内の NULL 値にも適用されます。
host:port— MySQL サーバーのアドレス。database— リモートのデータベース名。table— リモートテーブル名、またはそのまま MySQL に渡されるクエリです (テーブル名の代わりにクエリを渡す を参照) 。user— MySQL ユーザー。password— ユーザーのパスワード。replace_query—INSERT INTOクエリをREPLACE INTOに変換するフラグです。replace_query=1の場合、クエリが置き換えられます。on_duplicate_clause—INSERTクエリに追加されるON DUPLICATE KEY on_duplicate_clause式です。 例:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1。この場合、on_duplicate_clauseはUPDATE c2 = c2 + 1です。ON DUPLICATE KEY句で使用できるon_duplicate_clauseについては、MySQL documentation を参照してください。on_duplicate_clauseを指定するには、replace_queryパラメータに0を渡す必要があります。replace_query = 1とon_duplicate_clauseを同時に渡すと、ClickHouse は例外を生成します。
host と port は別々に指定する必要があります。この方法は本番環境に推奨されます。
=, !=, >, >=, <, <= のような単純な WHERE 句は MySQL サーバー上で実行されます。
それ以外の条件と LIMIT サンプリング制約は、MySQL へのクエリが完了した後にのみ ClickHouse で実行されます。
TLS/SSL
MySQL への暗号化接続の認証情報は、名前付きコレクションのオプション (またはキー・バリュー引数) として渡されます。
値には対応する PEM ファイルの内容を指定します。これらは名前付きコレクションまたはクエリにコピーできます。パスワードと同様に、ログおよび
SHOW クエリではマスクされます。
同じ認証情報は、ssl_ca、ssl_cert、ssl_key を使用してサーバー上のファイルへのパスとして指定することもできます。ただし、指定できるのはサーバー設定ファイルで定義された名前付きコレクション内のみであり、このような値をクエリでオーバーライドすることはできません。サーバーは自身の権限でこれらのファイルを開くため、SQL からパスを受け付けると、MySQL ログソースを定義できるすべてのユーザーがローカルファイルシステムを調査し、自身に読み取り権限のない証明書と秘密鍵を使って認証できるようになります。
テーブル名の代わりにクエリを渡す
テーブル名の代わりに、table 引数には MySQL にそのまま渡される SELECT クエリを指定できます。テーブルの構造はクエリの結果から推論されます。クエリは、サブクエリとして記述することも、query 関数でラップすることもできます。
INSERT することはできません。同じ構文は mysql テーブル関数でもサポートされています。
サブクエリ形式
(SELECT ...) は ClickHouse によって解析され、サーバーに送信される前に MySQL の SQL方言 (Identifier をバッククォートで囲む形式) で再シリアライズされます。したがって、有効な ClickHouse SQL である必要があります。ClickHouse が解析しない MySQL 固有の構文を渡すには、query('...') 形式を使用してください。この場合、テキストはそのまま MySQL に送信されます。外側の WHERE、LIMIT、集計など、周囲の ClickHouse クエリの要素は、渡されたクエリにはプッシュダウンされません。これらは完全なクエリ結果を取得した後に ClickHouse で適用されます。MySQL から読み取るデータを制限するには、フィルタを渡すクエリ内に記述してください。external_table_strict_query = 1 を指定すると、このテーブルのカラムに対する外側のフィルタは、渡されたクエリ内にプッシュできないため、ローカルで適用される代わりに例外として拒否されます。このチェックは、トップレベルの WHERE predicate と、トップレベルの AND の各項を対象とします。このテーブルのカラムに対する PREWHERE はこの設定の対象ではありません。このテーブルエンジンは PREWHERE をサポートしておらず、設定に関係なくそのようなクエリは ILLEGAL_PREWHERE で拒否されます。チェックはフィルタをプッシュダウンできる可能性がある箇所でのみ実行されます。すなわち、このテーブルがクエリ内の唯一のテーブルである場合、INNER JOIN のいずれかの側にある場合、または外部結合の保持側 (LEFT JOIN の左側、RIGHT JOIN の右側) にある場合です。LEFT/RIGHT JOIN の非保持側および FULL JOIN のいずれの側でも、何もプッシュダウンされず、何もチェックされないため、このテーブルのカラムに対するフィルタは厳格モードであっても JOIN の後にローカルで適用されます。チェックが実行される箇所では、周囲のクエリで結合された他のテーブルを参照する predicate はプッシュダウンされず、チェックの対象から除外されます。これは、結合された側のみを参照する場合でも、1 つの非 AND 式 (たとえば OR) の中でこのテーブルと混在させている場合でも同様です。そのような predicate は通常の ClickHouse における評価タイミング (JOIN 後の WHERE、JOIN 前の PREWHERE) を維持し、拒否されません。| で列挙する必要がある複数のレプリカをサポートしています。例:
使用例
MySQLでテーブルを作成します。設定
既定の設定は接続の再利用すら行わないため、あまり効率的ではありません。これらの設定により、サーバーが 1 秒あたりに実行できるクエリ数を増やせます。connection_auto_close
クエリの実行後に接続を自動的に閉じるようにします。つまり、接続の再利用を無効にします。
設定可能な値:
- 1 — 接続の自動クローズが許可され、接続の再利用は無効になります
- 0 — 接続の自動クローズは許可されず、接続の再利用は有効になります
1。
connection_max_tries
フェイルオーバー対応のプールに対する再試行回数を設定します。
設定可能な値:
- 正の整数。
- 0 — フェイルオーバー対応のプールでは再試行しません。
3。
connection_pool_size
接続プールのサイズです (すべての接続が使用中の場合、いずれかの接続が空くまでクエリは待機します) 。
設定可能な値:
- 正の整数。
16。
connection_wait_timeout
空き接続を待機する際のタイムアウト (秒単位) です (すでに connection_pool_size 個の接続がアクティブな場合) 。0 の場合は待機しません。
設定可能な値:
- 正の整数。
5。
connect_timeout
接続タイムアウト (秒単位) 。
設定可能な値:
- 正の整数。
10。
read_write_timeout
読み取り/書き込みのタイムアウト (秒) 。
設定可能な値:
- 正の整数。
300。
enable_compression
MySQLプロトコル接続で圧縮を有効にします。
デフォルト値: false。
この設定は次に適用されます:
MySQLテーブルエンジン;MySQLデータベースエンジン;mysqlテーブル関数;- MySQLインテグレーションで使用される 名前付きコレクション。