一個簡單的自動數據報表腳本

專欄第一篇,寫個簡單的小玩意,就是將從hive里查數這個動作腳本化,形成報表,並定時發送郵件。

所以這個自動數據報表可以拆分成3個部分: 查詢hive的腳本,發送郵件的腳本和定時任務。

查詢hive的腳本

查詢hive,並將結果保存到example.txt中,稱為腳本example.sh,如下:

hive -e "nset mapred.reduce.tasks=64;nset mapred.job.queue.name=$queue_name;nnselectnta.dd day_datent,a.ct countnfromn(ntselect nttconcat_ws(-,year,month,day) ddntt,count(distinct passengerid) ctntfrom database_name.table_namentwhere cityid in (4,15)nttand concat_ws(-,year,month,day) > date_sub(from_unixtime(unix_timestamp(),yyyy-MM-dd),30)ntgroup bynttconcat_ws(-,year,month,day)n) anorder by day_date descnn" > example.txtn

發郵件的腳本

接下來是要把數據發送到郵件。用autoMail.py腳本,如下所示

#!/usr/local/bin/pythonnfrom smtplib import SMTPns = SMTP("mail.google.com", 555)ns.starttls()ns.login("xbtlin@gmail.com", "$passwd")ntolist=["xbtlin@gmail.com","zhangsan@gmail.com"]nFROM="xbtlin@gmail.com"nSUBJECT="Hello!"nwith open("example2.txt","r") as fin:n TEXT=fin.read()nmsg=Subject: {}nn{}.format(SUBJECT, TEXT)ns.sendmail(FROM, tolist, msg)n

排版和定時任務

需要在crontab中增加以下腳本。增加的方法是crontab -e然後編輯保存就可以。

絕對路徑/example.sh && cat example.txt | sed s/t/,|,/g | column -s , -t > time3Control2.txt && 絕對路徑/autoMail.py >> 絕對路徑/cronlog 2>&1n

將上面腳本拆開看,

絕對路徑/example.shn

表示執行hive查詢並將結果保存到example.txt文件。

cat example.txt | sed s/t/,|,/g | column -s , -t > example2.txtn

表示將example.txt文件重新排版並放到example2.txt文件。這段腳本直接複製就行,用到了sed命令,作用就是排版列,同一列對齊。cat的結果為什麼不直接放到example.txt文件,而是用了example2.txt文件,是因為直接放到同名文件,文件結果為空。

命令之間用&&隔開,表示順序執行bash命令,下一個命令得在上一個命令執行完成後再開始執行。

絕對路徑/autoMail.pyn

表示執行自動發送郵件命令。

>> 絕對路徑/cronlog 2>&1n

表示將日誌以追加寫的方式輸出到cronlog中,且標準錯誤輸出重定向到標準輸出,也就是說正常日誌和錯誤日誌都輸出到cronlog。


推薦閱讀:

如何用數據驅動產品和運營(下)
簡單數據分析和處理實踐(R語言)
2017貴陽大數據及網路安全新產品推介會成功舉辦

TAG:Hive | 脚本 | 大数据分析 |