在Impala Shell中重新启动失败的脚本查询

时间:2016-06-21 15:04:59

标签: bash hadoop impala

我一直在浏览Impala Shell文档,并且没有找到解决此问题的任何内容。我有一个运行Impala查询的bash脚本,然后发送包含查询结果的电子邮件。问题是,查询每次都会失败;当发生这种情况时,脚本的下一行将启动,并将空白的CSV文件通过电子邮件发送出去。是否可以对Impala Shell脚本本身进行修改,还是对框架bash脚本进行修改以解决此问题?我最初的想法是,如果CSV文件为空,则脚本重新运行查询,但是在查询合法地不产生结果的情况下,这将使脚本陷入循环。

有什么建议吗?

以下是脚本现在的样子:

#!/bin/bash

NOW=$(date +"%F")
NAME="001"

impala-shell -i servername.com -B --output_delimiter=',' -o ../$NAME/$NAME.csv -f ../$NAME/001.sql

cat ../$NAME/$NAME/001.header > ../$NAME/$NAME-$NOW.csv
cat ../$NAME/$NAME.csv >> ../$NAME/$NAME-$NAME.csv

cat ../$NAME.email | mailx -a ../$NAME/$NAME-$NOW.csv -a ../$NAME.sql -s "Email subject" -r "Alias<from@email.com>" to@email.com

1 个答案:

答案 0 :(得分:1)

由于它是一个bash脚本,您可以添加逻辑来检查上次执行的命令的退出代码。因此,如果您的impala shell命令运行正常,那么它将返回退出代码0,如果有错误,那么它应该返回0以外的退出代码(如果它们正确开发)。我已经阅读了一些关于impala查询错误但仍然提供代码退出代码的帖子,所以你可能需要弄乱它。下面的示例将循环,直到impala语句成功运行,因此可能需要添加某种重试计数逻辑

impala-shell -i servername.com -B --output_delimiter=',' -o ../$NAME/$NAME.csv -f ../$NAME/001.sql
while [ $? -ne 0 ]
do
impala-shell -i servername.com -B --output_delimiter=',' -o ../$NAME/$NAME.csv -f ../$NAME/001.sql
done

运行计数逻辑在2次尝试后退出的示例

runCnt=0
impala-shell -i servername.com -B --output_delimiter=',' -o ../$NAME/$NAME.csv -f ../$NAME/001.sql
while [ $? -ne 0 ]
do  
runCnt=$(($runCnt + 1))
    if [ $runCnt -eq 2 ]
    then
        exit 1
    else
        impala-shell -i servername.com -B --output_delimiter=',' -o ../$NAME/$NAME.csv -f ../$NAME/001.sql
    fi
done