SET 控制语句

最近更新时间:2019-10-23 17:36:15

简介

SET 语句用来启用并配置可选的功能模块。

注意:

SET 命令属于高级用法,请谨慎使用!

语法

SET 功能名称 = '参数值';

其中功能名称不区分大小写,参数值必须用半角单引号括起来,同时,该语句行尾需加上分号。

示例

示例 1:启用 RocksDB State Backend

SET STATE_BACKEND = 'RocksDB';

上述设置语句表示启用 RocksDB State Backend 功能支持,这样该作业可以支持特别巨大的状态数,适用于有大量的窗口计算、GROUP BY 操作、或者 SELECT DISTINCT 语句等情况,同时也适用于产生 Upsert 数据流的作业。如果您的作业因为状态数过多而造成运行时故障或者吞吐量不稳定,请尝试启用此功能。

启用 RocksDB 后,相对于纯内存方案,峰值吞吐量可能会有约5% - 30%的下降(当然也有可能因为内存压力缓解而提升吞吐量),请根据监控指标和实际运行结果,合理决定是否启用该特性。

示例 2:为 TencentDB for MySQL 数据库启用内存缓存

SET MEM_DATABASE = 'IP:0.5';

上述 SET 语句表示为 TencentDB for MySQL 数据库表启用内存全量缓存功能支持,参数格式为'表名:刷新周期(小时)'
例如'IP:0.5'表示对 DDL 语句(CREATE TABLE)中定义的 IP 表启用内存数据库缓存,并每隔0.5小时刷新一次数据。

  • 目前该特性适用于小型数据库表(建议小于500MB)。对于较大的数据库表,该功能仍然可用,但是在任务初次提交时会有较长的数据传输时间。
  • 数据库缓存刷新是以全量、异步、非阻塞形式进行的,因此在数据刷新完成之前仍然有可能读取到旧数据。
  • 启用内存缓存后,可以使用数据库查询函数 QUERY_DB_STR 来对数据库做快速查询。具体用法请参见 数据库查询函数
  • 建议在 MySQL 数据库表中,对要查询的字段提前建立索引,避免查询时速度缓慢。DDL 语句中无须指定 INDEX。

示例 3:启用或禁用 Source Rebalance 特性

为了避免多个 Kafka 分区消费时,如果并行度与之不匹配,造成的计算资源浪费、数据倾斜、Watermark 无法生成的问题,流计算默认启用 Source Rebalance 特性。它的原理是在数据源算子后,串联一个 REBALANCE 算子,以起到数据均匀分流的作用。

如果不希望启用这个特性,可以使用下面的语句来关闭:

SET SOURCE_REBALANCE = 'false';

实例 4:设置更大范围的 Checkpoint 周期

目前流计算面板中,允许设置的 Checkpoint 时间间隔范围是30秒 - 3600秒。如果有特殊需求,默认的范围无法满足,则可以使用 SET CHECKPOINT_INTERVAL 命令。

例如下面的命令设置作业的快照周期为10s:

SET CHECKPOINT_INTERVAL = '10s';
注意:

SET CHECKPOINT_INERVAL 语句的优先级,高于网页面板上 Checkpoint 时间间隔设置。因此,如果 SQL 语句中存在这个命令,那么界面上设置的数值会无效。