This commit is contained in:
Neo
2026-03-15 10:15:02 +08:00
parent 2dd217522c
commit 72bb11b34f
916 changed files with 65306 additions and 16102803 deletions

View File

@@ -0,0 +1,88 @@
# BD_Manualdim_groupbuy_package_ex 新增团购详情字段
> 日期2026-03-05
> 涉及库:`etl_feiqiu` / `test_etl_feiqiu`
> 迁移脚本:`db/etl_feiqiu/migrations/2026-03-05__add_detail_fields_to_dim_groupbuy_package_ex.sql`
> 直接原因整合团购详情接口QueryPackageCouponInfo需在 DWD 扩展表中存储可用台区、助教服务、关联门店等维度信息
> Prompt 摘要etl-coupon-detail spec — 需求 4 验收标准 1
---
## 1. 变更说明
### 变更内容
`dwd.dim_groupbuy_package_ex` 表新增 4 个 JSONB 列,用于存储从团购详情接口提取的维度数据。
| Schema | 表 | 新增列 | 类型 | 说明 |
|--------|-----|--------|------|------|
| dwd | dim_groupbuy_package_ex | table_area_ids | JSONB | 可用台区 ID 列表(来自详情接口 tableAreaId |
| dwd | dim_groupbuy_package_ex | table_area_names | JSONB | 可用台区名称列表(来自详情接口 tableAreaNameList |
| dwd | dim_groupbuy_package_ex | assistant_services | JSONB | 助教服务关联(来自详情接口 packageCouponAssistants |
| dwd | dim_groupbuy_package_ex | groupon_site_infos | JSONB | 关联门店信息(来自详情接口 grouponSiteInfos |
所有列均为 NULLABLE使用 `ADD COLUMN IF NOT EXISTS` 确保幂等性。
### 数据来源
ODS 层 `ods.group_buy_package_details` 表(由 `ODS_GROUP_PACKAGE` 任务的详情拉取子流程写入),通过 `coupon_id = groupbuy_package_id` 关联后在 DWD 加载时合并。
---
## 2. 兼容性影响
| 组件 | 影响 | 说明 |
|------|------|------|
| ETL DWD 加载 | 需配合修改 | `dwd_load_task.py` 需新增 LEFT JOIN 逻辑从 ODS 详情表读取并映射到这 4 个字段Task 4.2/4.3 |
| ETL SCD2 | 自动兼容 | 新增 JSONB 字段自动纳入 `_is_row_changed` 变更检测 |
| 后端 API | 无影响 | 当前无接口直接查询 dim_groupbuy_package_ex 的详情字段 |
| 小程序 | 无影响 | 不直接使用 DWD 层表 |
| RLS 视图 | 无影响 | dim_groupbuy_package_ex 无 RLS 视图 |
---
## 3. 回滚策略
```sql
ALTER TABLE dwd.dim_groupbuy_package_ex
DROP COLUMN IF EXISTS table_area_ids,
DROP COLUMN IF EXISTS table_area_names,
DROP COLUMN IF EXISTS assistant_services,
DROP COLUMN IF EXISTS groupon_site_infos;
```
回滚后需同步撤销 `dwd_load_task.py` 中对应的 LEFT JOIN 和字段映射逻辑。
---
## 4. 验证 SQL
```sql
-- 1. 确认 4 个新列存在且类型正确
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'dwd'
AND table_name = 'dim_groupbuy_package_ex'
AND column_name IN ('table_area_ids', 'table_area_names', 'assistant_services', 'groupon_site_infos')
ORDER BY ordinal_position;
-- 预期4 行data_type 均为 'jsonb'is_nullable 均为 'YES'
-- 2. 确认列 COMMENT 已写入
SELECT a.attname AS column_name, d.description AS comment
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
LEFT JOIN pg_catalog.pg_description d ON d.objoid = c.oid AND d.objsubid = a.attnum
WHERE n.nspname = 'dwd'
AND c.relname = 'dim_groupbuy_package_ex'
AND a.attname IN ('table_area_ids', 'table_area_names', 'assistant_services', 'groupon_site_infos')
ORDER BY a.attnum;
-- 预期4 行,每行 comment 非 NULL
-- 3. 确认表主键和索引未受影响
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'dwd'
AND tablename = 'dim_groupbuy_package_ex';
-- 预期:原有 4 个索引不变pkey + 3 个辅助索引)
```

View File

@@ -29,10 +29,10 @@
| 10 | settle_type | INTEGER | YES | | 结账类型。**枚举值**: 1=台桌结账, 3=商城订单, 6=退货订单, 7=退款订单 |
| 11 | revoke_order_id | BIGINT | YES | | 撤销订单 ID当前数据全为 0 |
| 12 | member_id | BIGINT | YES | | 会员 ID → dim_member0=散客,占比约 82.8% |
| 13 | member_name | VARCHAR(100) | YES | | 会员名称 |
| 14 | member_phone | VARCHAR(50) | YES | | 会员电话 |
| 15 | member_card_account_id | BIGINT | YES | | 会员卡账户 ID(当前数据全为 0 |
| 16 | member_card_type_name | VARCHAR(100) | YES | | 卡类型名称(当前数据全为空) |
| 13 | member_name | VARCHAR(100) | YES | | 会员名称。⚠️ **DQ-6 断档**2025-12 起全为 NULL需通过 `member_id` JOIN `dim_member.nickname` 获取 |
| 14 | member_phone | VARCHAR(50) | YES | | 会员电话。⚠️ **DQ-6 断档**2025-12 起全为 NULL需通过 `member_id` JOIN `dim_member.mobile` 获取(`scd2_is_current=1` |
| 15 | member_card_account_id | BIGINT | YES | | 会员卡账户 ID。⚠️ **DQ-7 断档**:全为 0需通过 `member_id` JOIN `dim_member_card_account.tenant_member_id` 获取(`scd2_is_current=1` |
| 16 | member_card_type_name | VARCHAR(100) | YES | | 卡类型名称。⚠️ **DQ-7 断档**2025-07-21 起全为 NULL需通过 `member_id` JOIN `dim_member_card_account` 获取 |
| 17 | is_bind_member | BOOLEAN | YES | | 是否绑定会员。**枚举值**: False=否 |
| 18 | member_discount_amount | NUMERIC(18,2) | YES | | 会员折扣金额 |
| 19 | consume_money | NUMERIC(18,2) | YES | | 消费总金额(元)。⚠️ **口径不稳定**存在三种历史口径A/B/CDWS 层不应直接使用,应使用 `items_sum = table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money`。详见 [consume_money 口径](../../../../docs/reports/DWD-DOC/consume/consume-money-caliber.md) |