我需要将列值合并成一列。
我有一个变量colnames=col1,col2,col3
,里面存储了这些列的名称。
我从Unix shell中编写以下查询,并调用Hive。但是当我这样做时,我只得到了列名连接在一起的结果,而没有得到这些列的值。
select concat('regexp_replace("${colnames}",",","^")) as result from table;
我希望输出结果如下:
ABCD^10^XYZ
(ABCD
,10
,XYZ
是列值)
我需要将列值合并成一列。
我有一个变量colnames=col1,col2,col3
,里面存储了这些列的名称。
我从Unix shell中编写以下查询,并调用Hive。但是当我这样做时,我只得到了列名连接在一起的结果,而没有得到这些列的值。
select concat('regexp_replace("${colnames}",",","^")) as result from table;
ABCD^10^XYZ
(ABCD
,10
,XYZ
是列值)
concat_ws
函数将值用^
作为分隔符连接起来。hive> select concat_ws('^','ABCD','10', 'XYZ');
OK
ABCD^10^XYZ
在shell变量替换后带有列名的命令应该像这样:
select concat_ws('^',col1,col2,col3) as result from table;
colnames=col1,col2,col3
hive -e "select concat_ws('^',${colnames}) as result from table"
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)
使用新变量将其传递给Hive,就像之前的示例一样。
select cast(col1 as string) as col1
。 - leftjoin