MaxCompute支援STRUCT(結構體)資料類型,可以將不同類型的欄位組合成一個邏輯單元。本文為您介紹STRUCT資料類型的使用方法。
構造方式
構造方式介紹及區別
MaxCompute支援STRUCT EXPRESSION、STRUCT函數和NAMED_STRUCT函數三種不同的構造STRUCT資料類型的方式。
構造方式 | 構造樣本 | 資料類型 |
支援使用value列表和Named Expression(命名運算式)列表。 |
|
|
|
| |
支援使用*將表的所有列構造成一個STRUCT。 |
| |
支援使用value列表。 |
|
|
|
| |
|
| |
支援使用name/value列表。 |
|
|
|
|
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}