数据湖探索 DLI-Spark2.4.x与Spark3.3.x版本在SQL队列的差异对比:空值分区的查询语句不同

时间:2024-12-28 16:25:09

空值分区的查询语句不同

  • 说明:
    • Spark2.4.x

      Spark 3.0.1或更早版本中,如果分区列是字符串类型,则将其解析为其文本表示形式的字符串文本,例如字符串“null”。

      通过part_col='null'查询空值分区的数据。

    • Spark3.3.x:

      `PARTITION(col=null)`始终在分区规范中解析为null,即使分区列是字符串类型。

      通过part_col is null查询空值分区的数据。

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

    有影响,涉及对空值分区的查询需要适配

  • 示例代码:

    准备数据:

    CREATE TABLE test_part_null (col1 INT, p1 STRING) USING PARQUET PARTITIONED BY (p1);
    INSERT INTO TABLE test_part_null PARTITION (p1 = null) SELECT 0;

    执行sql:

    select * from test_part_null;
    • Spark2.4.5
      0 null

      Spark2.4.5版本执行select * from test_part_null where p1='null'可查到分区数据。

    • Spark3.3.1
      0

      Spark3.3.1版本执行select * from test_part_null where p1 is null才可查询到数据。

support.huaweicloud.com/bulletin-dli/dli_bulletin_0015.html