SELECT および INSERT クエリを実行できます。
構文
引数
引数は 名前付きコレクション を使用して渡すこともできます。この場合、
host と port は別々に指定する必要があります。本番環境ではこの方法を推奨します。
=, !=, >, >=, <, <= のような単純な WHERE 句は、現在 MySQLサーバー上で実行されます。
それ以外の条件と LIMIT のサンプリング制約は、MySQL へのクエリの完了後にのみ ClickHouse で実行されます。
テーブル名の代わりにクエリを渡す
SELECT クエリを指定できます。結果として得られるテーブルの構造は、クエリ結果から推論されます。クエリは、サブクエリとして記述することも、query 関数でラップすることもできます。
INSERT はできません。同じ構文は MySQL テーブルエンジンでもサポートされています。
サブクエリ形式
(SELECT ...) は ClickHouse で解析され、サーバーに送信される前に MySQL の SQL方言 (Identifier をバッククォートで囲む形式) で再シリアライズされます。そのため、有効な ClickHouse SQL である必要があります。ClickHouse が解析しない MySQL 固有の構文を渡すには、query('...') 形式を使用してください。この形式では、テキストがそのまま MySQL に送信されます。渡したクエリに対して、外側の ClickHouse クエリにある WHERE、LIMIT、集計などがプッシュダウンされることはありません。これらは完全なクエリ結果を取得した後に ClickHouse 側で適用されます。MySQL から読み取るデータを絞り込むには、フィルターを渡すクエリの中に記述してください。external_table_strict_query = 1 を指定すると、プッシュダウンできない外側のフィルターはローカルで適用される代わりに、例外を返して拒否されます。| で区切って指定する必要があります。例えば:
戻り値
MySQL の一部のデータ型は、複数の ClickHouse の型にマッピングされる場合があります。これはクエリレベルの設定 mysql_datatypes_support_level で制御されます。
INSERT クエリでは、テーブル関数 mysql(...) と、カラム名リスト付きのテーブル名を区別するために、キーワード FUNCTION または TABLE FUNCTION を使用する必要があります。以下の例を参照してください。例
enable_compression
false。
この設定は次に適用されます:
mysqlテーブル関数MySQLテーブルエンジンMySQLデータベースエンジン- MySQLインテグレーションで使用される名前付きコレクション