Skip to main content
このエンジンでは、SQLite との間でデータをインポートおよびエクスポートできるほか、ClickHouse から SQLite のテーブルに対して直接クエリを実行できます。

テーブルの作成

エンジンパラメータ
  • db_path — データベースを含む SQLite ファイルへのパス。
  • table — SQLite データベース内のテーブル名、またはそのまま SQLite に渡されるクエリ (テーブル名の代わりにクエリを渡す を参照) 。

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

テーブル名の代わりに、table 引数には、そのまま SQLite に渡される SELECT クエリを指定できます。テーブルの構造はクエリ結果から推論されます。クエリは、サブクエリとして記述することも、query 関数でラップすることもできます。
このようなテーブルは読み取り専用で、これに対する INSERT は許可されていません。同じ構文は、sqlite テーブル関数でもサポートされています。
サブクエリ形式 (SELECT ...) は ClickHouse によってパースされ、SQLite に送信される前に再シリアライズされます。そのため、有効な ClickHouse SQL である必要があります。ClickHouse が解析しない SQLite 固有の構文を渡すには、query('...') 形式を使用してください。この形式では、テキストがそのまま SQLite に送信されます。周囲の ClickHouse クエリにある外側の WHERE、LIMIT、集約などは、渡したクエリには プッシュダウンされず、完全なクエリ結果を取得した後に ClickHouse で適用されます。SQLite から読み取るデータを制限するには、渡すクエリの中にフィルターを含めてください。external_table_strict_query = 1 を指定すると、このテーブルのカラムに対する外側のフィルターは、渡したクエリにプッシュダウンできないため、ローカルで適用される代わりに例外を返して拒否されます。このチェックの対象は、トップレベルの WHERE の predicate と、トップレベルの AND の各項です。このテーブルのカラムに対する PREWHERE は、この設定の対象ではありません。このテーブルエンジンは PREWHERE をサポートしておらず、そのようなクエリは設定に関係なく ILLEGAL_PREWHERE で拒否されます。このチェックはフィルターをプッシュダウンできる可能性がある場所でのみ実行されます。すなわち、このテーブルがクエリ内の唯一のテーブルである場合、INNER JOIN のいずれかの側にある場合、または外部結合の保持側 (LEFT JOIN の左側、RIGHT JOIN の右側) にある場合です。LEFT/RIGHT JOIN の非保持側や FULL JOIN のいずれの側でも、何もプッシュダウンされず、何もチェックされないため、このテーブルのカラムに対するフィルターは、厳格モードであっても join の後にローカルで適用されます。チェックが実行される場所では、周囲のクエリで join されている他のテーブルを参照する predicate はプッシュダウンされず、チェックの対象から除外されます。これは、join 側のみを参照する場合でも、AND 以外の 1 つの expression (たとえば OR) の中でこのテーブルと混在させている場合でも同様です。そのような predicate は通常の ClickHouse での評価位置 (join の後の WHERE、その前の PREWHERE) を保持し、拒否されることはありません。

サポートされるデータ型

テーブル定義で ClickHouse のカラム型を明示的に指定すると、SQLite の TEXT カラムから以下の ClickHouse 型をパースできます。 デフォルトの型マッピングについては、SQLite データベースエンジン を参照してください。

使用例

SQLite のテーブルを作成するクエリを示します。
テーブルのデータを返します:
関連項目
最終更新日 2026年9月26日