MySQL テーブルエンジン
MySQL エンジンを使用すると、リモートの MySQL サーバー上に保存されているデータに対して SELECT および INSERT クエリを実行できます。
テーブルを作成する
CREATE TABLE クエリの詳細な説明については、参照してください。
テーブル構造は、元の MySQL テーブル構造と異なっていてもかまいません。
- カラム名は元の MySQL テーブルと同じである必要がありますが、そのうち一部のカラムだけを任意の順序で使用できます。
- カラム型は元の MySQL テーブルと異なっていてもかまいません。ClickHouse は値を ClickHouse のデータ型にキャストしようとします。
- external_table_functions_use_nulls 設定は、Nullable カラムをどのように扱うかを定義します。デフォルト値: 1。0 の場合、テーブル関数は Nullable カラムを作成せず、null の代わりにデフォルト値を挿入します。これは配列内の NULL 値にも適用されます。
エンジンパラメータ
host:port— MySQL サーバーアドレス。database— リモートデータベース名。table— リモートテーブル名。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 のドキュメント を参照してください。on_duplicate_clauseを指定するには、replace_queryパラメータに0を渡す必要があります。replace_query = 1とon_duplicate_clauseを同時に指定した場合、ClickHouse は例外をスローします。
引数は named collections を使って渡すこともできます。この場合、host と port は個別に指定する必要があります。この方法は本番環境での利用を推奨します。
=, !=, >, >=, <, <= のような単純な WHERE 句は、MySQL サーバー上で実行されます。
それ以外の条件および LIMIT のサンプリング制約は、MySQL へのクエリが終了した後に、ClickHouse 側でのみ実行されます。
複数のレプリカをサポートしており、| で区切って列挙します。例:
使用例
MySQL でテーブルを作成します:
通常の引数を使って ClickHouse にテーブルを作成する:
または named collections を使用する場合:
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。