将多个列合并为一个配置单元

时间:2018-07-06 13:16:12

标签: hive hiveql

我需要将列值连接到单个列中。 我在变量中有列名colnames=col1,col2,col3。 我正在从unix shell编写以下查询,并调用配置单元。但是,当我这样做时,我只会得到串联的列名,而不是那些列的值。

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

我希望输出为:

  

ABCD ^ 10 ^ XYZ

({ABCD10XYZ是列值)

1 个答案:

答案 0 :(得分:3)

您需要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)

使用上一个示例中的新变量来传递至配置单元。