akm*_*akm 5 string shell hive concatenation hiveql
我需要将列值串联到单个列中。我的变量中有列名colnames=col1,col2,col3。我正在从unix shell编写以下查询,并调用配置单元。但是,当我这样做时,我只会得到串联的列名,而不是那些列的值。
select concat('regexp_replace("${colnames}",",","^")) as result from table;
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
ABCD ^ 10 ^ XYZ
(ABCD,10,XYZ是列值)
您需要使用concat_ws函数来将值串联起来^作为分隔符。
常量示例:
hive> select concat_ws('^','ABCD','10', 'XYZ');
OK
ABCD^10^XYZ
Run Code Online (Sandbox Code Playgroud)
在shell变量替换后,带有列名的命令应如下所示:
select concat_ws('^',col1,col2,col3) as result from table;
Run Code Online (Sandbox Code Playgroud)
在外壳中它将如下所示:
colnames=col1,col2,col3
hive -e "select concat_ws('^',${colnames}) as result from table"
Run Code Online (Sandbox Code Playgroud)
如果列不是字符串,则使用shell将它们包装为字符串转换,这将允许concat_ws使用字符串和非字符串列。
例
colnames=col1,col2,col3
colnames2=$(echo "cast( $colnames as string)" | sed "s/,/ as string), cast( /g")
echo "$colnames2"
Run Code Online (Sandbox Code Playgroud)
输出:
cast( col1 as string), cast( col2 as string), cast( col3 as string)
Run Code Online (Sandbox Code Playgroud)
如上例所示,使用新变量传递到配置单元。