소스 검색

refactor(ads): 拼团漏斗拆 _daily(增量) + _rolling(覆盖) 两表

按同步 PG 的更新周期拆表(对齐 kb/26 §1.3):昨日逐日增量累积喂趋势;
近7/30天每日 INSERT OVERWRITE 覆盖最新(窗口去重无法由日 UV 加工,须独立
distinct,历史可从 ods 重算 MVP 不留)。一份 SQL 两 INSERT;DS funnel 任务
-f 路径/参数不变,无需改工作流。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 1 개월 전
부모
커밋
1e5db9cc42
2개의 변경된 파일56개의 추가작업 그리고 36개의 파일을 삭제
  1. 24 13
      jobs/ads/trd/ads_trd_group_funnel.sql
  2. 32 23
      manual/ddl/ads/trd/ads_trd_group_funnel_create.sql

+ 24 - 13
jobs/ads/trd/ads_trd_group_funnel.sql

@@ -1,19 +1,30 @@
 -- 作者:tianyu.chu
--- 日期:2026-06-21
+-- 日期:2026-06-21(2026-06-23 拆表重构)
 -- 工单:(无)
--- 目的:拼团转化漏斗,单 ${dt} 快照,扫近30天一次条件聚合出 1d/7d/30d 三窗口,写 dt=${dt}
--- 口径:登录用户(user_id 非空非'0');每窗口独立 distinct UV(聚合UV 非路径,层间为近似);
---       成功=GroupPayOrderConfirm 且 paymentCallBack='Y';dt=yyyyMMdd(埋点沿用文件日8位)
--- 参数:${dt} 快照日;${d7}=dt-6、${d30}=dt-29(均含两端,共 7/30 天);
---       分区裁剪靠 WHERE 的 '${d30}' 字面量(DS 调度用 $[yyyyMMdd-6]/$[yyyyMMdd-29] 传)
-INSERT OVERWRITE TABLE ads.ads_trd_group_funnel PARTITION (dt = '${dt}')
+-- 目的:拼团转化漏斗,单 ${dt} 快照写两表:① _daily 当日(增量分区) ② _rolling 近7/30天(覆盖整表)
+-- 口径:登录用户(user_id 非空非'0');每窗口独立 distinct UV(窗口去重无法由日 UV 加工,故各自 COUNT DISTINCT);
+--       成功=GroupPayOrderConfirm 且 paymentCallBack='Y';dt=yyyyMMdd
+-- 参数:${dt} 快照日;${d7}=dt-6、${d30}=dt-29(均含两端 7/30 天);
+--       分区裁剪靠 WHERE 字面量(DS 调度用 ${dt}/$[yyyyMMdd-6]/$[yyyyMMdd-29] 传)
+
+-- ① 昨日逐日:增量写 dt=${dt} 单分区
+INSERT OVERWRITE TABLE ads.ads_trd_group_funnel_daily PARTITION (dt = '${dt}')
 SELECT
-    COUNT(DISTINCT CASE WHEN dt =  '${dt}' AND event_name = '$AppStart'            THEN user_id END) AS uv_start_1d,
-    COUNT(DISTINCT CASE WHEN dt =  '${dt}' AND event_name = 'GroupShow'            THEN user_id END) AS uv_show_1d,
-    COUNT(DISTINCT CASE WHEN dt =  '${dt}' AND event_name = 'ClickGroup'           THEN user_id END) AS uv_detail_1d,
-    COUNT(DISTINCT CASE WHEN dt =  '${dt}' AND event_name = 'GroupPayOrderConfirm' THEN user_id END) AS uv_order_1d,
-    COUNT(DISTINCT CASE WHEN dt =  '${dt}' AND event_name = 'GroupPayOrderConfirm'
-                         AND get_json_object(params_json, '$.paymentCallBack') = 'Y' THEN user_id END) AS uv_paid_1d,
+    COUNT(DISTINCT CASE WHEN event_name = '$AppStart'            THEN user_id END) AS uv_start,
+    COUNT(DISTINCT CASE WHEN event_name = 'GroupShow'            THEN user_id END) AS uv_show,
+    COUNT(DISTINCT CASE WHEN event_name = 'ClickGroup'           THEN user_id END) AS uv_detail,
+    COUNT(DISTINCT CASE WHEN event_name = 'GroupPayOrderConfirm' THEN user_id END) AS uv_order,
+    COUNT(DISTINCT CASE WHEN event_name = 'GroupPayOrderConfirm'
+                         AND get_json_object(params_json, '$.paymentCallBack') = 'Y' THEN user_id END) AS uv_paid,
+    current_timestamp() AS etl_time
+FROM ods.ods_usr_traces_apd_d
+WHERE dt = '${dt}'
+  AND user_id IS NOT NULL AND user_id <> '0';
+
+-- ② 近7/30天:覆盖整表,只留最新 1 行(as-of ${dt})
+INSERT OVERWRITE TABLE ads.ads_trd_group_funnel_rolling
+SELECT
+    '${dt}' AS dt,
     COUNT(DISTINCT CASE WHEN dt >= '${d7}' AND event_name = '$AppStart'            THEN user_id END) AS uv_start_7d,
     COUNT(DISTINCT CASE WHEN dt >= '${d7}' AND event_name = 'GroupShow'            THEN user_id END) AS uv_show_7d,
     COUNT(DISTINCT CASE WHEN dt >= '${d7}' AND event_name = 'ClickGroup'           THEN user_id END) AS uv_detail_7d,

