MaxCompute は STRUCT データ型をサポートしています。これにより、異なる型のフィールドを論理ユニットに組み合わせることができます。このトピックでは、STRUCT データ型の使用方法について説明します。
構築方法
構築方法の違い
MaxCompute は、STRUCT データ型を構築するための 3 つの異なる方法、STRUCT 式、STRUCT 関数、および NAMED_STRUCT 関数をサポートしています。
構築方法 | 例 | データ型 |
値リストと名前付き式リストの使用をサポートしています。 |
|
|
|
| |
アスタリスク (*) を使用して、テーブルのすべての列から STRUCT を構築することをサポートしています。 |
| |
値リストの使用をサポートしています。 |
|
|
|
| |
|
| |
名前/値リストの使用をサポートしています。 |
|
|
|
|
STRUCT 式と STRUCT 関数の違い: STRUCT 関数は、各パラメーターのエイリアスの指定をサポートしていません。STRUCT を構築する場合、システムは col1、col2 などのパラメーターの順序でフィールド名を自動的に追加します。
使用上の注意
異なる構築構文はネストをサポートしており、ARRAY や MAP などの他の複合型の構築関数と組み合わせることができます。
STRUCT データ型は、デフォルトではフィールド値として NULL をサポートしていません。NULL 値を使用する必要がある場合は、
SET odps.sql.bigquery.compatible=true;を使用して Bigquery 互換モードを有効にする必要があります。また、構築には STRUCT 式メソッドのみを使用できます。
STRUCT 式
STRUCT 式は、複合 STRUCT 型を構築する方法を提供します。STRUCT を構築する際に、値リストと名前付き式リストの使用をサポートしています。
構文
STRUCT(expression1 [[AS] field_name1], expression2 [[AS] field_name2], ...)パラメーター
パラメーター
必須
説明
expression
はい
このパラメーターは、任意の式およびデータ型にすることができます。列名、定数、および式がサポートされています。
as
いいえ
STRUCT 式のフィールド名の接頭辞キーワード。
field_name
いいえ
生成された STRUCT のフィールド名。フィールド名は大文字と小文字が区別されません。同じ STRUCT 式内のフィールド名は重複できません。
戻り値: STRUCT 型、STRUCT <field_name1:T1, field_name2:T2, ...> を返します。ここで、フィールド名は 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 関数を使用して、指定された値リストから STRUCT データ型を作成することをサポートしています。
構文
STRUCT STRUCT(value1,value2, ...)パラメーター: 値は任意の型にすることができますが、NULL はサポートされていません。
戻り値: STRUCT 型、STRUCT<col1:T1, col2:T2,...> を返します。ここで、フィールド名は col1、col2 などです。
例
SELECT STRUCT('a',123,'true',56.90);
-- 結果
{col1:a, col2:123, col3:true, col4:56.9}NAMED_STRUCT 関数
MaxCompute は、NAMED_STRUCT 関数を使用して、指定された名前/値リストから STRUCT データ型を構築することをサポートしています。
構文
STRUCT NAMED_STRUCT(string_name1, T1 value1, string_name2, T2 value2,...)パラメーター:
string_name: STRING 型の指定されたフィールド名。定数である必要があります。フィールド名は大文字と小文字が区別されません。
value: 値は任意の型にすることができますが、NULL はサポートされていません。
戻り値: STRUCT 型、STRUCT<string_name1:T1, string_name2:T2, ...> を返します。ここで、フィールド名は 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}