数据类型转换

实时计算Flink版在社区Flink SQL数据类型基础上,新增隐式类型转换的支持。本文为您介绍类型转换支持矩阵。

注意事项

  • 实时计算Flink版默认启用Legacy-Cast行为(包括显式类型、隐式类型所转换产生的cast操作)。

    • 参数说明

      table.exec.legacy-cast-behaviour 由社区 Flink 1.15 引入,此参数在显式转换类型或隐式类型转换中会使用到,实现从源数据类型到目标类型的强制转换,注意转换可能产生精度截断、值溢出、空返回等。为了兼容前期版本行为,云上默认值为enabledApache 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数据类型