我在一个shell脚本中运行了几个hive查询,如下面的
#!/bin/bash
HQLSource='/home/hql/'
hive -f $HQLSource/query1.hql
hive -f $HQLSource/query2.hql
query1.hql
和query2.hql
有声明来创建表并插入数据 - 如果有任何失败,我会认为整个.hql都失败了。我可以写一个文本文件,无论查询是成功还是失败?
预期输出:
query1.hql - Success
query2.hql - Failed
答案 0 :(得分:3)
上一个命令的退出代码存储在变量$?
中。任何非零值都被认为是某种失败。
#!/bin/bash
HQLSource='/home/hql/'
hive -f "$HQLSource/query1.hql"
query1result=$?
hive -f "$HQLSource/query2.hql"
query2result=$?
# do stuff with $query1result and $query2result
if
语句也使用退出代码来确定代码路径,因此您也可以这样做:
#!/bin/bash
HQLSource='/home/hql/'
if hive -f "$HQLSource/query1.hql"
then
echo Query 1 succeeded
else
echo Query 1 failed
fi
if hive -f "$HQLSource/query2.hql"
then
echo Query 2 succeeded
else
echo Query 2 failed
fi
答案 1 :(得分:0)
我们可以在bash文件中进行两次检查,以了解hql执行的状态。
返回结果应该等于0,否则声明hql执行失败。
beeline -u jdbc:hive2://IP:PORT -n USER -p PASSWORD -f hql_file.hql 2> ./hql_file.logs
query1result=$?
if [ $query1result -eq 0 ]; then
# no issue
fi
扫描生成的日志文件以查找模式错误/异常,如果模式匹配,则声明hql失败。
for logfile in ./hql_file.logs; do
errorFound="false"
while read -r line; do
# check for exception or error.Add grep search pattern based on need.
excep=$(echo $line|grep "Error/|Exception")
# if no space means no error or exception
if [ -n "${excep##+([[:space:]])}" ]; then
errorFound="true";
fi
done < "$logfile"
done
答案 2 :(得分:0)
我已经检查并验证了代码,因此可以毫无疑问地使用它。
代码如下所示:
hive -f setup_step_3.hive
query1result=$?
echo $query1result
if [ "$query1result" -ne 0 ]
then
echo " Error."
exit 4
else
echo "Done.Successfully"
fi
hive -f setup_step_4.hive
query1result=$?
echo $query1result
if [ "$query1result" -ne 0 ]
then
echo " Error"
exit 4
else
echo "Done.Successfully"
fi
例如 步骤3成功执行,并且 步骤4失败,因为文件不存在。
输出
使用文件//etc/hive/conf.dist/hive-log4j.properties中的配置初始化日志记录 好
耗时:1.413秒
0
完成。成功
使用文件//etc/hive/conf.dist/hive-log4j.properties中的配置初始化日志记录 好
耗时:1.574秒
失败:SemanticException行3:23无效的路径“ nyse.csv”:没有文件与路径文件匹配:/root/Data/nyse.csv
64
错误