Взорвать несколько столбцов в Hive

Я пытаюсь взорвать записи в нескольких столбцах в 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?

Я видел несколько сообщений о взрыве для одного столбца, но не для нескольких столбцов, как в этом случае.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
1 654
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

@Manu - Вы можете сделать боковой вид на 2 столбца, но это будет перекрестный продукт. но я вижу, что вам нужно сопоставление один к одному между столбцами.

Любое изменение вы можете создать поле карты со столбцами col02 и col03?

Не уверен, что такое поле карты. Мне придется погуглить и вернуться к вам

Manu Manjunath 21.05.2019 19:11
Ответ принят как подходящий

Разделяйте подзапросы по отдельности и объединяйте их с помощью полного соединения.

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 

Другие вопросы по теме