Попытка получить несколько строк со значениями в массиве в кусте путем бокового обзора и взрыва - PullRequest
0 голосов
/ 21 марта 2020

У меня есть таблица с двумя столбцами, и я пытаюсь получить несколько строк со значениями в массиве. Моя таблица выглядит следующим образом.

date                  users
2019-01-01       ["U00001","U00002","U00002"]

Я пытаюсь получить вывод, как показано ниже

date               users
2019-01-01       "U00001"
2019-01-01       "U00002"
2019-01-01       "U00003"

Я использую запрос ниже

SELECT date, user FROM  table1
LATERAL VIEW  explode(users)  myTable2 AS user;

Мне не удалось получить результат, который я ожидал выше, и
результаты моего запроса отображаются следующим образом.

date                 user
2019-01-01    "U00001","U00002","U00002"

мой тип данных столбца

column         data_type
date            string
user            Array

1 Ответ

0 голосов
/ 21 марта 2020

date и user - зарезервированные слова в Hive, используйте обратную галочку. Также (посмотрите мой пример) вид сбоку должен иметь псевдоним (u), столбец взорвал псевдоним user:

with your_data as (--use your table instead of this 
select stack(1, '2019-01-01', array("U00001","U00002","U00002")) as(`date`, users)
)

select t.`date`, u.`user` 
  from your_data t --use your table instead
       lateral view explode(t.users) u as `user` ;

Если пользователи имеют тип STRING, то удалите квадратные скобки и двойные кавычки, затем разделить и взорвать:

with your_data as (--use your table instead of this 
select stack(1, '2019-01-01', '["U00001","U00002","U00002"]') as (`date`, users)
)

select t.`date`, u.`user` 
  from your_data t --use your table instead
       lateral view explode(split(regexp_replace(t.users,'\\[|\\]|\\"',''),',')) u as `user` ;

Результат:

t.date      u.user
2019-01-01  U00001
2019-01-01  U00002
2019-01-01  U00002
...