Объединить несколько столбцов в один в улье - PullRequest
0 голосов
/ 06 июля 2018

Мне нужно объединить значения столбцов в один столбец. У меня есть имена столбцов в переменной как colnames=col1,col2,col3. Я пишу приведенный ниже запрос из оболочки Unix и вызываю улей. Но когда я это делаю, я получаю объединенные имена только столбцов, а не значения этих столбцов.

select concat('regexp_replace("${colnames}",",","^")) as result from table;

Я хотел бы вывод:

ABCD ^ 10 ^ XYZ

(ABCD, 10, XYZ - значения столбцов)

1 Ответ

0 голосов
/ 06 июля 2018

Вам нужна функция concat_ws для объединения значений с ^ в качестве разделителя.

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

hive> select concat_ws('^','ABCD','10', 'XYZ');
OK
ABCD^10^XYZ

Команда с именами столбцов после подстановки переменных оболочки должна выглядеть следующим образом:

 select concat_ws('^',col1,col2,col3) as result from table;

В оболочке это будет выглядеть так:

colnames=col1,col2,col3
hive -e "select concat_ws('^',${colnames}) as result from table"

Если столбцы не являются строковыми, оберните их приведением в виде строки, используя shell, это позволит concat_ws работать со строками и нестроковыми столбцами.

Пример

colnames=col1,col2,col3
colnames2=$(echo "cast( $colnames as string)" | sed "s/,/ as string), cast( /g")
echo "$colnames2"

Выход:

cast( col1 as string), cast( col2 as string), cast( col3 as string)

Используйте новую переменную для перехода в куст, как в предыдущем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...