data_job/sql/dwd_before/order_df.sql
2025-03-04 10:24:36 +08:00

98 lines
3.6 KiB
SQL

-- 根据游戏汇总订单数据
-- 增量逻辑 由于数据会存在延迟推送或者新游戏接入数据补数据
-- 天:取当天推送的订单数据里面看订单日期有哪些天的订单把那几天的数据拉出来重新汇总统计
-- 月:取当天推送的订单数据里面看订单日期有哪些月的订单把那几天的数据拉出来重新汇总统计
WITH data_tmp AS
(
SELECT t2.relation_id
,t2.product_id prodid
,t2.game_channel_id
,t2.game_identity
,t2.game_platform_id
,t1.ds
FROM ods.ORDER t1
INNER JOIN dim.game_product_relation t2
ON t1.channel_id = t2.game_channel_id
AND t1.game_identity = t2.game_identity
AND t1.platform_id = t2.game_platform_id
WHERE t1.receive_time BETWEEN '${biz-date}' AND '${intra-day}'
GROUP BY t2.relation_id
,t2.product_id
,t2.game_channel_id
,t2.game_identity
,t2.game_platform_id
,t1.ds
)
INSERT INTO dwd.order_df(game_channel_id,game_identity,game_platform_id,order_amount,pay_amount,pay_user_num,ds,ds_type,ds_name)
SELECT t1.game_channel_id
,t1.game_identity
,t1.game_platform_id
,SUM(t2.amount) order_amount
,SUM(t2.pay_amount) pay_amount
,count(distinct t2.user_id) pay_user_num
,t2.ds ds
,'d' ds_type
,'' ds_name
FROM data_tmp t1
INNER JOIN ods.ORDER t2
ON t1.game_channel_id = t2.channel_id
AND t1.game_identity = t2.game_identity
AND t1.game_platform_id = t2.platform_id
and t1.ds=t2.ds
GROUP BY t1.game_channel_id
,t1.game_identity
,t1.game_platform_id
,t2.ds
ON CONFLICT (game_channel_id,game_identity,game_platform_id,ds,ds_type)
DO UPDATE SET order_amount = EXCLUDED.order_amount,pay_amount = EXCLUDED.pay_amount,pay_user_num = EXCLUDED.pay_user_num
;
WITH data_tmp AS
(
SELECT t2.relation_id
,t2.product_id prodid
,t2.game_channel_id
,t2.game_identity
,t2.game_platform_id
,substring(t1.ds,1,6) || '00' min_month
,substring(t1.ds,1,6) || '32' max_month
FROM ods.ORDER t1
INNER JOIN dim.game_product_relation t2
ON t1.channel_id = t2.game_channel_id
AND t1.game_identity = t2.game_identity
AND t1.platform_id = t2.game_platform_id
WHERE t1.receive_time BETWEEN '${biz-date}' AND '${intra-day}'
GROUP BY t2.relation_id
,t2.product_id
,t2.game_channel_id
,t2.game_identity
,t2.game_platform_id
,substring(t1.ds,1,6) || '00'
,substring(t1.ds,1,6) || '32'
)
INSERT INTO dwd.order_df(game_channel_id,game_identity,game_platform_id,order_amount,pay_amount,pay_user_num,ds,ds_type,ds_name)
SELECT t1.game_channel_id
,t1.game_identity
,t1.game_platform_id
,SUM(t2.amount) order_amount
,SUM(t2.pay_amount) pay_amount
,count(distinct t2.user_id) pay_user_num
,substring(t2.ds,1,6) || '00' ds
,'m' ds_type
,'' ds_name
FROM data_tmp t1
INNER JOIN ods.ORDER t2
ON t1.game_channel_id = t2.channel_id
AND t1.game_identity = t2.game_identity
AND t1.game_platform_id = t2.platform_id
AND t1.min_month <t2.ds
AND t1.max_month >t2.ds
GROUP BY t1.game_channel_id
,t1.game_identity
,t1.game_platform_id
,substring(t2.ds,1,6) || '00'
ON CONFLICT (game_channel_id,game_identity,game_platform_id,ds,ds_type)
DO UPDATE SET order_amount = EXCLUDED.order_amount,pay_amount = EXCLUDED.pay_amount,pay_user_num = EXCLUDED.pay_user_num
;