【问题标题】:Send an email using shell script and appending the output from the query使用 shell 脚本发送电子邮件并附加查询的输出
【发布时间】:2012-08-08 21:33:53
【问题描述】:

下面是我运行两个 Hive SQL 查询的 shell 脚本。哪个工作正常。

#!/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';"

我正在像这样运行上面的 shell 脚本-

sh -x test.sh

问题陈述:-

如果您看到我的第一个 SELECT 查询,它将给我两列作为 OUTPUT,total_items_purchased 的 SUM 和 total_items_missingormismatch 的 SUM。我的第二个 SELECT 将给出这些列的百分比。

我需要使用上述SHELL SCRIPT 在电子邮件中发送这三个详细信息。基本上我需要通过电子邮件发送这三样东西。

从第一个查询-我需要发送-

total_items_purchased and total_items_missingormismatch

从第二个查询-我需要发送-

Percentage that I am calculating.

电子邮件可以是这样或更好的方法-

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

任何建议将不胜感激。

更新:

在我的 Shell 脚本中进行更改后,我运行了以下 shell 脚本-

#!/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:

脚本中的一些部分工作正常,但我猜最后三个 echo 语句工作不正常。

【问题讨论】:

    标签: shell unix hadoop solaris hive


    【解决方案1】:

    我的解决方案无疑是老派的,它是使用 awk 通过将以下内容附加到您的脚本来解析输出:

    QUERY1=`hive -e" 设置 mapred.job.queue.name=hdmi 技术; SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';` QUERY2=`hive -e" 设置 mapred.job.queue.name=hdmi 技术; 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 "缺少或不匹配的项目总数:`echo $QUERY1 | awk '{print $2}'`" echo "错误百分比:$QUERY2"

    这些天来,我会在 Python 中做这样的事情。但是 awk 仍然有它的用途。

    【讨论】:

    • 感谢 Mike 的建议,我已经尝试过,我已经用我正在运行的脚本和我得到的输出更新了这个问题,我猜这个脚本有问题。或者可能是awk?当我运行SunOS..
    • 少数部分工作正常,但最后三个 echo 语句工作不正常。有什么建议吗?
    • 你做了什么改变?我不确定,与您以前的解决方案有什么不同吗?可能是你改变的空间?
    • 我刚刚删除了前两行的空格。例如,我将“QUERY1 =”更改为“QUERY1=”,这是 Bash 的正确语法。
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2014-10-25
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多