在鞋廠的第一個任務,拆表。需要把訂單表按照開始日期和結束日期拆分成多條記錄,挺新鮮的~ transform方式,使用到了python。 (1)把hive表的數據傳入,通過python按照日期迴圈處理,返回多條記錄。 (2)生成序列表,然後採用cross join的方式,在hive端生成多條記錄,再根 ...
在鞋廠的第一個任務,拆表。需要把訂單表按照開始日期和結束日期拆分成多條記錄,挺新鮮的~
transform方式,使用到了python。
(1)把hive表的數據傳入,通過python按照日期迴圈處理,返回多條記錄。
(2)生成序列表,然後採用cross join的方式,在hive端生成多條記錄,再根據日期和序列進行處理。
udf方式,更容易操作,我個人習慣使用Java。udf傳入開始日期和結束日期,返回時間範圍的數組。
再通過lateral view的方式處理。
另外,針對這個需求,對比了crossjoin的方式(用python先生成序列表)和udf:
(1)效率:序列表為1-100的情況,執行時間28分鐘,序列表1000情況,調度卡住;
udf計算日誌一個分區全量情況,執行時間20分鐘,剔除無效數據後,執行時間約4分鐘。
(2)udf不需要做寫操作,減少了存儲使用。
(3)使用udf,sql代碼量少,且具有通用性。