MAPREDUCE服务 MRS-Flink SQL逻辑开发建议:使用char数据类型时指定精度或者改用string类型

时间:2024-09-06 10:03:29

使用char数据类型时指定精度或者改用string类型

使用“cast(id as char)”数据类型转换时,结果只截取第一位,导致数据错误。如果转换字段正好是主键字段则会丢失大量数据。

配置“table.exec.legacy-cast-behaviour=ENABLED”也可以解决转换发生错误的问题,但是不建议使用。

在Flink 1.15之前,可以通过将“table.exec.legacy-cast-behaviour”设置为“enabled”来启用旧版本的类型转换行为。但在Flink 1.15及之后版本中,默认情况下该标志被禁用,将导致以下行为:

  • 转换为CHAR/VARCHAR/BINARY/VARBINARY时禁用修剪/填充操作。
  • CAST操作永远不会失败,而是返回NULL,类似于TRY_CAST,但不会推断正确的类型。
  • 对于某些转换为CHAR/VARCHAR/STRING的格式化操作,结果可能略有不同。

我们不建议使用此标志,并强烈建议新项目保持禁用该标志并使用新的类型转换行为。该标志将在未来的Flink版本中被移除。

  • 优化前SQL:
    select
    cast(id as char) as id,
    ... 
    from t1
  • 优化后SQL:
    select
    cast(id as string) as id,
    ... 
    from t1
support.huaweicloud.com/devg-rule-mrs/mrs_07_450170.html