業務拉鍊表的展開場景及方案

比如,廣告投放計劃表,原主題表及業務表都是某個用戶投放某個廣告從哪一天開始到哪一天結束。
現在需求是,統計近一個月的廣告投放預算。這就需要先把拉鍊給展開,然後進行彙總統計。
當然,也可以根據一個月內每一個用戶的實際投放天數乘以它的每日投放預算得出,但這樣就有一些複雜邏輯判斷,比較麻煩,也不是不行。

主題表結構:

CREATE TABLE  `dwt.dwt_seller_promotion_marketing_ad_plan_full_1d`(
    `id`                                 bigint         COMMENT 'id',
    `userinfo_id`                        bigint         COMMENT '用戶id',
    `title`                              string         COMMENT '標題',
    `start_date`                         timestamp      COMMENT '計劃開始日期',
    `end_date`                           timestamp      COMMENT '計劃結束日期',
    `start_hour`                         bigint         COMMENT '開始小時',
    `end_hour`                           bigint         COMMENT '結束小時',
    `plan_code`                          string         COMMENT '計劃編號',
    `is_long`                            bigint         COMMENT '1:長期投放',
    `bid`                                bigint         COMMENT '出價,單位分',
    `budget`                             bigint         COMMENT '每日預算',
    `spend`                              bigint         COMMENT '累計花費',
    `plan_status`                        bigint         COMMENT '開關1開0關',
    `sale_uris`                          string         COMMENT '拍品uri',
    `create_time`                        timestamp      COMMENT '創建時間',
    `update_time`                        timestamp      COMMENT '更新時間',
    `spend_update_time`                  timestamp      COMMENT '花費更新時間',
    `ad_type`                            bigint         COMMENT '推廣類型,1:拍品推廣2:直播推廣' 
) COMMENT '紅竹廣告計劃表' PARTITIONED BY (dt string)  stored as orc tblproperties ("orc.compress"="snappy");

數據查詢示例:

hive> select id,userinfo_id,title,start_date,end_date
    > from dwt_seller_promotion_marketing_ad_plan_full_1d
    > where dt='2020-04-08'
    > limit 13;
OK
10018   21747925        名家書法        2018-08-02 00:00:00     2018-08-03 00:00:00
10036   7150092 信札手記        2018-08-02 00:00:00     2022-08-02 00:00:00
10054   5017    南紅瑪瑙        2018-08-16 00:00:00     2018-08-16 00:00:00
10072   16277406        中國四大奇      2018-08-08 00:00:00     2018-08-09 00:00:00
10090   25791243        A計劃   2019-04-16 00:00:00     2023-04-16 00:00:00
10117   517174  內蒙戈壁碧玉老皮畫面景觀        2018-08-03 00:00:00     2022-08-03 00:00:00
10135   223270  大福源  2019-10-17 00:00:00     2023-10-17 00:00:00
1016    16335732        書畫篆刻29-28日 2018-07-06 00:00:00     2018-09-05 00:00:00
10216   28486278        紫檀大紅酸枝    2018-08-04 00:00:00     2022-08-04 00:00:00
10234   26659798        和田玉0806      2018-08-05 00:00:00     2022-08-05 00:00:00
10289   7507311 國畫葡萄        2018-08-05 00:00:00     2018-09-04 00:00:00
10315   14181722        試推1   2018-09-04 00:00:00     2022-09-04 00:00:00
10333   6363384 2018    2019-05-07 00:00:00     2023-05-07 00:00:00
Time taken: 0.161 seconds, Fetched: 13 row(s)

解鏈方法:

1、找出一天滿足條件的數據,然後批量跑出數據

hive> select id,userinfo_id,title,start_date,end_date
    > from dwt_seller_promotion_marketing_ad_plan_full_1d
    > where dt='2020-04-08'
    >   and start_date<='2020-04-08' and end_date>='2020-04-08'
    > limit 13;
OK
10036   7150092 信札手記        2018-08-02 00:00:00     2022-08-02 00:00:00
10090   25791243        A計劃   2019-04-16 00:00:00     2023-04-16 00:00:00
10117   517174  內蒙戈壁碧玉老皮畫面景觀        2018-08-03 00:00:00     2022-08-03 00:00:00
10135   223270  大福源  2019-10-17 00:00:00     2023-10-17 00:00:00
10216   28486278        紫檀大紅酸枝    2018-08-04 00:00:00     2022-08-04 00:00:00
10234   26659798        和田玉0806      2018-08-05 00:00:00     2022-08-05 00:00:00
10315   14181722        試推1   2018-09-04 00:00:00     2022-09-04 00:00:00
10333   6363384 2018    2019-05-07 00:00:00     2023-05-07 00:00:00
10414   16159599        奇石20180807    2018-08-07 00:00:00     2022-08-07 00:00:00
10487   7222085 錢幣    2018-08-09 00:00:00     2022-08-09 00:00:00
10531   2084333 七天衝  2018-09-09 00:00:00     2022-09-09 00:00:00
10685   28767180        推廣    2018-08-10 00:00:00     2022-08-10 00:00:00
10711   430571  宣紙    2018-08-10 00:00:00     2022-08-10 00:00:00
Time taken: 0.151 seconds, Fetched: 13 row(s)
hive> 

然後,將【2020-04-08】替換成日期參數,進行數據跑批得出全量每日滿足條件數據。


2、通過UDF函數將日期範圍變成List

自己寫udf函數,能實現將日期範圍轉換成日期範圍內的日期列表;然後通過[explode_lateral_view LATERAL VIEW explode(split(列,','))]將數據展開。

3、通過Java或Python寫代碼將拉鍊展開

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章