跟踪通过shell脚本运行的配置单元查询的成功或失败

时间:2016-03-09 21:21:36

标签: bash shell hive

我在一个shell脚本中运行了几个hive查询,如下面的

#!/bin/bash  
HQLSource='/home/hql/'  
hive  -f $HQLSource/query1.hql               
hive  -f $HQLSource/query2.hql               

query1.hqlquery2.hql有声明来创建表并插入数据 - 如果有任何失败,我会认为整个.hql都失败了。我可以写一个文本文件,无论查询是成功还是失败?

预期输出:

query1.hql - Success  
query2.hql - Failed

3 个答案:

答案 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执行的状态。

  1. 返回结果应该等于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
    
  2. 扫描生成的日志文件以查找模式错误/异常,如果模式匹配,则声明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)

我已经检查并验证了代码,因此可以毫无疑问地使用它。

  1. 将每个hive语句放在单独的文件中,例如setup_step_4.hive
  2. 在shell脚本中调用此文件。 setup_step_4.hive 将数据本地路径“ nyse.csv”加载到表nyse_data中;
Shell脚本中的

代码如下所示:

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

错误