# 瓦拉数据字段百科全书 本文档系统梳理所有已知数据库字段,包含释义、用途和计算口径。 - **更新时间**: 2026-05-07 - **维护人**: 小溪 📊 --- ## 目录 1. [PostgreSQL vala_bi 库](#一postgresql-vala_bi-库) 2. [MySQL vala_user 库(源表)](#二mysql-vala_user-库源表) 3. [MySQL vala 库(配置表)](#三mysql-vala-库配置表) 4. [MySQL vala_order 库](#四mysql-vala_order-库) 5. [核心计算口径汇总](#五核心计算口径汇总) 6. [渠道映射表](#六渠道映射表) --- ## 一、PostgreSQL vala_bi 库 > **数据库**: Online PostgreSQL (bj-postgres-16pob4sg) > **角色**: 线上环境用户行为与业务 BI 数据 > **权限**: 只读 --- ### 1.1 bi_vala_order(订单表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 订单主键 ID | 唯一标识一笔订单 | 去重统计订单数:`COUNT(DISTINCT id)` | | `account_id` | bigint | YES | 用户账号 ID | 关联用户信息 | 关联 `bi_vala_app_account.id` | | `out_trade_no` | varchar | YES | 商户订单号 | 外部交易流水号,关联退费表 | 关联 `bi_refund_order.out_trade_no` | | `trade_no` | varchar | YES | 交易流水号 | 支付平台交易号,关联退费表 | 关联 `bi_refund_order.trade_no` | | `pay_amount` | varchar | YES | 支付金额(元) | 以元为单位的金额(字符串格式) | ⚠️ 建议统一用 `pay_amount_int` | | `goods_id` | bigint | YES | 商品 ID | 关联购买的商品 | | | `order_status` | integer | YES | 订单状态 | 标识订单当前状态 | 状态枚举:1=未支付,2=已支付,3=已完成,**4=已退款**,5=已取消 | | `order_status_comment` | text | YES | 订单状态备注 | 状态变更说明 | | | `is_used` | integer | YES | 是否已使用 | 标记订单是否已被使用 | | | `sale_channel` | integer | YES | 购课渠道编号 | 端内购课渠道(仅 `key_from=app-active-h5-0-0` 时有效) | 见[渠道映射表](#六渠道映射表) | | `created_at` | timestamptz | YES | 创建时间 | 订单创建时间 | | | `updated_at` | timestamptz | YES | 更新时间 | 订单最后更新时间 | | | `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | 统计时过滤 `deleted_at IS NOT NULL` | | `pay_channel` | integer | YES | 支付渠道 | 支付方式(微信/支付宝等) | | | `pay_amount_int` | integer | YES | 支付金额(分) | 以分为单位的整数金额 | **GMV/GSV 统计使用此字段**,元 = 分/100 | | `pay_success_date` | timestamptz | YES | 支付成功时间 | 实际支付成功的时间 | 时间维度统计的基准时间 | | `quantity` | integer | NO | 数量 | 购买数量 | 默认 1 | | `goods_name` | text | NO | 商品名称 | 购买的课程/商品名称 | | | `goods_apply_package_ids` | text | NO | 适用套餐包 ID | 商品关联的套餐包 | | | `key_from` | text | NO | 销售渠道标识 | 标识订单来源渠道 | 渠道映射见[渠道映射表](#六渠道映射表) | | `expire_days` | integer | YES | 有效期天数 | 课程有效期 | | **关联关系**: - `bi_vala_order.account_id` → `bi_vala_app_account.id`(关联用户) - `bi_vala_order.trade_no` ↔ `bi_refund_order.trade_no`(关联退费) - `bi_vala_order.out_trade_no` ↔ `bi_refund_order.out_trade_no`(关联退费) --- ### 1.2 bi_vala_app_account(用户账号表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 用户账号主键 | 唯一标识一个用户账号 | 关联 `bi_vala_order.account_id`、`bi_vala_app_character.account_id` | | `tel` | varchar | YES | 手机号 | 用户注册手机号 | 明文手机号 | | `tel_encrypt` | varchar | YES | 加密手机号 | 加密后的手机号 | | | `name` | varchar | YES | 用户姓名 | 用户真实姓名 | | | `id_card` | varchar | YES | 身份证号 | 用户身份证 | ⚠️ 敏感信息 | | `status` | smallint | NO | 账号状态 | 标识账号是否正常 | **1=正常用户,2=测试用户**;所有统计必须 `status=1` | | `pay_status` | integer | YES | 付费状态 | 标识用户是否付费 | | | `login_times` | integer | YES | 登录次数 | 累计登录次数 | | | `remark` | text | YES | 备注 | 人工备注信息 | | | `key_from` | varchar | NO | 注册来源 | 用户注册时的渠道标识 | 同订单表 `key_from` 含义 | | `created_at` | timestamptz | YES | 注册时间 | 用户注册时间 | 新增用户统计的时间基准 | | `updated_at` | timestamptz | YES | 更新时间 | 最后更新时间 | | | `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | 统计时过滤 | | `download_channel` | text | YES | 下载渠道 | 用户下载 App 的渠道 | **新增用户(免费注册)按此字段分渠道统计** | **注意事项**: - 测试账号剔除规则:所有订单类统计必须 `JOIN bi_vala_app_account ON account_id` 并 `WHERE status = 1` - `download_channel` 为汉字格式,匹配时使用「关键字包含」方式,如 `LIKE '%学而思%'` --- ### 1.3 bi_vala_app_character(用户角色表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 角色主键 | 唯一标识一个角色 | 关联学习记录表的 `user_id` | | `account_id` | bigint | YES | 账号 ID | 关联用户账号 | 关联 `bi_vala_app_account.id` | | `nickname` | varchar | YES | 角色昵称 | 用户的角色昵称 | | | `gender` | smallint | YES | 性别 | 角色性别 | 0=girl,1=boy,其他=unknown | | `birthday` | varchar | YES | 出生日期 | YYYY-MM-DD 格式 | `split_part(birthday,'-',1)` 提取年份 | | `avatar` | text | YES | 头像 | 角色头像 URL | | | `spine_name` | varchar | YES | Spine 动画名称 | 角色动画资源 | | | `latest_login` | timestamptz | YES | 最后登录时间 | 角色最近一次登录 | | | `reputation` | char | YES | 声望值 | 角色声望等级 | | | `robots_cnt` | integer | YES | 机器人数量 | 拥有的机器人数量 | | | `head_image` | varchar | YES | 头像图片 | 头像图片资源 | | | `status` | smallint | YES | 角色状态 | 角色是否有效 | | | `purchase_season_package` | text | YES | 赛季包购买状态 | JSON 数组格式 | `'[1]'`=未购买赛季包;`'[1]'` = 未付费角色 | | `total_sp_point` | integer | YES | 总 SP 积分 | 累计获得的技能点 | | | `balance_sp_point` | integer | YES | 余额 SP 积分 | 当前可用技能点 | | | `point` | integer | YES | 积分 | 通用积分 | | | `pay_status` | smallint | YES | 付费状态 | 角色维度的付费状态 | 0=未付费,1=已付费 | | `created_at` | timestamptz | YES | 创建时间 | 角色创建时间 | | | `updated_at` | timestamptz | YES | 更新时间 | 最后更新时间 | | | `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | | | `mood` | integer | YES | 心情值 | 角色当前心情 | | | `mood_start_time` | bigint | YES | 心情起始时间 | 心情值变化的时间戳 | | --- ### 1.4 bi_refund_order(退费订单表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 退费订单主键 | 唯一标识一笔退费 | | | `account_id` | bigint | YES | 账号 ID | 退费用户 | | | `out_trade_no` | varchar | YES | 商户订单号 | 关联原订单 | 关联 `bi_vala_order.out_trade_no` | | `trade_no` | varchar | YES | 交易流水号 | 关联原订单 | 关联 `bi_vala_order.trade_no` | | `refund_amount` | varchar | YES | 退费金额(元) | 字符串格式退费金额 | ⚠️ 建议用 `refund_amount_int` | | `created_at` | timestamptz | YES | 创建时间 | 退费申请时间 | | | `updated_at` | timestamptz | YES | 更新时间 | 退费最后更新时间 | **当 status=3 时即退费成功时间** | | `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | | | `refund_amount_int` | integer | NO | 退费金额(分) | 整数退费金额 | GSV 计算使用此字段 | | `reason` | text | NO | 退费原因 | 退费原因说明 | | | `sale_channel` | integer | NO | 销售渠道 | 退费订单的渠道 | | | `status` | integer | NO | 退费状态 | 退费处理状态 | **status=3 表示退费成功** | | `is_admin` | boolean | NO | 是否管理员操作 | 是否管理员手动退费 | | | `channel_refund_id` | bigint | NO | 渠道退费 ID | 支付渠道退费流水号 | | | `refund_ticket_ids` | text | YES | 退费券 ID | 关联的退费券 | | | `refund_type` | integer | NO | 退费类型 | 退费分类 | | | `refund_method` | integer | NO | 退费方式 | 退款到账方式 | | | `after_sale_no` | text | YES | 售后单号 | 售后流程单号 | | **退费订单校验规则(双条件,缺一不可)**: 1. `bi_refund_order.status = 3`(退费成功) 2. `bi_vala_order.order_status = 4`(订单状态为已退款) --- ### 1.5 bi_user_course_detail(用户课程明细表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | integer | NO | 课程明细主键 | | | | `created_at` | timestamptz | YES | 创建时间 | | | | `updated_at` | timestamptz | YES | 更新时间 | | | | `account_id` | integer | YES | 用户 ID | 关联账号 | 关联 `bi_vala_app_account.id` | | `user_id` | integer | YES | 角色 ID | 关联角色 | 关联 `bi_vala_app_character.id` | | `course_level` | text | YES | 课程等级 | L1/L2(对应 A1/A2) | | | `active_time` | timestamptz | YES | 激活时间 | 课程激活时间 | | | `expire_time` | timestamptz | YES | 过期时间 | 课程过期时间 | **不为空=正式课,为空=体验课** | | `latest_unit_index` | integer | YES | 最新单元索引 | 最近学习的单元编号 | | | `latest_lesson_index` | integer | YES | 最新课时索引 | 最近学习的课时编号 | | | `learn_duration` | integer | YES | 学习时长 | 累计学习时长 | | | `last_learn_time` | timestamptz | YES | 最后学习时间 | 最近一次学习时间 | | | `deleted_at` | timestamptz | YES | 删除时间 | 有值=课程已删除,空=未删除 | 统计时过滤 | --- ### 1.6 bi_level_unit_lesson(课程结构映射表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | integer | YES | **chapter_id** | 直接关联播放记录表的 `chapter_id` | 例子:L1 S0 U00 L01 → id=343 | | `course_level` | varchar | YES | 课程等级 | L1 / L2 | 对应 A1 / A2 | | `course_season` | varchar | YES | 季度 | S0 / S1 / S2 / S3 / S4 | S0=U0 所在季 | | `course_unit` | varchar | YES | 单元 | U00 / U01 / U02 ... | 每季 12 个单元 | | `course_lesson` | varchar | YES | 课时 | L01 / L02 / L03 / L04 / L05 | 每单元 5 节课 | **使用方式**: - 查询某课程的学习数据时,先通过此表按 `course_level + course_season + course_unit + course_lesson` 匹配出目标 `id`(即 `chapter_id`),再关联播放记录表查询 - [李承龙确认] 匹配课程统一使用此表 --- ### 1.7 bi_user_chapter_play_record_0~7(用户课时播放记录,8 张分表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 播放记录主键 | | | | `user_id` | bigint | YES | 角色 ID | 关联角色 | 关联 `bi_vala_app_character.id` | | `chapter_id` | bigint | YES | 课时 ID | 关联课程 | 关联 `bi_level_unit_lesson.id` | | `chapter_unique_id` | varchar | YES | 完课唯一标识 | 关联组件播放记录 | 关联 `bi_user_component_play_record.chapter_unique_id` | | `play_status` | smallint | YES | 播放状态 | 是否完成课时 | **1=正常完成**,0=未开始,2=中途退出 | | `story_id` | bigint | YES | 故事 ID | 关联游戏/故事 | | | `created_at` | timestamptz | YES | 创建时间 | 首次进入/开始时间 | **首次完成时间**:按 `user_id + chapter_id` 分组取 `created_at` 最小值 | | `updated_at` | timestamptz | YES | 更新时间 | | | | `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | | | `map_position` | text | YES | 地图位置 | 课程在地图上的位置 | | | `dialog_info` | text | YES | 对话信息 | 对话数据 JSON | | | `level` | varchar | YES | 等级 | 课程等级标识 | | **分表处理**: 统计时需要用 `UNION ALL` 合并 8 张分表的数据。 --- ### 1.8 bi_user_component_play_record_0~7(用户组件播放记录,8 张分表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 组件播放主键 | | | | `user_id` | bigint | YES | 角色 ID | | | | `chapter_id` | bigint | YES | 课时 ID | | | | `chapter_unique_id` | varchar | YES | 完课唯一标识 | 关联课时播放记录 | | | `component_id` | bigint | YES | 组件 ID | 组件编号 | | | `sub_component_type` | smallint | YES | 组件子类型 | | | | `component_type` | smallint | YES | 组件类型 | 大类:核心互动/中互动等 | | | `comp_type` | varchar | YES | 组件类型名 | 字符串类型名 | | | `play_status` | smallint | YES | 播放状态 | | **1=完成,2=退出**(退出率统计条件:`IN (1,2)`) | | `pass_time` | integer | YES | 通过时间 | | | | `interval_time` | integer | YES | 播放耗时(毫秒) | **完课耗时统计核心字段** | 求和 `/60000` = 分钟(保留1位小数) | | `read_word_count` | integer | YES | 阅读词数 | | | | `speak_count` | integer | YES | 口语次数 | | | | `listen_sentence_count` | integer | YES | 听力句数 | | | | `write_word_count` | integer | YES | 写作词数 | | | | `created_at` | timestamptz | YES | 创建时间 | | | | `updated_at` | timestamptz | YES | 更新时间 | | | | `deleted_at` | timestamptz | YES | 删除时间 | | 统计需过滤 | | `section_id` | bigint | YES | 小节 ID | | | | `component_unique_code` | varchar | YES | 组件唯一编码 | 如 `core_reading_order-0101004` | 组件维度统计的核心分组字段 | | `play_result` | varchar | YES | 练习结果 | | Perfect / Good / **Oops** | | `finish_question_count` | integer | YES | 完成题目数 | | | | `skill_points` | integer | YES | 技能点 | 获得的技能点 | | | `c_type` | varchar | YES | 组件类别 | 组件分类标识 | | | `c_id` | varchar | YES | 组件类别 ID | | | | `user_behavior_info` | text | YES | 用户行为信息 | 详细行为 JSON | | | `behavior_analysis_info` | text | YES | 行为分析信息 | | | | `session_id` | varchar | YES | 会话 ID | 学习会话标识 | | | `listen_time` | integer | YES | 听力时间 | | | | `dialog_list` | text | YES | 对话列表 | | | | `level` | varchar | YES | 等级 | | | --- ### 1.9 bi_user_unit_review_question_result(课程巩固 Review 源表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 主键 | | | | `user_id` | bigint | YES | 角色 ID | | | | `story_id` | bigint | YES | 故事 ID | | | | `score` | integer | YES | 得分 | | | | `score_text` | varchar | YES | 评分等级 | Perfect/Good/Oops | | | `question_list` | text | YES | 题目列表 JSON | 包含每题的 isRight/isSkip | 正确率 = `正确数/总题数*10000`(万分比) | | `sp_value` | integer | YES | SP 值 | | | | `created_at` | timestamptz | YES | 创建时间 | | | | `updated_at` | timestamptz | YES | 更新时间 | | | | `deleted_at` | timestamptz | YES | 删除时间 | | | | `category` | varchar | YES | 分类 | | | | `exp` | integer | YES | 经验值 | | | | `play_time` | bigint | YES | 播放时间(毫秒) | **巩固用时计算来源** | `play_time / 1000` = 秒 | | `read_word_count` | bigint | YES | 阅读词数 | | | | `listen_time` | bigint | YES | 听力时间 | | | | `speak_count` | bigint | YES | 口语次数 | | | | `level` | varchar | YES | 等级 | | | --- ### 1.10 bi_user_unit_summary_km_result(单元强化 Summary 源表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 主键 | | | | `user_id` | bigint | YES | 角色 ID | | | | `story_id` | bigint | YES | 故事 ID | | | | `km_id` | varchar | YES | 知识模块 ID | | | | `km_type` | varchar | YES | 知识模块类型 | | | | `score_text` | varchar | YES | 评分等级 | | | | `sp_value` | integer | YES | SP 值 | | | | `created_at` | timestamptz | YES | 首次进入时间 | **强化进入时间** | | | `updated_at` | timestamptz | YES | 更新时间 | | | | `deleted_at` | timestamptz | YES | 删除时间 | | | | `play_time` | bigint | YES | 播放时间 | | | | `sum_explain` | text | YES | 总结说明 | | | | `level` | varchar | YES | 等级 | | | --- ### 1.11 bi_user_unit_challenge_question_result(单元挑战 Challenge 源表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 主键 | | | | `user_id` | bigint | YES | 角色 ID | | | | `story_id` | bigint | YES | 故事 ID | | | | `chapter_id` | bigint | YES | 课时 ID | 注意:挑战是单元级而非课时级,但仍有关联 | | | `unique_id` | varchar | YES | 唯一标识 | | | | `score` | integer | YES | 得分 | | | | `score_text` | varchar | YES | 评分等级 | Perfect / Good / Oops | 四维度评分合计 | | `question_list` | text | YES | 题目列表 | 包含四维度评分详情 | 解析出 listening/speaking/reading/writing 各自评分 | | `sp_value` | integer | YES | SP 值 | | | | `exp` | integer | YES | 经验值 | | | | `created_at` | timestamptz | YES | 首次进入时间 | **挑战进入时间** | | | `updated_at` | timestamptz | YES | 更新时间 | | | | `deleted_at` | timestamptz | YES | 删除时间 | | | | `play_time` | bigint | YES | 播放时间 | | | | `level` | varchar | YES | 等级 | | | --- ### 1.12 bi_user_task_log(用户任务日志表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | integer | NO | 主键 | | | `user_id` | integer | NO | 角色 ID | | | `task_type` | integer | NO | 任务类型 | | | `task_id` | integer | NO | 任务 ID | | | `status` | integer | NO | 任务状态 | | | `start_time` | bigint | NO | 开始时间 | Unix 时间戳 | | `updated_at` | timestamptz | YES | 更新时间 | | | `created_at` | timestamptz | YES | 创建时间 | | --- ### 1.13 account_detail_info(账号详情表) | 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 | |------|------|------|------|------|----------| | `id` | bigint | NO | 主键 | | | | `account_id` | integer | YES | 账号 ID | 关联用户 | | | `login_time` | text | YES | 登录时间 | | | | `device` | text | YES | 设备信息 | | | | `device_os` | text | YES | 设备操作系统 | iOS/Android | | | `login_address` | text | YES | 登录地址 | 格式"省份-城市" | `split_part(login_address,'-',2)` 提取城市 | | `login_times` | integer | YES | 登录次数 | | | | `created_time` | timestamptz | NO | 创建时间 | | | | `phone_login_times` | integer | YES | 手机登录次数 | | `=0` 表示从未手机登录 | --- ### 1.14 account_login(账号登录表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `account_id` | integer | YES | 账号 ID | | | `login_date` | text | NO | 登录日期 | 日期维度分组 | | `created_time` | timestamptz | NO | 创建时间 | | | `status` | integer | NO | 状态 | | --- ### 1.15 account_device(设备表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `account_id` | integer | YES | 账号 ID | | | `device` | text | YES | 设备标识 | | | `created_time` | timestamptz | NO | 创建时间 | | --- ### 1.16 bi_vala_seasonal_ticket(季度券表,PG 侧同步) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `account_id` | bigint | YES | 账号 ID | | | `out_trade_no` | varchar | YES | 订单号 | | | `give_time` | bigint | NO | 发放时间戳 | | | `expire_time` | bigint | NO | 到期时间戳 | | | `used_time` | bigint | NO | 使用时间戳 | | | `character_id` | integer | YES | 角色 ID | | | `ticket_type` | smallint | YES | 券类型 | 1=Season Pass,2=Season Copy | | `season_package_id` | integer | YES | 赛季包 ID | | | `season_package_name` | varchar | YES | 赛季包名称 | | | `status` | integer | YES | 状态 | 0=未使用,1=已使用,-1=禁用 | | `created_at` | timestamptz | YES | 创建时间 | | | `updated_at` | timestamptz | YES | 更新时间 | | | `deleted_at` | timestamptz | YES | 删除时间 | | | `character_name` | varchar | YES | 角色名 | | | `redeem_code` | varchar | YES | 兑换码 | | | `apply_package_ids` | text | YES | 适用套餐包 ID | | | `ticket_group` | text | NO | 券分组 | | | `name` | varchar | YES | 名称 | | | `season_package_level` | varchar | YES | 赛季包等级 | | --- ### 1.17 account_activity_count(账号活动统计表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `time_period` | integer | YES | 时间周期 | | | `counts` | integer | YES | 计数 | | | `stat_date` | text | NO | 统计日期 | | | `created_time` | timestamptz | NO | 创建时间 | | --- ### 1.18 account_paid_activity_count(付费账号活动统计表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | integer | NO | 主键 | | | `time_period` | integer | YES | 时间周期 | | | `counts` | integer | YES | 计数 | | | `stat_date` | text | NO | 统计日期 | | | `created_time` | timestamptz | NO | 创建时间 | | --- ### 1.19 growth_activity_behavior(增长活动行为表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | integer | NO | 主键 | | | `es_id` | varchar | NO | ES 记录 ID | | | `account_id` | integer | YES | 账号 ID | | | `account_name` | varchar | YES | 账号名 | | | `activity` | text | YES | 活动 | | | `behavior` | varchar | YES | 行为 | | | `created_at` | timestamptz | YES | 创建时间 | | | `info` | text | YES | 详细信息 | | | `source` | varchar | YES | 来源 | | | `sub_behavior` | varchar | YES | 子行为 | | | `user_id` | integer | YES | 角色 ID | | | `user_name` | varchar | YES | 角色名 | | --- ### 1.20 user_behavior_buried_points(埋点数据表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | integer | NO | 主键 | | | `burying_point_id` | integer | YES | 埋点 ID | | | `burying_point_name` | varchar | YES | 埋点名称 | | | `burying_point_sub_id` | integer | YES | 子埋点 ID | | | `burying_point_sub_name` | varchar | YES | 子埋点名称 | | | `account_id` | integer | YES | 账号 ID | | | `account_name` | varchar | YES | 账号名 | | | `character_id` | integer | YES | 角色 ID | | | `character_name` | varchar | YES | 角色名 | | | `active_time` | integer | YES | 活跃时间 | | | `version_id` | varchar | YES | 版本 ID | | | `step_duration` | integer | YES | 步骤耗时 | | | `finish_status` | varchar | YES | 完成状态 | | | `season_package_id` | integer | YES | 赛季包 ID | | | `season_package_name` | varchar | YES | 赛季包名 | | | `unit_id` | integer | YES | 单元 ID | | | `unit_name` | varchar | YES | 单元名 | | | `lesson_id` | integer | YES | 课时 ID | | | `lesson_name` | varchar | YES | 课时名 | | | `component_id` | integer | YES | 组件 ID | | | `component_name` | varchar | YES | 组件名 | | | `c_type` | varchar | YES | 组件类别 | | | `c_id` | varchar | YES | 组件类别 ID | | | `learning_module_id` | integer | YES | 学习模块 ID | | | `learning_module_name` | varchar | YES | 学习模块名 | | | `learning_point_id` | integer | YES | 知识点 ID | | | `learning_point_name` | varchar | YES | 知识点名 | | | `card_id` | integer | YES | 卡 ID | | | `card_name` | varchar | YES | 卡名 | | | `data_version` | varchar | YES | 数据版本 | | | `ex2` | text | YES | 扩展字段 2 | | | `ex3` | text | YES | 扩展字段 3 | | | `es_id` | varchar | YES | ES 记录 ID | | --- ### 1.21 data_sync_config(数据同步配置表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `job_name` | text | NO | 任务名称 | cron 任务标识 | | `database_name` | text | YES | 数据库名 | | | `origin_table` | text | YES | 源表 | | | `dest_table` | text | YES | 目标表 | | | `deal_time` | timestamptz | YES | 处理时间 | | | `full_id` | bigint | NO | 全量 ID | | | `created_at` | timestamptz | NO | 创建时间 | | | `updated_at` | timestamptz | YES | 更新时间 | | --- ### 1.22 feishu_table_record(飞书表格记录表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `data_table` | text | NO | 数据表名 | | | `record_id` | text | YES | 记录 ID | | | `created_at` | timestamptz | NO | 创建时间 | | --- ### 1.23 user_detail_info(用户详情表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `user_id` | integer | YES | 角色 ID | | | `latest_login_time` | bigint | YES | 最近登录时间戳 | | | `latest_active_time` | bigint | YES | 最近活跃时间戳 | | | `created_time` | timestamptz | NO | 创建时间 | | ### 1.24 user_behavior_0~15(用户行为分表,16 张) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `user_id` | integer | YES | 角色 ID | | | `stat_date` | text | NO | 统计日期 | | | `learning_time` | integer | YES | 学习时长 | | | `created_time` | timestamptz | NO | 创建时间 | | --- ## 二、MySQL vala_user 库(源表) > **数据库**: Online MySQL vala_user (bj-cdb-dh2fkqa0) > **角色**: 用户行为源数据 > **权限**: 只读 ### 2.1 vala_user_learn_record(用户学习记录表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `user_id` | bigint | NO | 角色 ID | | | `game_id` | bigint | YES | 故事 ID | 关联游戏 | | `chapter_id` | bigint | YES | 关卡/课时 ID | | | `component_type` | bigint | YES | 组件类型 | | | `sub_component_type` | bigint | YES | 组件子类型 | | | `component_id` | bigint | NO | 组件 ID | | | `card_content` | text | YES | 知识卡详情 JSON | | | `is_new` | tinyint | NO | 是否新数据 | 0=否,1=是 | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | ### 2.2 vala_user_chapter_finish_record(课时完成记录表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `user_id` | bigint | NO | 角色 ID | | | `game_id` | bigint | YES | 游戏 ID | | | `chapter_id` | bigint | NO | 关卡/课时 ID | | | `created_at` | datetime | YES | 首次完成时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | ### 2.3 vala_user_interact_log(用户互动日志表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `user_id` | bigint | NO | 角色 ID | | | `component_type` | tinyint | YES | 互动类型 | 1=knowledge_QA | | `relation_type` | tinyint | YES | 好友关系类型 | 1=相识 2=熟识 3=友好 4=挚友 5=至交 | | `npc_id` | bigint | NO | NPC 角色 ID | | | `session_id` | varchar | NO | 会话 ID | | | `summary` | text | NO | 对话总结 | | | `dialog_list` | text | YES | 对话详情 JSON | | | `dialog_score` | text | YES | 对话得分汇总 | | | `tencent_soe` | text | YES | 腾讯云语音评测数据 | | | `chat_review_resp` | text | YES | 回顾学习数据 | | | `cost_time` | int | NO | 耗时(秒) | | | `insert_time` | datetime | YES | 日志上报时间 | | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | | `favor_value` | int | YES | 好感度值 | 大模型判定的互动好感度 | ### 2.4 vala_user_game_finish_record(游戏完成记录表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | int | NO | 主键 | | | `user_id` | bigint | NO | 角色 ID | | | `game_id` | bigint | NO | 故事 ID | | | `chapter_id` | bigint | NO | 关卡 ID | | | `score` | float | NO | 总得分 | | | `score_level` | char | YES | 得分等级 | | | `unique_code` | varchar | YES | 唯一校验码 | 每次学习完的唯一标识 | | `source_type` | tinyint | YES | 来源类型 | 1=APP,2=小程序 | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | timestamp | YES | 删除时间 | | ### 2.5 vala_user_long_term_memory(用户长期记忆表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `user_id` | int | YES | 角色 ID | | | `npc_id` | int | YES | NPC 角色 ID | | | `robot_id` | int | YES | 机器人 ID | | | `config_id` | int | YES | 配置 ID | | | `session_id` | varchar | YES | 会话 ID | | | `log_id` | int | YES | 日志 ID | | | `source` | varchar | YES | 来源 | | | `source_type` | varchar | YES | 来源类型 | | | `memory_type` | varchar | YES | 记忆类型 | | | `sub_type` | varchar | YES | 来源子类型 | | | `user_content` | text | YES | 用户内容 | | | `system_content` | text | YES | 系统内容 | | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | --- ## 三、MySQL vala 库(配置表) > **数据库**: Online MySQL vala (bj-cdb-dh2fkqa0) > **角色**: 课程/产品配置数据 > **权限**: 只读 ### 3.1 vala_game_info(游戏信息表/单元) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 游戏/单元 ID | 关联 `game_id` | | `en_name` | varchar | NO | 英文名称 | | | `cn_name` | varchar | NO | 中文名称 | | | `game_code` | varchar | NO | 游戏编码 | | | `game_category` | tinyint | NO | 游戏类型 | 1=改编,2=原创 | | `season_package_id` | bigint | YES | 季度包 ID | | | `level_type` | tinyint | NO | 展开类型 | 1=顺序展开,2=触发式展开 | | `desc` | text | NO | 简介 | | | `is_hide` | tinyint | NO | 是否隐藏 | 0=不隐藏,1=隐藏 | | `is_ready` | tinyint | YES | 是否就绪 | | | `card_package_id` | text | YES | 卡包 ID | | | `card_plot_id` | text | YES | 剧情卡 ID | | | `index` | int | YES | 排序 | UnitIndex = (SeasonOfQuarter-1)*12 + Index | | `plot_card_config` | text | YES | 剧情卡配置 JSON | | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | ### 3.2 vala_game_chapter(游戏关卡/课时表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 课时 ID | 即 `chapter_id` | | `game_id` | bigint | YES | 所属游戏/单元 ID | 关联 `vala_game_info.id` | | `season_package_id` | bigint | YES | 季度包 ID | | | `en_name` | varchar | NO | 英文名称 | | | `cn_name` | varchar | NO | 中文名称 | | | `scene_id` | varchar | NO | 关联场景 ID | | | `lesson_type` | tinyint | YES | 课程类型 | 1=主线,2=支线 | | `event_id` | int | YES | 事件 ID | 支线课程的事件 ID | | `desc` | text | NO | 简介 | | | `index` | smallint | YES | 排序 | 每单元 5 节课:1~5 → L01~L05 | | `learn_config` | text | YES | 思路学习内容 JSON | | | `scene_path` | text | YES | 场景信息路径 | | | `self_knowledge_card_config` | text | YES | 本故事知识卡配置 JSON | | | `other_knowledge_card_config` | text | YES | 其他故事知识卡配置 JSON | | | `review_knowledge_card_config` | text | YES | 复习知识卡配置 JSON | | | `chapter_extension_config` | text | YES | 关卡扩展配置 JSON | | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | **课程结构关系**: - `vala_game_info.id` (unit) → `vala_game_chapter.game_id` - `vala_game_chapter.id` (chapter_id) → `bi_user_chapter_play_record.chapter_id` - ChapterIndex = UnitIndex * 5 + Chapter.Index ### 3.3 vala_game_season_package(季度包表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 季度包 ID | | | `cn_name` | varchar | YES | 中文名称 | | | `en_name` | varchar | YES | 英文名称 | | | `season_of_year` | int | NO | 年份 | | | `season_of_quarter` | int | NO | 季度 | 1/2/3/4 | | `season_cn_desc` | text | YES | 中文描述 | | | `season_en_desc` | text | YES | 英文描述 | | | `is_hide` | tinyint | YES | 是否隐藏 | 0=不隐藏,1=隐藏 | | `is_ready` | tinyint | YES | 是否就绪 | | | `index` | int | YES | 排序 | | | `level` | char | YES | 难度等级 | L1 / L2 | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | **课程结构层级**: CourseLevel (L1/L2) → SeasonPackage (S0~S4) → GameInfo (Unit, 每季12个) → GameChapter (Lesson, 每单元5个) ### 3.4 unit_challenge_question(单元挑战题目配置表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `category` | varchar | YES | 挑战科目 | listening/speaking/reading/writing | | `type` | varchar | YES | 题目类型 | | | `question_set_id` | varchar | YES | 题目集 ID | | | `question_content` | text | YES | 题目配置 JSON | | | `notice_content` | text | YES | 飞书通知原始数据 | 配置变更通知 | | `err_msg` | text | YES | 解析错误信息 | | | `related_path` | text | YES | 组件关联路径 | | | `material_list` | text | YES | 材料列表 | | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | --- ## 四、MySQL vala_order 库 > **数据库**: Online MySQL vala_order (bj-cdb-dh2fkqa0) > **权限**: 只读 ### 4.1 vala_seasonal_ticket(季度券表 - 源表) | 字段 | 类型 | 可空 | 释义 | 用途 | |------|------|------|------|------| | `id` | bigint | NO | 主键 | | | `unique_code` | varchar | YES | 季度券唯一码 | | | `account_id` | bigint | YES | 账户 ID | | | `account_name` | varchar | YES | 账户名 | 发放给账户名 | | `tel` | varchar | YES | 手机号 | 账户手机号 | | `give_time` | int | YES | 发放时间戳 | | | `expire_time` | int | YES | 到期时间戳 | | | `expire_type` | tinyint | NO | 有效期类型 | 1=1个月 2=3个月 3=6个月 4=1年 5=3年 | | `ticket_type` | tinyint | NO | 券类型 | 1=Season Pass,2=Season Copy | | `used_time` | int | YES | 使用时间戳 | | | `season_package_id` | bigint | YES | 赛季包 ID | | | `season_package_name` | varchar | YES | 赛季包名称 | | | `status` | tinyint | NO | 状态 | 0=未使用,1=已使用,-1=禁用 | | `created_at` | datetime | YES | 创建时间 | | | `updated_at` | datetime | YES | 更新时间 | | | `deleted_at` | datetime | YES | 删除时间 | | --- ## 五、核心计算口径汇总 ### 5.1 订单/收入类指标 | 指标 | 计算公式 | 说明 | |------|----------|------| | **订单数** | `COUNT(DISTINCT bi_vala_order.id)` | 去重统计(需剔除测试账号) | | **GMV** | `SUM(bi_vala_order.pay_amount_int) / 100` | 全部营销金额(含退费,单位元) | | **退费金额** | `SUM(CASE WHEN r.status=3 AND o.order_status=4 THEN o.pay_amount_int ELSE 0 END) / 100` | 双条件校验退费成功 | | **GSV** | `GMV - 退费金额` | 实际收入 | | **退费率** | `退费订单数 / 总订单数 * 100%` | 时间段内成交订单中发生退费的比例 | **前置条件(所有订单统计必须满足)**: 1. `JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1`(剔除测试账号) 2. 退费订单需同时满足:`bi_refund_order.status = 3` AND `bi_vala_order.order_status = 4` ### 5.2 用户增长类指标 | 指标 | 计算口径 | 说明 | |------|----------|------| | **新增注册用户** | 按 `bi_vala_app_account.created_at` 日期分组,`WHERE status=1 AND deleted_at IS NULL` | 按 `download_channel` 分渠道统计 | | **新增付费用户** | 按 `bi_vala_order.pay_success_date` 日期分组 | 端内按 `sale_channel`,端外按 `key_from` 分渠道 | ### 5.3 学习行为类指标 #### 课时维度 | 指标 | 计算公式 | 说明 | |------|----------|------| | **课时首次完成时间** | `MIN(created_at)`,按 `user_id + chapter_id` 分组,`play_status=1` | 从 `bi_user_chapter_play_record` 取 | | **课时总耗时(分钟)** | `SUM(interval_time) / 60000`,聚合 `chapter_unique_id` | 从 `bi_user_component_play_record` 取,保留1位小数 | | **完成人数** | `COUNT(DISTINCT user_id)` WHERE `play_status=1` | | #### 课程巩固 (Review) | 指标 | 计算公式 | 说明 | |------|----------|------| | **巩固完成人数** | `COUNT(first_done_review_duration > 0)` | `user_chapter_time` 表 | | **巩固平均用时(分钟)** | `AVG(first_done_review_duration) / 60` | 原始单位: 秒 | | **巩固正确率%** | `AVG(first_done_review_right_rate) / 100` | 原始单位: 万分比 | | **巩固用时(秒)** | `play_time / 1000` | 源表 `bi_user_unit_review_question_result` | | **巩固正确率(万分比)** | `正确数 / 总题数 * 10000` | | #### 单元强化 (Summary) | 指标 | 计算公式 | 说明 | |------|----------|------| | **强化进入人数** | `COUNT(summary_in_ts > 0)` | `user_unit_time` 表 | | **强化完成人数** | `COUNT(summary_done_ts > 0)` | | | **首次进入强化时间** | `MIN(created_at)` FROM `bi_user_unit_summary_km_result` | | #### 单元挑战 (Challenge) | 指标 | 计算公式 | 说明 | |------|----------|------| | **挑战参与人数** | `COUNT(challenge_in_ts > 0)` | `user_unit_time` 表 | | **挑战完成人数** | `COUNT(challenge_done_ts > 0)` | | | **四维度 Perfect/Good/Oops 率** | `各评级人数 / (P+G+O 总人数) * 100` | 从 `question_list` JSON 解析 | #### 组件维度 | 指标 | 计算公式 | 说明 | |------|----------|------| | **Oops率** | `COUNT(play_result='Oops') / COUNT(*) * 100%` | `play_status=1`,剔除测试账号 | | **退出率** | `COUNT(play_status=2) / COUNT(play_status IN (1,2)) * 100%` | 有效参与 = 完成 + 退出 | | **总参与次数** | `COUNT(*)` WHERE `play_status IN (1,2)` | | ### 5.4 课程结构计算 - **UnitIndex** = (SeasonOfQuarter - 1) * 12 + GameInfo.Index - **ChapterIndex** = UnitIndex * 5 + Chapter.Index ### 5.5 核心版本时间节点 - **2025-10-01**: 核心版本上线时间,部分统计需区分此节点前后 --- ## 六、渠道映射表 ### 6.1 sale_channel 映射(端内渠道,仅 key_from=app-active-h5-0-0 有效) | sale_channel 值 | 渠道名称 | |-----------------|----------| | 11 | 苹果 | | 12 | 华为 | | 13 | 小米 | | 14 | 荣耀 | | 15 | 应用宝 | | 17 | 魅族 | | 18 | VIVO | | 19 | OPPO | | 21 | 学而思 | | 22 | 讯飞 | | 23 | 步步高 | | 24 | 作业帮 | | 25 | 小度 | | 26 | 希沃 | | 27 | 京东方 | | 41 | 官网 | | 71 | 小程序 | | 其他值 | 站外 | ### 6.2 key_from 映射(销售渠道) | key_from 值 | 渠道名称 | 备注 | |-------------|----------|------| | `app-active-h5-0-0` | 端内购买 | 需结合 `sale_channel` 细分 | | `app-sales-bj-qhm-0` | 端内购买 | 需结合 `sale_channel` 细分 | | 以上两者之外 | 端外购买 | | | `sales-adp*` (前缀匹配) | 销售渠道购买 | 端外中的销售渠道 | | `newmedia-dianpu-xhs-0-0` | 小红书店铺 | | | `newmedia-daren%` (前缀匹配) | 达人直播 | | | `newmedia-dianpu-wwxx-0-0` | 万物 | | ### 6.3 download_channel(下载渠道,新增用户统计) - `download_channel` 为汉字格式 - 匹配方式:关键字包含,如 `LIKE '%学而思%'` - 支持中文渠道名模糊匹配 --- ## 附录:表名索引 | 数据库 | 表名 | 说明 | |--------|------|------| | PG vala_bi | `bi_vala_order` | 订单表 | | PG vala_bi | `bi_vala_app_account` | 用户账号表 | | PG vala_bi | `bi_vala_app_character` | 角色表 | | PG vala_bi | `bi_refund_order` | 退费订单表 | | PG vala_bi | `bi_user_course_detail` | 用户课程明细表 | | PG vala_bi | `bi_level_unit_lesson` | 课程结构映射表 | | PG vala_bi | `bi_user_chapter_play_record_0~7` | 课时播放记录(8分表) | | PG vala_bi | `bi_user_component_play_record_0~7` | 组件播放记录(8分表) | | PG vala_bi | `bi_user_unit_review_question_result` | 巩固练习源表 | | PG vala_bi | `bi_user_unit_summary_km_result` | 强化源表 | | PG vala_bi | `bi_user_unit_challenge_question_result` | 挑战源表 | | PG vala_bi | `bi_user_task_log` | 任务日志表 | | PG vala_bi | `bi_vala_seasonal_ticket` | 季度券表(同步) | | PG vala_bi | `account_detail_info` | 账号详情表 | | PG vala_bi | `account_login` | 账号登录表 | | PG vala_bi | `account_device` | 设备表 | | PG vala_bi | `account_activity_count` | 账号活动统计表 | | PG vala_bi | `account_paid_activity_count` | 付费账号活动统计表 | | PG vala_bi | `growth_activity_behavior` | 增长活动行为表 | | PG vala_bi | `user_behavior_buried_points` | 埋点数据表 | | PG vala_bi | `user_detail_info` | 用户详情表 | | PG vala_bi | `data_sync_config` | 数据同步配置表 | | PG vala_bi | `feishu_table_record` | 飞书表格记录表 | | PG vala_bi | `chapter_component_index` | 组件索引表 | | PG vala_bi | `chapter_config_count` | 配置计数表 | | MySQL vala | `vala_game_info` | 游戏/单元信息表 | | MySQL vala | `vala_game_chapter` | 游戏关卡/课时表 | | MySQL vala | `vala_game_season_package` | 赛季包表 | | MySQL vala | `unit_challenge_question` | 挑战题目配置表 | | MySQL vala_user | `vala_user_learn_record` | 学习记录表 | | MySQL vala_user | `vala_user_chapter_finish_record` | 课时完成记录表 | | MySQL vala_user | `vala_user_interact_log` | 互动日志表 | | MySQL vala_user | `vala_user_game_finish_record` | 游戏完成记录表 | | MySQL vala_user | `vala_user_long_term_memory` | 长期记忆表 | | MySQL vala_order | `vala_seasonal_ticket` | 季度券源表 |