> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# external_table_* 会话设置

> 属于 external_table_* 自动生成分组的 ClickHouse 会话设置。

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>类型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>默认值</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          无需重启即可更改
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

这些设置可在 [system.settings](/zh/reference/system-tables/settings) 中查看，且由 [源代码](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) 自动生成。

## external\_table\_functions\_use\_nulls

<SettingsInfoBlock type="Bool" default_value="1" />

定义 [mysql](/zh/reference/functions/table-functions/mysql)、[postgresql](/zh/reference/functions/table-functions/postgresql) 和 [odbc](/zh/reference/functions/table-functions/odbc) 表函数如何使用 Nullable 列。

可能的值：

* 0 — 表函数显式使用 Nullable 列。
* 1 — 表函数隐式使用 Nullable 列。

**用法**

如果将此设置设为 `0`，表函数不会将列设为 Nullable，而是插入默认值来代替 NULL。此规则同样适用于数组中的 NULL 值。

## external\_table\_strict\_query

<SettingsInfoBlock type="Bool" default_value="0" />

如果将其设置为 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` 在连接前) ，不会被拒绝。
