一個簡單的自動數據報表腳本
所以這個自動數據報表可以拆分成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。
推薦閱讀: