全部產品
Search
文件中心

MaxCompute:STRUCT資料類型

更新時間:Sep 16, 2025

MaxCompute支援STRUCT(結構體)資料類型,可以將不同類型的欄位組合成一個邏輯單元。本文為您介紹STRUCT資料類型的使用方法。

構造方式

構造方式介紹及區別

MaxCompute支援STRUCT EXPRESSION、STRUCT函數和NAMED_STRUCT函數三種不同的構造STRUCT資料類型的方式。

構造方式

構造樣本

資料類型

STRUCT EXPRESSION

支援使用value列表和Named Expression(命名運算式)列表。

STRUCT(1L AS a,'abc' AS b,null as c)

STRUCT<a:bigint,b:string,c:string>

STRUCT(str_col AS abc) from t

STRUCT<abc:string>

STRUCT(*) from t

支援使用*將表的所有列構造成一個STRUCT。

STRUCT<str_col:string,...>

STRUCT函數

支援使用value列表。

STRUCT(1L,2L,3L)

STRUCT<col1:bigint,col2:bigint,col3:bigint>

STRUCT('abc')

STRUCT<col1:string>

STRUCT(1L,t.str_col) from t

STRUCT<col1:int,col2:string>

NAMED_STRUCT函數

支援使用name/value列表。

NAMED_STRUCT('a',1L,'b','b_','c',3.50)

STRUCT<a:bigint,b:string,c:double>

NAMED_STRUCT('a', str_col...) from t

STRUCT<a:string,...>

STRUCT EXPRESSION與STRUCT函數的區別是:STRUCT函數不支援對每個參數指定別名名稱,系統在構造STRUCT時會自動按照參數順序補充field的名稱依次為col1,col2,...。

注意事項

  • 不同的構造文法支援嵌套使用,也支援跟其他複雜類型ARRAY、MAP的建構函式嵌套組合使用。

  • STRUCT資料類型預設不支援NULL作為欄位值。如果需要使用NULL值,需要開啟Bigquery相容模式開關SET odps.sql.bigquery.compatible=true;,同時僅支援使用STRUCT EXPRESSION方式進行構造。

STRUCT EXPRESSION

STRUCT EXPRESSION(STRUCT運算式)提供了構造複雜類型STRUCT的一種方法,支援在構造STRUCT的時候使用value列表和Named Expression(命名運算式)列表。

構造文法

STRUCT(expression1 [[AS] field_name1], expression2 [[AS] field_name2], ...)
  • 參數說明:

    參數

    是否必填

    說明

    expression

    可以是任意運算式和資料類型,可以使用列名、常數及運算式等。

    as

    STRUCT運算式中欄位名稱的前置關鍵字。

    field_name

    產生的STRUCT中對應的欄位名稱,欄位名大小寫不敏感。同一個STRUCT運算式內部多個輸入運算式的欄位名不能重複。

  • 傳回值:返回STURCT類型,STRUCT <field_name1:T1, field_name2:T2, ...>,其field的名稱依次為field_name1, field_name2, ...。

使用樣本

  • 使用非NULL值作為欄位值。

    SELECT * FROM VALUES (STRUCT (1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1);
    
    -- 返回結果
    {a:1, b:2, c:3, d:4}
    
    SELECT struct1.b FROM VALUES (STRUCT (1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1);
    
    -- 返回結果
    +------------+
    | b          |
    +------------+
    | 2          |
    +------------+
  • 使用NULL值作為欄位值。您需要執行命令SET odps.sql.bigquery.compatible=true;開啟Bigquery相容模式。

    SET odps.sql.bigquery.compatible=true;
    SELECT STRUCT (NULL AS Col_1, 2 AS Col_2);
    
    -- 返回結果
     {col_1:NULL, col_2:2} 

STRUCT函數

MaxCompute支援使用STRUCT函數對給定的value列表建立STRUCT資料類型。

構造文法

STRUCT STRUCT(value1,value2, ...)
  • 參數說明:value可以為任意類型,不支援NULL。

  • 傳回值:返回STRUCT類型,STRUCT<col1:T1, col2:T2,...>類型,filed的名稱依次為col1,col2,...。

使用樣本

SELECT STRUCT('a',123,'true',56.90);

-- 返回結果
{col1:a, col2:123, col3:true, col4:56.9}

NAMED_STRUCT函數

MaxCompute支援使用NAMED_STRUCT函數對給定的name/value列表構建STRUCT資料類型。

構造文法

STRUCT NAMED_STRUCT(string_name1, T1 value1, string_name2, T2 value2,...)
  • 參數說明:

    • string_name:指定的string類型的field名稱,必須為常量,欄位名大小寫不敏感。

    • value:可以為任意類型,不支援NULL。

  • 傳回值:返回STURCT類型,STRUCT<string_name1:T1, string_name2:T2, ...>類型, 其中field的名稱依次為string_name1, string_name2, ...。

使用樣本

SELECT NAMED_STRUCT('user_id',10001,'user_name','LiLei','married','F','weight',63.50);

-- 返回結果
{user_id:10001, user_name:LiLei, married:F, weight:63.5}