+ 32 - 23
manual/ddl/ads/trd/ads_trd_group_funnel_create.sql

@@ -1,29 +1,38 @@
 -- 作者:tianyu.chu
--- 日期:2026-06-21
+-- 日期:2026-06-21(2026-06-23 拆表重构)
 -- 工单:(无)
--- 目的:拼团转化漏斗 ADS 报表(启动→曝光→详情→下单→成功),1d/7d/30d 三窗口
--- 备注:ADS 应用层首表;窗口体现在字段名(kb/40 §3.7),一行一 dt 快照;
---       域取 trd(拼团转化主题),源事件虽为 usr 埋点;聚合 UV 非路径漏斗(层间为近似);
---       下游同步 PG 供看板
+-- 目的:拼团转化漏斗 ADS,按"同步 PG 的更新周期"拆两张宽表(对齐 kb/26 §1.3 按更新周期拆表)
+-- 备注:① _daily   昨日逐日,每日增量 insert 新 dt(历史不可变,累积,喂趋势)
+--       ② _rolling 近7/30天,每日 INSERT OVERWRITE 覆盖最新 1 行(滚动值;窗口去重无法由日 UV 加工,
+--                  必须独立 distinct;历史可从 ods 重算,MVP 不留)
+--       聚合 UV、非路径漏斗(层间近似);登录用户口径;窗口入字段名(kb/40 §3.7)
 CREATE DATABASE IF NOT EXISTS ads;
 
-CREATE TABLE IF NOT EXISTS ads.ads_trd_group_funnel (
-    uv_start_1d   BIGINT    COMMENT '昨日 启动UV($AppStart,登录用户)',
-    uv_show_1d    BIGINT    COMMENT '昨日 曝光UV(GroupShow)',
-    uv_detail_1d  BIGINT    COMMENT '昨日 拼团详情UV(ClickGroup)',
-    uv_order_1d   BIGINT    COMMENT '昨日 下单UV(GroupPayOrderConfirm)',
-    uv_paid_1d    BIGINT    COMMENT '昨日 成功UV(GroupPayOrderConfirm 且 paymentCallBack=Y)',
-    uv_start_7d   BIGINT    COMMENT '近7天 启动UV',
-    uv_show_7d    BIGINT    COMMENT '近7天 曝光UV',
-    uv_detail_7d  BIGINT    COMMENT '近7天 拼团详情UV',
-    uv_order_7d   BIGINT    COMMENT '近7天 下单UV',
-    uv_paid_7d    BIGINT    COMMENT '近7天 成功UV',
-    uv_start_30d  BIGINT    COMMENT '近30天 启动UV',
-    uv_show_30d   BIGINT    COMMENT '近30天 曝光UV',
-    uv_detail_30d BIGINT    COMMENT '近30天 拼团详情UV',
-    uv_order_30d  BIGINT    COMMENT '近30天 下单UV',
-    uv_paid_30d   BIGINT    COMMENT '近30天 成功UV',
-    etl_time      TIMESTAMP COMMENT 'ETL 处理时间'
-) COMMENT '拼团转化漏斗(启动→曝光→详情→下单→成功; 1d/7d/30d; 聚合UV非路径)'
+-- ① 昨日逐日(增量,分区累积)
+CREATE TABLE IF NOT EXISTS ads.ads_trd_group_funnel_daily (
+    uv_start  BIGINT    COMMENT '启动UV($AppStart,登录用户)',
+    uv_show   BIGINT    COMMENT '曝光UV(GroupShow)',
+    uv_detail BIGINT    COMMENT '拼团详情UV(ClickGroup)',
+    uv_order  BIGINT    COMMENT '下单UV(GroupPayOrderConfirm)',
+    uv_paid   BIGINT    COMMENT '成功UV(GroupPayOrderConfirm 且 paymentCallBack=Y)',
+    etl_time  TIMESTAMP COMMENT 'ETL 处理时间'
+) COMMENT '拼团漏斗-昨日(每日增量;聚合UV非路径)'
 PARTITIONED BY (dt STRING)
 STORED AS ORC;
+
+-- ② 近7/30天(覆盖最新,非分区单行)
+CREATE TABLE IF NOT EXISTS ads.ads_trd_group_funnel_rolling (
+    dt           STRING    COMMENT 'as-of 快照日 yyyyMMdd',
+    uv_start_7d  BIGINT    COMMENT '近7天 启动UV',
+    uv_show_7d   BIGINT    COMMENT '近7天 曝光UV',
+    uv_detail_7d BIGINT    COMMENT '近7天 拼团详情UV',
+    uv_order_7d  BIGINT    COMMENT '近7天 下单UV',
+    uv_paid_7d   BIGINT    COMMENT '近7天 成功UV',
+    uv_start_30d  BIGINT   COMMENT '近30天 启动UV',
+    uv_show_30d   BIGINT   COMMENT '近30天 曝光UV',
+    uv_detail_30d BIGINT   COMMENT '近30天 拼团详情UV',
+    uv_order_30d  BIGINT   COMMENT '近30天 下单UV',
+    uv_paid_30d   BIGINT   COMMENT '近30天 成功UV',
+    etl_time     TIMESTAMP COMMENT 'ETL 处理时间'
+) COMMENT '拼团漏斗-近7/30天(每日覆盖最新1行;聚合UV非路径)'
+STORED AS ORC;