0

以下は、2つのHiveSQLクエリを実行しているシェルスクリプトです。これは正常に機能しています。

#!/bin/bash

DATE_YEST_FORMAT2=`perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*96);'`
echo $DATE_YEST_FORMAT2

hive -e "
set mapred.job.queue.name=data-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"

私はこのような上記のシェルスクリプトを実行しています-

sh -x test.sh

問題文:-

私の最初のSELECTクエリを見ると、2つの列がOUTPUTとして表示されます。total_items_purchasedのSUMとtotal_items_missingormismatchのSUMです。そして、私の2番目のSELECTは、それらの列のパーセンテージを示します。

上記を使用して、これら3つの詳細をメールで送信する必要がありますSHELL SCRIPT。基本的に私はこれらの3つのことをメールで送る必要があります。

最初のクエリから-送信する必要があります-

total_items_purchased and total_items_missingormismatch

そして2番目のクエリから-私は送信する必要があります-

Percentage that I am calculating.

電子メールは、このようなもの、またはより良いアプローチのようなものにすることができます-

Total Items Purchased:- Some Number
Total Items MissingorMismatch:- Some Number
Error Percentage:- Some Percentage

任意の提案をいただければ幸いです。

アップデート:

シェルスクリプトに変更を加えた後、以下のシェルスクリプトを実行しました-

#!/bin/bash

QUERY1 = `hive -e "
set mapred.job.queue.name=data-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='20120804';`

QUERY2 = `hive -e "
set mapred.job.queue.name=data-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='20120804';"`

echo "Total items purchased: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "Error Percentage: $QUERY2"

私が得た出力は正しくないと思いますか?スクリプトに何か問題がありますか?SunOSを実行しているとき:

bash-3.00$ sh -x emailtest.sh
+ hive -e
set mapred.job.queue.name=data-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='20120804';
+ QUERY1 = 3443837 448750
emailtest.sh: QUERY1: not found
+ hive -e
set mapred.job.queue.name=data-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='20120804';
+ QUERY2 = 13.030523802375084
emailtest.sh: QUERY2: not found
+ awk {print $1}
+ echo
+ echo Total items purchased:
Total items purchased:
+ awk {print $2}
+ echo
+ echo Total Items MissingorMismatch:
Total Items MissingorMismatch:
+ echo Error Percentage:
Error Percentage:

スクリプトのいくつかの部分は正常に機能していますが、最後の3つのechoステートメントは正常に機能していないと思います。

4

1 に答える 1

1

確かに古い学校である私の解決策は、 awk を使用して、スクリプトに次を追加して出力を解析することです。

QUERY1=`ハイブ -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';`

QUERY2=`ハイブ -e "
set mapred.job.queue.name=hdmi-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"`

echo "購入したアイテムの合計: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "エラー率: $QUERY2"

最近、私はPythonでこのようなことをします。しかし、Awk にはまだ用途があります。

于 2012-08-08T22:00:51.963 に答える