这是我在shell脚本中的hive查询。它的作用是一次从文本文件中读取一个表名,然后运行hive查询将行插入其中。
当我更换'我'用整数值表示1,它工作正常。尝试过几种方法来通过'我'但它不起作用。任何帮助表示赞赏。
Hive查询
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
答案 0 :(得分:0)
我会尝试
答案 1 :(得分:0)
我会将hive 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
希望有所帮助
答案 2 :(得分:0)
您需要在查询中转义单引号。
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。并按照user1314742
的建议使用-f filename.ql
执行