Skip to main content
这些设置可在 system.settings 中查看,且由 源代码 自动生成。

external_table_functions_use_nulls

定义 mysql、postgresql 和 odbc 表函数如何使用 Nullable 列。 可能的值:
  • 0 — 表函数显式使用 Nullable 列。
  • 1 — 表函数隐式使用 Nullable 列。
用法 如果将此设置设为 0,表函数不会将列设为 Nullable,而是插入默认值来代替 NULL。此规则同样适用于数组中的 NULL 值。

external_table_strict_query

如果将其设置为 true,则对于无法下推到外部数据库的外部表 (MySQL、PostgreSQL、SQLite、ODBC、JDBC) 列过滤条件,会引发异常并拒绝查询,而非在拉取数据后在本地应用过滤。 该检查涵盖顶层 WHERE 谓词以及顶层 AND 中的每个合取项。针对外部表列的 PREWHERE 不适用此设置:这些表引擎不支持 PREWHERE,因此无论此设置如何,此类查询都会因 ILLEGAL_PREWHERE 被拒绝。仅在过滤条件可能被下推时才会执行检查:即外部表是查询中的唯一表、位于 INNER JOIN 的任一侧,或位于外连接的保留侧 (LEFT JOIN 的左侧、RIGHT JOIN 的右侧) 。在 LEFT/RIGHT JOIN 的非保留侧以及 FULL JOIN 的任一侧,不会下推任何条件,也不会进行检查。因此,即使在严格模式下,外部表列上的过滤条件也会在连接后于本地应用。在执行检查的场景中,引用外围查询中其他已连接表的谓词不会被下推,也不会纳入检查;无论其仅引用连接侧 (例如 WHERE r.flag) ,还是在单个非 AND 表达式中与外部表混合引用 (例如 WHERE l.id = 1 OR r.flag) 。此类谓词仍会在其通常的 ClickHouse 求值位置执行 (WHERE 在连接后,PREWHERE 在连接前) ,不会被拒绝。
最后修改于 2026年9月26日