| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- -- 分 apptype × 尾号 × 内外 × 来源大类 × 回流天数 × 微信场景 × AB 实验 DAU
- -- 基于 useractive_log 单表,无 JOIN
- --
- -- 7 个维度(含 dt),核心是 user_class 6 分类 + share_age_bucket 回流时长
- -- GROUPING SETS 精选了 8 组常用切片(不是全组合,避免行数爆炸)
- --
- -- 来源大类 user_class:
- -- A_外部投放拉来 : 本次被外部投放素材拉来(shareId 是 GUID 格式)
- -- B_用户分享_链根外部 : 被用户分享拉来 + 链根来自外部投放
- -- C_用户分享_链根内部 : 被用户分享拉来 + 链根是自然打开用户
- -- D_主动回流(外部血统) : 本次主动启动 + 有外部回流残留
- -- E_主动回流(分享残留) : 本次主动启动 + 仅有分享残留
- -- F_纯主动 : 真正凭记忆主动打开
- --
- -- 回流天数 share_age_bucket(仅对 B/C 有意义):
- -- d0 当天 / d1 1天前 / d2_7 2-7天前 / d8_30 8-30天前 / d30plus >30天前
- WITH t_base AS
- (
- SELECT dt
- ,apptype
- ,machinecode
- ,sessionid
- ,subsessionid
- ,clienttimestamp
- ,sencetype
- ,params
- ,GET_JSON_OBJECT(extparams,'$.rootSessionId') AS rsid
- ,GET_JSON_OBJECT(extparams,'$.rootSourceId') AS rscid
- ,GET_JSON_OBJECT(extparams,'$.eventInfos.ab_test003') AS ab003
- ,SPLIT_PART(SPLIT_PART(params, 'shareId=', 2), '&', 1) AS share_id
- FROM loghubods.useractive_log
- WHERE dt = "${dt}"
- AND businesstype = 'path'
- AND GET_JSON_OBJECT(extparams,'$.rootSessionId') IS NOT NULL
- AND GET_JSON_OBJECT(extparams,'$.rootSessionId') <> ''
- ),
- t_derived AS
- (
- SELECT dt
- ,apptype
- ,machinecode
- ,COALESCE(ab003, 'unknown') AS ab003
- ,SUBSTR(rsid, LENGTH(rsid), 1) AS suffix
- -- 内/外二分(保留原口径,跟旧 SQL 对齐)
- ,CASE
- WHEN rscid IS NOT NULL AND rscid <> '' THEN '外部'
- ELSE '内部'
- END AS source_type
- -- 微信场景大类(避免 cardinality 爆炸,归 6 类)
- ,CASE sencetype
- WHEN '1007' THEN '1007_单聊'
- WHEN '1008' THEN '1008_群聊'
- WHEN '1014' THEN '1014_朋友圈'
- WHEN '1044' THEN '1044_群消息卡片'
- WHEN '1154' THEN '1154_视频号'
- WHEN '1001' THEN '1001_主入口'
- ELSE 'other'
- END AS scene_grp
- -- 投放渠道前缀(rootSourceId 不为空时才有意义)
- ,CASE
- WHEN rscid LIKE 'touliu_tencent%' THEN 'ch_touliu_tencent'
- WHEN rscid LIKE 'dyyqw_%' THEN 'ch_dyyqw'
- WHEN rscid LIKE 'dyyjs_%' THEN 'ch_dyyjs'
- WHEN rscid LIKE '%GzhArticle%'
- OR rscid LIKE 'DaiTou_gh_%' THEN 'ch_gzh_article'
- WHEN rscid IS NULL OR rscid = '' THEN 'ch_none'
- ELSE 'ch_other'
- END AS channel
- -- 用户来源 6 分类
- ,CASE
- -- 本次被外部投放拉来(shareId GUID 格式)
- WHEN params LIKE '%shareId=%'
- AND NOT (SUBSTR(share_id, LENGTH(share_id) - INSTR(REVERSE(share_id),'-') + 2)
- RLIKE '^[0-9]{13}$')
- THEN 'A_外部投放拉来'
- -- 本次被用户分享拉来 + 链根外部
- WHEN params LIKE '%shareId=%'
- AND (rscid IS NOT NULL AND rscid <> '')
- THEN 'B_用户分享_链根外部'
- -- 本次被用户分享拉来 + 链根内部
- WHEN params LIKE '%shareId=%'
- THEN 'C_用户分享_链根内部'
- -- 主动启动 + 有外部回流残留
- WHEN rscid IS NOT NULL AND rscid <> ''
- THEN 'D_主动回流_外部血统'
- -- 主动启动 + 有分享残留
- WHEN rsid <> sessionid AND rsid <> subsessionid
- THEN 'E_主动回流_分享残留'
- ELSE 'F_纯主动'
- END AS user_class
- -- 回流天数(仅 shareId 有时间戳时计算)
- ,CASE
- WHEN params LIKE '%shareId=%'
- AND (SUBSTR(share_id, LENGTH(share_id) - INSTR(REVERSE(share_id),'-') + 2)
- RLIKE '^[0-9]{13}$')
- THEN
- CAST((CAST(clienttimestamp AS BIGINT) + 28800000) / 86400000 AS BIGINT)
- - CAST((CAST(SUBSTR(share_id, LENGTH(share_id) - INSTR(REVERSE(share_id),'-') + 2)
- AS BIGINT) + 28800000) / 86400000 AS BIGINT)
- ELSE NULL
- END AS days_diff
- FROM t_base
- ),
- t_final AS
- (
- SELECT dt, apptype, machinecode, ab003, suffix, source_type, scene_grp, channel, user_class
- ,CASE
- WHEN days_diff IS NULL THEN 'na' -- 非分享回流
- WHEN days_diff <= 0 THEN 'd0_当天'
- WHEN days_diff = 1 THEN 'd1_1天前'
- WHEN days_diff BETWEEN 2 AND 7 THEN 'd2_7_一周内'
- WHEN days_diff BETWEEN 8 AND 30 THEN 'd8_30_一月内'
- ELSE 'd30plus_长尾'
- END AS share_age_bucket
- FROM t_derived
- )
- SELECT dt
- ,COALESCE(apptype, 'ALL') AS apptype
- ,COALESCE(user_class, 'ALL') AS user_class
- ,COALESCE(source_type, 'ALL') AS source_type
- ,COALESCE(suffix, 'ALL') AS suffix
- ,COALESCE(scene_grp, 'ALL') AS scene_grp
- ,COALESCE(channel, 'ALL') AS channel
- ,COALESCE(ab003, 'ALL') AS ab003
- ,COALESCE(share_age_bucket, 'ALL') AS share_age_bucket
- ,COUNT(DISTINCT machinecode) AS dau
- FROM t_final
- GROUP BY dt, apptype, user_class, source_type, suffix, scene_grp, channel, ab003, share_age_bucket
- GROUPING SETS (
- -- ① 大盘日总量
- (dt),
- -- ② 大盘 × 来源(最常看)
- (dt, user_class),
- (dt, source_type),
- -- ③ 大盘 × 来源 × 回流时长(衰减曲线)
- (dt, user_class, share_age_bucket),
- -- ④ 分 apptype 全量 + 分 apptype × 来源
- (dt, apptype),
- (dt, apptype, user_class),
- (dt, apptype, source_type),
- -- ⑤ 尾号实验维度(保留原 SQL 的核心切片)
- (dt, apptype, suffix),
- (dt, apptype, suffix, source_type),
- -- ⑥ 尾号 × AB 实验(验证两套实验体系)
- (dt, suffix, ab003),
- -- ⑦ 微信场景拆分
- (dt, scene_grp),
- (dt, apptype, scene_grp, user_class),
- -- ⑧ 投放渠道拆分
- (dt, channel, user_class),
- (dt, apptype, channel)
- )
|