下面是我的 shell 脚本,我试图从中调用几个运行良好的 hive SQL 查询。
#!/bin/bash
DATE_YEST_FORMAT1=`perl -e 'use POSIX qw(strftime); print strftime "%Y-%m-%d",localtime(time()- 3600*504);'`
echo $DATE_YEST_FORMAT1
hive -e "
SELECT t1 [0] AS buyer_id
,t1 [1] AS item_id
,created_time
FROM (
SELECT split(ckey, '\\\\|') AS t1
,created_time
FROM (
SELECT CONCAT (
buyer_id
,'|'
,item_id
) AS ckey
,created_time
FROM dw_checkout_trans
WHERE to_date(from_unixtime(cast(UNIX_TIMESTAMP(created_time) AS BIGINT))) = '$DATE_YEST_FORMAT1' distribute BY ckey sort BY ckey
,created_time DESC
) a
WHERE rank(ckey) < 1
) X
ORDER BY buyer_id
,created_time DESC;"
sleep 120
QUERY1=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';"`
问题陈述:-
如果你看到我hive -e
在echo $DATE_YEST_FORMAT1
. 有时,由于某些原因,该查询会失败。所以目前发生的情况是,如果first Hive SQL query
失败,那么它会second Hive SQL query
在 sleep for 之后进入120 seconds
。那是我不想要的。那么,如果由于任何原因导致会费失败,有什么办法first query
,它应该stopped automatically
在那个时候得到。并且它应该在几分钟后再次从头开始自动运行(应该是可配置的)
更新:-
正如所建议的那样Stephen
。
我试过这样的东西-
#!/bin/bash
hive -e " blaah blaah;"
RET_VAL=$?
echo $RET_VAL
if [ $RET_VAL -ne 0]; then
echo "HiveQL failed due to certain reason" | mailx -s "LIP Query Failed" -r rj@host.com rj@host.com
exit(1)
我在下面收到类似这样的错误消息,我也没有收到任何电子邮件。我的语法和方法有什么问题吗?
syntax error at line 152: `exit' unexpected
笔记:-
如果 Hive 查询成功执行,则此处为零表示成功。
放置空间后的另一个更新:- 进行如下更改后
#!/bin/bash
hive -e " blaah blaah;"
RET_VAL=$?
echo $RET_VAL
if [ $RET_VAL -ne 0 ]; then
echo "HiveQL failed due to certain reason for LIP" | mailx -s "LIP Query Failed" -r rj@host.com rj@host.com
fi
exit
hive -e 'Another SQL Query;'
我得到了类似下面的东西-
RET_VAL=0
+ echo 0
0
+ [ 0 -ne 0 ]
+ exit
状态代码是zero
因为我的第一个查询成功,但之后我的程序退出并且它没有去执行我的第二个查询?为什么?我在这里肯定又错过了一些东西。