テーブルの作成
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 型をパースできます。- Date, Date32
- DateTime, DateTime64
- UUID
- Enum8, Enum16
- Decimal32, Decimal64, Decimal128, Decimal256
- FixedString
- すべての整数型 (UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64)
- Float32, Float64