HiveQL (Hive Query Language): преобразование матрицы как таблицы в таблицу из 3 столбцов - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть структура таблицы следующим образом:

   code | col1 | col2 | col3 |
   0001 |  c11 | c12  | c13  |
   0002 |  c21 | c22  | c23  |
   0003 |  c31 | c32  | c33  |
   0004 |  c41 | c42  | c43  |

Я хочу преобразовать его в

    code | col_to_row | value
    0001 | col1 | c11
    0001 | col2 | c12
    0001 | col3 | c13
    0002 | col1 | c21

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

select code,'col1' as col_to_row, col1 as value,  from  database.table
union all
select code,'col2' as col_to_row, col2 as value,  from  database.table
union all
select code,'col3' as col_to_row, col3 as value,  from  database.table

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете использовать функцию карты с lateral view explode в качестве альтернативы, которую проще изменить, чем UNION ALL s

select code, col_to_row, value
  from (
    select code, map(  "col1", col1
                     , "col2", col2
                     , "col3", col3
                     ) as col_map
    from t ) x
  lateral view explode(col_map) exptab as col_to_row, value ;

Образец O / p

Total MapReduce CPU Time Spent: 3 seconds 620 msec
OK
1   col2    c12
1   col1    c11
1   col3    c13
2   col2    c22
2   col1    c21
2   col3    c23
3   col2    c32
3   col1    c31
3   col3    c33
4   col2    c42
4   col1    c41
4   col3    c43
Time taken: 27.876 seconds, Fetched: 12 row(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...