Я пытаюсь взорвать записи в нескольких столбцах в Hive.
Например, если мой набор данных выглядит так:
COL_01 COL_02 COL_03
1 A, B X, Y, Z
2 D, E, F V, W
Я хочу это как результат -
COL_01 COL_02 COL_03
1 A X
1 B Y
1 NULL Z
2 D V
2 E W
2 F NULL
Есть ли способ сделать это в Hive?
Я видел несколько сообщений о взрыве для одного столбца, но не для нескольких столбцов, как в этом случае.
@Manu - Вы можете сделать боковой вид на 2 столбца, но это будет перекрестный продукт. но я вижу, что вам нужно сопоставление один к одному между столбцами.
Любое изменение вы можете создать поле карты со столбцами col02 и col03?
Разделяйте подзапросы по отдельности и объединяйте их с помощью полного соединения.
with your_data as (
select stack(2,
1, 'A, B', 'X, Y, Z',
2, 'D, E, F', 'V, W'
) as (col_01, col_02, col_03)
)
select nvl(s1.col_01,s2.col_01) as col_01, --do the same nvl() for all not exploded columns
s1.col_02, s2.col_03
from
(select d.col_01, c2.pos2, c2.col_02 --explode col_02
from your_data d
lateral view outer posexplode(split(col_02,', ?')) c2 as pos2, col_02
)s1
full join
(select d.col_01, c3.pos3, c3.col_03 --explode col_03
from your_data d
lateral view outer posexplode(split(col_03,', ?')) c3 as pos3, col_03
)s2
on s1.col_01=s2.col_01
and s2.pos3=s1.pos2 --match position
Результат:
col_01 s1.col_02 s2.col_03
1 A X
1 B Y
1 NULL Z
2 D V
2 E W
2 F NULL
Не уверен, что такое поле карты. Мне придется погуглить и вернуться к вам