HiveQL: объединить столбцы массива - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть таблица со столбцами, имеющими массивы, как написать HiveQL для объединения столбцов массива?

| id | colA             | colB            | colC 
+----+------------------+-----------------+------------------    
| 1  | ["john", "james"]| ["peter"]       | ["sam","peter"]
| 2  | ["jane"]         | ["doug"]        | ["mary","peter"]
| 3  | ["jan", "james"] | ["peter","mary"]| ["sam","peter"]

Написать запрос для отображения таких данных:

| id | newcol
+----+------------------------------------------------------    
| 1  | ["john", "james", "peter", "sam","peter"]
| 2  | ["jane", "doug", "mary","peter"]
| 3  | ["jan", "james", "peter","mary","sam","peter"]

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Если вы хотите создать новый строковый массив из нескольких строковых массивов, вы можете использовать следующее (обратите внимание, что вам нужно проверить colB и colC на наличие пустых, чтобы избежать лишних запятых):

split (
concat (

concat_ws(',',colA),
if(size(colB)>0, concat(',', concat_ws(',',colB)), ''    ),
if(size(colC)>0, concat(',', concat_ws(',',colC)), ''    )


),',')
0 голосов
/ 28 декабря 2018
hive> select split(concat_ws(',',array("john", "james"), array('peter'), array("sam","peter")), ",") as a;
OK
["john","james","peter","sam","peter"]

для вашего случая.

select split(concat_ws(',',ColA, ColB, ColC), ",") as a;
0 голосов
/ 28 декабря 2018

Примерно так:

Конкат или ||

SELECT id, colA||','||colB||','||colC AS newcol FROM myTable

ИЛИ

SELECT id, Concat(colA,',',colB,',',colC,) AS newcol FROM myTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...