Вам нужна функция 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)
Используйте новую переменную для перехода в куст, как в предыдущем примере.