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

apply_deleted_mask

启用后会过滤掉通过轻量级 DELETE 删除的行。若禁用,查询仍可读取这些行。这对调试和“取消删除”场景很有用

apply_mutations_on_fly

如果为 true,则尚未在数据分区片段中 materialized 的变更 (UPDATE 和 DELETE) 会在 SELECT 查询时应用。

apply_prewhere_after_final

启用后,对于 ReplacingMergeTree 及类似引擎,PREWHERE 条件将在 FINAL 处理后应用。 当 PREWHERE 引用了在重复行之间可能取值不同的列时,这会很有用, 因为你可能希望先由 FINAL 选出最终保留的行,再进行过滤。禁用时,PREWHERE 会在读取期间应用。 注意:如果启用了 apply_row_level_security_after_final,且行策略使用了非排序键列,PREWHERE 也会 被延后,以保持正确的执行顺序 (必须先应用行策略,再应用 PREWHERE) 。

apply_row_policy_after_final

启用后,对于 *MergeTree 表,行策略和 PREWHERE 会在 FINAL 处理之后应用。 (尤其是 ReplacingMergeTree) 禁用后,行策略会在 FINAL 之前应用;当策略 过滤掉本应在 ReplacingMergeTree 或类似引擎中用于去重的行时,可能会导致结果不同。 如果行策略表达式仅依赖 ORDER BY 中的列,出于优化考虑,它仍会在 FINAL 之前应用, 因为这种过滤不会影响去重结果。 可能的值:
  • 0 — 行策略和 PREWHERE 在 FINAL 之前应用 (默认) 。
  • 1 — 行策略和 PREWHERE 在 FINAL 之后应用。

apply_settings_from_server

客户端是否接受来自服务器的设置。 这只会影响在客户端执行的操作,尤其是 INSERT 输入数据的解析和查询结果的格式化。大多数查询执行都发生在服务器上,不受此设置影响。 通常,这个设置应在用户 profile 中设置 (通过 users.xml 或 ALTER USER 之类的查询) ,而不是通过客户端来设置 (客户端命令行参数、SET 查询,或 SELECT 查询中的 SETTINGS 部分) 。通过客户端可以将其改为 false,但不能改为 true (因为如果用户 profile 中设置了 apply_settings_from_server = false,服务器就不会发送这些设置) 。 请注意,最初 (24.12) 使用的是一个服务器设置 (send_settings_to_client) ,但后来为提升易用性,它被这个客户端设置取代了。
最后修改于 2026年7月23日