内置函数

Serverless Spark 内置了多种函数,能够满足大部分数据处理需求。本文将为您介绍 Serverless Spark 内置提供的函数及其使用说明。

支持的版本

Serverless Spark以下引擎版本支持本文操作:

  • esr-4.x:esr-4.4.0及之后版本。

  • esr-3.x:esr-3.4.0及之后版本。

  • esr-2.x:esr-2.8.0及之后版本。

内置函数清单

Serverless Spark 兼容开源内置函数的使用,开源具体函数说明请参见 Spark SQL Functions。此外,Serverless Spark 还支持多个特有内置函数,以下是特有支持的内置函数及其相关说明。

函数

说明

PARQUET_SCHEMA

获取Parquet文件Schema结构。

PARQUET_METADATA

获取Parquet文件元数据。

URL_DECODE

application/x-www-form-urlencoded MIME格式的字符串解码为常规字符串。支持开启安全解码URL内容模式。

MAX_PT

返回分区表的一级分区中包含数据的分区的最大值。

KEYVALUE

提取键值对数据。

内置函数说明

PARQUET_SCHEMA

获取Parquet文件Schema结构。

  • 语法

    PARQUET_SCHEMA('<parquet_file_path>')
  • 使用示例

    SELECT PARQUET_SCHEMA('oss://bucket/path/part1.parquet')

    返回结果:

     message spark_schema {
      required int32 id;
     }

PARQUET_METADATA

获取Parquet文件元数据,包括文件Footer信息、行组(Row Group)详细信息、列压缩与编码方式。

  • 语法

    PARQUET_METADATA('<parquet_file_path>')
  • 使用示例

    SELECT PARQUET_METADATA('oss://bucket/path/part1.parquet')

    返回结果:

    === Row Group ID: 0 ===
     row_group_id: 0
     row_group_num_rows: 1
     row_group_num_columns: 1
     row_group_bytes: 27
     
     --- Column Chunk ID: 0 in Row Group 0 ---
     column_id: 0
     path_in_schema: id
     num_values: 1
     type: INT32
     stats: min: 1, max: 1, num_nulls: 0
     compression: SNAPPY
     encodings: PLAIN,BIT_PACKED
     compressedSize: 29
     uncompressedSize: 27

URL_DECODE

application/x-www-form-urlencoded MIME格式的字符串解码为常规字符串。支持开启安全解码URL内容模式。当入参不合法时,使用set spark.sql.emr.tryUrlDecode=true,则不会抛出异常而是返回NULL

  • 语法

    URL_DECODE(string);
  • 使用示例

    SELECT URL_DECODE('http%3A%2F%2spark.apache.org');

    返回结果: Error: CANNOT_DECODE_URL

    配置set spark.sql.emr.tryUrlDecode=true

    set spark.sql.emr.tryUrlDecode=true;
    SELECT URL_DECODE('http%3A%2F%2spark.apache.org');

    返回结果:NULL

MAX_PT

返回分区表的一级分区中包含数据的分区的最大值,按字母顺序排序,并读取该分区下对应的数据。

  • 语法

    MAX_PT('tableName');

    tableName支持通过catalog.database.tableNamedatabase.tableName的格式显式指定表所属的catalogdatabase。当未显式声明catalogdatabase时,系统将使用默认的catalogdatabase。

  • 使用示例

    例如tbl是分区表,该表对应的分区为2025-05-212025-05-20,且都有数据,下述语句会返回2025-05-21分区下的数据。

    SELECT * FROM tbl WHERE pt= MAX_PT('tbl');

    返回结果:image

KEYVALUE

提取键值对数据。

  • 语法

    KEYVALUE(str [, split1, split2,] key)

    根据指定的两个分隔符对原字符串进行拆分。如果在表达式中未指定这两个分隔符,则默认将split1设定为“;”,将split2设定为“:”。当某个经过split1拆分的字符串中包含多个split2时,返回结果将未定义。

  • 使用示例

    SELECT KEYVALUE('0:1\;1:2', 1);

    返回结果:2。