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_policy_after_final 而被延后,无论此设置取值如何,PREWHERE 也会随之延后, 因为必须先应用行策略,再应用 PREWHERE。当策略表达式是非确定性的、读取了不在 ORDER BY 中的列, 或读取了类型为浮点类型或包含浮点类型的 ORDER BY 列时,就会出现这种情况。 可能的值:
  • 0 — PREWHERE 在 FINAL 之前应用,除非被延后的行策略导致其一并延后 (默认) 。
  • 1 — PREWHERE 在 FINAL 之后应用。

apply_row_policy_after_final

启用后,对于 *MergeTree 表,行策略会在 FINAL 处理之后应用。 (尤其是 ReplacingMergeTree) 当策略以这种方式延后应用时,PREWHERE 也会随之延后,以确保策略仍然先于 PREWHERE 应用 (如需无条件延后 PREWHERE,请参见 apply_prewhere_after_final) 。 禁用后,行策略会在 FINAL 之前应用;当策略 过滤掉本应在 ReplacingMergeTree 或类似引擎中用于去重的行时,可能会导致结果不同。 如果行策略表达式是确定性的,并且仅依赖 ORDER BY 中的非浮点列,出于优化考虑,它仍会 在 FINAL 之前应用,因为这种过滤不会影响去重结果。浮点列 或包含浮点数的列 (例如 Tuple(Float64, ...)、Array(Float64)、Nullable(Float64) 等) 会被排除在外,因为 -0.0 和 0.0 在去重时被视为同一个键,而策略条件却能区分二者。 可能的值:
  • 0 — 行策略在 FINAL 之前应用。
  • 1 — 行策略在 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) ,但后来为提升易用性,它被这个客户端设置取代了。

apply_string_filters_during_scan

将 String 列上的子串搜索条件从 PREWHERE 下推到列扫描中。 当 PREWHERE 条件中包含一个在 String (或 Nullable(String)) 列中搜索非空子串的合取项 (LIKE、position、startsWith、endsWith,或与非空字符串的相等比较) 时,读取器会在反序列化过程中 逐一检查每个值是否满足该条件,并将不匹配的值读取为空字符串。由于不匹配值的数据不会被复制到列中,因此当条件的选择性较高时, 可以加快读取速度并降低内存使用量。查询结果不受影响, 因为包含不匹配值的行必然会被 PREWHERE 过滤掉,而此类条件永远不会匹配空字符串。 如果运行时发现该过滤器的选择性不高,则会自适应地将其禁用。 此外,该设置还允许 WHERE 到 PREWHERE 优化移动子串搜索条件 (LIKE、position、startsWith、endsWith) , 即使这些条件用到了查询中的所有列 (通常这样做没有意义,但启用此设置后,扫描本身的开销会降低) 。 基于同样的原因,与常量字符串的相等比较不会被移动:若它已位于 PREWHERE 中,仍会在扫描期间应用。 支持从 MergeTree 表以及 Parquet 格式读取数据。 请注意,为自动决定是否使用并行副本而收集的输入字节数估算值 (RuntimeDataflowStatisticsInputBytes) 基于已读取块在内存中的大小,因此当值被替换为空字符串时, 该估算值会低于实际从磁盘读取的数据量。 可选值:
  • 0 — 禁用。
  • 1 — 启用。