Skip to main content
可对存储在 SQLite 数据库中的数据进行查询。

语法

参数

返回值

  • 一个表对象,其列与原始 SQLite 表的列相同。

传递查询而非表名

第二个参数不一定非得是表名,也可以是一个原样传递给 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 谓词及顶层 AND 的每个合取项。对此表列使用 PREWHERE 不属于该设置的适用情形:此表引擎不支持 PREWHERE,无论该设置为何值,此类查询都会因 ILLEGAL_PREWHERE 被拒绝。仅在过滤器可能下推的场景下才会执行检查:此表是查询中唯一的表、位于 INNER JOIN 的任一侧,或位于外连接的保留侧 (LEFT JOIN 的左侧、RIGHT JOIN 的右侧) 。在 LEFT/RIGHT JOIN 的非保留侧及 FULL JOIN 的任一侧,既不会下推任何内容,也不会执行检查。因此,即使在严格模式下,此表列上的过滤器也会在连接后于本地应用。在执行检查的场景中,引用周围查询内其他已连接表的谓词不会被下推,也不纳入检查;无论该谓词仅引用连接侧,还是在单个非 AND 表达式中同时引用连接侧和此表 (例如 OR) 。此类谓词会保留其通常的 ClickHouse 求值位置 (连接后的 WHERE、连接前的 PREWHERE) ,不会被拒绝。

示例

Query
Response

相关

最后修改于 2026年9月26日