# 实验分桶报表说明 本目录保存 `apptype=4` 的实验分桶报表。实验组为 `rootSessionId` 倒数第四位是 `0`、`1` 的用户,其余 `2-f` 共 14 桶为对照组。 ## 统一统计口径 - 分桶字段:`LOWER(SUBSTR(rootSessionId, LENGTH(rootSessionId) - 3, 1))`,只保留 `0-f`。 - 实验组:尾号 `0`、`1`;对照组:其余 14 个尾号。 - 头部:`pagesource RLIKE 'user-videos-share$'`。 - 推荐:`pagesource RLIKE '(detail|category|recommend)$'`。 - 全部:不限制 `pagesource`。 - 曝光:`businesstype='videoView'`,统计 PV 和去重 `mid` UV。 - 播放:`businesstype='videoPlay'`,统计 PV 和去重 `mid` UV。 - 分享:`businesstype='videoShareFriend'`,统计 PV 和去重 `mid` UV。 - 回流:分享记录与同日 `topic='click'` 记录按 `shareid` 关联,统计去重点击用户 `machinecode` UV。 - STR:分享 PV / 曝光 PV。 - ROV:回流 UV / 曝光 PV。 - 人均指标:曝光、播放、分享 PV 或回流 UV除以同桶 DAU。 - DAU 相对变化:实验组每桶平均 DAU相对对照组每桶平均 DAU的变化率,避免直接比较 2 桶总量和 14 桶总量。 - 每个日期输出 20 行:16 行尾号明细、2 行分组聚合、2 行每桶均值。 - 事实值(DAU、PV、UV)保存为整数;比例列按既有实时报表格式输出。 ## SQL 文件 ### `bucket_source_pv_uv_return_realtime_20260721_apptype4_version1578.sql` 查询 2026-07-21 当天的实时数据,限定 `apptype=4`、`versioncode=1578`。 - DAU:`loghubods.useractive_log_per5min`。 - 曝光、播放、分享:`loghubods.video_action_log_flow`。 - 分享与回流:`loghubods.user_share_log_per5min`。 - 输出粒度:16 个尾号,每个尾号一行原始事实数据。 - 日期、版本和实时表分区条件写在 SQL 中;复用到其他日期或版本时需要同步修改。 ### `bucket_source_pv_uv_return_offline_20260716_20260720_apptype4_all_versions.sql` 查询 2026-07-16 至 2026-07-20 的离线数据,限定 `apptype=4`,不限制版本号。 - DAU:`loghubods.useractive_log`,与实时 SQL 一致,从 `extparams.rootSessionId` 取分桶字段。 - 曝光、播放、分享:`loghubods.video_action_log_applet`。 - 分享与回流:`loghubods.user_share_log`。 - 所有事实按 `dt` 和尾号分别聚合,不跨天去重或合并。 - 原始输出粒度:5 天 × 16 个尾号,共 80 行。 - 输出仍保留版本号字段,统一写为“全部”,以便与限定版本的实时报表对齐。 ### `offline_dau_by_bucket_20260716_20260720_apptype4.sql` 只补查五天离线 DAU,用于事实指标已经查询完成时快速重建报表,避免重复执行完整事实 SQL。 - 数据源:`loghubods.useractive_log`。 - 分桶字段:`GET_JSON_OBJECT(extparams, '$.rootSessionId')` 的倒数第四位。 - 输出粒度:日期 × 16 个尾号,共 80 行。 - 不限制版本号。 ## Python 脚本 ### `run_bucket_source_pv_uv_return_realtime.py` 实时报表执行和格式化脚本。 - 默认执行实时 SQL,将英文字段映射为中文字段。 - 生成尾号明细、实验/对照聚合、实验/对照每桶均值。 - 计算头部、推荐、全部三个场景的人均指标、STR、ROV及相对对照组变化率。 - 输出 `bucket_source_pv_uv_return_realtime_20260721_apptype4_version1578.csv`。 - `python3 run_bucket_source_pv_uv_return_realtime.py --rebuild`:不查询 ODPS,使用现有 CSV 重新计算比率列及列顺序。 ### `run_bucket_source_offline_5day_report.py` 五天离线报表执行和格式化脚本,复用实时脚本的字段映射、公式和列顺序,保证离线 CSV 与实时 CSV 完全同构。 - 默认执行完整离线 SQL,并按日期分别生成每天 20 行的结果。 - 输出按日期倒序排列,共 100 行。 - 版本号列保留并统一写为“全部”。 - 输出 `bucket_source_full_report_offline_20260716_20260720_apptype4_all_versions.csv`。 - `python3 run_bucket_source_offline_5day_report.py --rebuild-with-dau`:保留现有 CSV 中的曝光、播放、分享、回流事实,只执行 DAU 补查 SQL,再重新生成聚合、均值、比率和变化率。使用此模式前必须已有包含 80 行尾号明细的离线 CSV。 两个脚本都依赖 `pandas` 以及本地运行环境提供的 `odps_module.ODPSClient`。包含访问凭据的连接配置不得提交到 Git。 ## 输出文件 ### `bucket_source_pv_uv_return_realtime_20260721_apptype4_version1578.csv` 2026-07-21、版本 1578 的实时完整报表,共 20 行。 ### `bucket_source_full_report_offline_20260716_20260720_apptype4_all_versions.csv` 2026-07-16 至 2026-07-20、全部版本的离线完整报表,共 100 行。列名、列顺序和指标维度与实时 CSV 一致。 ## 修改日期或版本时 1. 同步修改 SQL 文件中的日期分区条件和输出日期。 2. 实时报表需要同步修改 `versioncode` 和输出版本号;离线全版本报表不要增加版本过滤。 3. 同步修改 Python 脚本顶部的 SQL、CSV 文件名常量。 4. 执行后校验每个日期是否有 16 个尾号、20 行完整结果,事实值是否为整数,离线与实时列名及顺序是否一致。