以下は、正常に動作しているいくつかのハイブ 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
スリープ状態になった後に に移動し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 Query が正常に実行された場合、0 は成功です。
スペースを入れた後の別の更新:- 以下のような変更を加えた後
#!/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
、最初のクエリは成功しましたが、その後プログラムが終了し、2 番目のクエリを実行できませんでした。なんで?ここでも確かに何かが欠けています。