数据湖探索 DLI-Spark 2.4.x与Spark 3.3.x版本在SQL队列的差异对比:TIMESTAMP类型字段读取差异

时间:2025-01-10 09:17:46

TIMESTAMP类型字段读取差异

  • 说明:
    TIMESTAMP类型字段读取差异,对于Asia/Shanghai时区,时间在1900-01-01 08:05:43之前的值,Spark 2.4.5版本写入后Spark 3.3.1版本读取值与Spark 2.4.5版本读取值不同。
    • Spark2.4.x

      以Asia/Shanghai时区的 1900-01-01 00:00:00 为例,通过Spark 2.4.5版本队列写入,Spark 2.4.5版本读取后得到的值为 -2209017600000。

    • Spark3.3.x:

      以Asia/Shanghai时区的 1900-01-01 00:00:00 为例,通过Spark 2.4.5版本队列写入,Spark 3.3.1版本配置spark.sql.parquet.int96RebaseModeInRead=LEGACY,读取后得到的值为 -2209017943000。

  • 升级引擎版本后是否对作业有影响:

    有影响,需要评估TIMESTAMP类型字段的使用方式。

  • 示例代码:

    在SQL界面配置:

    spark.sql.session.timeZone=Asia/Shanghai
    • Spark 2.4.5
      create table parquet_timestamp_test (id int, col0 string, col1 timestamp) using parquet;
      insert into parquet_timestamp_test values (1, "245", "1900-01-01 00:00:00");

      执行SQL读取数据:

      select * from parquet_timestamp_test;

      查询结果:

      id   col0    col1
      1    245     -2209017600000
    • Spark 3.3.1
      spark.sql.parquet.int96RebaseModeInRead=LEGACY

      执行SQL读取数据:

      select * from parquet_timestamp_test;

      查询结果:

      id   col0    col1
      1    245     -2209017943000
support.huaweicloud.com/bulletin-dli/dli_bulletin_0015.html