Skip to main content
These settings are available in system.settings and are autogenerated from source.

external_table_functions_use_nulls

Defines how mysql, postgresql and odbc table functions use Nullable columns. Possible values:
  • 0 — The table function explicitly uses Nullable columns.
  • 1 — The table function implicitly uses Nullable columns.
Usage If the setting is set to 0, the table function does not make Nullable columns and inserts default values instead of NULL. This is also applicable for NULL values inside arrays.

external_table_strict_query

If it is set to true, a filter on the columns of an external table (MySQL, PostgreSQL, SQLite, ODBC, JDBC) that cannot be pushed down to the external database is rejected with an exception instead of being applied locally after the data is fetched. The check covers the top-level WHERE predicate and each conjunct of a top-level AND. A PREWHERE on the columns of the external table is not a case for this setting: these table engines do not support PREWHERE, and such a query is rejected with ILLEGAL_PREWHERE regardless of the setting. With the analyzer (the default), the check runs only where a filter could be pushed down at all: when the external table is the only table of the query, on either side of an INNER JOIN, or on the preserving side of an outer join (the left side of a LEFT JOIN, the right side of a RIGHT JOIN). On the non-preserving side of a LEFT/RIGHT JOIN and on either side of a FULL JOIN nothing is pushed down and nothing is checked, so a filter on the columns of the external table is applied locally after the join even in strict mode. Where the check runs, a predicate that references other tables joined in the surrounding query is not pushed down and is excluded from the check, whether it references only the joined side (for example WHERE r.flag) or mixes it with the external table inside one non-AND expression (for example WHERE l.id = 1 OR r.flag); such a predicate keeps its usual ClickHouse evaluation point (WHERE after the join, PREWHERE before it) and is not rejected. With the old analyzer (enable_analyzer = 0) this scoping does not apply: the whole outer filter is checked when the external table is the first table of the join tree, including a predicate on the joined side, and a joined right-hand external table is not checked.
Last modified on September 7, 2026