games-development-ai/contracts/db-schemas/V5.0.0__create_game_telemetry.sql
zizi 063ec4edf2 docs(rename): ③ 文档/契约漂移清理——contracts+docs+根文档 yudao 标识同步 com.wanxiang.huijing(follow-up,脚本)
- 范围:全仓除已完成的 game-cloud/game-admin(及排除区);91 文件
- cn.iocoder.yudao→com.wanxiang.huijing / cn.wanxiang.game→com.wanxiang.huijing.game / cn.iocoder.cloud→com.wanxiang / Yudao*→Huijing* / bare yudao→huijing
- 含 contracts/api-schemas(apiInterface FQCN)、docs/architecture+agent-specs(含中文名,git ls-files -z 修复)、AGENTS.md/CLAUDE.md 等根文档
- 保留不动:上游归属 URL(gitee/github yudaocode·YunaiV,改则断链+违反署名)、game-cloud Flyway 迁移注释(保 checksum)、lockfile(装包重生)
- 纯文档/字符串,零构建影响(game-cloud/game-admin 字节码未动)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 14:32:44 +00:00

75 lines
7.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================================================
-- 契约 #2 DB 迁移 | 模块:telemetry(遥测/事件批量入库→MQ 异步→聚合→回灌 feed/project)| owner:WS5
-- 文件:V5.0.0__create_game_telemetry.sql(Flyway,只新增;已合入禁止修改,回滚写新补偿迁移)
-- 内容:telemetry 模块核心表 —— 原始事件 game_telemetry_event + 游戏维度聚合 game_telemetry_game_stat
-- 约定:InnoDB + utf8mb4;显式列;含 Huijing 审计列;状态机用 tinyint,非法流转由服务端拒绝
-- 脊柱:批量事件(#5 envelope) → /app-api/telemetry/events/batch → MQ 异步消费(幂等) → 本两表 → 回灌 feed 与 project
-- 错误码段:telemetry = 1-104-***-***
-- =============================================================================
-- -----------------------------------------------------------------------------
-- 表:game_telemetry_event —— 原始事件表(MQ 消费侧落库,幂等去重)
-- 对接点:消费 RocketMQ topic=telemetry-event 的 #5 envelope,逐条幂等入库
-- 幂等键:(trace_id, event, ts) → uk_dedup;至少一次投递下命中即跳过,保证聚合不重复
-- process_status 状态机:0待聚合 → 1已聚合(消费侧聚合成功后置位;2聚合失败待重试由数据质量监控 T-TEL-19 兜底)
-- -----------------------------------------------------------------------------
CREATE TABLE `game_telemetry_event` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '事件记录 ID',
`event` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '事件名(须在 #5 events.schema.json eventRegistry 登记)',
`schema_version` VARCHAR(8) NOT NULL DEFAULT 'v1' COMMENT '事件 Schema 版本(对应 #5 schema_version,如 v1/v2)',
`ts` BIGINT NOT NULL COMMENT '事件发生时间戳(毫秒,对应 #5 ts)',
`trace_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '全链路追踪 ID(对应 #5 trace_id,幂等键之一)',
`session_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '会话 ID(对应 #5 session_id);来源=runtime sessionId(int64) 转 string,作 session 维度对账键',
`user_id` BIGINT NULL COMMENT '登录用户 ID(匿名为空,对应 #5 user.user_id)',
`anon_id` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '匿名稳定 ID(对应 #5 user.anon_id)',
`game_id` BIGINT NULL COMMENT '游戏 ID(聚合落点关键,对应 #5 context.game_id)',
`version_id` BIGINT NULL COMMENT '版本 ID(对应 #5 context.version_id)',
`channel` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '渠道归因(utm/channel 解析,对应 #5 context.channel)',
`device_type` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '设备类型:mobile/desktop/miniapp(对应 #5 context.device_type)',
`props` JSON NULL COMMENT '事件私有字段(对应 #5 props,结构见对应 eventRegistry 项)',
`process_status` TINYINT NOT NULL DEFAULT 0 COMMENT '处理状态机:0待聚合 1已聚合 2聚合失败待重试(合法流转由消费侧 Service 校验)',
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者(Huijing 审计列;上报通道为 system/上报方)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(入库时间)',
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除:0未删 1已删',
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID(Huijing 多租户兼容,MVP 单租户=0)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dedup` (`trace_id`, `event`, `ts`) COMMENT 'MQ 消费幂等键:同一信封重复投递只落一条',
KEY `idx_game_event` (`game_id`, `event`, `ts`) COMMENT '按游戏+事件取明细(聚合/漏斗回算)',
KEY `idx_status` (`process_status`, `id`) COMMENT '扫待聚合/聚合失败事件(增量聚合与兜底重试)'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '遥测原始事件表(MQ 消费幂等落库)';
-- -----------------------------------------------------------------------------
-- 表:game_telemetry_game_stat —— 游戏维度增量聚合表(按 游戏×统计日 聚合)
-- 由消费侧从 game_telemetry_event 增量累加产出;唯一约束 (game_id, stat_date) 保证聚合幂等
-- 回灌:play_count/like_count → project(game_project);quality_score → feed 排序信号
-- 看板数据源:/admin-api/telemetry/game-stat/* 直读本表(本模块只供数据,不渲染看板 UI)
-- ad/income 范围:ad_impression/ad_reward/income_settled 事件原始表(game_telemetry_event)照常入库,
-- 但本聚合表 = Wave2 变现范围外,later 补列(暂不含广告/收益聚合列,非遗漏)
-- -----------------------------------------------------------------------------
CREATE TABLE `game_telemetry_game_stat` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '聚合记录 ID',
`game_id` BIGINT NOT NULL COMMENT '游戏 ID(= game_project.id)',
`stat_date` DATE NOT NULL COMMENT '统计日(yyyy-MM-dd,按日聚合粒度)',
`play_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日试玩数;权威源=本模块 game_play_start 事件聚合(runtime session 仅观测、不计数);回灌 project.play_count',
`play_end_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日试玩结束数(game_play_end)',
`completed_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日完玩数(props.completed=true)',
`total_duration_ms` BIGINT NOT NULL DEFAULT 0 COMMENT '当日试玩总时长(毫秒,供算平均/quality_score)',
`like_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日点赞数(回灌 project.like_count)',
`favorite_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日收藏数',
`share_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日分享数',
`report_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日举报数(举报阈值降权信号)',
`load_fail_count` BIGINT NOT NULL DEFAULT 0 COMMENT '当日加载失败数(game_load_failed;降权信号)',
`quality_score` DECIMAL(5,2) NOT NULL DEFAULT 0.00 COMMENT '运营质量分(0-100)(T-TEL-04;回灌 feed 排序信号);≠ aigc 生成质量分(0-1),量纲不同、不可互相回灌',
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者(Huijing 审计列;聚合任务为 system)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除:0未删 1已删',
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID(Huijing 多租户兼容,MVP 单租户=0)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_game_date` (`game_id`, `stat_date`) COMMENT '聚合幂等:同一游戏同一日一行,消费侧行级累加',
KEY `idx_date_quality` (`stat_date`, `quality_score`) COMMENT '按日取 quality_score 排序(feed 回灌信号/看板榜单)'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '游戏维度增量聚合表(回灌 feed/project)';