構文
引数
db_path— SQLite データベースを含むファイルへのパス。String。table_name— SQLite データベース内のテーブル名、または SQLite にそのまま渡されるクエリ (テーブル名の代わりにクエリを渡す を参照) 。String。
戻り値
- 元の
SQLiteテーブルと同じカラムを持つテーブルオブジェクト。
テーブル名の代わりにクエリを渡す
第2引数には、テーブル名の代わりに、そのまま SQLite に渡されるSELECT クエリを指定できます。生成されるテーブルの構造は、クエリ結果から推論されます。クエリは、サブクエリとして記述することも、query 関数で囲むこともできます。
INSERT はできません。同じ構文は SQLite テーブルエンジンでもサポートされています。
サブクエリ形式
(SELECT ...) は ClickHouse で解析され、SQLite に送信される前に再シリアル化されます。そのため、有効な ClickHouse SQL である必要があります。ClickHouse が解析しない SQLite 固有の構文を渡すには、query('...') 形式を使用してください。この形式では、テキストがそのまま SQLite に送信されます。また、渡されたクエリには、外側の ClickHouse クエリの WHERE、LIMIT、aggregation などは プッシュダウンされず、クエリ結果全体を取得した後に ClickHouse 側で適用されます。SQLite から読み取るデータを制限するには、渡すクエリ内に filter を記述してください。external_table_strict_query = 1 を指定すると、テーブル関数のカラムに対する外側の filter は渡されたクエリ内にプッシュできないため、ローカルで適用されず、代わりに例外として拒否されます。この check は、トップレベルの WHERE predicate と、トップレベルの AND の各項を対象とします。このテーブルのカラムに対する PREWHERE はこの設定の対象ではありません。このテーブルエンジンは PREWHERE をサポートしておらず、そのようなクエリは設定に関わらず ILLEGAL_PREWHERE で拒否されます。この check は filter がプッシュダウンされ得る場所でのみ実行されます。すなわち、このテーブルがクエリ内の唯一のテーブルである場合、INNER JOIN のいずれかの側にある場合、または OUTER JOIN の保持側 (LEFT JOIN の左側、RIGHT JOIN の右側) にある場合です。LEFT/RIGHT JOIN の非保持側や FULL JOIN のいずれの側でも何もプッシュダウンされず、check も行われないため、このテーブルのカラムに対する filter は厳格モードであっても join 後にローカルで適用されます。check が実行される箇所では、外側のクエリで join されている他のテーブルを参照する predicate はプッシュダウンされず、check の対象から除外されます。これは、その predicate が join 側のみを参照する場合でも、AND 以外の単一の expression (たとえば OR) 内でこのテーブルと混在している場合でも同様です。そのような predicate は通常の ClickHouse の評価タイミング (join 後の WHERE、join 前の PREWHERE) を保持し、拒否されません。例
Query
Response
関連
- SQLite テーブルエンジン
- SQLite database engine — データ型サポートのセクション