Json - 添加到 Hive 中的 Flatten Key 和 Values 的附加列值
Json - Additional column value added to Flatten Key and Values in Hive
在具有 2 列和 2 条记录的 table 中:
记录 1:第 1 列 - my_col 值为:{"XXX": ["123","456"],"YYY": ["246","135"]}
,第 2 列 - ID 为 A123
记录 2:第 1 列 - my_col 值为:{"XXX": ["123","456"],"YYY": ["246","135"], "ZZZ":["333","444"]}
,第 2 列 - ID 为 B222
注意:Column2 不是静态的,每条记录都有不同的值。
期望:
Key
Value
ID
XXX
123
A123
XXX
456
A123
YYY
246
A123
YYY
135
A123
ZZZ
333
B222
ZZZ
444
B222
使用的查询:
SELECT
t.key,
kv.kval as value,
ID
FROM (
SELECT
explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
))
FROM
input_df
) t LATERAL VIEW explode(t.value) kv as kval
按照你的建议扁平化就好了。面临问题从 table.
检索 ID 值
如果您的 table 包含一些其他列并且您需要 select 它们以及来自 explode 的值,则在子查询中使用另一个横向视图。看代码中的注释:
SELECT
t.key,
kv.kval as value,
t.ID
FROM (
SELECT
e.key, e.value, --columns from lateral view
t.id --column from table
FROM
input_df t --add alias
--move explode to lateral view in the FROM
lateral view explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
)) e as key, value --add alias and col names
) t LATERAL VIEW explode(t.value) kv as kval
在具有 2 列和 2 条记录的 table 中:
记录 1:第 1 列 - my_col 值为:{"XXX": ["123","456"],"YYY": ["246","135"]}
,第 2 列 - ID 为 A123
记录 2:第 1 列 - my_col 值为:{"XXX": ["123","456"],"YYY": ["246","135"], "ZZZ":["333","444"]}
,第 2 列 - ID 为 B222
注意:Column2 不是静态的,每条记录都有不同的值。
期望:
Key | Value | ID |
---|---|---|
XXX | 123 | A123 |
XXX | 456 | A123 |
YYY | 246 | A123 |
YYY | 135 | A123 |
ZZZ | 333 | B222 |
ZZZ | 444 | B222 |
使用的查询:
SELECT
t.key,
kv.kval as value,
ID
FROM (
SELECT
explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
))
FROM
input_df
) t LATERAL VIEW explode(t.value) kv as kval
按照你的建议扁平化就好了。面临问题从 table.
检索 ID 值如果您的 table 包含一些其他列并且您需要 select 它们以及来自 explode 的值,则在子查询中使用另一个横向视图。看代码中的注释:
SELECT
t.key,
kv.kval as value,
t.ID
FROM (
SELECT
e.key, e.value, --columns from lateral view
t.id --column from table
FROM
input_df t --add alias
--move explode to lateral view in the FROM
lateral view explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
)) e as key, value --add alias and col names
) t LATERAL VIEW explode(t.value) kv as kval