列の値を1つの列に連結する必要があります。変数にcolnames=col1,col2,col3
として列名があります。 UNIXシェルから以下のクエリを記述して、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
シェル変数置換後の列名を含むコマンドは、次のようになります。
select concat_ws('^',col1,col2,col3) as result from table;
シェルでは次のようになります。
colnames=col1,col2,col3
Hive -e "select concat_ws('^',${colnames}) as result from table"
列が文字列でない場合は、シェルを使用してキャストを文字列としてラップします。これにより、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)
前の例のように、新しい変数を使用してHiveに渡します。