1行のデータを複数の行に変換します。 この関数は、ユーザー定義のテーブル値関数 (UDTF) です。
使用上の注意
パラメーター値が
array<T>型の場合、列に格納されている配列は複数の行に転置されます。パラメーター値が
map<K, V>型の場合、列に格納されているマップの各キーと値のペアは、2つの列を持つ1つの行に置き換えられます。 一方の列はキーの格納に使用され、もう一方の列は値の格納に使用されます。行にnullデータのみが含まれている場合、この関数はnullデータのみを含む行を返しません。
制限事項
SELECTステートメントにはEXPLODE関数を1つだけ含めることができ、テーブルの他の列は許可されません。この関数は、
GROUP BY、CLUSTER BY、DISTRIBUTE BY、またはSORT BY句では使用できません。
構文
explode (<var>)パラメーター
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; -- The following result is returned: +-----+------------+ | key | value | +-----+------------+ | k11 | 86 | | k21 | 15 | | k12 | 97 | | k22 | 2 | | k13 | 99 | | k23 | 1 | +-----+------------+例2: 返された結果には、nullデータのみを含む行は含まれません。
-- Create a table. create table explod_array (arr array<string>); -- Insert data into the table. insert into table explod_array values (array('1','2','3',null,'agb')), (array('1','2','3',null,'ag')), (null); -- Query data from the table. select * from explod_array; -- The following result is returned: +------------+ | arr | +------------+ | ["1","2","3",null,"agb"] | | ["1","2","3",null,"ag"] | | NULL | +------------+ -- Display data. select explode(arr) from explod_array; -- The returned result does not include a row that contains only the null data. +------------+ | col | +------------+ | 1 | | 2 | | 3 | | NULL | | agb | | 1 | | 2 | | 3 | | NULL | | ag | +------------+
関連関数
EXPLODEは複合型関数です。 ARRAY、MAP、STRUCT、JSONなどの複雑なデータ型のデータを処理するために使用される関数の詳細については、複合型関数.