实时计算Flink版在社区Flink SQL数据类型基础上,新增隐式类型转换的支持。本文为您介绍类型转换支持矩阵。
注意事项
实时计算Flink版默认启用Legacy-Cast行为(包括显式类型、隐式类型所转换产生的cast操作)。
参数说明
table.exec.legacy-cast-behaviour由社区 Flink 1.15 引入,此参数在显式转换类型或隐式类型转换中会使用到,实现从源数据类型到目标类型的强制转换,注意转换可能产生精度截断、值溢出、空返回等。为了兼容前期版本行为,云上默认值为enabled,Apache Flink该参数默认值为disabled。关于CAST
CAST在转换异常时默认采用空值处理,不会显式报错。在需要严格检查异常值的场景,可以通过设置参数
table.exec.legacy-cast-behaviour=disabled让任务在遇到异常数据转换时显式报错。关于TRY_CAST
可以在显式类型转换时按需使用,遇到转换异常时会返回null,不会报错导致作业失败。等效于使用CAST时将参数
table.exec.legacy-cast-behaviour设置为enabled。
对于空值null的使用,建议使用显式类型转换的写法,即
cast(null as target_type),如cast(null as varchar),避免出现非预期的转换结果,如“NULL”字符串或转换异常。
类型转换支持矩阵
输入类型\目标类型 | null | boolean | tinyint | smallint | int | bigint | decimal | float | double | interval | date | time | timestamp | [var]char | [var]binary | variant |
null | I | I | I | I | I | I | I | I | I | I | I | I | I | I | I | I |
boolean | - | I | E | E | E | E | E | E | E | - | - | - | - | I | - | E |
tinyint | - | E | I | I | I | I | I | I | I | E | - | - | E | I | - | E |
smallint | - | E | I | I | I | I | I | I | I | E | - | - | E | I | - | E |
int | - | E | I | I | I | I | I | I | I | E | - | - | E | I | - | E |
bigint | - | E | I | I | I | I | I | I | I | E | - | - | E | I | - | E |
decimal | - | E | I | I | I | I | I | I | I | E | - | - | E | I | - | E |
float | - | E | I | I | I | I | I | I | I | - | - | - | E | I | - | E |
double | - | E | I | I | I | I | I | I | I | - | - | - | E | I | - | E |
interval | - | - | E | E | E | E | E | - | - | I | - | - | - | E | - | E |
date | - | - | - | - | - | - | - | - | - | - | I | - | I | I | - | E |
time | - | - | - | - | - | - | - | - | - | - | - | I | E | I | - | E |
timestamp | - | - | E | E | E | E | E | E | E | - | I | E | I | I | - | E |
[var]char | - | E | I | I | I | I | I | I | I | I | I | I | I | I | I | E |
[var]binary | - | - | - | - | - | - | - | - | - | - | E | E | E | I | I | E |
variant | - | E | E | E | E | E | E | E | E | E | E | E | E | E | E | I |
其中符号含义说明如下:
E:只支持显式类型转换。
I:支持隐式类型转换。
-:不支持类型转换。
相关文档
社区支持的SQL数据类型详情请参见社区Flink SQL数据类型。