SQL分析ジョブ用に複合型関数を設定して、ARRAY や MAP などの複合型のデータを処理できます。このトピックでは、開発を容易にするために、SQL 分析ジョブでサポートされている複合型関数の構文、パラメーター、および例について説明します。
次の表に、SQL 分析機能でサポートされている複合型関数を示します。
関数 | 説明 |
1 行のデータを複数行に転置します。この関数は UDTF です。 |
EXPLODE
制限事項
SELECT文には、EXPLODE関数を 1 つだけ含めることができます。 EXPLODE 関数を使用して計算できるのは、列内のデータのみです。この関数は、
GROUP BY、CLUSTER BY、DISTRIBUTE BY、またはSORT BY句と一緒に呼び出すことはできません。
構文
explode (<var>)説明
1 行のデータを複数行に転置します。この関数は UDTF です。
パラメーター値が
array<T>型の場合、列に格納されている配列は複数行に転置されます。パラメーター値が
map<K, V>型の場合、列に格納されているマップの各キーと値のペアは、2 つの列を持つ 1 つの行に転置されます。1 つの列はキーを格納するために使用され、もう 1 つの列は値を格納するために使用されます。行に null データのみが含まれている場合、この関数は null データのみを含む行を返しません。
パラメーター
var: 必須。値は
array<T>型またはmap<K, V>型である必要があります。戻り値
転置後の行が返されます。
例
例 1:
t_table_mapテーブルには、c1 (BIGINT) と t_map (MAP<STRING,BIGINT>)列が含まれています。テーブル内のデータ:+------------+-------+ | c1 | t_map | +------------+-------+ | 1000 | {k11:86, k21:15} | | 1001 | {k12:97, k22:2} | | 1002 | {k13:99, k23:1} | +------------+-------+サンプルステートメント:
select explode(t_map) from t_table_map; -- サンプル結果: +-----+------------+ | key | value | +-----+------------+ | k11 | 86 | | k21 | 15 | | k12 | 97 | | k22 | 2 | | k13 | 99 | | k23 | 1 | +-----+------------+例 2:
返される結果には、null データのみを含む行は含まれません。
-- テーブルを作成します。 create table explod_array (arr array<string>); -- テーブルにデータを挿入します。 insert into table explod_array values (array('1','2','3',null,'agb')), (array('1','2','3',null,'ag')), (null); -- データをクエリします。 select * from explod_array; -- サンプル結果: +------------+ | arr | +------------+ | ["1","2","3",null,"agb"] | | ["1","2","3",null,"ag"] | | NULL | +------------+ -- データを表示します。 select explode(arr) from explod_array; -- 返される結果には、null データのみを含む行は含まれません。 +------------+ | col | +------------+ | 1 | | 2 | | 3 | | NULL | | agb | | 1 | | 2 | | 3 | | NULL | | ag | +------------+