| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- -- ${bizdate} DAU安全行为累计分五档及当日分享/回流贡献
- -- 得分窗口:${history_start_dt}-${history_end_dt},不包含统计日
- -- S = 有效播放次数 + ${active_weight} * 活跃天数 + 分享次数
- -- + 50 * I(窗口内出现过1067或1095来源场景)
- -- 分位点按${bizdate} DAU用户人数从低分到高分计算,同分用户保持同档。
- WITH dau AS (
- SELECT DISTINCT machinecode AS mid
- FROM loghubods.useractive_log
- WHERE dt = '${bizdate}'
- AND businesstype = 'path'
- AND machinecode IS NOT NULL
- AND machinecode <> ''
- ),
- history_active AS (
- SELECT
- a.machinecode AS mid,
- COUNT(DISTINCT a.dt) AS active_day_cnt
- FROM loghubods.useractive_log a
- JOIN dau d
- ON a.machinecode = d.mid
- WHERE a.dt BETWEEN '${history_start_dt}' AND '${history_end_dt}'
- AND a.businesstype = 'path'
- GROUP BY a.machinecode
- ),
- history_real_play AS (
- SELECT
- p.mid,
- COUNT(*) AS real_play_cnt
- FROM loghubods.video_play_log p
- JOIN dau d
- ON p.mid = d.mid
- WHERE p.dt BETWEEN '${history_start_dt}' AND '${history_end_dt}'
- AND p.businesstype = 'videoRealPlay'
- GROUP BY p.mid
- ),
- history_share AS (
- SELECT
- v.mid,
- COUNT(*) AS share_cnt
- FROM loghubods.video_action_log_applet v
- JOIN dau d
- ON v.mid = d.mid
- WHERE v.dt BETWEEN '${history_start_dt}' AND '${history_end_dt}'
- AND v.business = 'videoShareFriend'
- AND v.businesstype = 'videoShareFriend'
- GROUP BY v.mid
- ),
- history_paid_source AS (
- SELECT
- s.machinecode AS mid,
- 1 AS has_paid_source
- FROM loghubods.user_share_log s
- JOIN dau d
- ON s.machinecode = d.mid
- WHERE s.dt BETWEEN '${history_start_dt}' AND '${history_end_dt}'
- AND s.topic = 'click'
- AND s.hotsencetype IN ('1067', '1095')
- GROUP BY s.machinecode
- ),
- user_score AS (
- SELECT
- d.mid,
- COALESCE(p.real_play_cnt, 0) AS real_play_cnt,
- COALESCE(a.active_day_cnt, 0) AS active_day_cnt,
- COALESCE(s.share_cnt, 0) AS history_share_cnt,
- COALESCE(x.has_paid_source, 0) AS has_paid_source,
- COALESCE(p.real_play_cnt, 0)
- + ${active_weight} * COALESCE(a.active_day_cnt, 0)
- + COALESCE(s.share_cnt, 0)
- + CASE WHEN COALESCE(x.has_paid_source, 0) = 1 THEN 50 ELSE 0 END
- AS safety_score
- FROM dau d
- LEFT JOIN history_active a
- ON d.mid = a.mid
- LEFT JOIN history_real_play p
- ON d.mid = p.mid
- LEFT JOIN history_share s
- ON d.mid = s.mid
- LEFT JOIN history_paid_source x
- ON d.mid = x.mid
- ),
- score_counts AS (
- SELECT safety_score, COUNT(*) AS score_uv
- FROM user_score
- GROUP BY safety_score
- ),
- score_cumulative AS (
- SELECT
- safety_score,
- score_uv,
- SUM(score_uv) OVER (
- ORDER BY safety_score
- ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- ) AS cumulative_uv,
- SUM(score_uv) OVER () AS total_uv
- FROM score_counts
- ),
- thresholds AS (
- SELECT
- MIN(CASE WHEN cumulative_uv >= total_uv * 0.20 THEN safety_score END) AS p20_score,
- MIN(CASE WHEN cumulative_uv >= total_uv * 0.40 THEN safety_score END) AS p40_score,
- MIN(CASE WHEN cumulative_uv >= total_uv * 0.60 THEN safety_score END) AS p60_score,
- MIN(CASE WHEN cumulative_uv >= total_uv * 0.80 THEN safety_score END) AS p80_score,
- MAX(total_uv) AS total_dau
- FROM score_cumulative
- ),
- scored_dau AS (
- SELECT
- u.*,
- CASE
- WHEN u.safety_score > t.p80_score THEN 1
- WHEN u.safety_score > t.p60_score THEN 2
- WHEN u.safety_score > t.p40_score THEN 3
- WHEN u.safety_score > t.p20_score THEN 4
- ELSE 5
- END AS band_order
- FROM user_score u
- CROSS JOIN thresholds t
- ),
- score_bands AS (
- SELECT 1 AS band_order, '安全得分头部20%' AS quantile_band
- UNION ALL
- SELECT 2 AS band_order, '安全得分20%-40%' AS quantile_band
- UNION ALL
- SELECT 3 AS band_order, '安全得分40%-60%' AS quantile_band
- UNION ALL
- SELECT 4 AS band_order, '安全得分60%-80%' AS quantile_band
- UNION ALL
- SELECT 5 AS band_order, '安全得分尾部20%' AS quantile_band
- ),
- daily_share_by_mid AS (
- SELECT
- v.mid,
- COUNT(*) AS share_cnt
- FROM loghubods.video_action_log_applet v
- JOIN dau d
- ON v.mid = d.mid
- WHERE v.dt = '${bizdate}'
- AND v.business = 'videoShareFriend'
- AND v.businesstype = 'videoShareFriend'
- GROUP BY v.mid
- ),
- daily_ad_exposure_mids AS (
- SELECT DISTINCT
- a.machinecode AS mid
- FROM loghubods.ad_action_log_own a
- JOIN dau d
- ON a.machinecode = d.mid
- WHERE a.dt = '${bizdate}'
- AND a.businesstype = 'adView'
- AND a.ownAdSystemType = 'ownPlatform'
- ),
- daily_ad_click_events AS (
- SELECT DISTINCT
- a.machinecode AS mid,
- a.pqtid
- FROM loghubods.ad_action_log_own a
- JOIN dau d
- ON a.machinecode = d.mid
- WHERE a.dt = '${bizdate}'
- AND a.businesstype = 'adClick'
- AND a.ownAdSystemType = 'ownPlatform'
- ),
- daily_ad_click_mids AS (
- SELECT DISTINCT mid
- FROM daily_ad_click_events
- ),
- daily_conversion_pqtids AS (
- SELECT DISTINCT pqtid
- FROM loghubods.ad_own_open_conv
- WHERE dt = '${bizdate}'
- AND pqtid IS NOT NULL
- AND pqtid <> ''
- ),
- daily_converted_mids AS (
- SELECT DISTINCT c.mid
- FROM daily_ad_click_events c
- JOIN daily_conversion_pqtids o
- ON c.pqtid = o.pqtid
- WHERE c.pqtid IS NOT NULL
- AND c.pqtid <> ''
- ),
- band_user_metrics AS (
- SELECT
- u.band_order,
- COUNT(*) AS visit_uv,
- SUM(COALESCE(s.share_cnt, 0)) AS band_share_cnt,
- SUM(CASE WHEN e.mid IS NULL THEN 1 ELSE 0 END) AS no_ad_exposure_uv,
- SUM(CASE WHEN c.mid IS NOT NULL THEN 1 ELSE 0 END) AS ad_click_uv,
- SUM(CASE WHEN x.mid IS NOT NULL THEN 1 ELSE 0 END) AS converted_uv
- FROM scored_dau u
- LEFT JOIN daily_share_by_mid s
- ON u.mid = s.mid
- LEFT JOIN daily_ad_exposure_mids e
- ON u.mid = e.mid
- LEFT JOIN daily_ad_click_mids c
- ON u.mid = c.mid
- LEFT JOIN daily_converted_mids x
- ON u.mid = x.mid
- GROUP BY u.band_order
- ),
- daily_clicks AS (
- SELECT
- shareid,
- machinecode AS return_mid
- FROM loghubods.user_share_log
- WHERE dt = '${bizdate}'
- AND topic = 'click'
- AND shareid IS NOT NULL
- AND shareid <> ''
- AND machinecode IS NOT NULL
- AND machinecode <> ''
- ),
- daily_source_shares AS (
- SELECT DISTINCT
- s.shareid,
- u.band_order
- FROM loghubods.user_share_log s
- JOIN scored_dau u
- ON s.machinecode = u.mid
- WHERE s.dt = '${bizdate}'
- AND s.topic = 'share'
- AND s.shareid IS NOT NULL
- AND s.shareid <> ''
- ),
- band_share_return AS (
- SELECT
- s.band_order,
- COUNT(DISTINCT c.return_mid) AS band_same_day_share_return_uv
- FROM daily_source_shares s
- JOIN daily_clicks c
- ON s.shareid = c.shareid
- GROUP BY s.band_order
- ),
- daily_totals AS (
- SELECT
- (SELECT COUNT(*) FROM dau) AS total_dau,
- (SELECT COALESCE(SUM(share_cnt), 0) FROM daily_share_by_mid) AS total_share_cnt,
- (SELECT COUNT(DISTINCT return_mid) FROM daily_clicks) AS total_return_uv,
- (
- SELECT COUNT(*)
- FROM dau d
- LEFT JOIN daily_ad_exposure_mids e
- ON d.mid = e.mid
- WHERE e.mid IS NULL
- ) AS total_no_ad_exposure_uv,
- (SELECT COUNT(*) FROM daily_ad_click_mids) AS total_ad_click_uv,
- (SELECT COUNT(*) FROM daily_converted_mids) AS total_converted_uv,
- (
- SELECT COUNT(DISTINCT c.return_mid)
- FROM daily_source_shares s
- JOIN daily_clicks c
- ON s.shareid = c.shareid
- ) AS total_same_day_share_return_uv
- )
- SELECT
- '${bizdate}' AS dt,
- b.quantile_band AS `安全分分位点`,
- CASE
- WHEN b.band_order = 1 THEN CONCAT('S > ', CAST(t.p80_score AS STRING))
- WHEN b.band_order = 2 THEN CONCAT(
- CAST(t.p60_score AS STRING), ' < S <= ', CAST(t.p80_score AS STRING)
- )
- WHEN b.band_order = 3 THEN CONCAT(
- CAST(t.p40_score AS STRING), ' < S <= ', CAST(t.p60_score AS STRING)
- )
- WHEN b.band_order = 4 THEN CONCAT(
- CAST(t.p20_score AS STRING), ' < S <= ', CAST(t.p40_score AS STRING)
- )
- ELSE CONCAT('S <= ', CAST(t.p20_score AS STRING))
- END AS score,
- t.p20_score AS p20_score,
- t.p40_score AS p40_score,
- t.p60_score AS p60_score,
- t.p80_score AS p80_score,
- d.total_dau AS `DAU(当天日活总数)`,
- COALESCE(m.visit_uv, 0) AS `访问UV(每个分位点对应人数)`,
- COALESCE(m.visit_uv, 0) * 1.0 / NULLIF(d.total_dau, 0) AS `访问UV占比`,
- d.total_share_cnt AS `当日总分享次数`,
- COALESCE(m.band_share_cnt, 0) AS `分享次数(每个分位点对应次数)`,
- d.total_return_uv AS `当日总回流`,
- COALESCE(m.band_share_cnt, 0) * 1.0 / NULLIF(d.total_share_cnt, 0) AS `分享次数占比`,
- d.total_same_day_share_return_uv AS `当日分享当日回流总人数`,
- COALESCE(r.band_same_day_share_return_uv, 0) AS `当日分享当日回流(各分位点人数)`,
- COALESCE(r.band_same_day_share_return_uv, 0) * 1.0
- / NULLIF(d.total_same_day_share_return_uv, 0) AS `当日分享当日回流人数占比`,
- d.total_no_ad_exposure_uv AS `总广告无曝光人数`,
- COALESCE(m.no_ad_exposure_uv, 0) AS `无广告曝光人数`,
- COALESCE(m.no_ad_exposure_uv, 0) * 1.0
- / NULLIF(d.total_no_ad_exposure_uv, 0) AS `无广告曝光人数占比`,
- d.total_ad_click_uv AS `总点击人数`,
- COALESCE(m.ad_click_uv, 0) AS `点击人数`,
- COALESCE(m.ad_click_uv, 0) * 1.0
- / NULLIF(d.total_ad_click_uv, 0) AS `点击人数占比`,
- d.total_converted_uv AS `总已转化人数`,
- COALESCE(m.converted_uv, 0) AS `已转化人数`,
- COALESCE(m.converted_uv, 0) * 1.0
- / NULLIF(d.total_converted_uv, 0) AS `已转化人数占比`
- FROM score_bands b
- CROSS JOIN thresholds t
- CROSS JOIN daily_totals d
- LEFT JOIN band_user_metrics m
- ON b.band_order = m.band_order
- LEFT JOIN band_share_return r
- ON b.band_order = r.band_order
- ORDER BY b.band_order;
|