Blink作业迁移到Flink全托管后,Flink对部分Blink函数进行了重新定义和修改,这些变化将对您的业务产生影响。本文为您介绍Flink在Blink的基础上发生的重大的语义变更详情。
Flink在Blink的基础上发生的重大的语义变更,包括以下方面:
Timestamp类型变更
Flink新增了Timestamp_ltz类型,和Timestamp类型的区别如下:
Timestamp相当于一个字符串类型,无论作业时区怎么变,得到的字符串是不变的。
Timestamp_ltz是一个全球统一的时间点类型,属于Bigint类型。如果将其转为字符串,则结果会随着作业时区改变。
Blink中常用的CURRENT_TIMESTAMP与NOW函数的返回类型均由Timestamp改为Timestamp_ltz。所以如果您的Blink代码中存在将Timestamp转化为字符串的操作,该结果会随着作业时区改变。详情请参见TIMESTAMP vs TIMESTAMP_LTZ。
Bigint列不能作为时间属性列
Bigint列现在不能作为时间属性列,只有Timestamp和Timestamp_ltz的列可以。如果基于Bigint列定义Watermark,则在语法检查或上线时会报错。
自定义函数需要额外的类型提示
Int类型整除结果类型变动
Blink | VVR |
int / int => double | int / int => int |
参数大小写敏感变动
Blink作业中,默认参数大小写不敏感,但Flink默认敏感。
如果您需要设置为大小写不敏感,则需要在作业运维页面,单击目标作业名称,在部署详情页签,单击运行参数配置右侧的编辑,在其他配置中添加参数table.identifier-case-sensitive: 'false' 后,单击保存。
通过自动迁移工具迁移过来的作业,已经默认添加了table.identifier-case-sensitive: 'false'配置,即参数大小写不敏感。
state ttl参数变更
Flink SQL作业中的state ttl参数,需要您统一使用参数table.exec.state.ttl
配置过期时间,例如设置为该参数默认值129600000,单位为毫秒,表示过期时间为1.5天。Blink上的state.backend.gemini.ttl.ms或state.backend.niagara.ttl.msttl参数在Flink SQL作业中会被覆盖,无法生效。关于ttl参数信息详情请参见基本配置。
新版本迁移工具会自动对SQL作业的state ttl参数进行转换。如果一个Blink作业配置多个ttl参数,会取其中的最大值作为转换后的Flink作业ttl参数。