最近在參與某toB項目,數據需離線統計出並推送至線上業務庫,其中用hive做的離線分析。總結寫下常見問題及心得吧。
一.流程類工作簡介:數據統計工作主要分爲四個步驟:指標統計、批量腳本、數據格式、異常流程;
step1. 指標統計:通過創建表存儲每個指標的值,例如用hive表loan_apply_rate存儲申請通過率;複雜度在於:指標值多,且指標定義可能不明確;
step2. 批量腳本:將step1創建的各張表綜合成批量執行的perl腳本;複雜度在於:若執行時間長,會影響業務方使用,可自行迭代出大小適中的perl腳本;
step3.數據格式:新建一張總表,該表存儲所有的指標值;並且將step2生成的錶轉化成業務方期望的數據格式。示例如下:
step4.異常流程:包括批量腳本父子任務執行順序異常,今日統計的數據異常時數據回滾或重新統計等,數據去重以及數據備份等;
二.hive統計遇到的問題和常見函數
1.指定爲月末:兩種方案:
1.1.case
when split(statistics_date,'-')[1] in ('1','3','5','7','8','10','12') then concat(statistics_date,'-31')
when split(statistics_date,'-')[1] in ('4','6','9','11') then concat(statistics_date,'-30')
when cast(split(statistics_date,'-')[0] as int)%4=0 and split(statistics_date,'-')[1] in ('2') then concat(statistics_date,'-29')
when cast(split(statistics_date,'-')[0] as int)%4!=0 and split(statistics_date,'-')[1] in ('2') then concat(statistics_date,'-28')
end as new_statistics_date
1.2. date_sub(concat(substr(concat(substr(created_date, 1, 7), '-01'), 1, 7), '-01'), 1)