全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:GET_BLOB_METADATA

更新时间:Oct 09, 2026

GET_BLOB_METADATA()函数用于读取一个blob的元数据,返回值可继续用 JSON 函数获取字段。

常见用法

GET_JSON_OBJECT(GET_BLOB_METADATA(blob_expr), '$.field_name');

使用要点

  • GET_BLOB_METADATA() 使用单个 blob 参数。

  • 返回结果可按 JSON 对象取字段。

  • 常用字段包括:content_type、content_length、checksum、is_compressed、content_encoding、storage_type、blob_storage_tier。

  • content_length 表示字节长度,适合与 lengthb() 联合校验。

  • is_compressed / content_encoding 可用于判断是否压缩及压缩编码。

  • NULL 或空 blob 输入会返回 NULL。

命令格式

JSON GET_BLOB_METADATA(blob_expr:BLOB)

参数说明

blob_expr 参数说明:必填。Blob类型。

  • 可使用单个 blob 参数

  • 参数应为 blob 表达式

  • 常见输入来源:to_blob(...)、表中的 blob 列、CTAS / INSERT SELECT 产出的 blob 列。

示例:

GET_BLOB_METADATA(to_blob('abcdef'))
GET_BLOB_METADATA(to_blob('hello world', 'text/plain'))
GET_BLOB_METADATA(b)

返回值说明

返回一个 metadata JSON 对象,JSON类型。JSON对象常用字段包括如下:

实际使用时,通常按字段取值,而不是直接展示整个对象。

字段名称

说明

content_type

业务写入的内容类型。常见用途:

  • 校验 to_blob(..., content_type) 是否生效

  • 区分 text/plain、application/json 等不同类型

content_length

blob 内容字节数。比如:

  • to_blob('abcdef') 为 6

  • to_blob(X'616263') 为 3

  • to_blob('中文测试') 为 12

  • 空内容为 0

checksum

内容校验值字段,可用于辅助判断内容或存储对象是否一致;当没有对应值时,结果为 NULL。

is_compressed

是否压缩存储。现有 case 只能说明:

  • 小的直接构造 blob 常见为 false

  • 持久化后的较大 blob 可能为 true

  • 是否压缩与底层存储/codec 有关

不建议仅根据当前 case 推导完整压缩规则。

content_encoding

压缩编码名称。

  • 若 is_compressed = false,则为 NULL

  • 若 is_compressed = true,则返回实际 codec 名称

storage_type

存储类型信息,适合在排查 blob 存储形态时查看。

blob_storage_tier

存储层级信息;若没有对应值,则返回 NULL。

输入参数与返回值中的 NULL 说明

  • 输入参数为 NULL 或空 blob 时

    以下场景下,GET_BLOB_METADATA(blob_expr) 的返回结果为 NULL

    • 入参本身为 NULL

    • blob 为空内容

    • blob 不包含可读取的有效内容

    -- 返回结果:NULL
    SELECT GET_BLOB_METADATA(to_blob(CAST(null as binary)));
    
    -- 这类情况下,如果继续取字段,返回结果仍为:NULL
    SELECT get_json_object(GET_BLOB_METADATA(to_blob(CAST(null as binary))), '$.content_length');
  • 返回结果中的字段为 NULL 时

    即使 GET_BLOB_METADATA(blob_expr) 本身返回的不是 NULL,其中某些字段也可能为空。

    常见情况包括:

    • content_type:未指定内容类型时为 NULL

    • checksum:没有对应校验值时为 NULL

    • content_encoding:未压缩时为 NULL

    • blob_storage_tier:没有对应存储层级信息时为 NULL

  • 可以把它理解为两层含义:

    • 整个函数返回 NULL:这个 blob 没有可返回的 metadata

    • 某个字段为 NULL:metadata 存在,但该字段当前没有值

使用示例

直接读取

SELECT GET_BLOB_METADATA(to_blob('abcdef'));

-- 返回结果。
{
checksum:NULL
content_type:NULL
storage_type:"MEMORY"
is_compressed:false
content_length:6
content_encoding:NULL
blob_storage_tier:"STANDARD"
}

读取最常用的三个字段

适合快速看类型、字节长度及是否压缩。

SELECT
  get_json_object(GET_BLOB_METADATA(to_blob('abcdef')), '$.content_type'),
  get_json_object(GET_BLOB_METADATA(to_blob('abcdef')), '$.content_length'),
  get_json_object(GET_BLOB_METADATA(to_blob('abcdef')), '$.is_compressed');

-- 返回结果如下
+------------+------------+------------+
| _c0        | _c1        | _c2        | 
+------------+------------+------------+
| NULL       | 6          | false      | 
+------------+------------+------------+

校验业务写入的content type

SELECT get_json_object(
  GET_BLOB_METADATA(to_blob('{"key":"value"}', 'application/json')),
  '$.content_type'
);

-- 显式指定 content type 时,按照指定值返回。
+------------+
| _c0        | 
+------------+
| application/json | 
+------------+

校验内容长度

SELECT cast(
  get_json_object(GET_BLOB_METADATA(to_blob('中文测试')), '$.content_length') as bigint
);

-- 返回结果如下。
+------------+
| _c0        | 
+------------+
| 12         | 
+------------+

与 lengthb() 联合做一致性校验

SELECT
  LENGTHB(TO_BLOB('abcdef')),
  CAST(GET_JSON_OBJECT(GET_BLOB_METADATA(TO_BLOB('abcdef')), '$.content_length') AS BIGINT);

-- 返回结果如下。
+------------+------------+
| _c0        | _c1        |
+------------+------------+
| 6          | 6          |
+------------+------------+

检查持久化后的压缩情况

  1. 准备测试表

    -- 创建包含Blob类型的Table
    CREATE TABLE blob_table2 (
      col1 INT ,
      col2 BLOB
    )
    TBLPROPERTIES (
      "table.format.version"="2" 
    );
    
    -- 数据写入
    INSERT INTO blob_table2 VALUES (1, to_blob(repeat('aaa', 1000), 'application/json'));
    
    -- 数据读取
    SELECT col1,read_blob(col2) FROM blob_table2;
  2. 查询压缩情况

    SELECT 
      get_json_object(GET_BLOB_METADATA(col2), '$.is_compressed') 
    FROM blob_table2;
    
    -- 返回结果如下。
    +-----+
    | _c0 |
    +-----+
    | true |
    +-----+

    is_compressed 可理解为“该 blob 当前是否以压缩形式存储”。

查看压缩编码

  1. 准备测试表

    -- 创建包含Blob类型的Table
    CREATE TABLE blob_table2 (
      col1 INT ,
      col2 BLOB
    )
    TBLPROPERTIES (
      "table.format.version"="2" 
    );
    
    -- 数据写入
    INSERT INTO blob_table2 VALUES (1, to_blob(repeat('aaa', 1000), 'application/json'));
    
    -- 数据读取
    SELECT col1,read_blob(col2) FROM blob_table2;
  2. 查看压缩编码

    SELECT
      get_json_object(GET_BLOB_METADATA(col2), '$.is_compressed'),
      get_json_object(GET_BLOB_METADATA(col2), '$.content_encoding')
    FROM blob_table2;
    
    -- 返回结果如下。
    +-----+-----+
    | _c0 | _c1 |
    +-----+-----+
    | true | ZSTD |
    +-----+-----+
    • 未压缩时:content_encoding 为 NULL

    • 压缩时:content_encoding 返回具体 codec 名称

查看存储相关信息

  1. 准备测试表

    -- 创建包含Blob类型的Table
    CREATE TABLE blob_table2 (
      col1 INT ,
      col2 BLOB
    )
    TBLPROPERTIES (
      "table.format.version"="2" 
    );
    
    -- 数据写入
    INSERT INTO blob_table2 VALUES (1, to_blob(repeat('aaa', 1000), 'application/json'));
    
    -- 数据读取
    SELECT col1,read_blob(col2) FROM blob_table2;
  2. 查看存储信息

    SELECT
      get_json_object(GET_BLOB_METADATA(col2), '$.storage_type'),
      get_json_object(GET_BLOB_METADATA(col2), '$.blob_storage_tier')
    FROM blob_table2;
    
    -- 返回结果如下。
    +-----+-----+
    | _c0 | _c1 |
    +-----+-----+
    | PANGU | STANDARD |
    +-----+-----+

和其他函数如何配合

  • 和 to_blob配合:验证构造出的 blob 是否带上预期元数据。

  • 和 LENGTHB 配合:校验 metadata 中的长度是否与字节长度一致。

  • 和 read_blob 配合:一个看内容本身,一个看内容描述信息。

  • 和 GET_JSON_OBJECT 配合:这是最常见、最推荐的使用方式。