Table 和 SQL API 的配置参数,Hints的用法

执行配置选项

参数

介绍

table.exec.async-lookup.buffer-capacity

异步查找连接可以触发的异步 i/o 操作的最大数量。

table.exec.async-lookup.timeout

异步操作完成的异步超时。

table.exec.disabled-operators

主要用于测试。以逗号分隔的运算符名称列表,每个名称代表一种禁用的运算符。可以禁用的运算符包括“NestedLoopJoin”、“ShuffleHashJoin”、“BroadcastHashJoin”、“SortMergeJoin”、“HashAgg”、“SortAgg”。默认情况下没有操作被禁用。

table.exec.mini-batch.allow-latency

最大延迟可用于 MiniBatch 缓冲输入记录。MiniBatch 是一种缓冲输入记录以减少状态访问的优化。MiniBatch 以允许的延迟间隔和达到最大缓冲记录数时触发。注意:如果 table.exec.mini-batch.enabled 设置为 true,则其值必须大于零。

table.exec.mini-batch.enabled

指定是否启用 MiniBatch 优化。MiniBatch 是一种缓冲输入记录以减少状态访问的优化。默认情况下禁用。要启用此功能,用户应将此配置设置为 true。注意:如果启用了小批量,则必须设置“table.exec.mini-batch.allow-latency”和“table.exec.mini-batch.size”。

table.exec.mini-batch.size

MiniBatch 可以缓冲的最大输入记录数。MiniBatch 是一种缓冲输入记录以减少状态访问的优化。MiniBatch 以允许的延迟间隔和达到最大缓冲记录数时触发。注意:MiniBatch 目前仅适用于非窗口聚合。如果 table.exec.mini-batch.enabled 设置为 true,则其值必须为正数。

详情见官网:https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/dev/table/config/

SQL Hints的使用

SQL hints 是和 SQL 语句一起使用来改变执行计划的。
SQL hints 一般可以用于以下:
增强 planner:没有完美的 planner,所以实现 SQL hints 让用户更好地控制执行是非常有意义的;
增加元数据(或者统计信息):如"已扫描的表索引"和"一些混洗键(shuffle keys)的倾斜信息"的一些统计数据对于查询来说是动态的,用 hints 来配置它们会非常方便,因为我们从 planner 获得的计划元数据通常不那么准确;
算子(Operator)资源约束:在许多情况下,我们会为执行算子提供默认的资源配置,即最小并行度或托管内存(UDF 资源消耗)或特殊资源需求(GPU 或 SSD 磁盘)等,可以使用 SQL hints 非常灵活地为每个查询(非作业)配置资源。
1.3.1.SQL hints配置参数的使用
hints让用户可以通过动态参数的形式灵活地设置表的属性参数,覆盖或者追加元表的 WITH (…) 语句内定义的 table options。使用hints方式配置的参数的优先级最高。
基本语法为:
table_name /*+ OPTIONS(‘k1’=‘v1’, ‘aa.bb.cc’=‘v2’) */

使用示例如下:
– 覆盖SQL语句中元表的部分with参数

insert into kafkatohive_test_table
/*+options('sink.partition-commit.policy.kind'='metastore,success-file'
,'sink.partition-commit.trigger'='process-time'
,'sink.partition-commit.delay'='1 h'
)*/
select content, DATE_FORMAT(CURRENT_TIMESTAMP,'yyyyMMdd') as dt
from kafkatohive_test_kafka;
-- 在同一个计算任务中,对同一个表设置不同的属性参数
insert into test_kafka1
select content, DATE_FORMAT(CURRENT_TIMESTAMP,'yyyyMMdd') as dt
from test_kafka/*+options(' scan.startup.mode '=' latest-offset '
,' properties.group.id '='test1')*/;
insert into test_kafka2
select content, DATE_FORMAT(CURRENT_TIMESTAMP,'yyyyMMdd') as dt
from test_kafka/*+options(' scan.startup.mode '=' earliest-offset '
,' properties.group.id '='test2')*/;

SQL hints和SET语句配置参数的使用区别

使用hints方式和set方式均可以配置元表的部分with参数,其中不支持的参数已在下列参数列表中备注,用来改变SQL语句的执行计划。两者区别在于:
使用hints可以动态的配置元表的属性参数,其配置的参数的优先级要高于set方式配置的参数。
使用set语句还可以配置生成计算列,而hints方式则不能