|
|
@@ -0,0 +1,225 @@
|
|
|
+# DIM 建模
|
|
|
+
|
|
|
+> 本数仓 DIM 层(维度层)的字段建模与设计约定。建模方法论(拉链表 SCD2 vs 全量快照选型、拉链表分区特殊性)见 `20-数仓分层与建模.md` §5.5 / §7.3;命名规则见 `21-命名规范.md` §3.3。
|
|
|
+>
|
|
|
+> 本文档按"实体一节"组织,每节包含实体范围 / 关键设计 / 字段表。
|
|
|
+
|
|
|
+## 1. 通用约定
|
|
|
+
|
|
|
+### 1.1 框架字段
|
|
|
+
|
|
|
+所有 DIM 表必带 `etl_time TIMESTAMP` + 分区 `dt STRING`,`STORED AS ORC`。
|
|
|
+
|
|
|
+### 1.2 选型策略
|
|
|
+
|
|
|
+默认 `_ful_d`(每日全量快照)。`_zip_d`(SCD2 拉链)按需评估。
|
|
|
+
|
|
|
+**ful_d → zip_d 触发条件**(满足任一即评估迁 zip):
|
|
|
+
|
|
|
+- 出现"看历史属性变化"的标签 / 报表需求
|
|
|
+- 全量快照存储 > 100 GB 或保留期 > 3 年
|
|
|
+- 业务侧明确要回放某历史 dt 的实体状态
|
|
|
+
|
|
|
+**双轨共存**:迁 zip 时不替换 ful_d,新建 `_zip_d` 并存:
|
|
|
+
|
|
|
+| 表 | 用途 |
|
|
|
+|---|---|
|
|
|
+| `_ful_d` | 保留近 7 天热快照,下游 join 单分区即可 |
|
|
|
+| `_zip_d` | 全量历史 SCD2 拉链,属性变化分析 / 历史回放 |
|
|
|
+
|
|
|
+### 1.3 跑批策略
|
|
|
+
|
|
|
+ODS 跨 dt 不去重 → 同 pk 多分区并存 → DIM 取每个 pk 的最新有效行。
|
|
|
+
|
|
|
+- **初始化**:扫 ODS 全量分区 + `ROW_NUMBER OVER (PARTITION BY pk ORDER BY update_time DESC)` 取每 pk 最新行落 DIM 首日分区
|
|
|
+- **日常增量**:用「昨日 DIM + 今日 ODS 增量」按 pk 合并去重(同 pk 取较新 `update_time`),避免每日全量扫 ODS
|
|
|
+
|
|
|
+### 1.4 脏数据清洗位置
|
|
|
+
|
|
|
+源端字段值脏数据(如同一概念多种写法 `mlb` / `MLB`)的归一清洗放 **DIM 层**完成;DWD 维度退化时直引 DIM 已清洗字段,下游 DWS / TDM 不再清洗。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. dim_usr_user_ful_d(用户维度)
|
|
|
+
|
|
|
+### 2.1 实体
|
|
|
+
|
|
|
+`app_base_user` 主表 LEFT JOIN `app_user_cert_info`(按 `user_id`),用户主信息 + 证件实名信息合一。
|
|
|
+
|
|
|
+### 2.2 性别 / 生日来源
|
|
|
+
|
|
|
+只取 `cert_info.cert_sex` / `cert_birthday`,**实名才有标签**,未实名用户对应字段为空。
|
|
|
+
|
|
|
+不冗余 `app_base_user.sex` / `birthday`:业务库里几乎全空 + 双源会引出收敛规则的复杂度。下游标签生成时 `is_cert=true` 才输出实名相关标签,否则空值。
|
|
|
+
|
|
|
+### 2.3 字段表
|
|
|
+
|
|
|
+| 分组 | 字段 | 类型 | 来源 | 说明 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| 标识 | user_id | BIGINT | base_user.id | PK |
|
|
|
+| 标识 | appid | STRING | base_user | 所属程序 |
|
|
|
+| 标识 | username | STRING | base_user | 账号 |
|
|
|
+| 标识 | code | STRING | base_user | 会员码 |
|
|
|
+| 实名 | sex_cert | TINYINT | cert_info.cert_sex | 证件性别 |
|
|
|
+| 实名 | birthday_cert | STRING | cert_info.cert_birthday | 证件生日 |
|
|
|
+| 实名 | cert_province | STRING | cert_info | 证件所在省 |
|
|
|
+| 实名 | cert_city | STRING | cert_info | 证件所在市 |
|
|
|
+| 实名 | is_cert | BOOLEAN | 派生 | cert_info 命中即 true |
|
|
|
+| 实名 | id_card | STRING | base_user.id_card | 身份证号(已 md5)|
|
|
|
+| 实名 | face_verify | TINYINT | base_user | 人脸识别通过标志 |
|
|
|
+| 实名 | cancel_verify_num | BIGINT | base_user | 重置实名次数 |
|
|
|
+| 注册 | register_channel | STRING | base_user | 注册渠道 |
|
|
|
+| 注册 | register_addr | STRING | base_user | 注册省区 |
|
|
|
+| 注册 | register_ip_addr | STRING | base_user | 注册 IP |
|
|
|
+| 注册 | reg_create_time | TIMESTAMP | base_user.create_time | 注册时间 |
|
|
|
+| 登录 | login_addr | STRING | base_user | 上次登陆省区 |
|
|
|
+| 登录 | login_ip_addr | STRING | base_user | 上次登陆 IP |
|
|
|
+| 会员 | level | BIGINT | base_user.level | 会员等级 |
|
|
|
+| 会员 | member_level | BIGINT | base_user.member_level | 会员等级(业务库重复字段,先全保留待澄清)|
|
|
|
+| 会员 | member_name | STRING | base_user | 会员等级名称 |
|
|
|
+| 会员 | growth_num | BIGINT | base_user | 成长值 |
|
|
|
+| 会员 | current_month_growth | BIGINT | base_user | 当月成长值 |
|
|
|
+| 会员 | member_keep_growth | BIGINT | base_user | 保级所需成长值 |
|
|
|
+| 会员 | member_init_flag | TINYINT | base_user | 月初初始化标志 |
|
|
|
+| 会员 | point | BIGINT | base_user | 积分 |
|
|
|
+| 业务库冗余 | consume_amount_cny | DECIMAL(20,4) | base_user.consume_amount | 业务库后端自带消费总额,口径未对齐数仓;保留作审计对账 |
|
|
|
+| 业务库冗余 | order_total_num | BIGINT | base_user | 业务库后端自带订单总数,同上 |
|
|
|
+| 状态 | status | TINYINT | base_user | 用户状态 |
|
|
|
+| 状态 | blacklist | TINYINT | base_user | 黑名单标记 |
|
|
|
+| 偏好 | refuse_pick_up | TINYINT | base_user | 是否拒绝自提 |
|
|
|
+| 偏好 | notify_flag | TINYINT | base_user | 推送是否接受 |
|
|
|
+| 偏好 | open_invoice | TINYINT | base_user | 开票权限 |
|
|
|
+| 偏好 | open_psd | TINYINT | base_user | 支付开关 |
|
|
|
+| 限额 | daily_limit | BIGINT | base_user | 每日限额提醒 |
|
|
|
+| 限额 | weekly_limit | BIGINT | base_user | 每周限额提醒 |
|
|
|
+| 限额 | monthly_limit | BIGINT | base_user | 每月限额 |
|
|
|
+| 时间 | last_update_time | TIMESTAMP | base_user.update_time | 最近更新时间 |
|
|
|
+| 软删 | is_deleted | BOOLEAN | base_user | 软删归一 |
|
|
|
+| 框架 | etl_time | TIMESTAMP | 派生 | ETL 处理时间 |
|
|
|
+| 分区 | dt | STRING | 控制 | T-1,`yyyyMMdd` |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. dim_trd_card_group_ful_d(拼团维度)
|
|
|
+
|
|
|
+### 3.1 实体
|
|
|
+
|
|
|
+`card_group_info`(拼团信息),承载"商家上架的拼团活动"实体。订单 → 品类的归属通过本表 `sport` 字段取得。
|
|
|
+
|
|
|
+### 3.2 sport 脏数据清洗
|
|
|
+
|
|
|
+**业务依据**:拼团可上单个产品,也可组合多个产品(可能跨类);以商家设置的拼团大类(`cgi.sport`)为准聚合最贴近业务侧分析口径,因此 `sport` 取自拼团表本身,不通过底层产品表(panini / checklist)反查。
|
|
|
+
|
|
|
+**清洗规则**(DIM 内置,下游直引):
|
|
|
+
|
|
|
+| 原值 | 清洗后 |
|
|
|
+|---|---|
|
|
|
+| `mlb` | `MLB` |
|
|
|
+| `Boxing` | `UFC` |
|
|
|
+| `other` | NULL(聚合时 `WHERE sport IS NOT NULL` 过滤)|
|
|
|
+| 其他 | 原值保留 |
|
|
|
+
|
|
|
+### 3.3 字段表
|
|
|
+
|
|
|
+| 分组 | 字段 | 类型 | 来源 | 说明 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| 标识 | group_info_id | BIGINT | id | PK |
|
|
|
+| 标识 | code | STRING | | 编码 |
|
|
|
+| 标识 | appid | STRING | | 所属程序 |
|
|
|
+| 标识 | name | STRING | | 拼团名称 |
|
|
|
+| 标识 | display_name | STRING | | 系列别名(显示名)|
|
|
|
+| 标识 | group_show_name | STRING | | 精美卡片名称 |
|
|
|
+| 商家关联 | merchant_id | BIGINT | | 商家 id |
|
|
|
+| 商家关联 | mer_name | STRING | | 商户名称(冗余)|
|
|
|
+| 商品关联 | list_id | BIGINT | | 商家上线 checklist id |
|
|
|
+| 商品关联 | list_code | STRING | | checklist code |
|
|
|
+| 商品关联 | panini_list_id | BIGINT | | 帕尼尼 list id(业务库快照冗余)|
|
|
|
+| 分类 | sport | STRING | | 运动类型(含 §3.2 脏数据清洗)|
|
|
|
+| 分类 | year | STRING | | 年份(赛季)|
|
|
|
+| 分类 | manufacturer | STRING | | 厂商 |
|
|
|
+| 分类 | sets | STRING | | 系列 |
|
|
|
+| 销售配置 | type | STRING | | 组团方式 |
|
|
|
+| 销售配置 | sub_type | STRING | | 组队方式子方式 |
|
|
|
+| 销售配置 | random_type | STRING | | 随机方式 |
|
|
|
+| 销售配置 | specs | STRING | | 商品规格 |
|
|
|
+| 销售配置 | total_price_cny | DECIMAL(20,4) | total_price | 商品总价 |
|
|
|
+| 销售配置 | unit_price_cny | DECIMAL(20,4) | unit_price | 单份售价 |
|
|
|
+| 销售配置 | act_price_cny | DECIMAL(20,4) | act_price | 私域分享优惠价 |
|
|
|
+| 销售配置 | copies | BIGINT | | 商品份数 |
|
|
|
+| 销售配置 | total_num | BIGINT | | 总数量 |
|
|
|
+| 销售配置 | weight | BIGINT | | 重量 |
|
|
|
+| 销售配置 | order_quota_min | BIGINT | | 每笔订单最少购买 |
|
|
|
+| 销售配置 | order_quota_max | BIGINT | | 每笔订单最多购买 |
|
|
|
+| 销售配置 | user_quota_max | BIGINT | | 用户最多购买 |
|
|
|
+| 销售配置 | min_card_num | BIGINT | | 免运费达标数量 |
|
|
|
+| 销售配置 | mix_copies | TINYINT | | 组合加倍 |
|
|
|
+| 销售配置 | change_type | STRING | | 买对玩法改变后组队方式 |
|
|
|
+| 销售状态 | status | BIGINT | | 状态 |
|
|
|
+| 销售状态 | sold_copies | BIGINT | | 售出份数 |
|
|
|
+| 销售状态 | real_sold_num | BIGINT | | 实际销售数量 |
|
|
|
+| 销售状态 | sold_end_time | TIMESTAMP | | 售卖结束时间 |
|
|
|
+| 销售状态 | finished_time | TIMESTAMP | | 结束时间 |
|
|
|
+| 销售状态 | release_time | STRING | | 发布时间(源是字符串)|
|
|
|
+| 销售状态 | start_time | TIMESTAMP | | 计划开售时间 |
|
|
|
+| 销售状态 | cycle | STRING | | 销售周期 |
|
|
|
+| 团生命周期 | group_full_time | TIMESTAMP | | 组齐时间 |
|
|
|
+| 团生命周期 | review_hold_time | TIMESTAMP | | 组队提交审核时间 |
|
|
|
+| 团生命周期 | review_approval_time | TIMESTAMP | | 组队审核通过时间 |
|
|
|
+| 团生命周期 | review_num | BIGINT | | 审核驳回次数 |
|
|
|
+| 团生命周期 | confirm_send_time | TIMESTAMP | | 确认发货日期 |
|
|
|
+| 团生命周期 | close_payment_time | TIMESTAMP | | 打款日期 |
|
|
|
+| 团生命周期 | close_payment_status | TINYINT | | 结算状态 |
|
|
|
+| 团生命周期 | group_sets_no | BIGINT | | 同商家同系列序号 |
|
|
|
+| 直播 | live_create_time | TIMESTAMP | | 直播创建时间 |
|
|
|
+| 直播 | live_start_time | TIMESTAMP | | 直播开播时间 |
|
|
|
+| 直播 | live_end_time | TIMESTAMP | | 直播结束时间 |
|
|
|
+| 报告 | report_start_time | TIMESTAMP | | 报告开始时间 |
|
|
|
+| 报告 | report_end_time | TIMESTAMP | | 报告结束时间 |
|
|
|
+| 报告 | report_review_num | BIGINT | | 报告审核次数 |
|
|
|
+| 报告 | report_review_first_time | TIMESTAMP | | 报告首次审核时间 |
|
|
|
+| 报告 | report_review_end_time | TIMESTAMP | | 报告末次审核时间 |
|
|
|
+| 营销 | act_id | BIGINT | | 关联活动 id |
|
|
|
+| 营销 | act_type | STRING | | 活动标签 |
|
|
|
+| 营销 | act_point_type | STRING | | 额外积分类型 |
|
|
|
+| 营销 | free_flag | TINYINT | | 免单标记 |
|
|
|
+| 营销 | exclusive | TINYINT | | 是否专属支付通道 |
|
|
|
+| 营销 | has_bg | TINYINT | | 是否有背景图 |
|
|
|
+| 营销 | team_first | TINYINT | | 包队优先玩法 |
|
|
|
+| 营销 | use_member_discount | TINYINT | | 会员折扣参与方式 |
|
|
|
+| 营销 | use_coupon | TINYINT | | 是否可用优惠券 |
|
|
|
+| 营销 | user_level | TINYINT | | 用户可看等级 |
|
|
|
+| 营销 | merchant_open | TINYINT | | 是否支持商家代开卡密 |
|
|
|
+| 营销 | merchant_sort | BIGINT | | 商家自定义排序 |
|
|
|
+| 营销 | custom | TINYINT | | 是否自定义 |
|
|
|
+| 营销 | gift_card_id | BIGINT | | 关联精美卡片 id |
|
|
|
+| 营销 | open_card | TINYINT | | 开卡动作 |
|
|
|
+| 营销 | goods_type | TINYINT | | 卡密类型 |
|
|
|
+| 积分 | point_rate | TINYINT | | 积分转换比例 |
|
|
|
+| 积分 | point_max | BIGINT | | 积分兑换最大值 |
|
|
|
+| 积分 | point_min | BIGINT | | 积分兑换最小值 |
|
|
|
+| 积分 | point_type | STRING | | 兑换积分类型 |
|
|
|
+| 营销支付 | payment_method | TINYINT | | 打款方式 |
|
|
|
+| 营销支付 | payment_total_price_cny | DECIMAL(20,4) | payment_total_price | 打款总金额 |
|
|
|
+| 营销支付 | payment_commission_cny | DECIMAL(20,4) | payment_commission | 佣金金额 |
|
|
|
+| 营销支付 | payment_finished_price_cny | DECIMAL(20,4) | payment_finished_price | 已打款金额 |
|
|
|
+| 营销支付 | payment_remain_price_cny | DECIMAL(20,4) | payment_remain_price | 剩余打款金额 |
|
|
|
+| 营销支付 | payment_online_price_cny | DECIMAL(20,4) | payment_online_price | 线上打款金额 |
|
|
|
+| 营销支付 | commission_rate | STRING | | 佣金比例(百分比)|
|
|
|
+| 业务标记 | hot_type | STRING | | 查询 type |
|
|
|
+| 业务标记 | report_flag | TINYINT | | 强制使用新版报告 |
|
|
|
+| 业务标记 | banner_end_time | TIMESTAMP | | banner 结束时间 |
|
|
|
+| 风控 | waring_type | STRING | | 风险异常类型 |
|
|
|
+| 风控 | compensation_status | TINYINT | | 赔付状态 |
|
|
|
+| 业务标记 | reviewmsg | STRING | | 审核描述 |
|
|
|
+| 业务标记 | review_account | STRING | | 审核账号 |
|
|
|
+| 业务标记 | lock | BOOLEAN | | 锁定状态 |
|
|
|
+| 业务标记 | marketing_info | STRING | | 营销信息 |
|
|
|
+| 业务标记 | msg | STRING | | 详情描述 |
|
|
|
+| 业务标记 | title | STRING | | 商品子标题 |
|
|
|
+| 业务标记 | remark | STRING | | 备注 |
|
|
|
+| 时间 | create_time | TIMESTAMP | | 创建时间 |
|
|
|
+| 时间 | last_update_time | TIMESTAMP | update_time | 最近更新时间 |
|
|
|
+| 时间 | del_time | TIMESTAMP | | 删除时间 |
|
|
|
+| 软删 | is_deleted | BOOLEAN | | 软删归一 |
|
|
|
+| 框架 | etl_time | TIMESTAMP | 派生 | ETL 处理时间 |
|
|
|
+| 分区 | dt | STRING | 控制 | T-1,`yyyyMMdd` |
|