作為一名數(shù)據(jù)分析師,日?qǐng)?bào)、周報(bào)、月報(bào)數(shù)據(jù)一個(gè)也不能少。 相應(yīng)的, 就要在數(shù)據(jù)庫(kù)中提取大量的數(shù)據(jù), 并處理大量的Excel表格。
自己在工作中使用的最多的就是Hive-SQL查詢語(yǔ)句,很多時(shí)候,每天的運(yùn)行的SQL語(yǔ)句只需要改個(gè)日期即可。 但如果你每一天都要對(duì)每條SQL語(yǔ)句改日期, 然后再把每條SQL語(yǔ)句粘貼到數(shù)據(jù)庫(kù)中跑的話, 會(huì)特別的費(fèi)時(shí)耗力。 我們可以寫(xiě)個(gè)簡(jiǎn)單的Python腳本, 這樣每次運(yùn)行前只需要改一次日期,就可以將所有SQL語(yǔ)句運(yùn)行一遍, 大大提高工作效率。
1. 首先, 用Python連接數(shù)據(jù)庫(kù)
對(duì)于數(shù)據(jù)庫(kù)的ip地址,用戶名,密碼等, 如果不清楚,或數(shù)據(jù)庫(kù)連接不上, 需要和開(kāi)發(fā)人員對(duì)接
from pyhive import hive
import time
conn = hive.Connection(host='ip地址', port=10000, username='用戶名', database = 'default', auth='NOSASL')
cursor = conn.cursor()
2. 設(shè)置開(kāi)始和結(jié)束時(shí)間
這樣只要sql語(yǔ)句不變, 我們跑sql時(shí), 只需要改日期即可。
startdate = '2018-09-01'
enddate = '2018-09-19'
3. 用Python中的format函數(shù)將日期傳入{}中
python中寫(xiě)sql腳本時(shí), 需要用\來(lái)進(jìn)行換行符的轉(zhuǎn)換, \后面不能有空格。
日期用兩個(gè){}來(lái)代替, 用format函數(shù)將開(kāi)始日期與結(jié)束日期傳入
# 提取積分類uv,pv數(shù)據(jù)
sql_jifenxinxi_an = 'select \
count(distinct user_account) as uv, \
count(1) as pv \
from \
computer_view.client_android_log_view \
where \
hit_date between "{}" and "{}" \
and \
(btn_position like "服務(wù)-查詢-積分信息%" \
or \
btn_home = "積分-扇形左" \
) \
limit 1000'.format(startdate,enddate)
cursor.execute(sql_jifenxinxi_an)
print(cursor.fetchall())
我們可以按照這個(gè)格式寫(xiě)工作中需要運(yùn)行的多個(gè)SQL語(yǔ)句。 這樣, 當(dāng)腳本運(yùn)行的時(shí)候, 我們可以騰出時(shí)間來(lái)去干其他工作, 等過(guò)一段時(shí)間,所有的SQL語(yǔ)句都跑完了, 我們?cè)龠M(jìn)行統(tǒng)一的整理。