默认情况下,Table&SQL API是预配置的,用于生成具有可接受性能的准确结果。
根据表程序的要求,可能需要调整某些参数以进行优化。例如,无边界的流程序可能需要确保所需的状态大小是有上限的(请参阅流概念)。
目录
概述
在每个表环境中,TableConfig都提供配置当前会话的选项。
对于常见或重要的配置选项,TableConfig为getter和setters方法提供了详细的内联文档。
对于更高级的配置,用户可以直接访问底层的键值映射。以下部分列出了可用于调整Flink Table&SQL API程序的所有可用选项。
注意:由于在执行操作时在不同的时间点读取选项,建议在实例化表环境后尽早设置配置选项。
// instantiate table environment
TableEnvironment tEnv = ...
// access flink configuration
Configuration configuration = tEnv.getConfig().getConfiguration();
// set low-level key-value options
configuration.setString("table.exec.mini-batch.enabled", "true");
configuration.setString("table.exec.mini-batch.allow-latency", "5 s");
configuration.setString("table.exec.mini-batch.size", "5000");
注意:当前,键值选项仅支持Blink planner。
执行选项
以下选项可用于优化查询执行的性能。
Key | Default | Description |
---|---|---|
table.exec.async-lookup.buffer-capacity Batch Streaming | 100 | 异步查找联接可以触发的最大异步i/o操作数。 |
able.exec.async-lookup.timeout Batch Streaming | "3 min" | 异步操作完成的异步超时。 |
able.exec.disabled-operators Batch | (none) | 主要用于测试。运算符名称的逗号分隔列表,每个名称表示一种禁用的运算符。可以禁用的运算符包括“NestedLoopJoin”、“ShuffleHashJoin”、“BroadcastHashJoin”、“SortMergeJoin”、“HashAgg”、“SortAgg”。默认情况下,不禁用任何运算符。 |
table.exec.mini-batch.allow-latency Streaming | "-1 ms" | 最大延迟可用于小批量缓冲输入记录。MiniBatch是一种缓冲输入记录以减少状态访问的优化。当达到最大缓冲记录数时,将以允许的延迟间隔触发MiniBatch。注意:如果table.exec.mini-batch.enabled设置为true,则其值必须大于零。 |
able.exec.mini-batch.enabled Streaming | false | 指定是否启用小批量优化。MiniBatch是一种缓冲输入记录以减少状态访问的优化。这在默认情况下是禁用的。要启用此功能,用户应将此配置设置为true。注意:如果启用了小批量,则必须设置“table.exec.mini batch.allow latency”和“table.exec.mini batch.size”。 |
table.exec.mini-batch.size Streaming | -1 | 可以为MiniBatch缓冲的最大输入记录数。MiniBatch是一种缓冲输入记录以减少状态访问的优化。当达到最大缓冲记录数时,将以允许的延迟间隔触发MiniBatch。注意:MiniBatch当前仅适用于非窗口聚合。如果table.exec.mini-batch.enabled设置为true,则其值必须为正。 |
table.exec.resource.default-parallelism Batch Streaming | -1 | 设置所有要与并行实例一起运行的运算符(例如聚合、联接、筛选器)的默认并行度。此配置的优先级高于StreamExecutionEnvironment的并行性(实际上,此配置会覆盖StreamExecutionEnvironment的并行性)。值-1表示未设置默认并行性,然后它将回退以使用StreamExecutionEnvironment的并行性。 |
table.exec.resource.external-buffer-memory Batch | "10 mb" | 设置“排序合并联接”、“嵌套联接”和“覆盖”窗口中使用的外部缓冲区内存大小。 |
table.exec.resource.hash-agg.memory Batch | "128 mb" | 设置哈希聚合运算符的托管内存大小。 |
able.exec.resource.hash-join.memory Batch | "128 mb" | 设置哈希联接运算符的托管内存。它定义了下限。 |
table.exec.resource.sort.memory Batch | "128 mb" | 设置排序运算符的托管缓冲区内存大小。 |
table.exec.shuffle-mode Batch | "batch" | 设置执行洗牌模式。只能设置批处理或管道。批处理:作业将逐步运行。管道:作业将以流模式运行,但当发送方持有资源等待向接收方发送数据时,接收方等待资源启动可能会导致资源死锁。 |
table.exec.sort.async-merge-enabled Batch | true | 是否异步合并已排序的溢出文件。 |
table.exec.sort.default-limit | -1 | 当用户未在order by之后设置限制时的默认限制。-1表示忽略此配置。 |
table.exec.sort.max-num-file-handles Batch | 128 | 外部合并排序的最大扇入。它限制每个操作员的文件句柄数。如果太小,可能会导致中间合并。但如果太大,会导致同时打开的文件太多,消耗内存,导致随机读取。 |
table.exec.source.idle-timeout Streaming | "-1 ms" | 当一个源在超时时间内没有接收到任何元素时,它将被标记为临时空闲。这允许下游任务在水印空闲时无需等待来自此源的水印就可以推进其水印。 |
table.exec.spill-compression.block-size Batch | "64 kb" | 溢出数据时用于压缩的内存大小。内存越大,压缩比越高,但作业将消耗更多的内存资源。 |
table.exec.spill-compression.enabled Batch | true | 是否压缩溢出的数据。目前我们只支持sort和hash agg以及hash join运算符的压缩溢出数据。 |
table.exec.window-agg.buffer-size-limit Batch | 100000 | 设置组窗口agg运算符中使用的窗口元素缓冲区大小限制。 |
优化器选项
以下选项可用于调整查询优化器的行为,以获得更好的执行计划。
Key | Default | Description |
---|---|---|
table.optimizer.agg-phase-strategy Batch Streaming | "AUTO" | 聚合阶段的策略。只能设置自动、两个相位或一个相位。自动:聚合阶段没有特殊的执行器。选择两级骨料还是一级骨料取决于成本。两阶段:强制使用具有localAggregate和globalAggregate的两阶段聚合。请注意,如果聚合调用不支持将优化分为两个阶段,则我们仍将使用一个阶段的聚合。一个阶段:强制使用只有CompleteGlobalAggregate的一个阶段聚合。 |
table.optimizer.distinct-agg.split.bucket-num Streaming | 1024 | 在拆分不同聚合时配置存储桶数。该数字在第一级聚合中用于计算一个bucket key“hash_code(distinct_key)%bucket_NUM”,它在拆分后用作另一个组密钥。 |
table.optimizer.distinct-agg.split.enabled Streaming | false | 告诉优化器是否将不同聚合(例如COUNT(distinct col)、SUM(distinct col))拆分为两个级别。第一个聚合由一个额外的密钥进行洗牌,该密钥使用distinct_key的hashcode和bucket的数量进行计算。当不同的聚合中存在数据倾斜时,这种优化非常有用,并提供了扩展作业的能力。默认值为false。 |
table.optimizer.join-reorder-enabled Batch Streaming | false | 在优化器中启用联接重新排序。默认设置为禁用。 |
table.optimizer.join.broadcast-threshold Batch | 1048576 | 配置执行联接时将广播给所有工作节点的表的最大字节大小。通过将此值设置为-1来禁用广播。 |
table.optimizer.reuse-source-enabled Batch Streaming | true | 如果为true,优化器将尝试找出重复的表源并重用它们。只有当table.optimizer.reuse-sub-plan-enabled为true时,此操作才有效。 |
table.optimizer.reuse-sub-plan-enabled Batch Streaming | true | 如果是真的,优化器将尝试找出重复的子计划并重用它们。 |
table.optimizer.source.predicate-pushdown-enabled Batch Streaming | true | 如果为true,优化器将把谓词下推到FilterableTableSource中。默认值为true。 |