hive查询将字符串作为参数传递

djmepvbi  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(418)

下面是shell脚本中的配置单元查询。它所做的是从一个文本文件中一次读取一个表名,然后运行配置单元查询以向其中插入行。
当我用一个整数值(比如1)替换“i”时,它工作正常。尝试了一些方法来通过'我',但它不起作用。感谢您的帮助。
配置单元查询

for line in $(cat ../hive/ListofTableNames.txt);

do

 eval "hive -e 'SET hive.exec.dynamic.partition.mode=nonstrict;

 FROM sourcedb.$line

 INSERT OVERWRITE TABLE targetdb.$line

 SELECT from_unixtime(unix_timestamp()),**'I'**,*;'"

done
esyap4oy

esyap4oy1#

我会将配置单元ql放在一个文件中,比如myrequest.ql:

SET hive.exec.dynamic.partition.mode=nonstrict;
FROM sourcedb.${hiveconf:tableName}
INSERT OVERWRITE TABLE targetdb.${hiveconf:tableName}
SELECT from_unixtime(unix_timestamp()),**'I'**,*;'"

然后你的剧本会是这样的:

for line in $(cat ../hive/ListofTableNames.txt);

do
    eval "hive --hiveconf tableName=$line -f myRequest.ql"
done

希望这会有帮助

lymgl2op

lymgl2op2#

您需要在查询中转义单引号。

for line in $(cat ../hive/ListofTableNames.txt);
do
 eval "hive -e 'SET hive.exec.dynamic.partition.mode=nonstrict;
 FROM sourcedb.$line
 INSERT OVERWRITE TABLE targetdb.$line
 SELECT from_unixtime(unix_timestamp()),**\'I\'**,*;'"
done

因为前面有一个开场白 SET 操作,所以它将取下一个引号作为结束引号。所以要避免这种情况,一定要使用转义符。
另一个整洁的选项是,将查询写入一个单独的文件并另存为query.ql。并使用 -f filename.ql 用户建议1314742

hs1rzwqc

hs1rzwqc3#

我会努力的
将sql写入文件并使用--hivevar选项将变量传递给hql配置单元--hivevar i=bb-f your.hql
从脚本writesql到tmp文件,运行hive-f

相关问题