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

Restarting Failed Scripted Queries in Impala Shell

我查看了 Impala Shell 文档,但没有找到任何解决此问题的方法。我有一个 bash 脚本,它运行 Impala 查询,然后发送一封包含查询结果的电子邮件。问题是,每隔一段时间查询就会失败;发生这种情况时,脚本的下一行开始运行,并通过电子邮件发送一个空白的 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

由于它是一个 bash 脚本,您可以添加逻辑来检查上次执行的命令的退出代码。因此,如果您的 impala shell 命令 运行 没问题,那么它将 return 退出代码为 0,如果出现错误,则它应该 return 退出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