feat: P1-P3 全栈集成 — 数据库基础 + DWS 扩展 + 小程序鉴权 + 工程化体系
## P1 数据库基础 - zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu - etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表 - 清理 assistant_abolish 残留数据 ## P2 ETL/DWS 扩展 - 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution) - 新增 assistant_order_contribution_task 任务及 RLS 视图 - member_consumption 增加充值字段、assistant_daily 增加处罚字段 - 更新 ODS/DWD/DWS 任务文档及业务规则文档 - 更新 consistency_checker、flow_runner、task_registry 等核心模块 ## P3 小程序鉴权系统 - 新增 xcx_auth 路由/schema(微信登录 + JWT) - 新增 wechat/role/matching/application 服务层 - zqyy_app 鉴权表迁移 + 角色权限种子数据 - auth/dependencies.py 支持小程序 JWT 鉴权 ## 文档与审计 - 新增 DOCUMENTATION-MAP 文档导航 - 新增 7 份 BD_Manual 数据库变更文档 - 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth) - 新增全栈集成审计记录、部署检查清单更新 - 新增 BACKLOG 路线图、FDW→Core 迁移计划 ## Kiro 工程化 - 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务) - 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan) - 新增 6 个 Hook(合规检查/会话日志/提交审计等) - 新增 doc-map steering 文件 ## 运维与测试 - 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告 - 新增属性测试:test_dws_contribution / test_auth_system - 清理过期 export 报告文件 - 更新 .gitignore 排除规则
This commit is contained in:
@@ -1,183 +0,0 @@
|
||||
# 黑盒集成测试报告
|
||||
|
||||
生成时间: 2026-02-20 18:12:25
|
||||
ETL 日志: `703747ca8db84aa785405fc75ee388a2.log`
|
||||
测试窗口: 2025-11-01 ~ 2026-02-20 (full_window 模式)
|
||||
|
||||
## 1. ETL 执行总览
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|-----|
|
||||
| 成功任务 | 25 |
|
||||
| 失败任务 | 1 |
|
||||
| 跳过任务 | 14 |
|
||||
| 总计 | 40 |
|
||||
|
||||
### 失败任务详情
|
||||
|
||||
- **DWS_RELATION_INDEX**: 错误: 字段 d.is_delete 不存在
|
||||
|
||||
### 跳过任务(未注册)
|
||||
|
||||
- DWS_ASSISTANT_DAILY
|
||||
- DWS_ASSISTANT_MONTHLY
|
||||
- DWS_ASSISTANT_CUSTOMER
|
||||
- DWS_ASSISTANT_SALARY
|
||||
- DWS_ASSISTANT_FINANCE
|
||||
- DWS_MEMBER_CONSUMPTION
|
||||
- DWS_MEMBER_VISIT
|
||||
- DWS_FINANCE_DAILY
|
||||
- DWS_FINANCE_RECHARGE
|
||||
- DWS_FINANCE_INCOME_STRUCTURE
|
||||
- DWS_FINANCE_DISCOUNT_DETAIL
|
||||
- DWS_GOODS_STOCK_DAILY
|
||||
- DWS_GOODS_STOCK_WEEKLY
|
||||
- DWS_GOODS_STOCK_MONTHLY
|
||||
|
||||
## 2. 输入侧(API)vs 输出侧(ODS)对比
|
||||
|
||||
| 任务 | ODS 表 | API 抓取数 | ODS 总行数 | ODS 去重ID | ETL 状态 |
|
||||
|------|--------|-----------|-----------|-----------|---------|
|
||||
| ODS_ASSISTANT_ABOLISH | assistant_cancellation_records | 78 | 178 | 100 | SUCC |
|
||||
| ODS_ASSISTANT_ACCOUNT | assistant_accounts_master | 828 | 295 | 69 | SUCC |
|
||||
| ODS_ASSISTANT_LEDGER | assistant_service_records | 2307 | 12561 | 5297 | SUCC |
|
||||
| ODS_GOODS_CATEGORY | stock_goods_category_tree | 108 | 18 | 9 | SUCC |
|
||||
| ODS_GROUP_BUY_REDEMPTION | group_buy_redemption_records | 88140 | 27284 | 12768 | SUCC |
|
||||
| ODS_GROUP_PACKAGE | group_buy_packages | 216 | 70 | 34 | SUCC |
|
||||
| ODS_INVENTORY_CHANGE | goods_stock_movements | 14556 | -1 | -1 | SUCC |
|
||||
| ODS_INVENTORY_STOCK | goods_stock_summary | 2249 | -1 | -1 | SUCC |
|
||||
| ODS_MEMBER | member_profiles | 6684 | 1771 | 557 | SUCC |
|
||||
| ODS_MEMBER_BALANCE | member_balance_changes | 26556 | 9684 | 5081 | SUCC |
|
||||
| ODS_MEMBER_CARD | member_stored_value_cards | 11352 | 2973 | 946 | SUCC |
|
||||
| ODS_PAYMENT | payment_transactions | 129024 | 36006 | 24922 | SUCC |
|
||||
| ODS_PLATFORM_COUPON | platform_coupon_redemption_records | 219732 | 36678 | 18311 | SUCC |
|
||||
| ODS_RECHARGE_SETTLE | recharge_settlements | 194 | 3527 | 485 | SUCC |
|
||||
| ODS_REFUND | refund_transactions | 360 | 83 | 51 | SUCC |
|
||||
| ODS_SETTLEMENT_RECORDS | settlement_records | 10491 | 66073 | 26435 | SUCC |
|
||||
| ODS_STORE_GOODS | store_goods_master | 2076 | 1789 | 173 | SUCC |
|
||||
| ODS_STORE_GOODS_SALES | store_goods_sales_records | 0 | 17563 | 17563 | SUCC |
|
||||
| ODS_TABLES | site_tables_master | 888 | 1074 | 74 | SUCC |
|
||||
| ODS_TABLE_FEE_DISCOUNT | table_fee_discount_records | 19644 | 4818 | 3124 | SUCC |
|
||||
| ODS_TABLE_USE | table_fee_transactions | 110484 | 38585 | 20132 | SUCC |
|
||||
| ODS_TENANT_GOODS | tenant_goods_master | 2088 | 353 | 174 | SUCC |
|
||||
|
||||
> 说明: ODS 采用快照模式 (id, content_hash) 为 PK,content_hash 变化产生新行,
|
||||
> 因此 ODS 总行数 ≥ ODS 去重 ID 数。API 抓取数 = 本次 ETL 从 API 获取的记录数。
|
||||
|
||||
## 3. ODS → DWD 行数对比
|
||||
|
||||
| DWD 表 | ODS 表 | 类型 | ODS 总行 | ODS 去重ID | DWD 行数 | 比率 |
|
||||
|--------|--------|------|---------|-----------|---------|------|
|
||||
| dwd.dim_assistant | ods.assistant_accounts_master | 维度(SCD2) | 295 | 69 | 1266 | 18.35 |
|
||||
| dwd.dim_goods_category | ods.stock_goods_category_tree | 维度(SCD2) | 18 | 9 | 125 | 13.89 |
|
||||
| dwd.dim_groupbuy_package | ods.group_buy_packages | 维度(SCD2) | 70 | 34 | 373 | 10.97 |
|
||||
| dwd.dim_member | ods.member_profiles | 维度(SCD2) | 1771 | 557 | 10801 | 19.39 |
|
||||
| dwd.dim_member_card_account | ods.member_stored_value_cards | 维度(SCD2) | 2973 | 946 | 18370 | 19.42 |
|
||||
| dwd.dim_store_goods | ods.store_goods_master | 维度(SCD2) | 1789 | 173 | 5444 | 31.47 |
|
||||
| dwd.dim_table | ods.site_tables_master | 维度(SCD2) | 1074 | 74 | 2881 | 38.93 |
|
||||
| dwd.dim_tenant_goods | ods.tenant_goods_master | 维度(SCD2) | 353 | 174 | 2018 | 11.6 |
|
||||
| dwd.dwd_assistant_service_log | ods.assistant_service_records | 事实 | 12561 | 5297 | 5297 | 1.0 |
|
||||
| dwd.dwd_assistant_trash_event | ods.assistant_cancellation_records | 事实 | 178 | 100 | 100 | 1.0 |
|
||||
| dwd.dwd_groupbuy_redemption | ods.group_buy_redemption_records | 事实 | 27284 | 12768 | 12768 | 1.0 |
|
||||
| dwd.dwd_member_balance_change | ods.member_balance_changes | 事实 | 9684 | 5081 | 5081 | 1.0 |
|
||||
| dwd.dwd_payment | ods.payment_transactions | 事实 | 36006 | 24922 | 24922 | 1.0 |
|
||||
| dwd.dwd_platform_coupon_redemption | ods.platform_coupon_redemption_records | 事实 | 36678 | 18311 | 18311 | 1.0 |
|
||||
| dwd.dwd_recharge_order | ods.recharge_settlements | 事实 | 3527 | 485 | 485 | 1.0 |
|
||||
| dwd.dwd_refund | ods.refund_transactions | 事实 | 83 | 51 | 51 | 1.0 |
|
||||
| dwd.dwd_settlement_head | ods.settlement_records | 事实 | 66073 | 26435 | 26435 | 1.0 |
|
||||
| dwd.dwd_store_goods_sale | ods.store_goods_sales_records | 事实 | 17563 | 17563 | 17563 | 1.0 |
|
||||
| dwd.dwd_table_fee_adjust | ods.table_fee_discount_records | 事实 | 4818 | 3124 | 3124 | 1.0 |
|
||||
| dwd.dwd_table_fee_log | ods.table_fee_transactions | 事实 | 38585 | 20132 | 20132 | 1.0 |
|
||||
|
||||
> 说明: 维度表(SCD2)的 DWD 行数可能 > ODS 去重 ID(历史版本保留)。
|
||||
> 事实表的 DWD 行数应 ≈ ODS 去重 ID 数。比率 = DWD行数 / ODS去重ID。
|
||||
|
||||
## 4. DWD 数据质量(NULL 率抽样)
|
||||
|
||||
| DWD 表 | 总行数 | NULL 列情况 |
|
||||
|--------|--------|------------|
|
||||
| dwd.dim_assistant | 1266 | 无 NULL |
|
||||
| dwd.dim_assistant_ex | 1251 | avatar=0.9%, introduce=100.0% |
|
||||
| dwd.dim_goods_category | 125 | alias_name=86.4%, parent_category_id=79.2% |
|
||||
| dwd.dim_groupbuy_package | 373 | package_template_id=90.9% |
|
||||
| dwd.dim_groupbuy_package_ex | 373 | usable_range=100.0% |
|
||||
| dwd.dim_member | 10801 | 无 NULL |
|
||||
| dwd.dim_member_card_account | 18370 | 无 NULL |
|
||||
| dwd.dim_member_card_account_ex | 18172 | tenant_name=100.0%, tenantavatar=100.0% |
|
||||
| dwd.dim_member_ex | 10770 | register_site_name=94.8% |
|
||||
| dwd.dim_site | 55 | org_id=98.2%, shop_name=98.2%, site_label=98.2% |
|
||||
| dwd.dim_site_ex | 55 | avatar=98.2%, address=98.2%, longitude=98.2%, latitude=98.2% |
|
||||
| dwd.dim_store_goods | 5444 | 无 NULL |
|
||||
| dwd.dim_store_goods_ex | 5402 | site_name=86.5%, goods_barcode=100.0%, goods_cover_url=86.5% |
|
||||
| dwd.dim_table | 2881 | site_table_area_name=91.4% |
|
||||
| dwd.dim_table_ex | 3035 | table_cloth_use_time=100.0% |
|
||||
| dwd.dim_tenant_goods | 2018 | category_name=91.3% |
|
||||
| dwd.dim_tenant_goods_ex | 2016 | remark_name=100.0%, goods_bar_code=100.0% |
|
||||
| dwd.dwd_assistant_service_log | 5297 | 无 NULL |
|
||||
| dwd.dwd_assistant_service_log_ex | 5281 | table_name=9.8%, ledger_group_name=100.0% |
|
||||
| dwd.dwd_assistant_trash_event | 100 | 无 NULL |
|
||||
| dwd.dwd_assistant_trash_event_ex | 100 | 无 NULL |
|
||||
| dwd.dwd_groupbuy_redemption | 12768 | 无 NULL |
|
||||
| dwd.dwd_groupbuy_redemption_ex | 12768 | 无 NULL |
|
||||
| dwd.dwd_member_balance_change | 5081 | 无 NULL |
|
||||
| dwd.dwd_member_balance_change_ex | 5081 | pay_site_name=0.5% |
|
||||
| dwd.dwd_payment | 24922 | 无 NULL |
|
||||
| dwd.dwd_platform_coupon_redemption | 18311 | 无 NULL |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | 18311 | coupon_cover=100.0%, coupon_remark=94.1% |
|
||||
| dwd.dwd_recharge_order | 485 | 无 NULL |
|
||||
| dwd.dwd_recharge_order_ex | 485 | 无 NULL |
|
||||
| dwd.dwd_refund | 51 | 无 NULL |
|
||||
| dwd.dwd_refund_ex | 51 | 无 NULL |
|
||||
| dwd.dwd_settlement_head | 26435 | 无 NULL |
|
||||
| dwd.dwd_settlement_head_ex | 26435 | revoke_order_name=100.0% |
|
||||
| dwd.dwd_store_goods_sale | 17563 | 无 NULL |
|
||||
| dwd.dwd_store_goods_sale_ex | 17563 | goods_remark=27.0% |
|
||||
| dwd.dwd_table_fee_adjust | 3124 | 无 NULL |
|
||||
| dwd.dwd_table_fee_adjust_ex | 3124 | ledger_name=100.0% |
|
||||
| dwd.dwd_table_fee_log | 20132 | 无 NULL |
|
||||
| dwd.dwd_table_fee_log_ex | 20132 | salesman_name=100.0% |
|
||||
|
||||
## 5. DWS 汇总层检查
|
||||
|
||||
| DWS 表 | 行数 | 最新日期 | 状态 |
|
||||
|--------|------|---------|------|
|
||||
| dws.cfg_area_category | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.cfg_assistant_level_price | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.cfg_bonus_rules | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.cfg_index_parameters | 127 | N/A | ✅ |
|
||||
| dws.cfg_performance_tier | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.cfg_skill_type | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_assistant_customer_stats | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_assistant_daily_detail | 5276 | 2026-02-09 | ✅ |
|
||||
| dws.dws_assistant_finance_analysis | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_assistant_monthly_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_assistant_recharge_commission | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_assistant_salary_calc | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_finance_daily_summary | 210 | 2026-02-10 | ✅ |
|
||||
| dws.dws_finance_discount_detail | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_finance_expense_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_finance_income_structure | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_finance_recharge_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_goods_stock_daily_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_goods_stock_monthly_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_goods_stock_weekly_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_index_percentile_history | 86 | N/A | ✅ |
|
||||
| dws.dws_member_assistant_intimacy | 219 | N/A | ✅ |
|
||||
| dws.dws_member_assistant_relation_index | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_member_consumption_summary | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_member_newconv_index | 14 | N/A | ✅ |
|
||||
| dws.dws_member_recall_index | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_member_visit_detail | 4398 | N/A | ✅ |
|
||||
| dws.dws_member_winback_index | 62 | N/A | ✅ |
|
||||
| dws.dws_ml_manual_order_alloc | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_ml_manual_order_source | 0 | N/A | ⚠️ 空表 |
|
||||
| dws.dws_order_summary | 12920 | N/A | ✅ |
|
||||
| dws.dws_platform_settlement | 0 | N/A | ⚠️ 空表 |
|
||||
|
||||
## 6. 结论
|
||||
|
||||
- ODS 层: 22/22 个任务成功入库
|
||||
- DWD 层: 20/20 个表有数据
|
||||
- DWS 层: 9/32 个表有数据
|
||||
- 失败任务: 1 个(详见第 1 节)
|
||||
- 跳过任务: 14 个(未注册的 DWS 任务)
|
||||
@@ -1,785 +0,0 @@
|
||||
# ETL 全链路数据一致性检查报告
|
||||
|
||||
生成时间: 2026-02-21 11:57:51 CST
|
||||
ETL 日志: `703747ca8db84aa785405fc75ee388a2.log`
|
||||
|
||||
## 1. ETL 执行概览
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|-----|
|
||||
| 成功任务 | 25 |
|
||||
| 失败任务 | 1 |
|
||||
| 跳过任务 | 14 |
|
||||
| 总计 | 40 |
|
||||
|
||||
### 失败任务
|
||||
|
||||
- **DWS_RELATION_INDEX**: 错误: 字段 d.is_delete 不存在
|
||||
|
||||
## 2. API↔ODS 数据一致性
|
||||
|
||||
### 2.1 汇总
|
||||
|
||||
| ODS 表 | API 记录数 | ODS 行数 | ODS 去重ID | 字段匹配 | API独有 | ODS独有 | 值差异 | 状态 |
|
||||
|--------|-----------|---------|-----------|---------|--------|--------|-------|------|
|
||||
| `assistant_cancellation_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `assistant_accounts_master` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `assistant_service_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `stock_goods_category_tree` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `group_buy_redemption_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `group_buy_packages` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `goods_stock_movements` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `goods_stock_summary` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `member_profiles` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `member_balance_changes` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `member_stored_value_cards` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `payment_transactions` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `platform_coupon_redemption_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `recharge_settlements` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `refund_transactions` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `settlement_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `store_goods_master` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `store_goods_sales_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `site_tables_master` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `table_fee_discount_records` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `table_fee_transactions` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
| `tenant_goods_master` | 0 | 0 | 0 | 0/0 | 0 | 0 | 0 | ⚠️ 无 API JSON |
|
||||
|
||||
## 3. ODS↔DWD 数据一致性
|
||||
|
||||
### 3.1 汇总
|
||||
|
||||
| DWD 表 | ODS 表 | 类型 | ODS 行 | ODS 去重ID | DWD 行 | 共同列 | DWD独有 | 值差异 | 状态 |
|
||||
|--------|--------|------|-------|-----------|-------|-------|--------|-------|------|
|
||||
| `dwd.dim_assistant` | `ods.assistant_accounts_master` | 维度(SCD2) | 295 | 69 | 1266 | 14 | 5 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_goods_category` | `ods.stock_goods_category_tree` | 维度(SCD2) | 18 | 9 | 125 | 7 | 9 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_groupbuy_package` | `ods.group_buy_packages` | 维度(SCD2) | 70 | 34 | 373 | 14 | 8 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_member` | `ods.member_profiles` | 维度(SCD2) | 1771 | 557 | 10801 | 10 | 6 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_member_card_account` | `ods.member_stored_value_cards` | 维度(SCD2) | 2973 | 946 | 18370 | 18 | 5 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_store_goods` | `ods.store_goods_master` | 维度(SCD2) | 1789 | 173 | 5444 | 13 | 13 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_table` | `ods.site_tables_master` | 维度(SCD2) | 1074 | 74 | 2881 | 5 | 7 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dim_tenant_goods` | `ods.tenant_goods_master` | 维度(SCD2) | 353 | 174 | 2018 | 13 | 6 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_assistant_service_log` | `ods.assistant_service_records` | 事实 | 12561 | 5297 | 5297 | 29 | 4 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_assistant_trash_event` | `ods.assistant_cancellation_records` | 事实 | 178 | 100 | 100 | 1 | 10 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_groupbuy_redemption` | `ods.group_buy_redemption_records` | 事实 | 27284 | 12768 | 12768 | 24 | 1 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_member_balance_change` | `ods.member_balance_changes` | 事实 | 9684 | 5081 | 5081 | 13 | 9 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_payment` | `ods.payment_transactions` | 事实 | 36006 | 24922 | 24922 | 10 | 2 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_platform_coupon_redemption` | `ods.platform_coupon_redemption_records` | 事实 | 36678 | 18311 | 18311 | 19 | 1 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_recharge_order` | `ods.recharge_settlements` | 事实 | 3527 | 485 | 485 | 0 | 24 | 0 | ✅ |
|
||||
| `dwd.dwd_refund` | `ods.refund_transactions` | 事实 | 83 | 51 | 51 | 11 | 1 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_settlement_head` | `ods.settlement_records` | 事实 | 66073 | 26435 | 26435 | 0 | 37 | 0 | ✅ |
|
||||
| `dwd.dwd_store_goods_sale` | `ods.store_goods_sales_records` | 事实 | 17563 | 17563 | 17563 | 23 | 1 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_table_fee_adjust` | `ods.table_fee_discount_records` | 事实 | 4818 | 3124 | 3124 | 11 | 5 | 0 | ❌ 存在差异 |
|
||||
| `dwd.dwd_table_fee_log` | `ods.table_fee_transactions` | 事实 | 38585 | 20132 | 20132 | 28 | 1 | 0 | ❌ 存在差异 |
|
||||
|
||||
### 3.2 dwd.dim_assistant 详情
|
||||
|
||||
**DWD 独有列** (5 个): `assistant_id`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`
|
||||
|
||||
**ODS 独有列** (48 个): `allow_cx`, `assistant_grade`, `avatar`, `birth_date`, `charge_way`, `create_time`, `criticism_status`, `cx_unit_price`, `ding_talk_synced`, `end_time`, `entry_sign_status`, `entry_type`, `gender`, `get_grade_times`, `group_id`
|
||||
|
||||
<details><summary>📊 dwd.dim_assistant 字段级统计(19 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `assistant_id` | int8 | 0.0% | 69 | min=2793361915547781, max=3067857612671685, avg=2880809252491745.23 |
|
||||
| `user_id` | int8 | 0.0% | 68 | min=2324804675291845, max=3067857612163781, avg=2844417384867970.47 |
|
||||
| `assistant_no` | text | 0.0% | 42 | len=1~3 |
|
||||
| `real_name` | text | 0.0% | 68 | len=2~3 |
|
||||
| `nickname` | text | 0.0% | 68 | len=2~3 |
|
||||
| `mobile` | text | 0.0% | 68 | len=11~11 |
|
||||
| `tenant_id` | int8 | 0.0% | 1 | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | 1 | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `team_id` | int8 | 0.0% | 2 | min=2792011585884037, max=2959085810992645, avg=2850474367655848.49 |
|
||||
| `team_name` | text | 0.0% | 2 | len=2~2 |
|
||||
| `level` | int4 | 0.0% | 5 | min=8, max=40, avg=18.07 |
|
||||
| `entry_time` | timestamptz | 0.0% | 36 | 2025-07-16 08:00:00+08 ~ 2026-01-26 08:00:00+08 |
|
||||
| `resign_time` | timestamptz | 0.0% | 63 | 2025-08-01 08:00:00+08 ~ 2226-01-26 15:26:11+08 |
|
||||
| `leave_status` | int4 | 0.0% | 2 | min=0, max=1, avg=0.38 |
|
||||
| `assistant_status` | int4 | 0.0% | 2 | min=1, max=2, avg=1.15 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | 1151 | 2025-12-14 21:20:28.731914+08 ~ 2026-02-15 18:21:52.288328+08 |
|
||||
| `scd2_end_time` | timestamptz | 5.5% | 1144 | 2026-01-30 23:12:53.787306+08 ~ 2026-02-15 18:21:52.288328+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | 2 | min=0, max=1, avg=0.05 |
|
||||
| `scd2_version` | int4 | 0.0% | 9 | min=1, max=9, avg=1.15 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_goods_category 详情
|
||||
|
||||
**DWD 独有列** (9 个): `category_id`, `category_level`, `is_leaf`, `parent_category_id`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`, `sort_order`
|
||||
|
||||
**ODS 独有列** (4 个): `categoryboxes`, `id`, `pid`, `sort`
|
||||
|
||||
<details><summary>📊 dwd.dim_goods_category 字段级统计(16 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `category_id` | int8 | 0.0% | 26 | min=2790683528350533, max=2793236829620037, avg=2791668679275962.07 |
|
||||
| `tenant_id` | int8 | 0.0% | 1 | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `category_name` | varchar | 0.0% | 18 | len=1~3 |
|
||||
| `alias_name` | varchar | 86.4% | 1 | len=0~0 |
|
||||
| `parent_category_id` | int8 | 79.2% | 10 | min=0, max=2793220945250117, avg=1825071020936357.35 |
|
||||
| `business_name` | varchar | 0.0% | 9 | len=2~2 |
|
||||
| `tenant_goods_business_id` | int8 | 0.0% | 9 | min=2790683528317765, max=2793220268902213, avg=2791480552891899.95 |
|
||||
| `category_level` | int4 | 79.2% | 2 | min=1, max=2, avg=1.65 |
|
||||
| `is_leaf` | int4 | 79.2% | 2 | min=0, max=1, avg=0.65 |
|
||||
| `open_salesman` | int4 | 0.0% | 1 | min=2, max=2, avg=2.00 |
|
||||
| `sort_order` | int4 | 79.2% | 2 | min=0, max=1, avg=0.12 |
|
||||
| `is_warehousing` | int4 | 0.0% | 1 | min=1, max=1, avg=1.00 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | 92 | 2025-12-14 21:20:28.731914+08 ~ 2026-02-09 20:08:48.295523+08 |
|
||||
| `scd2_end_time` | timestamptz | 7.2% | 92 | 2026-02-05 09:18:19.11776+08 ~ 2026-02-09 20:08:48.295523+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | 2 | min=0, max=1, avg=0.21 |
|
||||
| `scd2_version` | int4 | 0.0% | 1 | min=1, max=1, avg=1.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_groupbuy_package 详情
|
||||
|
||||
**DWD 独有列** (8 个): `coupon_face_value`, `duration_seconds`, `groupbuy_package_id`, `package_template_id`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`
|
||||
|
||||
**ODS 独有列** (24 个): `add_end_clock`, `add_start_clock`, `area_tag_type`, `coupon_money`, `creator_name`, `date_info`, `date_type`, `duration`, `effective_status`, `end_clock`, `group_type`, `id`, `max_selectable_categories`, `package_id`, `site_name`
|
||||
|
||||
<details><summary>📊 dwd.dim_groupbuy_package 字段级统计(22 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `groupbuy_package_id` | int8 | 0.0% | 34 | min=2798713926290437, max=3048468851870085, avg=2917819297255812.31 |
|
||||
| `tenant_id` | int8 | 0.0% | 1 | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | 1 | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `package_name` | varchar | 0.0% | 18 | len=5~11 |
|
||||
| `package_template_id` | int8 | 90.9% | 15 | min=1126976372, max=1814983609169019, avg=426806077589937.59 |
|
||||
| `selling_price` | numeric | 0.0% | 1 | min=0.00, max=0.00, avg=0.00 |
|
||||
| `coupon_face_value` | numeric | 90.9% | 1 | min=0.00, max=0.00, avg=0.00 |
|
||||
| `duration_seconds` | int4 | 90.9% | 3 | min=3600, max=14400, avg=6670.59 |
|
||||
| `start_time` | timestamptz | 0.0% | 10 | 2025-07-20 00:00:00+08 ~ 2026-01-12 00:00:00+08 |
|
||||
| `end_time` | timestamptz | 0.0% | 11 | 2025-12-30 00:00:00+08 ~ 2027-09-01 00:00:00+08 |
|
||||
| `table_area_name` | varchar | 47.2% | 6 | len=2~5 |
|
||||
| `is_enabled` | int4 | 0.0% | 2 | min=1, max=2, avg=1.29 |
|
||||
| `is_delete` | int4 | 0.0% | 2 | min=0, max=1, avg=0.04 |
|
||||
| `create_time` | timestamptz | 0.0% | 34 | 2025-07-20 12:19:04+08 ~ 2026-01-12 22:42:55+08 |
|
||||
| `tenant_table_area_id_list` | varchar | 47.2% | 6 | len=16~16 |
|
||||
| `card_type_ids` | varchar | 8.0% | 1 | len=1~1 |
|
||||
| `sort` | int4 | 79.6% | 1 | min=100, max=100, avg=100.00 |
|
||||
| `is_first_limit` | bool | 0.0% | 1 | T=373, F=0 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | 335 | 2025-12-14 21:20:28.731914+08 ~ 2026-02-09 20:24:07.27917+08 |
|
||||
| `scd2_end_time` | timestamptz | 9.1% | 332 | 2026-02-05 09:18:19.746022+08 ~ 2026-02-09 20:24:07.27917+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | 2 | min=0, max=1, avg=0.09 |
|
||||
| `scd2_version` | int4 | 0.0% | 1 | min=1, max=1, avg=1.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_member 详情
|
||||
|
||||
**DWD 独有列** (6 个): `member_id`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`, `update_time`
|
||||
|
||||
**ODS 独有列** (10 个): `growth_value`, `id`, `person_tenant_org_id`, `person_tenant_org_name`, `point`, `referrer_member_id`, `register_source`, `site_name`, `status`, `user_status`
|
||||
|
||||
<details><summary>📊 dwd.dim_member 字段级统计(16 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `member_id` | int8 | 0.0% | - | min=2791994266390405, max=3085176958944837, avg=2823078351641537.46 |
|
||||
| `system_member_id` | int8 | 0.0% | - | min=1722160959426757, max=3085176956307013, avg=2800106896966723.16 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `register_site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `mobile` | text | 0.0% | - | len=11~14 |
|
||||
| `nickname` | text | 0.0% | - | len=1~12 |
|
||||
| `member_card_grade_code` | int8 | 0.0% | - | min=2790683528022853, max=2790683528022857, avg=2790683528022854.03 |
|
||||
| `member_card_grade_name` | text | 0.0% | - | len=2~5 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-07-15 18:23:28+08 ~ 2026-02-07 21:04:20+08 |
|
||||
| `update_time` | timestamptz | 100.0% | - | — |
|
||||
| `pay_money_sum` | numeric | 25.4% | - | min=-363409.48, max=0.00, avg=-5534.32 |
|
||||
| `recharge_money_sum` | numeric | 25.4% | - | min=0.00, max=388256.03, avg=6339.79 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | - | 2025-12-14 21:20:28.731914+08 ~ 2026-02-09 20:30:11.747293+08 |
|
||||
| `scd2_end_time` | timestamptz | 5.2% | - | 2026-02-02 02:32:43.782109+08 ~ 2026-02-09 20:30:11.747293+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | - | min=0, max=1, avg=0.05 |
|
||||
| `scd2_version` | int4 | 0.0% | - | min=1, max=6, avg=1.01 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_member_card_account 详情
|
||||
|
||||
**DWD 独有列** (5 个): `member_card_id`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`
|
||||
|
||||
**ODS 独有列** (57 个): `able_cross_site`, `able_share_member_discount`, `assistant_deduct_radio`, `assistant_discount`, `assistant_discount_sub_switch`, `assistant_reward_deduct_radio`, `assistant_reward_discount`, `assistant_reward_discount_sub_switch`, `assistant_service_deduct_radio`, `assistant_service_discount`, `assistantcarddeduct`, `assistantrewardcarddeduct`, `assistantservicecarddeduct`, `bind_password`, `card_no`
|
||||
|
||||
<details><summary>📊 dwd.dim_member_card_account 字段级统计(23 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `member_card_id` | int8 | 0.0% | - | min=2791994266619781, max=3085176959321669, avg=2827361158604426.61 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `register_site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `tenant_member_id` | int8 | 0.0% | - | min=0, max=3085176958944837, avg=2527617817121777.45 |
|
||||
| `system_member_id` | int8 | 0.0% | - | min=0, max=3085176956307013, avg=2502398934969501.99 |
|
||||
| `card_type_id` | int8 | 0.0% | - | min=2791987095408517, max=2794699703437125, avg=2792866036110503.31 |
|
||||
| `member_card_grade_code` | int8 | 0.0% | - | min=2790683528022853, max=2790683528022858, avg=2790683528022854.40 |
|
||||
| `member_card_grade_code_name` | text | 0.0% | - | len=2~5 |
|
||||
| `member_card_type_name` | text | 0.0% | - | len=2~5 |
|
||||
| `member_name` | text | 10.5% | - | len=1~5 |
|
||||
| `member_mobile` | text | 10.5% | - | len=11~11 |
|
||||
| `balance` | numeric | 0.0% | - | min=0.00, max=23202.00, avg=426.47 |
|
||||
| `start_time` | timestamptz | 0.0% | - | 2025-07-15 18:23:28+08 ~ 2026-02-07 21:04:20+08 |
|
||||
| `end_time` | timestamptz | 0.0% | - | 2025-08-15 16:40:12+08 ~ 2225-01-01 00:00:00+08 |
|
||||
| `last_consume_time` | timestamptz | 0.0% | - | 1970-01-01 00:00:00+08 ~ 2026-02-10 01:38:22+08 |
|
||||
| `status` | int4 | 0.0% | - | min=1, max=4, avg=1.03 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `principal_balance` | numeric | 42.8% | - | min=0.00, max=22706.00, avg=443.11 |
|
||||
| `member_grade` | int8 | 0.0% | - | min=0, max=2790683528022856, avg=65172183924837.70 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | - | 2025-12-14 21:20:28.731914+08 ~ 2026-02-09 20:30:12.759904+08 |
|
||||
| `scd2_end_time` | timestamptz | 5.1% | - | 2026-01-31 16:03:53.792254+08 ~ 2026-02-09 20:30:12.759904+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | - | min=0, max=1, avg=0.05 |
|
||||
| `scd2_version` | int4 | 0.0% | - | min=1, max=10, avg=1.02 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_store_goods 详情
|
||||
|
||||
**DWD 独有列** (13 个): `avg_monthly_sales`, `batch_stock_qty`, `category_level1_name`, `category_level2_name`, `created_at`, `sale_qty`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`, `site_goods_id`, `total_sales_qty`, `updated_at`
|
||||
|
||||
**ODS 独有列** (34 个): `able_discount`, `able_site_transfer`, `audit_status`, `average_monthly_sales`, `batch_stock_quantity`, `cost_price`, `cost_price_type`, `create_time`, `custom_label_type`, `days_available`, `forbid_sell_status`, `freeze`, `goods_bar_code`, `goods_cover`, `id`
|
||||
|
||||
<details><summary>📊 dwd.dim_store_goods 字段级统计(26 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `site_goods_id` | int8 | 0.0% | - | min=2791953867886725, max=3073782716778501, avg=2812688507458426.00 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `tenant_goods_id` | int8 | 0.0% | - | min=2791925230096261, max=3073781669250565, avg=2811945814355194.04 |
|
||||
| `goods_name` | text | 0.0% | - | len=2~10 |
|
||||
| `goods_category_id` | int8 | 0.0% | - | min=2790683528350533, max=2793220945250117, avg=2791610153802231.17 |
|
||||
| `goods_second_category_id` | int8 | 0.0% | - | min=2790683528350534, max=2793236829620037, avg=2791668366183841.36 |
|
||||
| `category_level1_name` | text | 85.9% | - | len=2~2 |
|
||||
| `category_level2_name` | text | 85.9% | - | len=1~3 |
|
||||
| `batch_stock_qty` | int4 | 85.9% | - | min=0, max=976, avg=66.24 |
|
||||
| `sale_qty` | int4 | 85.9% | - | min=0, max=6466, avg=619.75 |
|
||||
| `total_sales_qty` | int4 | 85.9% | - | min=0, max=6466, avg=619.75 |
|
||||
| `sale_price` | numeric | 0.0% | - | min=2.00, max=11360.00, avg=109.03 |
|
||||
| `created_at` | timestamptz | 85.9% | - | 2025-07-15 17:42:23+08 ~ 2026-01-30 19:53:30+08 |
|
||||
| `updated_at` | timestamptz | 85.9% | - | 2025-07-16 11:56:22+08 ~ 2026-02-05 04:03:17+08 |
|
||||
| `avg_monthly_sales` | numeric | 85.9% | - | min=0.0000, max=42.0300, avg=3.28 |
|
||||
| `goods_state` | int4 | 0.0% | - | min=1, max=2, avg=1.03 |
|
||||
| `enable_status` | int4 | 0.0% | - | min=1, max=1, avg=1.00 |
|
||||
| `send_state` | int4 | 0.0% | - | min=1, max=1, avg=1.00 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `commodity_code` | text | 0.0% | - | len=5~9 |
|
||||
| `not_sale` | int4 | 0.0% | - | min=2, max=2, avg=2.00 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | - | 2025-12-14 21:20:28.731914+08 ~ 2026-02-09 20:30:15.735121+08 |
|
||||
| `scd2_end_time` | timestamptz | 3.2% | - | 2026-01-31 16:03:53.792254+08 ~ 2026-02-09 20:30:15.735121+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | - | min=0, max=1, avg=0.03 |
|
||||
| `scd2_version` | int4 | 0.0% | - | min=1, max=24, avg=1.49 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_table 详情
|
||||
|
||||
**DWD 独有列** (7 个): `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`, `site_table_area_name`, `table_id`, `tenant_table_area_id`
|
||||
|
||||
**ODS 独有列** (21 个): `appletQrCodeUrl`, `areaname`, `audit_status`, `charge_free`, `create_time`, `delay_lights_time`, `id`, `is_online_reservation`, `is_rest_area`, `light_status`, `only_allow_groupon`, `order_delay_time`, `self_table`, `show_status`, `sitename`
|
||||
|
||||
<details><summary>📊 dwd.dim_table 字段级统计(12 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `table_id` | int8 | 0.0% | 74 | min=2791964216463493, max=3004536233839429, avg=2809642206324618.93 |
|
||||
| `site_id` | int8 | 0.0% | 1 | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `table_name` | text | 0.0% | 74 | len=2~6 |
|
||||
| `site_table_area_id` | int8 | 0.0% | 16 | min=2791963794329671, max=3004534627601285, avg=2803989189538572.36 |
|
||||
| `site_table_area_name` | text | 91.4% | 16 | len=2~5 |
|
||||
| `tenant_table_area_id` | int8 | 91.4% | 16 | min=2791963794329671, max=3004534627601285, avg=2800489289216219.78 |
|
||||
| `table_price` | numeric | 0.0% | 1 | min=0.00, max=0.00, avg=0.00 |
|
||||
| `order_id` | int8 | 0.0% | 201 | min=0, max=3088206550486661, avg=660613765522914.15 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | 2638 | 2025-12-14 21:20:28.731914+08 ~ 2026-02-15 18:21:41.474728+08 |
|
||||
| `scd2_end_time` | timestamptz | 2.6% | 2636 | 2026-02-02 01:33:07.640592+08 ~ 2026-02-15 18:21:41.474728+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | 2 | min=0, max=1, avg=0.03 |
|
||||
| `scd2_version` | int4 | 0.0% | 12 | min=1, max=12, avg=1.21 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dim_tenant_goods 详情
|
||||
|
||||
**DWD 独有列** (6 个): `category_name`, `scd2_end_time`, `scd2_is_current`, `scd2_start_time`, `scd2_version`, `tenant_goods_id`
|
||||
|
||||
**ODS 独有列** (19 个): `able_discount`, `able_site_transfer`, `categoryname`, `commodity_code`, `commoditycode`, `common_sale_royalty`, `cost_price`, `cost_price_type`, `goods_bar_code`, `goods_cover`, `id`, `is_warehousing`, `isinsite`, `min_discount_price`, `out_goods_id`
|
||||
|
||||
<details><summary>📊 dwd.dim_tenant_goods 字段级统计(19 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `tenant_goods_id` | int8 | 0.0% | 173 | min=2791925230096261, max=3073781669250565, avg=2812177202555278.70 |
|
||||
| `tenant_id` | int8 | 0.0% | 1 | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `supplier_id` | int8 | 0.0% | 1 | min=0, max=0, avg=0.00 |
|
||||
| `category_name` | varchar | 91.3% | 14 | len=1~3 |
|
||||
| `goods_category_id` | int8 | 0.0% | 9 | min=2790683528350533, max=2793220945250117, avg=2791641989465527.48 |
|
||||
| `goods_second_category_id` | int8 | 0.0% | 14 | min=2790683528350534, max=2793236829620037, avg=2791720496902958.89 |
|
||||
| `goods_name` | varchar | 0.0% | 173 | len=2~10 |
|
||||
| `goods_number` | varchar | 0.0% | 173 | len=1~8 |
|
||||
| `unit` | varchar | 0.0% | 13 | len=1~1 |
|
||||
| `market_price` | numeric | 0.0% | 48 | min=2.00, max=11360.00, avg=277.51 |
|
||||
| `goods_state` | int4 | 0.0% | 2 | min=1, max=2, avg=1.03 |
|
||||
| `create_time` | timestamptz | 0.0% | 173 | 2025-07-15 17:13:15+08 ~ 2026-01-30 19:52:26+08 |
|
||||
| `update_time` | timestamptz | 18.6% | 144 | 2025-07-15 19:58:39+08 ~ 2026-01-22 18:55:24+08 |
|
||||
| `is_delete` | int4 | 0.0% | 1 | min=0, max=0, avg=0.00 |
|
||||
| `not_sale` | int4 | 0.0% | 1 | min=2, max=2, avg=2.00 |
|
||||
| `scd2_start_time` | timestamptz | 0.0% | 1751 | 2025-12-14 21:20:28.731914+08 ~ 2026-02-09 20:23:55.604384+08 |
|
||||
| `scd2_end_time` | timestamptz | 8.6% | 1746 | 2026-01-31 16:03:53.792254+08 ~ 2026-02-09 20:23:55.604384+08 |
|
||||
| `scd2_is_current` | int4 | 0.0% | 2 | min=0, max=1, avg=0.09 |
|
||||
| `scd2_version` | int4 | 0.0% | 2 | min=1, max=2, avg=1.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_assistant_service_log 详情
|
||||
|
||||
**DWD 独有列** (4 个): `assistant_no`, `assistant_service_id`, `level_name`, `skill_name`
|
||||
|
||||
**ODS 独有列** (37 个): `assistantname`, `assistantno`, `assistantteamname`, `composite_grade`, `composite_grade_time`, `get_grade_times`, `grade_status`, `id`, `is_confirm`, `is_not_responding`, `is_single_order`, `is_trash`, `ledger_count`, `ledger_end_time`, `ledger_group_name`
|
||||
|
||||
<details><summary>📊 dwd.dwd_assistant_service_log 字段级统计(33 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `assistant_service_id` | int8 | 0.0% | - | min=2800311971268549, max=3092712427276485, avg=2944926324324030.52 |
|
||||
| `order_trade_no` | int8 | 0.0% | - | min=2800311913039813, max=3092230766020741, avg=2944492196874608.13 |
|
||||
| `order_settle_id` | int8 | 0.0% | - | min=2800311915366341, max=3092711340902597, avg=2944926140749989.93 |
|
||||
| `order_pay_id` | int8 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `order_assistant_id` | int8 | 0.0% | - | min=2800311914104773, max=3092265482209605, avg=2944455405500768.47 |
|
||||
| `order_assistant_type` | int4 | 0.0% | - | min=1, max=2, avg=1.12 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `site_table_id` | int8 | 0.0% | - | min=0, max=3004536233839429, avg=2536057042915585.55 |
|
||||
| `tenant_member_id` | int8 | 0.0% | - | min=0, max=3055176918828421, avg=1433413041734787.92 |
|
||||
| `system_member_id` | int8 | 0.0% | - | min=0, max=3055176917108101, avg=1407179738886734.81 |
|
||||
| `assistant_no` | varchar | 0.0% | - | len=1~3 |
|
||||
| `nickname` | varchar | 0.0% | - | len=2~3 |
|
||||
| `site_assistant_id` | int8 | 0.0% | - | min=2793361915547781, max=3067857612671685, avg=2843120450020717.73 |
|
||||
| `user_id` | int8 | 0.0% | - | min=2324804675291845, max=3067857612163781, avg=2812388381472601.43 |
|
||||
| `assistant_team_id` | int8 | 0.0% | - | min=2792011585884037, max=2959085810992645, avg=2834213834929783.18 |
|
||||
| `person_org_id` | int8 | 0.0% | - | min=2793361915465861, max=3067857612573381, avg=2843120449922822.01 |
|
||||
| `assistant_level` | int4 | 0.0% | - | min=8, max=40, avg=19.54 |
|
||||
| `level_name` | varchar | 0.0% | - | len=2~4 |
|
||||
| `skill_id` | int8 | 0.0% | - | min=2790683529513797, max=3039912271463941, avg=2792518515531553.51 |
|
||||
| `skill_name` | varchar | 46.0% | - | len=3~3 |
|
||||
| `ledger_unit_price` | numeric | 0.0% | - | min=98.00, max=198.00, avg=119.03 |
|
||||
| `ledger_amount` | numeric | 0.0% | - | min=0.00, max=1900.00, avg=313.04 |
|
||||
| `projected_income` | numeric | 0.0% | - | min=0.00, max=1605.33, avg=248.46 |
|
||||
| `coupon_deduct_money` | numeric | 0.0% | - | min=0.00, max=431.10, avg=2.09 |
|
||||
| `income_seconds` | int4 | 0.0% | - | min=0, max=53640, avg=9476.36 |
|
||||
| `real_use_seconds` | int4 | 0.0% | - | min=0, max=53651, avg=8484.50 |
|
||||
| `add_clock` | int4 | 0.0% | - | min=0, max=36000, avg=99.36 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-07-21 15:24:41+08 ~ 2026-02-13 04:49:48+08 |
|
||||
| `start_use_time` | timestamptz | 0.0% | - | 2025-07-21 15:24:37+08 ~ 2026-02-12 21:15:08+08 |
|
||||
| `last_use_time` | timestamptz | 0.0% | - | 2025-07-21 15:24:37+08 ~ 2026-02-13 03:14:14+08 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=1, avg=0.04 |
|
||||
| `real_service_money` | numeric | 0.1% | - | min=0.00, max=0.00, avg=0.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_assistant_trash_event 详情
|
||||
|
||||
**DWD 独有列** (10 个): `abolish_amount`, `assistant_name`, `assistant_no`, `assistant_trash_event_id`, `charge_minutes_raw`, `create_time`, `site_id`, `table_area_id`, `table_id`, `trash_reason`
|
||||
|
||||
**ODS 独有列** (13 个): `assistantabolishamount`, `assistantname`, `assistanton`, `createtime`, `id`, `pdchargeminutes`, `siteid`, `siteprofile`, `tablearea`, `tableareaid`, `tableid`, `tablename`, `trashreason`
|
||||
|
||||
<details><summary>📊 dwd.dwd_assistant_trash_event 字段级统计(11 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `assistant_trash_event_id` | int8 | 0.0% | 100 | min=2889961229945221, max=3071358041819077, avg=3005598627527239.60 |
|
||||
| `site_id` | int8 | 0.0% | 1 | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `table_id` | int8 | 0.0% | 36 | min=2791964216463493, max=3004536233839429, avg=2830967365385290.76 |
|
||||
| `table_area_id` | int8 | 0.0% | 14 | min=2791963794329671, max=3004534627601285, avg=2828246246772928.74 |
|
||||
| `assistant_no` | varchar | 0.0% | 22 | len=1~2 |
|
||||
| `assistant_name` | varchar | 0.0% | 22 | len=2~3 |
|
||||
| `charge_minutes_raw` | int4 | 0.0% | 50 | min=0, max=28187, avg=4322.24 |
|
||||
| `abolish_amount` | numeric | 0.0% | 50 | min=0.00, max=845.61, avg=154.90 |
|
||||
| `trash_reason` | varchar | 100.0% | 0 | — |
|
||||
| `create_time` | timestamptz | 0.0% | 75 | 2025-09-22 23:20:37+08 ~ 2026-01-29 02:47:00+08 |
|
||||
| `tenant_id` | int8 | 100.0% | 0 | — |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_groupbuy_redemption 详情
|
||||
|
||||
**DWD 独有列** (1 个): `redemption_id`
|
||||
|
||||
**ODS 独有列** (28 个): `assistant_promotion_money`, `assistant_service_promotion_money`, `assistant_service_share_money`, `assistant_share_money`, `good_service_share_money`, `goods_promotion_money`, `goods_share_money`, `goodsoptionprice`, `id`, `ledger_group_name`, `ledger_status`, `offer_type`, `operator_id`, `operator_name`, `order_pay_id`
|
||||
|
||||
<details><summary>📊 dwd.dwd_groupbuy_redemption 字段级统计(25 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `redemption_id` | int8 | 0.0% | - | min=2883738008095877, max=3093859292088645, avg=2986775282529774.90 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `table_id` | int8 | 0.0% | - | min=2791964216463493, max=2942325122944709, avg=2792953913307584.20 |
|
||||
| `tenant_table_area_id` | int8 | 0.0% | - | min=2791960001957765, max=2791962314215301, avg=2791960193901872.31 |
|
||||
| `table_charge_seconds` | int4 | 0.0% | - | min=0, max=36000, avg=6406.17 |
|
||||
| `order_trade_no` | int8 | 0.0% | - | min=2883678958930885, max=3093784062036101, avg=2986665451961769.90 |
|
||||
| `order_settle_id` | int8 | 0.0% | - | min=2883737991875653, max=3093859276196037, avg=2986775234177318.75 |
|
||||
| `order_coupon_id` | int8 | 0.0% | - | min=2883678959848389, max=3093784063412357, avg=2986676883465579.34 |
|
||||
| `coupon_origin_id` | int8 | 0.0% | - | min=2883678959848389, max=3093784063412357, avg=2986676883425226.30 |
|
||||
| `promotion_activity_id` | int8 | 0.0% | - | min=2883678958144453, max=3093784060856453, avg=2986676881439836.58 |
|
||||
| `promotion_coupon_id` | int8 | 0.0% | - | min=2798713926290437, max=3048468851870085, avg=2867360433683138.99 |
|
||||
| `order_coupon_channel` | int4 | 0.0% | - | min=1, max=2, avg=1.06 |
|
||||
| `ledger_unit_price` | numeric | 0.0% | - | min=0.00, max=888.00, avg=33.71 |
|
||||
| `ledger_count` | int4 | 0.0% | - | min=0, max=14400, avg=4328.35 |
|
||||
| `ledger_amount` | numeric | 0.0% | - | min=0.00, max=752.00, avg=61.78 |
|
||||
| `coupon_money` | numeric | 0.0% | - | min=0.00, max=1988.00, avg=64.41 |
|
||||
| `promotion_seconds` | int4 | 0.0% | - | min=3600, max=14400, avg=4407.23 |
|
||||
| `coupon_code` | varchar | 0.0% | - | len=10~15 |
|
||||
| `is_single_order` | int4 | 0.0% | - | min=0, max=1, avg=1.00 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=1, avg=0.35 |
|
||||
| `ledger_name` | varchar | 0.0% | - | len=6~11 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-09-18 13:50:02+08 ~ 2026-02-14 00:16:27+08 |
|
||||
| `member_discount_money` | numeric | 27.5% | - | min=0.00, max=0.00, avg=0.00 |
|
||||
| `coupon_sale_id` | int8 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_member_balance_change 详情
|
||||
|
||||
**DWD 独有列** (9 个): `balance_after`, `balance_before`, `balance_change_id`, `card_type_name`, `change_amount`, `change_time`, `member_mobile`, `member_name`, `principal_change_amount`
|
||||
|
||||
**ODS 独有列** (15 个): `account_data`, `after`, `before`, `create_time`, `id`, `membercardtypename`, `membermobile`, `membername`, `operator_id`, `operator_name`, `paysitename`, `principal_data`, `refund_amount`, `registersitename`, `relate_id`
|
||||
|
||||
<details><summary>📊 dwd.dwd_member_balance_change 字段级统计(22 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `balance_change_id` | int8 | 0.0% | - | min=2800328071170949, max=3093844118358341, avg=2940016953299285.81 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=0, max=2790685415443269, avg=2776405190920237.12 |
|
||||
| `register_site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `tenant_member_id` | int8 | 0.0% | - | min=2799207056279301, max=3085176958944837, avg=2830862386806799.06 |
|
||||
| `system_member_id` | int8 | 0.0% | - | min=1823736961667205, max=3085176956307013, avg=2790919037889637.25 |
|
||||
| `tenant_member_card_id` | int8 | 0.0% | - | min=2799215867168517, max=3085176959321669, avg=2836298526517953.66 |
|
||||
| `card_type_id` | int8 | 0.0% | - | min=2791987095408517, max=2794699703437125, avg=2793172848534856.62 |
|
||||
| `card_type_name` | varchar | 0.0% | - | len=2~5 |
|
||||
| `member_name` | varchar | 0.0% | - | len=1~12 |
|
||||
| `member_mobile` | varchar | 0.0% | - | len=11~14 |
|
||||
| `balance_before` | numeric | 0.0% | - | min=0.00, max=44000.00, avg=1723.54 |
|
||||
| `change_amount` | numeric | 0.0% | - | min=-44000.00, max=44000.00, avg=-13.22 |
|
||||
| `balance_after` | numeric | 0.0% | - | min=0.00, max=44000.00, avg=1710.31 |
|
||||
| `from_type` | int4 | 0.0% | - | min=1, max=9, avg=1.75 |
|
||||
| `payment_method` | int4 | 0.0% | - | min=0, max=4, avg=0.65 |
|
||||
| `change_time` | timestamptz | 0.0% | - | 2025-07-21 15:41:03+08 ~ 2026-02-14 00:01:01+08 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=1, avg=0.51 |
|
||||
| `remark` | varchar | 97.9% | - | len=4~4 |
|
||||
| `principal_before` | numeric | 46.4% | - | min=0.00, max=44000.00, avg=1960.40 |
|
||||
| `principal_after` | numeric | 46.4% | - | min=0.00, max=44000.00, avg=1957.08 |
|
||||
| `principal_change_amount` | numeric | 0.0% | - | min=-44000.00, max=44000.00, avg=-1.78 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_payment 详情
|
||||
|
||||
**DWD 独有列** (2 个): `pay_date`, `payment_id`
|
||||
|
||||
**ODS 独有列** (2 个): `id`, `siteprofile`
|
||||
|
||||
<details><summary>📊 dwd.dwd_payment 字段级统计(12 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `payment_id` | int8 | 0.0% | - | min=2800050343954053, max=3093864103463109, avg=2945845541688648.13 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `relate_type` | int4 | 0.0% | - | min=1, max=6, avg=2.05 |
|
||||
| `relate_id` | int8 | 0.0% | - | min=2800050273584581, max=3093864077166789, avg=2945845268177596.82 |
|
||||
| `pay_amount` | numeric | 0.0% | - | min=-44000.00, max=44000.00, avg=97.28 |
|
||||
| `pay_status` | int4 | 0.0% | - | min=2, max=2, avg=2.00 |
|
||||
| `payment_method` | int4 | 0.0% | - | min=1, max=4, avg=2.74 |
|
||||
| `online_pay_channel` | int4 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-07-21 10:58:32+08 ~ 2026-02-14 00:21:21+08 |
|
||||
| `pay_time` | timestamptz | 0.0% | - | 2025-07-21 10:58:32+08 ~ 2026-02-14 00:21:21+08 |
|
||||
| `pay_date` | date | 0.0% | - | 2025-07-21 ~ 2026-02-14 |
|
||||
| `tenant_id` | int8 | 100.0% | - | — |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_platform_coupon_redemption 详情
|
||||
|
||||
**DWD 独有列** (1 个): `platform_coupon_redemption_id`
|
||||
|
||||
**ODS 独有列** (7 个): `coupon_cover`, `coupon_remark`, `groupon_type`, `id`, `operator_id`, `operator_name`, `siteprofile`
|
||||
|
||||
<details><summary>📊 dwd.dwd_platform_coupon_redemption 字段级统计(20 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `platform_coupon_redemption_id` | int8 | 0.0% | - | min=2800008264287621, max=3093784060856453, avg=2943232422091948.45 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `coupon_code` | varchar | 0.0% | - | len=10~15 |
|
||||
| `coupon_channel` | int4 | 0.0% | - | min=1, max=2, avg=1.06 |
|
||||
| `coupon_name` | varchar | 0.0% | - | len=9~21 |
|
||||
| `sale_price` | numeric | 0.0% | - | min=9.90, max=888.00, avg=35.31 |
|
||||
| `coupon_money` | numeric | 0.0% | - | min=48.00, max=1988.00, avg=65.20 |
|
||||
| `coupon_free_time` | int4 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `channel_deal_id` | int8 | 0.0% | - | min=1126976372, max=1814983609169019, avg=106643012052423.28 |
|
||||
| `deal_id` | int8 | 0.0% | - | min=0, max=1398374101, avg=1271601313.21 |
|
||||
| `group_package_id` | int8 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `site_order_id` | int8 | 0.0% | - | min=2800008264811909, max=3093784062036101, avg=2943220525820855.43 |
|
||||
| `table_id` | int8 | 0.0% | - | min=2791964216463493, max=2793023960731717, avg=2792918485456299.82 |
|
||||
| `certificate_id` | varchar | 0.0% | - | len=19~19 |
|
||||
| `verify_id` | varchar | 94.1% | - | len=19~19 |
|
||||
| `use_status` | int4 | 0.0% | - | min=1, max=2, avg=1.00 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-07-21 10:15:44+08 ~ 2026-02-13 22:59:56+08 |
|
||||
| `consume_time` | timestamptz | 0.0% | - | 2025-07-21 10:15:45+08 ~ 2026-02-13 22:59:56+08 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_recharge_order 详情
|
||||
|
||||
**DWD 独有列** (24 个): `cash_amount`, `create_time`, `electricity_adjust_money`, `electricity_money`, `is_first`, `member_card_type_name`, `member_id`, `member_name_snapshot`, `member_phone_snapshot`, `mervou_sales_amount`, `pay_amount`, `pay_time`, `payment_method`, `pl_coupon_sale_amount`, `point_amount`
|
||||
|
||||
**ODS 独有列** (66 个): `activitydiscount`, `adjustamount`, `allcoupondiscount`, `assistantcxmoney`, `assistantmanualdiscount`, `assistantpdmoney`, `assistantpromotionmoney`, `balanceamount`, `canberevoked`, `cardamount`, `cashamount`, `consumemoney`, `couponamount`, `couponsaleamount`, `createtime`
|
||||
|
||||
### 3.2 dwd.dwd_refund 详情
|
||||
|
||||
**DWD 独有列** (1 个): `refund_id`
|
||||
|
||||
**ODS 独有列** (21 个): `action_type`, `balance_frozen_amount`, `card_frozen_amount`, `cashier_point_id`, `channel_pay_no`, `channel_payer_id`, `check_status`, `id`, `is_delete`, `is_revoke`, `online_pay_channel`, `online_pay_type`, `operator_id`, `pay_config_id`, `pay_sn`
|
||||
|
||||
<details><summary>📊 dwd.dwd_refund 字段级统计(12 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `refund_id` | int8 | 0.0% | 51 | min=2888536816749061, max=3089577798995141, avg=2993893346224381.47 |
|
||||
| `tenant_id` | int8 | 0.0% | 1 | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | 1 | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `relate_type` | int4 | 0.0% | 3 | min=1, max=5, avg=2.24 |
|
||||
| `relate_id` | int8 | 0.0% | 50 | min=2888535969433925, max=3089548319804869, avg=2993841151683115.96 |
|
||||
| `pay_amount` | numeric | 0.0% | 36 | min=-44000.00, max=-0.67, avg=-1552.48 |
|
||||
| `channel_fee` | numeric | 0.0% | 1 | min=0.00, max=0.00, avg=0.00 |
|
||||
| `pay_time` | timestamptz | 0.0% | 51 | 2025-09-21 23:11:38+08 ~ 2026-02-10 23:41:06+08 |
|
||||
| `create_time` | timestamptz | 0.0% | 51 | 2025-09-21 23:11:38+08 ~ 2026-02-10 23:41:06+08 |
|
||||
| `payment_method` | int4 | 0.0% | 2 | min=2, max=4, avg=3.88 |
|
||||
| `member_id` | int8 | 0.0% | 1 | min=0, max=0, avg=0.00 |
|
||||
| `member_card_id` | int8 | 0.0% | 1 | min=0, max=0, avg=0.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_settlement_head 详情
|
||||
|
||||
**DWD 独有列** (37 个): `adjust_amount`, `assistant_cx_money`, `assistant_pd_money`, `balance_amount`, `consume_money`, `coupon_amount`, `create_time`, `electricity_adjust_money`, `electricity_money`, `gift_card_amount`, `goods_money`, `is_bind_member`, `member_card_account_id`, `member_card_type_name`, `member_discount_amount`
|
||||
|
||||
**ODS 独有列** (66 个): `activitydiscount`, `adjustamount`, `allcoupondiscount`, `assistantcxmoney`, `assistantmanualdiscount`, `assistantpdmoney`, `assistantpromotionmoney`, `balanceamount`, `canberevoked`, `cardamount`, `cashamount`, `consumemoney`, `couponamount`, `couponsaleamount`, `createtime`
|
||||
|
||||
### 3.2 dwd.dwd_store_goods_sale 详情
|
||||
|
||||
**DWD 独有列** (1 个): `store_goods_sale_id`
|
||||
|
||||
**ODS 独有列** (28 个): `coupon_deduct_money`, `discount_money`, `goods_remark`, `id`, `is_single_order`, `member_coupon_id`, `member_discount_amount`, `opensalesman`, `operator_id`, `operator_name`, `option_coupon_deduct_money`, `option_member_discount_money`, `option_price`, `option_value_name`, `order_coupon_id`
|
||||
|
||||
<details><summary>📊 dwd.dwd_store_goods_sale 字段级统计(24 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `store_goods_sale_id` | int8 | 0.0% | - | min=2800105583071877, max=3013419364454150, avg=2911009833142095.77 |
|
||||
| `order_trade_no` | int8 | 0.0% | - | min=2800105537881541, max=3013147520814661, avg=2910486643264710.50 |
|
||||
| `order_settle_id` | int8 | 0.0% | - | min=2800105539552709, max=3013419160440709, avg=2911009675936561.89 |
|
||||
| `order_pay_id` | int8 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `order_goods_id` | int8 | 0.0% | - | min=0, max=3013308162690885, avg=1584470684860438.36 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_goods_id` | int8 | 0.0% | - | min=2791953867886725, max=3004536125639493, avg=2796326049558804.13 |
|
||||
| `tenant_goods_id` | int8 | 0.0% | - | min=2791925230096261, max=3004531315313413, avg=2795499121485088.38 |
|
||||
| `tenant_goods_category_id` | int8 | 0.0% | - | min=2790683528350534, max=2793236829620037, avg=2791450392380408.40 |
|
||||
| `tenant_goods_business_id` | int8 | 0.0% | - | min=2790683528317765, max=2793220268902213, avg=2791300728335841.79 |
|
||||
| `site_table_id` | int8 | 0.0% | - | min=0, max=3004536233839429, avg=2053615874358120.74 |
|
||||
| `ledger_name` | varchar | 0.0% | - | len=2~10 |
|
||||
| `ledger_group_name` | varchar | 0.0% | - | len=2~2 |
|
||||
| `ledger_unit_price` | numeric | 0.0% | - | min=2.00, max=1690.00, avg=12.01 |
|
||||
| `ledger_count` | int4 | 0.0% | - | min=1, max=66, avg=1.76 |
|
||||
| `ledger_amount` | numeric | 0.0% | - | min=2.00, max=1690.00, avg=21.27 |
|
||||
| `discount_price` | numeric | 0.0% | - | min=0.00, max=990.00, avg=1.23 |
|
||||
| `real_goods_money` | numeric | 0.0% | - | min=0.00, max=1690.00, avg=20.04 |
|
||||
| `cost_money` | numeric | 0.0% | - | min=0.00, max=81.82, avg=0.18 |
|
||||
| `ledger_status` | int4 | 0.0% | - | min=1, max=1, avg=1.00 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-07-21 11:54:44+08 ~ 2025-12-19 04:28:44+08 |
|
||||
| `coupon_share_money` | numeric | 0.0% | - | min=0.00, max=0.00, avg=0.00 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_table_fee_adjust 详情
|
||||
|
||||
**DWD 独有列** (5 个): `adjust_time`, `table_area_id`, `table_area_name`, `table_fee_adjust_id`, `table_id`
|
||||
|
||||
**ODS 独有列** (17 个): `adjust_type`, `applicant_id`, `applicant_name`, `area_type_id`, `create_time`, `id`, `ledger_count`, `ledger_name`, `operator_id`, `operator_name`, `site_table_area_id`, `site_table_area_name`, `site_table_id`, `sitename`, `siteprofile`
|
||||
|
||||
<details><summary>📊 dwd.dwd_table_fee_adjust 字段级统计(16 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `table_fee_adjust_id` | int8 | 0.0% | - | min=2800379696809925, max=3093721330321541, avg=2958095165613949.04 |
|
||||
| `order_trade_no` | int8 | 0.0% | - | min=2800305631070021, max=3093400552720645, avg=2957508400667238.14 |
|
||||
| `order_settle_id` | int8 | 0.0% | - | min=2800379609925573, max=3093721299536133, avg=2958095010682472.18 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `table_id` | int8 | 0.0% | - | min=2791964216463493, max=3004536233839429, avg=2804884795729219.83 |
|
||||
| `table_area_id` | int8 | 0.0% | - | min=2791960001957765, max=3004534168259333, avg=2799978030180374.23 |
|
||||
| `table_area_name` | varchar | 100.0% | - | — |
|
||||
| `tenant_table_area_id` | int8 | 0.0% | - | min=2791960001957765, max=3004534168259333, avg=2799978030180374.23 |
|
||||
| `ledger_amount` | numeric | 0.0% | - | min=0.01, max=2911.81, avg=118.55 |
|
||||
| `ledger_status` | int4 | 0.0% | - | min=0, max=1, avg=0.98 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=1, avg=0.41 |
|
||||
| `adjust_time` | timestamptz | 0.0% | - | 2025-07-21 16:33:34+08 ~ 2026-02-13 21:56:07+08 |
|
||||
| `table_name` | text | 100.0% | - | — |
|
||||
| `table_price` | numeric | 100.0% | - | — |
|
||||
| `charge_free` | bool | 100.0% | - | T=0, F=0 |
|
||||
|
||||
</details>
|
||||
|
||||
### 3.2 dwd.dwd_table_fee_log 详情
|
||||
|
||||
**DWD 独有列** (1 个): `table_fee_log_id`
|
||||
|
||||
**ODS 独有列** (14 个): `fee_total`, `id`, `last_use_time`, `ledger_start_time`, `mgmt_fee`, `operator_id`, `operator_name`, `order_consumption_type`, `salesman_name`, `salesman_org_id`, `salesman_user_id`, `service_money`, `siteprofile`, `used_card_amount`
|
||||
|
||||
<details><summary>📊 dwd.dwd_table_fee_log 字段级统计(29 列)</summary>
|
||||
|
||||
| 字段 | 类型 | NULL率 | 唯一值 | 统计 |
|
||||
|------|------|--------|--------|------|
|
||||
| `table_fee_log_id` | int8 | 0.0% | - | min=2800050345363077, max=3093859291416901, avg=2951516001649154.20 |
|
||||
| `order_trade_no` | int8 | 0.0% | - | min=2800008264811909, max=3093784062036101, avg=2951288548282306.44 |
|
||||
| `order_settle_id` | int8 | 0.0% | - | min=2800050273584581, max=3093859276196037, avg=2951515918296444.68 |
|
||||
| `order_pay_id` | int8 | 0.0% | - | min=0, max=0, avg=0.00 |
|
||||
| `tenant_id` | int8 | 0.0% | - | min=2790683160709957, max=2790683160709957, avg=2790683160709957.00 |
|
||||
| `site_id` | int8 | 0.0% | - | min=2790685415443269, max=2790685415443269, avg=2790685415443269.00 |
|
||||
| `site_table_id` | int8 | 0.0% | - | min=2791964216463493, max=3004536233839429, avg=2795993997317671.85 |
|
||||
| `site_table_area_id` | int8 | 0.0% | - | min=2791963794329671, max=3004534627601285, avg=2793946624608023.39 |
|
||||
| `site_table_area_name` | varchar | 0.0% | - | len=2~7 |
|
||||
| `tenant_table_area_id` | int8 | 0.0% | - | min=2791960001957765, max=3004534168259333, avg=2793942584809932.30 |
|
||||
| `member_id` | int8 | 0.0% | - | min=0, max=3085176958944837, avg=492432511454912.34 |
|
||||
| `ledger_name` | varchar | 0.0% | - | len=2~6 |
|
||||
| `ledger_unit_price` | numeric | 0.0% | - | min=0.00, max=398.00, avg=58.20 |
|
||||
| `ledger_count` | int4 | 0.0% | - | min=0, max=60539, avg=6463.62 |
|
||||
| `ledger_amount` | numeric | 0.0% | - | min=0.00, max=6077.90, avg=115.73 |
|
||||
| `real_table_charge_money` | numeric | 0.0% | - | min=0.00, max=4862.33, avg=41.30 |
|
||||
| `coupon_promotion_amount` | numeric | 0.0% | - | min=0.00, max=752.00, avg=51.85 |
|
||||
| `member_discount_amount` | numeric | 0.0% | - | min=0.00, max=929.84, avg=9.94 |
|
||||
| `adjust_amount` | numeric | 0.0% | - | min=0.00, max=2911.81, avg=17.93 |
|
||||
| `real_table_use_seconds` | int4 | 0.0% | - | min=0, max=60539, avg=6411.07 |
|
||||
| `add_clock_seconds` | int4 | 0.0% | - | min=0, max=39600, avg=58.77 |
|
||||
| `start_use_time` | timestamptz | 0.0% | - | 2025-07-21 10:15:43+08 ~ 2026-02-13 22:59:55+08 |
|
||||
| `ledger_end_time` | timestamptz | 0.0% | - | 2025-07-21 10:58:18+08 ~ 2026-02-14 00:15:53+08 |
|
||||
| `create_time` | timestamptz | 0.0% | - | 2025-07-21 10:58:32+08 ~ 2026-02-14 00:16:27+08 |
|
||||
| `ledger_status` | int4 | 0.0% | - | min=1, max=1, avg=1.00 |
|
||||
| `is_single_order` | int4 | 0.0% | - | min=0, max=1, avg=0.97 |
|
||||
| `is_delete` | int4 | 0.0% | - | min=0, max=1, avg=0.49 |
|
||||
| `activity_discount_amount` | numeric | 43.5% | - | min=0.00, max=0.00, avg=0.00 |
|
||||
| `real_service_money` | numeric | 43.5% | - | min=0.00, max=0.00, avg=0.00 |
|
||||
|
||||
</details>
|
||||
|
||||
## 4. DWD↔DWS 数据一致性
|
||||
|
||||
### 4.1 DWS 表概览
|
||||
|
||||
DWS 层共 32 张表,14 张有数据,18 张为空。
|
||||
|
||||
| DWS 表 | 行数 | 列数 | 状态 |
|
||||
|--------|------|------|------|
|
||||
| `dws.cfg_area_category` | 21 | 10 | ✅ |
|
||||
| `dws.cfg_assistant_level_price` | 5 | 10 | ✅ |
|
||||
| `dws.cfg_bonus_rules` | 9 | 14 | ✅ |
|
||||
| `dws.cfg_index_parameters` | 127 | 9 | ✅ |
|
||||
| `dws.cfg_performance_tier` | 12 | 16 | ✅ |
|
||||
| `dws.cfg_skill_type` | 3 | 9 | ✅ |
|
||||
| `dws.dws_assistant_customer_stats` | 0 | 37 | ⚠️ 空表 |
|
||||
| `dws.dws_assistant_daily_detail` | 5276 | 30 | ✅ |
|
||||
| `dws.dws_assistant_finance_analysis` | 0 | 20 | ⚠️ 空表 |
|
||||
| `dws.dws_assistant_monthly_summary` | 0 | 35 | ⚠️ 空表 |
|
||||
| `dws.dws_assistant_recharge_commission` | 0 | 18 | ⚠️ 空表 |
|
||||
| `dws.dws_assistant_salary_calc` | 0 | 37 | ⚠️ 空表 |
|
||||
| `dws.dws_finance_daily_summary` | 210 | 42 | ✅ |
|
||||
| `dws.dws_finance_discount_detail` | 0 | 12 | ⚠️ 空表 |
|
||||
| `dws.dws_finance_expense_summary` | 0 | 16 | ⚠️ 空表 |
|
||||
| `dws.dws_finance_income_structure` | 0 | 13 | ⚠️ 空表 |
|
||||
| `dws.dws_finance_recharge_summary` | 0 | 23 | ⚠️ 空表 |
|
||||
| `dws.dws_goods_stock_daily_summary` | 0 | 20 | ⚠️ 空表 |
|
||||
| `dws.dws_goods_stock_monthly_summary` | 0 | 20 | ⚠️ 空表 |
|
||||
| `dws.dws_goods_stock_weekly_summary` | 0 | 20 | ⚠️ 空表 |
|
||||
| `dws.dws_index_percentile_history` | 86 | 13 | ✅ |
|
||||
| `dws.dws_member_assistant_intimacy` | 219 | 23 | ✅ |
|
||||
| `dws.dws_member_assistant_relation_index` | 0 | 29 | ⚠️ 空表 |
|
||||
| `dws.dws_member_consumption_summary` | 0 | 39 | ⚠️ 空表 |
|
||||
| `dws.dws_member_newconv_index` | 14 | 37 | ✅ |
|
||||
| `dws.dws_member_recall_index` | 0 | 21 | ⚠️ 空表 |
|
||||
| `dws.dws_member_visit_detail` | 4398 | 29 | ✅ |
|
||||
| `dws.dws_member_winback_index` | 62 | 35 | ✅ |
|
||||
| `dws.dws_ml_manual_order_alloc` | 0 | 19 | ⚠️ 空表 |
|
||||
| `dws.dws_ml_manual_order_source` | 0 | 27 | ⚠️ 空表 |
|
||||
| `dws.dws_order_summary` | 12920 | 34 | ✅ |
|
||||
| `dws.dws_platform_settlement` | 0 | 19 | ⚠️ 空表 |
|
||||
|
||||
### 4.2 DWS 数值列健全性检查
|
||||
|
||||
#### dws.cfg_bonus_rules
|
||||
|
||||
| 列 | NULL率 | 负值数 | 最小值 | 最大值 | 状态 |
|
||||
|----|--------|--------|--------|--------|------|
|
||||
| `rank_position` | 66.7% | 0 | 1 | 3 | ⚠️ 高 NULL 率 |
|
||||
|
||||
#### dws.dws_assistant_daily_detail
|
||||
|
||||
| 列 | NULL率 | 负值数 | 最小值 | 最大值 | 状态 |
|
||||
|----|--------|--------|--------|--------|------|
|
||||
| `assistant_level_code` | 100.0% | 0 | None | None | ⚠️ 高 NULL 率 |
|
||||
|
||||
#### dws.dws_member_visit_detail
|
||||
|
||||
| 列 | NULL率 | 负值数 | 最小值 | 最大值 | 状态 |
|
||||
|----|--------|--------|--------|--------|------|
|
||||
| `table_id` | 100.0% | 0 | None | None | ⚠️ 高 NULL 率 |
|
||||
|
||||
## 5. 异常汇总与建议
|
||||
|
||||
共发现 43 项异常:
|
||||
|
||||
1. API↔ODS `assistant_cancellation_records`: ⚠️ 无 API JSON
|
||||
2. API↔ODS `assistant_accounts_master`: ⚠️ 无 API JSON
|
||||
3. API↔ODS `assistant_service_records`: ⚠️ 无 API JSON
|
||||
4. API↔ODS `stock_goods_category_tree`: ⚠️ 无 API JSON
|
||||
5. API↔ODS `group_buy_redemption_records`: ⚠️ 无 API JSON
|
||||
6. API↔ODS `group_buy_packages`: ⚠️ 无 API JSON
|
||||
7. API↔ODS `goods_stock_movements`: ⚠️ 无 API JSON
|
||||
8. API↔ODS `goods_stock_summary`: ⚠️ 无 API JSON
|
||||
9. API↔ODS `member_profiles`: ⚠️ 无 API JSON
|
||||
10. API↔ODS `member_balance_changes`: ⚠️ 无 API JSON
|
||||
11. API↔ODS `member_stored_value_cards`: ⚠️ 无 API JSON
|
||||
12. API↔ODS `payment_transactions`: ⚠️ 无 API JSON
|
||||
13. API↔ODS `platform_coupon_redemption_records`: ⚠️ 无 API JSON
|
||||
14. API↔ODS `recharge_settlements`: ⚠️ 无 API JSON
|
||||
15. API↔ODS `refund_transactions`: ⚠️ 无 API JSON
|
||||
16. API↔ODS `settlement_records`: ⚠️ 无 API JSON
|
||||
17. API↔ODS `store_goods_master`: ⚠️ 无 API JSON
|
||||
18. API↔ODS `store_goods_sales_records`: ⚠️ 无 API JSON
|
||||
19. API↔ODS `site_tables_master`: ⚠️ 无 API JSON
|
||||
20. API↔ODS `table_fee_discount_records`: ⚠️ 无 API JSON
|
||||
21. API↔ODS `table_fee_transactions`: ⚠️ 无 API JSON
|
||||
22. API↔ODS `tenant_goods_master`: ⚠️ 无 API JSON
|
||||
23. ODS↔DWD `dwd.dim_assistant`: ❌ 存在差异
|
||||
24. ODS↔DWD `dwd.dim_goods_category`: ❌ 存在差异
|
||||
25. ODS↔DWD `dwd.dim_groupbuy_package`: ❌ 存在差异
|
||||
26. ODS↔DWD `dwd.dim_member`: ❌ 存在差异
|
||||
27. ODS↔DWD `dwd.dim_member_card_account`: ❌ 存在差异
|
||||
28. ODS↔DWD `dwd.dim_store_goods`: ❌ 存在差异
|
||||
29. ODS↔DWD `dwd.dim_table`: ❌ 存在差异
|
||||
30. ODS↔DWD `dwd.dim_tenant_goods`: ❌ 存在差异
|
||||
31. ODS↔DWD `dwd.dwd_assistant_service_log`: ❌ 存在差异
|
||||
32. ODS↔DWD `dwd.dwd_assistant_trash_event`: ❌ 存在差异
|
||||
33. ODS↔DWD `dwd.dwd_groupbuy_redemption`: ❌ 存在差异
|
||||
34. ODS↔DWD `dwd.dwd_member_balance_change`: ❌ 存在差异
|
||||
35. ODS↔DWD `dwd.dwd_payment`: ❌ 存在差异
|
||||
36. ODS↔DWD `dwd.dwd_platform_coupon_redemption`: ❌ 存在差异
|
||||
37. ODS↔DWD `dwd.dwd_refund`: ❌ 存在差异
|
||||
38. ODS↔DWD `dwd.dwd_store_goods_sale`: ❌ 存在差异
|
||||
39. ODS↔DWD `dwd.dwd_table_fee_adjust`: ❌ 存在差异
|
||||
40. ODS↔DWD `dwd.dwd_table_fee_log`: ❌ 存在差异
|
||||
41. DWS `dws.cfg_bonus_rules.rank_position`: ⚠️ 高 NULL 率
|
||||
42. DWS `dws.dws_assistant_daily_detail.assistant_level_code`: ⚠️ 高 NULL 率
|
||||
43. DWS `dws.dws_member_visit_detail.table_id`: ⚠️ 高 NULL 率
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,335 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-20T07:21:33.898900+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 38/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ✅ | 15 | 15 | 0 | 0 | 295 | 1266 | |
|
||||
| dwd.dim_assistant_ex | ✅ | 44 | 44 | 0 | 0 | 295 | 1251 | |
|
||||
| dwd.dim_goods_category | ✅ | 12 | 12 | 0 | 0 | 18 | 125 | |
|
||||
| dwd.dim_groupbuy_package | ✅ | 18 | 18 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_groupbuy_package_ex | ✅ | 21 | 21 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_member | ❌ | 12 | 11 | 1 | 0 | 1771 | 10801 | |
|
||||
| dwd.dim_member_card_account | ✅ | 19 | 19 | 0 | 0 | 2973 | 18370 | |
|
||||
| dwd.dim_member_card_account_ex | ✅ | 57 | 57 | 0 | 0 | 2973 | 18172 | |
|
||||
| dwd.dim_member_ex | ✅ | 10 | 10 | 0 | 0 | 1771 | 10770 | |
|
||||
| dwd.dim_site | ✅ | 13 | 13 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_site_ex | ✅ | 21 | 21 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_store_goods | ✅ | 22 | 22 | 0 | 0 | 1744 | 5444 | |
|
||||
| dwd.dim_store_goods_ex | ✅ | 26 | 26 | 0 | 0 | 1744 | 5402 | |
|
||||
| dwd.dim_table | ✅ | 8 | 8 | 0 | 0 | 1074 | 2881 | |
|
||||
| dwd.dim_table_ex | ✅ | 20 | 20 | 0 | 0 | 1074 | 3035 | |
|
||||
| dwd.dim_tenant_goods | ✅ | 15 | 15 | 0 | 0 | 353 | 2018 | |
|
||||
| dwd.dim_tenant_goods_ex | ✅ | 18 | 18 | 0 | 0 | 353 | 2016 | |
|
||||
| dwd.dwd_assistant_service_log | ✅ | 33 | 33 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_service_log_ex | ✅ | 31 | 31 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_trash_event | ✅ | 11 | 11 | 0 | 0 | 100 | 100 | |
|
||||
| dwd.dwd_assistant_trash_event_ex | ✅ | 3 | 3 | 0 | 0 | 100 | 100 | |
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_movement 不存在或无列 |
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_summary 不存在或无列 |
|
||||
| dwd.dwd_groupbuy_redemption | ✅ | 25 | 25 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_groupbuy_redemption_ex | ✅ | 28 | 28 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_member_balance_change | ❌ | 22 | 21 | 1 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_member_balance_change_ex | ✅ | 7 | 7 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_payment | ✅ | 12 | 12 | 0 | 0 | 36006 | 24922 | |
|
||||
| dwd.dwd_platform_coupon_redemption | ✅ | 20 | 20 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ✅ | 6 | 6 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_recharge_order | ✅ | 24 | 24 | 0 | 0 | 3333 | 485 | |
|
||||
| dwd.dwd_recharge_order_ex | ✅ | 43 | 43 | 0 | 0 | 3333 | 485 | |
|
||||
| dwd.dwd_refund | ✅ | 12 | 12 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_refund_ex | ✅ | 20 | 20 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_settlement_head | ✅ | 37 | 37 | 0 | 0 | 55457 | 26115 | |
|
||||
| dwd.dwd_settlement_head_ex | ✅ | 30 | 30 | 0 | 0 | 55457 | 26115 | |
|
||||
| dwd.dwd_store_goods_sale | ✅ | 24 | 24 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_store_goods_sale_ex | ✅ | 28 | 28 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_table_fee_adjust | ✅ | 16 | 16 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_adjust_ex | ✅ | 13 | 13 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_log | ✅ | 29 | 29 | 0 | 0 | 38585 | 20132 | |
|
||||
| dwd.dwd_table_fee_log_ex | ✅ | 13 | 13 | 0 | 0 | 38585 | 20132 | |
|
||||
|
||||
### dwd.dim_member — 映射异常明细
|
||||
|
||||
- `update_time` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"member_id": 2860039721438277,
|
||||
"dwd_create_time": "2025-09-01T20:02:53+08:00",
|
||||
"ods_create_time": "2025-09-01 20:02:53",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "13189179882",
|
||||
"ods_mobile": "13189179882",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-788.37",
|
||||
"ods_pay_money_sum": "-788.37",
|
||||
"dwd_recharge_money_sum": "2716.00",
|
||||
"ods_recharge_money_sum": "2716.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799207107888901,
|
||||
"ods_system_member_id": "2799207107888901",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 3066773303512389,
|
||||
"dwd_create_time": "2026-01-25T21:03:10+08:00",
|
||||
"ods_create_time": "2026-01-25 21:03:10",
|
||||
"dwd_member_card_grade_code": 2790683528022856,
|
||||
"ods_member_card_grade_code": "2790683528022856",
|
||||
"dwd_member_card_grade_name": "活动抵用券",
|
||||
"ods_member_card_grade_name": "活动抵用券",
|
||||
"dwd_mobile": "17306741548",
|
||||
"ods_mobile": "17306741548",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-188.00",
|
||||
"ods_pay_money_sum": "-188.00",
|
||||
"dwd_recharge_money_sum": "188.00",
|
||||
"ods_recharge_money_sum": "188.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 3066773300268357,
|
||||
"ods_system_member_id": "3066773300268357",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2966381620874693,
|
||||
"dwd_create_time": "2025-11-15T22:59:28+08:00",
|
||||
"ods_create_time": "2025-11-15 22:59:28",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "15915866234",
|
||||
"ods_mobile": "15915866234",
|
||||
"dwd_nickname": "尤",
|
||||
"ods_nickname": "尤",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "200.00",
|
||||
"ods_recharge_money_sum": "200.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2966381618761157,
|
||||
"ods_system_member_id": "2966381618761157",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2807525094639429,
|
||||
"dwd_create_time": "2025-07-26T17:42:15+08:00",
|
||||
"ods_create_time": "2025-07-26 17:42:15",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "15802496094",
|
||||
"ods_mobile": "15802496094",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2807525093623621,
|
||||
"ods_system_member_id": "2807525093623621",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2799212423857925,
|
||||
"dwd_create_time": "2025-07-20T20:46:10+08:00",
|
||||
"ods_create_time": "2025-07-20 20:46:10",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "18148713553",
|
||||
"ods_mobile": "18148713553",
|
||||
"dwd_nickname": "潘",
|
||||
"ods_nickname": "潘",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799212422907653,
|
||||
"ods_system_member_id": "2799212422907653",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### dwd.dwd_member_balance_change — 映射异常明细
|
||||
|
||||
- `principal_change_amount` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"balance_change_id": 2800328071170949,
|
||||
"dwd_balance_after": "8.00",
|
||||
"ods_balance_after": "8.00",
|
||||
"dwd_balance_before": "199.00",
|
||||
"ods_balance_before": "199.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-191.00",
|
||||
"ods_change_amount": "-191.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:03+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:03",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800328508984197,
|
||||
"dwd_balance_after": "0.00",
|
||||
"ods_balance_after": "0.00",
|
||||
"dwd_balance_before": "8.00",
|
||||
"ods_balance_before": "8.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-8.00",
|
||||
"ods_change_amount": "-8.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:30+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:30",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800329356315525,
|
||||
"dwd_balance_after": "1957.00",
|
||||
"ods_balance_after": "1957.00",
|
||||
"dwd_balance_before": "2027.00",
|
||||
"ods_balance_before": "2027.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-70.00",
|
||||
"ods_change_amount": "-70.00",
|
||||
"dwd_change_time": "2025-07-21T15:42:22+08:00",
|
||||
"ods_change_time": "2025-07-21 15:42:22",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "13503045590",
|
||||
"ods_member_mobile": "13503045590",
|
||||
"dwd_member_name": "程允立",
|
||||
"ods_member_name": "程允立"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800330000272261,
|
||||
"dwd_balance_after": "1095.00",
|
||||
"ods_balance_after": "1095.00",
|
||||
"dwd_balance_before": "1162.00",
|
||||
"ods_balance_before": "1162.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-67.00",
|
||||
"ods_change_amount": "-67.00",
|
||||
"dwd_change_time": "2025-07-21T15:43:01+08:00",
|
||||
"ods_change_time": "2025-07-21 15:43:01",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "18689418682",
|
||||
"ods_member_mobile": "18689418682",
|
||||
"dwd_member_name": "易先生",
|
||||
"ods_member_name": "易先生"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800331271129989,
|
||||
"dwd_balance_after": "515.00",
|
||||
"ods_balance_after": "515.00",
|
||||
"dwd_balance_before": "175.00",
|
||||
"ods_balance_before": "175.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "340.00",
|
||||
"ods_change_amount": "340.00",
|
||||
"dwd_change_time": "2025-07-21T15:44:19+08:00",
|
||||
"ods_change_time": "2025-07-21 15:44:19",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19152047230",
|
||||
"ods_member_mobile": "19152047230",
|
||||
"dwd_member_name": "小唯",
|
||||
"ods_member_name": "小唯"
|
||||
}
|
||||
]
|
||||
```
|
||||
@@ -1,335 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-20T07:21:53.320578+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 38/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ✅ | 15 | 15 | 0 | 0 | 295 | 1266 | |
|
||||
| dwd.dim_assistant_ex | ✅ | 44 | 44 | 0 | 0 | 295 | 1251 | |
|
||||
| dwd.dim_goods_category | ✅ | 12 | 12 | 0 | 0 | 18 | 125 | |
|
||||
| dwd.dim_groupbuy_package | ✅ | 18 | 18 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_groupbuy_package_ex | ✅ | 21 | 21 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_member | ❌ | 12 | 11 | 1 | 0 | 1771 | 10801 | |
|
||||
| dwd.dim_member_card_account | ✅ | 19 | 19 | 0 | 0 | 2973 | 18370 | |
|
||||
| dwd.dim_member_card_account_ex | ✅ | 57 | 57 | 0 | 0 | 2973 | 18172 | |
|
||||
| dwd.dim_member_ex | ✅ | 10 | 10 | 0 | 0 | 1771 | 10770 | |
|
||||
| dwd.dim_site | ✅ | 13 | 13 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_site_ex | ✅ | 21 | 21 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_store_goods | ✅ | 22 | 22 | 0 | 0 | 1744 | 5444 | |
|
||||
| dwd.dim_store_goods_ex | ✅ | 26 | 26 | 0 | 0 | 1744 | 5402 | |
|
||||
| dwd.dim_table | ✅ | 8 | 8 | 0 | 0 | 1074 | 2881 | |
|
||||
| dwd.dim_table_ex | ✅ | 20 | 20 | 0 | 0 | 1074 | 3035 | |
|
||||
| dwd.dim_tenant_goods | ✅ | 15 | 15 | 0 | 0 | 353 | 2018 | |
|
||||
| dwd.dim_tenant_goods_ex | ✅ | 18 | 18 | 0 | 0 | 353 | 2016 | |
|
||||
| dwd.dwd_assistant_service_log | ✅ | 33 | 33 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_service_log_ex | ✅ | 31 | 31 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_trash_event | ✅ | 11 | 11 | 0 | 0 | 100 | 100 | |
|
||||
| dwd.dwd_assistant_trash_event_ex | ✅ | 3 | 3 | 0 | 0 | 100 | 100 | |
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_movement 不存在或无列 |
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_summary 不存在或无列 |
|
||||
| dwd.dwd_groupbuy_redemption | ✅ | 25 | 25 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_groupbuy_redemption_ex | ✅ | 28 | 28 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_member_balance_change | ❌ | 22 | 21 | 1 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_member_balance_change_ex | ✅ | 7 | 7 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_payment | ✅ | 12 | 12 | 0 | 0 | 36006 | 24922 | |
|
||||
| dwd.dwd_platform_coupon_redemption | ✅ | 20 | 20 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ✅ | 6 | 6 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_recharge_order | ✅ | 24 | 24 | 0 | 0 | 3333 | 485 | |
|
||||
| dwd.dwd_recharge_order_ex | ✅ | 43 | 43 | 0 | 0 | 3333 | 485 | |
|
||||
| dwd.dwd_refund | ✅ | 12 | 12 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_refund_ex | ✅ | 20 | 20 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_settlement_head | ✅ | 37 | 37 | 0 | 0 | 55457 | 26115 | |
|
||||
| dwd.dwd_settlement_head_ex | ✅ | 30 | 30 | 0 | 0 | 55457 | 26115 | |
|
||||
| dwd.dwd_store_goods_sale | ✅ | 24 | 24 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_store_goods_sale_ex | ✅ | 28 | 28 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_table_fee_adjust | ✅ | 16 | 16 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_adjust_ex | ✅ | 13 | 13 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_log | ✅ | 29 | 29 | 0 | 0 | 38585 | 20132 | |
|
||||
| dwd.dwd_table_fee_log_ex | ✅ | 13 | 13 | 0 | 0 | 38585 | 20132 | |
|
||||
|
||||
### dwd.dim_member — 映射异常明细
|
||||
|
||||
- `update_time` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"member_id": 2860039721438277,
|
||||
"dwd_create_time": "2025-09-01T20:02:53+08:00",
|
||||
"ods_create_time": "2025-09-01 20:02:53",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "13189179882",
|
||||
"ods_mobile": "13189179882",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-788.37",
|
||||
"ods_pay_money_sum": "-788.37",
|
||||
"dwd_recharge_money_sum": "2716.00",
|
||||
"ods_recharge_money_sum": "2716.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799207107888901,
|
||||
"ods_system_member_id": "2799207107888901",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 3066773303512389,
|
||||
"dwd_create_time": "2026-01-25T21:03:10+08:00",
|
||||
"ods_create_time": "2026-01-25 21:03:10",
|
||||
"dwd_member_card_grade_code": 2790683528022856,
|
||||
"ods_member_card_grade_code": "2790683528022856",
|
||||
"dwd_member_card_grade_name": "活动抵用券",
|
||||
"ods_member_card_grade_name": "活动抵用券",
|
||||
"dwd_mobile": "17306741548",
|
||||
"ods_mobile": "17306741548",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-188.00",
|
||||
"ods_pay_money_sum": "-188.00",
|
||||
"dwd_recharge_money_sum": "188.00",
|
||||
"ods_recharge_money_sum": "188.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 3066773300268357,
|
||||
"ods_system_member_id": "3066773300268357",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2966381620874693,
|
||||
"dwd_create_time": "2025-11-15T22:59:28+08:00",
|
||||
"ods_create_time": "2025-11-15 22:59:28",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "15915866234",
|
||||
"ods_mobile": "15915866234",
|
||||
"dwd_nickname": "尤",
|
||||
"ods_nickname": "尤",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "200.00",
|
||||
"ods_recharge_money_sum": "200.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2966381618761157,
|
||||
"ods_system_member_id": "2966381618761157",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2807525094639429,
|
||||
"dwd_create_time": "2025-07-26T17:42:15+08:00",
|
||||
"ods_create_time": "2025-07-26 17:42:15",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "15802496094",
|
||||
"ods_mobile": "15802496094",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2807525093623621,
|
||||
"ods_system_member_id": "2807525093623621",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2799212423857925,
|
||||
"dwd_create_time": "2025-07-20T20:46:10+08:00",
|
||||
"ods_create_time": "2025-07-20 20:46:10",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "18148713553",
|
||||
"ods_mobile": "18148713553",
|
||||
"dwd_nickname": "潘",
|
||||
"ods_nickname": "潘",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799212422907653,
|
||||
"ods_system_member_id": "2799212422907653",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### dwd.dwd_member_balance_change — 映射异常明细
|
||||
|
||||
- `principal_change_amount` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"balance_change_id": 2800328071170949,
|
||||
"dwd_balance_after": "8.00",
|
||||
"ods_balance_after": "8.00",
|
||||
"dwd_balance_before": "199.00",
|
||||
"ods_balance_before": "199.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-191.00",
|
||||
"ods_change_amount": "-191.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:03+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:03",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800328508984197,
|
||||
"dwd_balance_after": "0.00",
|
||||
"ods_balance_after": "0.00",
|
||||
"dwd_balance_before": "8.00",
|
||||
"ods_balance_before": "8.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-8.00",
|
||||
"ods_change_amount": "-8.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:30+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:30",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800329356315525,
|
||||
"dwd_balance_after": "1957.00",
|
||||
"ods_balance_after": "1957.00",
|
||||
"dwd_balance_before": "2027.00",
|
||||
"ods_balance_before": "2027.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-70.00",
|
||||
"ods_change_amount": "-70.00",
|
||||
"dwd_change_time": "2025-07-21T15:42:22+08:00",
|
||||
"ods_change_time": "2025-07-21 15:42:22",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "13503045590",
|
||||
"ods_member_mobile": "13503045590",
|
||||
"dwd_member_name": "程允立",
|
||||
"ods_member_name": "程允立"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800330000272261,
|
||||
"dwd_balance_after": "1095.00",
|
||||
"ods_balance_after": "1095.00",
|
||||
"dwd_balance_before": "1162.00",
|
||||
"ods_balance_before": "1162.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-67.00",
|
||||
"ods_change_amount": "-67.00",
|
||||
"dwd_change_time": "2025-07-21T15:43:01+08:00",
|
||||
"ods_change_time": "2025-07-21 15:43:01",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "18689418682",
|
||||
"ods_member_mobile": "18689418682",
|
||||
"dwd_member_name": "易先生",
|
||||
"ods_member_name": "易先生"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800331271129989,
|
||||
"dwd_balance_after": "515.00",
|
||||
"ods_balance_after": "515.00",
|
||||
"dwd_balance_before": "175.00",
|
||||
"ods_balance_before": "175.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "340.00",
|
||||
"ods_change_amount": "340.00",
|
||||
"dwd_change_time": "2025-07-21T15:44:19+08:00",
|
||||
"ods_change_time": "2025-07-21 15:44:19",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19152047230",
|
||||
"ods_member_mobile": "19152047230",
|
||||
"dwd_member_name": "小唯",
|
||||
"ods_member_name": "小唯"
|
||||
}
|
||||
]
|
||||
```
|
||||
@@ -1,335 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-20T07:35:49.899418+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 38/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ✅ | 15 | 15 | 0 | 0 | 295 | 1266 | |
|
||||
| dwd.dim_assistant_ex | ✅ | 44 | 44 | 0 | 0 | 295 | 1251 | |
|
||||
| dwd.dim_goods_category | ✅ | 12 | 12 | 0 | 0 | 18 | 125 | |
|
||||
| dwd.dim_groupbuy_package | ✅ | 18 | 18 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_groupbuy_package_ex | ✅ | 21 | 21 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_member | ❌ | 12 | 11 | 1 | 0 | 1771 | 10801 | |
|
||||
| dwd.dim_member_card_account | ✅ | 19 | 19 | 0 | 0 | 2973 | 18370 | |
|
||||
| dwd.dim_member_card_account_ex | ✅ | 57 | 57 | 0 | 0 | 2973 | 18172 | |
|
||||
| dwd.dim_member_ex | ✅ | 10 | 10 | 0 | 0 | 1771 | 10770 | |
|
||||
| dwd.dim_site | ✅ | 13 | 13 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_site_ex | ✅ | 21 | 21 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_store_goods | ✅ | 22 | 22 | 0 | 0 | 1744 | 5444 | |
|
||||
| dwd.dim_store_goods_ex | ✅ | 26 | 26 | 0 | 0 | 1744 | 5402 | |
|
||||
| dwd.dim_table | ✅ | 8 | 8 | 0 | 0 | 1074 | 2881 | |
|
||||
| dwd.dim_table_ex | ✅ | 20 | 20 | 0 | 0 | 1074 | 3035 | |
|
||||
| dwd.dim_tenant_goods | ✅ | 15 | 15 | 0 | 0 | 353 | 2018 | |
|
||||
| dwd.dim_tenant_goods_ex | ✅ | 18 | 18 | 0 | 0 | 353 | 2016 | |
|
||||
| dwd.dwd_assistant_service_log | ✅ | 33 | 33 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_service_log_ex | ✅ | 31 | 31 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_trash_event | ✅ | 11 | 11 | 0 | 0 | 100 | 100 | |
|
||||
| dwd.dwd_assistant_trash_event_ex | ✅ | 3 | 3 | 0 | 0 | 100 | 100 | |
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_movement 不存在或无列 |
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_summary 不存在或无列 |
|
||||
| dwd.dwd_groupbuy_redemption | ✅ | 25 | 25 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_groupbuy_redemption_ex | ✅ | 28 | 28 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_member_balance_change | ❌ | 22 | 21 | 1 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_member_balance_change_ex | ✅ | 7 | 7 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_payment | ✅ | 12 | 12 | 0 | 0 | 36006 | 24922 | |
|
||||
| dwd.dwd_platform_coupon_redemption | ✅ | 20 | 20 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ✅ | 6 | 6 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_recharge_order | ✅ | 24 | 24 | 0 | 0 | 3333 | 485 | |
|
||||
| dwd.dwd_recharge_order_ex | ✅ | 43 | 43 | 0 | 0 | 3333 | 485 | |
|
||||
| dwd.dwd_refund | ✅ | 12 | 12 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_refund_ex | ✅ | 20 | 20 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_settlement_head | ✅ | 37 | 37 | 0 | 0 | 55457 | 26115 | |
|
||||
| dwd.dwd_settlement_head_ex | ✅ | 30 | 30 | 0 | 0 | 55457 | 26115 | |
|
||||
| dwd.dwd_store_goods_sale | ✅ | 24 | 24 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_store_goods_sale_ex | ✅ | 28 | 28 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_table_fee_adjust | ✅ | 16 | 16 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_adjust_ex | ✅ | 13 | 13 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_log | ✅ | 29 | 29 | 0 | 0 | 38585 | 20132 | |
|
||||
| dwd.dwd_table_fee_log_ex | ✅ | 13 | 13 | 0 | 0 | 38585 | 20132 | |
|
||||
|
||||
### dwd.dim_member — 映射异常明细
|
||||
|
||||
- `update_time` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"member_id": 2860039721438277,
|
||||
"dwd_create_time": "2025-09-01T20:02:53+08:00",
|
||||
"ods_create_time": "2025-09-01 20:02:53",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "13189179882",
|
||||
"ods_mobile": "13189179882",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-788.37",
|
||||
"ods_pay_money_sum": "-788.37",
|
||||
"dwd_recharge_money_sum": "2716.00",
|
||||
"ods_recharge_money_sum": "2716.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799207107888901,
|
||||
"ods_system_member_id": "2799207107888901",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 3066773303512389,
|
||||
"dwd_create_time": "2026-01-25T21:03:10+08:00",
|
||||
"ods_create_time": "2026-01-25 21:03:10",
|
||||
"dwd_member_card_grade_code": 2790683528022856,
|
||||
"ods_member_card_grade_code": "2790683528022856",
|
||||
"dwd_member_card_grade_name": "活动抵用券",
|
||||
"ods_member_card_grade_name": "活动抵用券",
|
||||
"dwd_mobile": "17306741548",
|
||||
"ods_mobile": "17306741548",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-188.00",
|
||||
"ods_pay_money_sum": "-188.00",
|
||||
"dwd_recharge_money_sum": "188.00",
|
||||
"ods_recharge_money_sum": "188.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 3066773300268357,
|
||||
"ods_system_member_id": "3066773300268357",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2966381620874693,
|
||||
"dwd_create_time": "2025-11-15T22:59:28+08:00",
|
||||
"ods_create_time": "2025-11-15 22:59:28",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "15915866234",
|
||||
"ods_mobile": "15915866234",
|
||||
"dwd_nickname": "尤",
|
||||
"ods_nickname": "尤",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "200.00",
|
||||
"ods_recharge_money_sum": "200.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2966381618761157,
|
||||
"ods_system_member_id": "2966381618761157",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2807525094639429,
|
||||
"dwd_create_time": "2025-07-26T17:42:15+08:00",
|
||||
"ods_create_time": "2025-07-26 17:42:15",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "15802496094",
|
||||
"ods_mobile": "15802496094",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2807525093623621,
|
||||
"ods_system_member_id": "2807525093623621",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2799212423857925,
|
||||
"dwd_create_time": "2025-07-20T20:46:10+08:00",
|
||||
"ods_create_time": "2025-07-20 20:46:10",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "18148713553",
|
||||
"ods_mobile": "18148713553",
|
||||
"dwd_nickname": "潘",
|
||||
"ods_nickname": "潘",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799212422907653,
|
||||
"ods_system_member_id": "2799212422907653",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### dwd.dwd_member_balance_change — 映射异常明细
|
||||
|
||||
- `principal_change_amount` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"balance_change_id": 2800328071170949,
|
||||
"dwd_balance_after": "8.00",
|
||||
"ods_balance_after": "8.00",
|
||||
"dwd_balance_before": "199.00",
|
||||
"ods_balance_before": "199.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-191.00",
|
||||
"ods_change_amount": "-191.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:03+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:03",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800328508984197,
|
||||
"dwd_balance_after": "0.00",
|
||||
"ods_balance_after": "0.00",
|
||||
"dwd_balance_before": "8.00",
|
||||
"ods_balance_before": "8.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-8.00",
|
||||
"ods_change_amount": "-8.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:30+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:30",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800329356315525,
|
||||
"dwd_balance_after": "1957.00",
|
||||
"ods_balance_after": "1957.00",
|
||||
"dwd_balance_before": "2027.00",
|
||||
"ods_balance_before": "2027.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-70.00",
|
||||
"ods_change_amount": "-70.00",
|
||||
"dwd_change_time": "2025-07-21T15:42:22+08:00",
|
||||
"ods_change_time": "2025-07-21 15:42:22",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "13503045590",
|
||||
"ods_member_mobile": "13503045590",
|
||||
"dwd_member_name": "程允立",
|
||||
"ods_member_name": "程允立"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800330000272261,
|
||||
"dwd_balance_after": "1095.00",
|
||||
"ods_balance_after": "1095.00",
|
||||
"dwd_balance_before": "1162.00",
|
||||
"ods_balance_before": "1162.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-67.00",
|
||||
"ods_change_amount": "-67.00",
|
||||
"dwd_change_time": "2025-07-21T15:43:01+08:00",
|
||||
"ods_change_time": "2025-07-21 15:43:01",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "18689418682",
|
||||
"ods_member_mobile": "18689418682",
|
||||
"dwd_member_name": "易先生",
|
||||
"ods_member_name": "易先生"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800331271129989,
|
||||
"dwd_balance_after": "515.00",
|
||||
"ods_balance_after": "515.00",
|
||||
"dwd_balance_before": "175.00",
|
||||
"ods_balance_before": "175.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "340.00",
|
||||
"ods_change_amount": "340.00",
|
||||
"dwd_change_time": "2025-07-21T15:44:19+08:00",
|
||||
"ods_change_time": "2025-07-21 15:44:19",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19152047230",
|
||||
"ods_member_mobile": "19152047230",
|
||||
"dwd_member_name": "小唯",
|
||||
"ods_member_name": "小唯"
|
||||
}
|
||||
]
|
||||
```
|
||||
@@ -1,335 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-20T09:13:56.727591+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 38/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ✅ | 15 | 15 | 0 | 0 | 295 | 1266 | |
|
||||
| dwd.dim_assistant_ex | ✅ | 44 | 44 | 0 | 0 | 295 | 1251 | |
|
||||
| dwd.dim_goods_category | ✅ | 12 | 12 | 0 | 0 | 18 | 125 | |
|
||||
| dwd.dim_groupbuy_package | ✅ | 18 | 18 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_groupbuy_package_ex | ✅ | 21 | 21 | 0 | 0 | 70 | 373 | |
|
||||
| dwd.dim_member | ❌ | 12 | 11 | 1 | 0 | 1771 | 10801 | |
|
||||
| dwd.dim_member_card_account | ✅ | 19 | 19 | 0 | 0 | 2973 | 18370 | |
|
||||
| dwd.dim_member_card_account_ex | ✅ | 57 | 57 | 0 | 0 | 2973 | 18172 | |
|
||||
| dwd.dim_member_ex | ✅ | 10 | 10 | 0 | 0 | 1771 | 10770 | |
|
||||
| dwd.dim_site | ✅ | 13 | 13 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_site_ex | ✅ | 21 | 21 | 0 | 0 | 38585 | 55 | |
|
||||
| dwd.dim_store_goods | ✅ | 22 | 22 | 0 | 0 | 1789 | 5444 | |
|
||||
| dwd.dim_store_goods_ex | ✅ | 26 | 26 | 0 | 0 | 1789 | 5402 | |
|
||||
| dwd.dim_table | ✅ | 8 | 8 | 0 | 0 | 1074 | 2881 | |
|
||||
| dwd.dim_table_ex | ✅ | 20 | 20 | 0 | 0 | 1074 | 3035 | |
|
||||
| dwd.dim_tenant_goods | ✅ | 15 | 15 | 0 | 0 | 353 | 2018 | |
|
||||
| dwd.dim_tenant_goods_ex | ✅ | 18 | 18 | 0 | 0 | 353 | 2016 | |
|
||||
| dwd.dwd_assistant_service_log | ✅ | 33 | 33 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_service_log_ex | ✅ | 31 | 31 | 0 | 0 | 10219 | 5281 | |
|
||||
| dwd.dwd_assistant_trash_event | ✅ | 11 | 11 | 0 | 0 | 178 | 100 | |
|
||||
| dwd.dwd_assistant_trash_event_ex | ✅ | 3 | 3 | 0 | 0 | 178 | 100 | |
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_movement 不存在或无列 |
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | DWD 表 dwd.dwd_goods_stock_summary 不存在或无列 |
|
||||
| dwd.dwd_groupbuy_redemption | ✅ | 25 | 25 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_groupbuy_redemption_ex | ✅ | 28 | 28 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_member_balance_change | ❌ | 22 | 21 | 1 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_member_balance_change_ex | ✅ | 7 | 7 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_payment | ✅ | 12 | 12 | 0 | 0 | 36006 | 24922 | |
|
||||
| dwd.dwd_platform_coupon_redemption | ✅ | 20 | 20 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ✅ | 6 | 6 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_recharge_order | ✅ | 24 | 24 | 0 | 0 | 3527 | 485 | |
|
||||
| dwd.dwd_recharge_order_ex | ✅ | 43 | 43 | 0 | 0 | 3527 | 485 | |
|
||||
| dwd.dwd_refund | ✅ | 12 | 12 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_refund_ex | ✅ | 20 | 20 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_settlement_head | ✅ | 37 | 37 | 0 | 0 | 66073 | 26115 | |
|
||||
| dwd.dwd_settlement_head_ex | ✅ | 30 | 30 | 0 | 0 | 66073 | 26115 | |
|
||||
| dwd.dwd_store_goods_sale | ✅ | 24 | 24 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_store_goods_sale_ex | ✅ | 28 | 28 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_table_fee_adjust | ✅ | 16 | 16 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_adjust_ex | ✅ | 13 | 13 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_log | ✅ | 29 | 29 | 0 | 0 | 38585 | 20132 | |
|
||||
| dwd.dwd_table_fee_log_ex | ✅ | 13 | 13 | 0 | 0 | 38585 | 20132 | |
|
||||
|
||||
### dwd.dim_member — 映射异常明细
|
||||
|
||||
- `update_time` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"member_id": 2860039721438277,
|
||||
"dwd_create_time": "2025-09-01T20:02:53+08:00",
|
||||
"ods_create_time": "2025-09-01 20:02:53",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "13189179882",
|
||||
"ods_mobile": "13189179882",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-788.37",
|
||||
"ods_pay_money_sum": "-788.37",
|
||||
"dwd_recharge_money_sum": "2716.00",
|
||||
"ods_recharge_money_sum": "2716.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799207107888901,
|
||||
"ods_system_member_id": "2799207107888901",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 3066773303512389,
|
||||
"dwd_create_time": "2026-01-25T21:03:10+08:00",
|
||||
"ods_create_time": "2026-01-25 21:03:10",
|
||||
"dwd_member_card_grade_code": 2790683528022856,
|
||||
"ods_member_card_grade_code": "2790683528022856",
|
||||
"dwd_member_card_grade_name": "活动抵用券",
|
||||
"ods_member_card_grade_name": "活动抵用券",
|
||||
"dwd_mobile": "17306741548",
|
||||
"ods_mobile": "17306741548",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "-188.00",
|
||||
"ods_pay_money_sum": "-188.00",
|
||||
"dwd_recharge_money_sum": "188.00",
|
||||
"ods_recharge_money_sum": "188.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 3066773300268357,
|
||||
"ods_system_member_id": "3066773300268357",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2966381620874693,
|
||||
"dwd_create_time": "2025-11-15T22:59:28+08:00",
|
||||
"ods_create_time": "2025-11-15 22:59:28",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "15915866234",
|
||||
"ods_mobile": "15915866234",
|
||||
"dwd_nickname": "尤",
|
||||
"ods_nickname": "尤",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "200.00",
|
||||
"ods_recharge_money_sum": "200.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2966381618761157,
|
||||
"ods_system_member_id": "2966381618761157",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2807525094639429,
|
||||
"dwd_create_time": "2025-07-26T17:42:15+08:00",
|
||||
"ods_create_time": "2025-07-26 17:42:15",
|
||||
"dwd_member_card_grade_code": 2790683528022853,
|
||||
"ods_member_card_grade_code": "2790683528022853",
|
||||
"dwd_member_card_grade_name": "储值卡",
|
||||
"ods_member_card_grade_name": "储值卡",
|
||||
"dwd_mobile": "15802496094",
|
||||
"ods_mobile": "15802496094",
|
||||
"dwd_nickname": "李",
|
||||
"ods_nickname": "李",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2807525093623621,
|
||||
"ods_system_member_id": "2807525093623621",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
},
|
||||
{
|
||||
"member_id": 2799212423857925,
|
||||
"dwd_create_time": "2025-07-20T20:46:10+08:00",
|
||||
"ods_create_time": "2025-07-20 20:46:10",
|
||||
"dwd_member_card_grade_code": 2790683528022855,
|
||||
"ods_member_card_grade_code": "2790683528022855",
|
||||
"dwd_member_card_grade_name": "台费卡",
|
||||
"ods_member_card_grade_name": "台费卡",
|
||||
"dwd_mobile": "18148713553",
|
||||
"ods_mobile": "18148713553",
|
||||
"dwd_nickname": "潘",
|
||||
"ods_nickname": "潘",
|
||||
"dwd_pay_money_sum": "0.00",
|
||||
"ods_pay_money_sum": "0.00",
|
||||
"dwd_recharge_money_sum": "0.00",
|
||||
"ods_recharge_money_sum": "0.00",
|
||||
"dwd_register_site_id": 2790685415443269,
|
||||
"ods_register_site_id": "2790685415443269",
|
||||
"dwd_system_member_id": 2799212422907653,
|
||||
"ods_system_member_id": "2799212422907653",
|
||||
"dwd_tenant_id": 2790683160709957,
|
||||
"ods_tenant_id": "2790683160709957"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### dwd.dwd_member_balance_change — 映射异常明细
|
||||
|
||||
- `principal_change_amount` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
|
||||
#### 值不一致采样(前 5 条)
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"balance_change_id": 2800328071170949,
|
||||
"dwd_balance_after": "8.00",
|
||||
"ods_balance_after": "8.00",
|
||||
"dwd_balance_before": "199.00",
|
||||
"ods_balance_before": "199.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-191.00",
|
||||
"ods_change_amount": "-191.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:03+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:03",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800328508984197,
|
||||
"dwd_balance_after": "0.00",
|
||||
"ods_balance_after": "0.00",
|
||||
"dwd_balance_before": "8.00",
|
||||
"ods_balance_before": "8.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-8.00",
|
||||
"ods_change_amount": "-8.00",
|
||||
"dwd_change_time": "2025-07-21T15:41:30+08:00",
|
||||
"ods_change_time": "2025-07-21 15:41:30",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19120942851",
|
||||
"ods_member_mobile": "19120942851",
|
||||
"dwd_member_name": "夏",
|
||||
"ods_member_name": "夏"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800329356315525,
|
||||
"dwd_balance_after": "1957.00",
|
||||
"ods_balance_after": "1957.00",
|
||||
"dwd_balance_before": "2027.00",
|
||||
"ods_balance_before": "2027.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-70.00",
|
||||
"ods_change_amount": "-70.00",
|
||||
"dwd_change_time": "2025-07-21T15:42:22+08:00",
|
||||
"ods_change_time": "2025-07-21 15:42:22",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "13503045590",
|
||||
"ods_member_mobile": "13503045590",
|
||||
"dwd_member_name": "程允立",
|
||||
"ods_member_name": "程允立"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800330000272261,
|
||||
"dwd_balance_after": "1095.00",
|
||||
"ods_balance_after": "1095.00",
|
||||
"dwd_balance_before": "1162.00",
|
||||
"ods_balance_before": "1162.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "-67.00",
|
||||
"ods_change_amount": "-67.00",
|
||||
"dwd_change_time": "2025-07-21T15:43:01+08:00",
|
||||
"ods_change_time": "2025-07-21 15:43:01",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "18689418682",
|
||||
"ods_member_mobile": "18689418682",
|
||||
"dwd_member_name": "易先生",
|
||||
"ods_member_name": "易先生"
|
||||
},
|
||||
{
|
||||
"balance_change_id": 2800331271129989,
|
||||
"dwd_balance_after": "515.00",
|
||||
"ods_balance_after": "515.00",
|
||||
"dwd_balance_before": "175.00",
|
||||
"ods_balance_before": "175.00",
|
||||
"dwd_card_type_id": 2793249295533893,
|
||||
"ods_card_type_id": "2793249295533893",
|
||||
"dwd_card_type_name": "储值卡",
|
||||
"ods_card_type_name": "储值卡",
|
||||
"dwd_change_amount": "340.00",
|
||||
"ods_change_amount": "340.00",
|
||||
"dwd_change_time": "2025-07-21T15:44:19+08:00",
|
||||
"ods_change_time": "2025-07-21 15:44:19",
|
||||
"dwd_from_type": 9,
|
||||
"ods_from_type": "9",
|
||||
"dwd_is_delete": 1,
|
||||
"ods_is_delete": "1",
|
||||
"dwd_member_mobile": "19152047230",
|
||||
"ods_member_mobile": "19152047230",
|
||||
"dwd_member_name": "小唯",
|
||||
"ods_member_name": "小唯"
|
||||
}
|
||||
]
|
||||
```
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T15:39:08.330965+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T19:30:15.876594+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T19:52:20.129042+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T20:08:55.483294+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T20:31:27.049664+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T21:14:42.451232+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T21:26:36.915408+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,125 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T21:34:59.812645+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 0/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_assistant_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_goods_category | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_groupbuy_package_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_card_account_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_member_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_site_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_store_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_table_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dim_tenant_goods_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_service_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_assistant_trash_event_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_movement | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_groupbuy_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_member_balance_change_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_payment | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_recharge_order_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_refund_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_settlement_head_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_store_goods_sale_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_adjust_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
| dwd.dwd_table_fee_log_ex | ❌ | 0 | 0 | 0 | 0 | 0 | 0 | InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
|
||||
@@ -1,88 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T22:40:07.845381+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 41/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ✅ | 15 | 15 | 0 | 0 | 295 | 1404 | |
|
||||
| dwd.dim_assistant_ex | ✅ | 48 | 48 | 0 | 0 | 295 | 1320 | |
|
||||
| dwd.dim_goods_category | ✅ | 12 | 12 | 0 | 0 | 18 | 177 | |
|
||||
| dwd.dim_groupbuy_package | ✅ | 18 | 18 | 0 | 0 | 70 | 441 | |
|
||||
| dwd.dim_groupbuy_package_ex | ✅ | 21 | 21 | 0 | 0 | 70 | 441 | |
|
||||
| dwd.dim_member | ✅ | 12 | 12 | 0 | 0 | 1771 | 11915 | |
|
||||
| dwd.dim_member_card_account | ✅ | 19 | 19 | 0 | 0 | 2973 | 20262 | |
|
||||
| dwd.dim_member_card_account_ex | ✅ | 57 | 57 | 0 | 0 | 2973 | 19118 | |
|
||||
| dwd.dim_member_ex | ✅ | 10 | 10 | 0 | 0 | 1771 | 11884 | |
|
||||
| dwd.dim_site | ✅ | 13 | 13 | 0 | 0 | 38585 | 57 | |
|
||||
| dwd.dim_site_ex | ✅ | 21 | 21 | 0 | 0 | 38585 | 56 | |
|
||||
| dwd.dim_store_goods | ✅ | 22 | 22 | 0 | 0 | 1829 | 5790 | |
|
||||
| dwd.dim_store_goods_ex | ✅ | 28 | 28 | 0 | 0 | 1829 | 5748 | |
|
||||
| dwd.dim_table | ✅ | 8 | 8 | 0 | 0 | 1074 | 3029 | |
|
||||
| dwd.dim_table_ex | ✅ | 20 | 20 | 0 | 0 | 1074 | 3183 | |
|
||||
| dwd.dim_tenant_goods | ✅ | 15 | 15 | 0 | 0 | 353 | 2366 | |
|
||||
| dwd.dim_tenant_goods_ex | ✅ | 18 | 18 | 0 | 0 | 353 | 2364 | |
|
||||
| dwd.dwd_assistant_service_log | ✅ | 33 | 33 | 0 | 0 | 12903 | 5297 | |
|
||||
| dwd.dwd_assistant_service_log_ex | ✅ | 33 | 33 | 0 | 0 | 12903 | 5297 | |
|
||||
| dwd.dwd_assistant_trash_event | ✅ | 11 | 11 | 0 | 0 | 178 | 100 | |
|
||||
| dwd.dwd_assistant_trash_event_ex | ✅ | 4 | 4 | 0 | 0 | 178 | 100 | |
|
||||
| dwd.dwd_goods_stock_movement | ✅ | 20 | 20 | 0 | 0 | 50162 | 14306 | |
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 17 | 15 | 2 | 0 | 2685 | 716 | |
|
||||
| dwd.dwd_groupbuy_redemption | ✅ | 25 | 25 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_groupbuy_redemption_ex | ✅ | 28 | 28 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_member_balance_change | ✅ | 22 | 22 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_member_balance_change_ex | ✅ | 8 | 8 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_payment | ✅ | 12 | 12 | 0 | 0 | 36006 | 24922 | |
|
||||
| dwd.dwd_platform_coupon_redemption | ✅ | 20 | 20 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ✅ | 6 | 6 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_recharge_order | ✅ | 24 | 24 | 0 | 0 | 3527 | 485 | |
|
||||
| dwd.dwd_recharge_order_ex | ✅ | 43 | 43 | 0 | 0 | 3527 | 485 | |
|
||||
| dwd.dwd_refund | ✅ | 12 | 12 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_refund_ex | ✅ | 20 | 20 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_settlement_head | ✅ | 37 | 37 | 0 | 0 | 66073 | 26435 | |
|
||||
| dwd.dwd_settlement_head_ex | ✅ | 30 | 30 | 0 | 0 | 66073 | 26435 | |
|
||||
| dwd.dwd_store_goods_sale | ✅ | 25 | 25 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_store_goods_sale_ex | ✅ | 28 | 28 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_table_fee_adjust | ✅ | 16 | 16 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_adjust_ex | ✅ | 13 | 13 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_log | ✅ | 29 | 29 | 0 | 0 | 38585 | 20132 | |
|
||||
| dwd.dwd_table_fee_log_ex | ✅ | 13 | 13 | 0 | 0 | 38585 | 20132 | |
|
||||
|
||||
### dwd.dwd_goods_stock_summary — 映射异常明细
|
||||
|
||||
- `site_id` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
- `tenant_id` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
@@ -1,88 +0,0 @@
|
||||
# 数据一致性黑盒测试报告
|
||||
|
||||
生成时间: 2026-02-21T22:49:54.514754+08:00
|
||||
总体结果: **❌ 存在异常**
|
||||
|
||||
## 汇总
|
||||
|
||||
- API vs ODS 字段完整性: 22/22 张表通过
|
||||
- ODS vs DWD 映射正确性: 41/42 张表通过
|
||||
|
||||
## API vs ODS 字段完整性检查
|
||||
|
||||
| 表名 | 状态 | 总字段 | 通过 | 缺失 | 备注 |
|
||||
|------|------|--------|------|------|------|
|
||||
| ods.assistant_accounts_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_accounts_master.json |
|
||||
| ods.assistant_cancellation_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_cancellation_records.json |
|
||||
| ods.assistant_service_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: assistant_service_records.json |
|
||||
| ods.goods_stock_movements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_movements.json |
|
||||
| ods.goods_stock_summary | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: goods_stock_summary.json |
|
||||
| ods.group_buy_packages | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_packages.json |
|
||||
| ods.group_buy_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: group_buy_redemption_records.json |
|
||||
| ods.member_balance_changes | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_balance_changes.json |
|
||||
| ods.member_profiles | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_profiles.json |
|
||||
| ods.member_stored_value_cards | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: member_stored_value_cards.json |
|
||||
| ods.payment_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: payment_transactions.json |
|
||||
| ods.platform_coupon_redemption_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: platform_coupon_redemption_records.json |
|
||||
| ods.recharge_settlements | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: recharge_settlements.json |
|
||||
| ods.refund_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: refund_transactions.json |
|
||||
| ods.settlement_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: settlement_records.json |
|
||||
| ods.site_tables_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: site_tables_master.json |
|
||||
| ods.stock_goods_category_tree | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: stock_goods_category_tree.json |
|
||||
| ods.store_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_master.json |
|
||||
| ods.store_goods_sales_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: store_goods_sales_records.json |
|
||||
| ods.table_fee_discount_records | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_discount_records.json |
|
||||
| ods.table_fee_transactions | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: table_fee_transactions.json |
|
||||
| ods.tenant_goods_master | ✅ | 0 | 0 | 0 | API JSON 缓存不存在: tenant_goods_master.json |
|
||||
|
||||
## ODS vs DWD 映射正确性检查
|
||||
|
||||
| DWD 表 | 状态 | 总字段 | 通过 | 缺失 | 不一致 | ODS 行数 | DWD 行数 | 备注 |
|
||||
|--------|------|--------|------|------|--------|----------|----------|------|
|
||||
| dwd.dim_assistant | ✅ | 15 | 15 | 0 | 0 | 295 | 1473 | |
|
||||
| dwd.dim_assistant_ex | ✅ | 48 | 48 | 0 | 0 | 295 | 1389 | |
|
||||
| dwd.dim_goods_category | ✅ | 12 | 12 | 0 | 0 | 18 | 203 | |
|
||||
| dwd.dim_groupbuy_package | ✅ | 18 | 18 | 0 | 0 | 70 | 475 | |
|
||||
| dwd.dim_groupbuy_package_ex | ✅ | 21 | 21 | 0 | 0 | 70 | 475 | |
|
||||
| dwd.dim_member | ✅ | 12 | 12 | 0 | 0 | 1771 | 12472 | |
|
||||
| dwd.dim_member_card_account | ✅ | 19 | 19 | 0 | 0 | 2973 | 21208 | |
|
||||
| dwd.dim_member_card_account_ex | ✅ | 57 | 57 | 0 | 0 | 2973 | 20064 | |
|
||||
| dwd.dim_member_ex | ✅ | 10 | 10 | 0 | 0 | 1771 | 12441 | |
|
||||
| dwd.dim_site | ✅ | 13 | 13 | 0 | 0 | 38585 | 58 | |
|
||||
| dwd.dim_site_ex | ✅ | 21 | 21 | 0 | 0 | 38585 | 57 | |
|
||||
| dwd.dim_store_goods | ✅ | 22 | 22 | 0 | 0 | 1829 | 5963 | |
|
||||
| dwd.dim_store_goods_ex | ✅ | 28 | 28 | 0 | 0 | 1829 | 5921 | |
|
||||
| dwd.dim_table | ✅ | 8 | 8 | 0 | 0 | 1074 | 3103 | |
|
||||
| dwd.dim_table_ex | ✅ | 20 | 20 | 0 | 0 | 1074 | 3257 | |
|
||||
| dwd.dim_tenant_goods | ✅ | 15 | 15 | 0 | 0 | 353 | 2540 | |
|
||||
| dwd.dim_tenant_goods_ex | ✅ | 18 | 18 | 0 | 0 | 353 | 2538 | |
|
||||
| dwd.dwd_assistant_service_log | ✅ | 33 | 33 | 0 | 0 | 12903 | 5297 | |
|
||||
| dwd.dwd_assistant_service_log_ex | ✅ | 33 | 33 | 0 | 0 | 12903 | 5297 | |
|
||||
| dwd.dwd_assistant_trash_event | ✅ | 11 | 11 | 0 | 0 | 178 | 100 | |
|
||||
| dwd.dwd_assistant_trash_event_ex | ✅ | 4 | 4 | 0 | 0 | 178 | 100 | |
|
||||
| dwd.dwd_goods_stock_movement | ✅ | 20 | 20 | 0 | 0 | 50162 | 14306 | |
|
||||
| dwd.dwd_goods_stock_summary | ❌ | 17 | 15 | 2 | 0 | 2685 | 716 | |
|
||||
| dwd.dwd_groupbuy_redemption | ✅ | 25 | 25 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_groupbuy_redemption_ex | ✅ | 28 | 28 | 0 | 0 | 27284 | 12768 | |
|
||||
| dwd.dwd_member_balance_change | ✅ | 22 | 22 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_member_balance_change_ex | ✅ | 8 | 8 | 0 | 0 | 9684 | 5081 | |
|
||||
| dwd.dwd_payment | ✅ | 12 | 12 | 0 | 0 | 36006 | 24922 | |
|
||||
| dwd.dwd_platform_coupon_redemption | ✅ | 20 | 20 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_platform_coupon_redemption_ex | ✅ | 6 | 6 | 0 | 0 | 36678 | 18311 | |
|
||||
| dwd.dwd_recharge_order | ✅ | 24 | 24 | 0 | 0 | 3527 | 485 | |
|
||||
| dwd.dwd_recharge_order_ex | ✅ | 43 | 43 | 0 | 0 | 3527 | 485 | |
|
||||
| dwd.dwd_refund | ✅ | 12 | 12 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_refund_ex | ✅ | 20 | 20 | 0 | 0 | 83 | 51 | |
|
||||
| dwd.dwd_settlement_head | ✅ | 37 | 37 | 0 | 0 | 66073 | 26435 | |
|
||||
| dwd.dwd_settlement_head_ex | ✅ | 30 | 30 | 0 | 0 | 66073 | 26435 | |
|
||||
| dwd.dwd_store_goods_sale | ✅ | 25 | 25 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_store_goods_sale_ex | ✅ | 28 | 28 | 0 | 0 | 17563 | 17563 | |
|
||||
| dwd.dwd_table_fee_adjust | ✅ | 16 | 16 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_adjust_ex | ✅ | 13 | 13 | 0 | 0 | 4818 | 3124 | |
|
||||
| dwd.dwd_table_fee_log | ✅ | 29 | 29 | 0 | 0 | 38585 | 20132 | |
|
||||
| dwd.dwd_table_fee_log_ex | ✅ | 13 | 13 | 0 | 0 | 38585 | 20132 | |
|
||||
|
||||
### dwd.dwd_goods_stock_summary — 映射异常明细
|
||||
|
||||
- `site_id` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
- `tenant_id` [missing]: DWD 列无 ODS 映射源(无显式映射且无同名 ODS 列)
|
||||
@@ -1,57 +0,0 @@
|
||||
# 上下文交接:字段级数据质量分析(任务2)
|
||||
|
||||
## 当前状态
|
||||
|
||||
字段级采样报告已生成,但用户认为还不够细致,需要继续深化。
|
||||
|
||||
## 已完成
|
||||
|
||||
- 字段级采样脚本:`scripts/ops/field_level_report.py`(v2 性能优化版,每表 1~2 条 SQL)
|
||||
- 报告产出:`export/ETL-Connectors/feiqiu/REPORTS/field_level_report_20260220_233432.md`(197KB,95 张表,2622 个字段)
|
||||
- 覆盖范围:ODS 23 表 / DWD 40 表 / DWS 32 表
|
||||
- 每字段统计:类型、NULL率、数值 min/max/avg、日期范围、文本长度范围、布尔分布
|
||||
- 大表(>3000行)跳过 COUNT DISTINCT(标记为 `-`),小表精确计算
|
||||
|
||||
## 已发现的数据质量问题
|
||||
|
||||
1. `dws.dws_order_summary.order_original_amount` 出现 -44000 负值(疑似退款/异常订单)
|
||||
2. `member_flag` 和 `recharge_order_flag` 全部 FALSE(12920 行),标记字段可能未正确计算
|
||||
3. 多张 `_ex` 表存在 `year -1` 异常日期值(上游 API 脏数据,脚本已用 `::text` 比较绕过)
|
||||
4. DWS 层 23/32 表为空(14 个 DWS 任务已注册但尚未运行,配置表未填充)
|
||||
|
||||
## 黑盒测试报告(已完成,供参考)
|
||||
|
||||
- 脚本:`scripts/ops/blackbox_test_report.py`
|
||||
- 报告:`export/ETL-Connectors/feiqiu/REPORTS/blackbox_report_20260220_181141.md`
|
||||
- 结论:ODS 22/22 成功,DWD 20/20 事实表比率 1.0(精确匹配),DWS 9/32 有数据
|
||||
|
||||
## ETL 最近一次运行
|
||||
|
||||
- 日志:`export/ETL-Connectors/feiqiu/LOGS/703747ca8db84aa785405fc75ee388a2.log`
|
||||
- 参数:`--flow api_full --processing-mode full_window --window-start 2025-11-01 --window-end 2026-02-20 --window-split-days 10 --force-full`
|
||||
- 结果:22 ODS SUCC,DWD SUCC,3 INDEX SUCC(WBI/NCI/ORDER_SUMMARY),1 INDEX FAIL(RELATION_INDEX: `d.is_delete` → 应为 `s.is_delete`),14 DWS SKIP(已修复注册,下次可运行)
|
||||
|
||||
## 已知未修复 Bug
|
||||
|
||||
- `DWS_RELATION_INDEX`:`relation_index_task.py` 第 226 行 `d.is_delete` 应为 `s.is_delete`
|
||||
- FlowRunner `full_window` 模式未生成 timing/consistency 报告(走了 else 分支)
|
||||
|
||||
## 关键文件
|
||||
|
||||
- `scripts/ops/field_level_report.py` — 字段级分析脚本
|
||||
- `scripts/ops/blackbox_test_report.py` — 黑盒测试脚本
|
||||
- `apps/etl/connectors/feiqiu/orchestration/task_registry.py` — 任务注册表
|
||||
- `apps/etl/connectors/feiqiu/orchestration/flow_runner.py` — FlowRunner
|
||||
- `apps/etl/connectors/feiqiu/tasks/dws/` — DWS 任务实现
|
||||
|
||||
## 数据库连接
|
||||
|
||||
- 四个 MCP 连接:`mcp_pg_etl`(正式)、`mcp_pg_etl_test`(测试)、`mcp_pg_app`、`mcp_pg_app_test`
|
||||
- store_id: `2790685415443269`
|
||||
|
||||
## 架构要点
|
||||
|
||||
- ODS PK = `(id, content_hash)`,快照模式
|
||||
- DWD:dim 表 SCD2,fact 表 `dwd_*`(非 `fact_*`),扩展属性在 `*_ex` 表
|
||||
- DWS:delete-before-insert 幂等,无游标
|
||||
- 输出路径从 `.env` 的 `ETL_REPORT_ROOT` 读取
|
||||
@@ -1,152 +0,0 @@
|
||||
# DDL vs 数据库一致性检查报告
|
||||
|
||||
生成时间:2026-02-21 21:22:55
|
||||
数据库:test_etl_feiqiu
|
||||
DDL 文件:ods.sql, dwd.sql, dws.sql, meta.sql
|
||||
|
||||
## 概览
|
||||
|
||||
| 指标 | 数量 |
|
||||
|------|------|
|
||||
| DDL 定义表数 | 99 |
|
||||
| DB 实际表数 | 99 |
|
||||
| 完全匹配 | 99 |
|
||||
| DDL 有但 DB 缺失 | 0 |
|
||||
| DB 有但 DDL 缺失 | 0 |
|
||||
|
||||
## 差异详情(15 项)
|
||||
|
||||
|
||||
### dwd.dim_store_goods_ex
|
||||
类型不匹配:batch_stock_quantity DDL=integer DB=numeric
|
||||
|
||||
### dwd.dwd_refund_ex
|
||||
DB 有但 DDL 缺失的列:['check_status']
|
||||
|
||||
### dws.dws_assistant_daily_detail
|
||||
DB 有但 DDL 缺失的列:['unique_customers', 'unique_tables']
|
||||
|
||||
### dws.dws_assistant_finance_analysis
|
||||
DB 有但 DDL 缺失的列:['unique_customers']
|
||||
|
||||
### dws.dws_assistant_monthly_summary
|
||||
DB 有但 DDL 缺失的列:['unique_customers', 'unique_tables']
|
||||
|
||||
### ods.refund_transactions
|
||||
DB 有但 DDL 缺失的列:['check_status']
|
||||
|
||||
### ods.site_tables_master
|
||||
DDL 有但 DB 缺失的列:['appletqrcodeurl']
|
||||
DB 有但 DDL 缺失的列:['appletQrCodeUrl']
|
||||
|
||||
## 索引概览
|
||||
|
||||
数据库中共 343 个索引,覆盖 107 张表。
|
||||
|
||||
- dwd.dim_assistant: 4 个索引
|
||||
- dwd.dim_assistant_ex: 6 个索引
|
||||
- dwd.dim_goods_category: 4 个索引
|
||||
- dwd.dim_groupbuy_package: 6 个索引
|
||||
- dwd.dim_groupbuy_package_ex: 4 个索引
|
||||
- dwd.dim_member: 6 个索引
|
||||
- dwd.dim_member_card_account: 4 个索引
|
||||
- dwd.dim_member_card_account_ex: 6 个索引
|
||||
- dwd.dim_member_ex: 4 个索引
|
||||
- dwd.dim_site: 4 个索引
|
||||
- dwd.dim_site_ex: 6 个索引
|
||||
- dwd.dim_store_goods: 4 个索引
|
||||
- dwd.dim_store_goods_ex: 4 个索引
|
||||
- dwd.dim_table: 4 个索引
|
||||
- dwd.dim_table_ex: 4 个索引
|
||||
- dwd.dim_tenant_goods: 6 个索引
|
||||
- dwd.dim_tenant_goods_ex: 4 个索引
|
||||
- dwd.dwd_assistant_service_log: 5 个索引
|
||||
- dwd.dwd_assistant_service_log_ex: 1 个索引
|
||||
- dwd.dwd_assistant_trash_event: 3 个索引
|
||||
- dwd.dwd_assistant_trash_event_ex: 1 个索引
|
||||
- dwd.dwd_goods_stock_movement: 1 个索引
|
||||
- dwd.dwd_goods_stock_summary: 1 个索引
|
||||
- dwd.dwd_groupbuy_redemption: 3 个索引
|
||||
- dwd.dwd_groupbuy_redemption_ex: 1 个索引
|
||||
- dwd.dwd_member_balance_change: 1 个索引
|
||||
- dwd.dwd_member_balance_change_ex: 1 个索引
|
||||
- dwd.dwd_payment: 5 个索引
|
||||
- dwd.dwd_platform_coupon_redemption: 3 个索引
|
||||
- dwd.dwd_platform_coupon_redemption_ex: 1 个索引
|
||||
- dwd.dwd_recharge_order: 5 个索引
|
||||
- dwd.dwd_recharge_order_ex: 1 个索引
|
||||
- dwd.dwd_refund: 5 个索引
|
||||
- dwd.dwd_refund_ex: 1 个索引
|
||||
- dwd.dwd_settlement_head: 5 个索引
|
||||
- dwd.dwd_settlement_head_ex: 1 个索引
|
||||
- dwd.dwd_store_goods_sale: 3 个索引
|
||||
- dwd.dwd_store_goods_sale_ex: 1 个索引
|
||||
- dwd.dwd_table_fee_adjust: 1 个索引
|
||||
- dwd.dwd_table_fee_adjust_ex: 1 个索引
|
||||
- dwd.dwd_table_fee_log: 5 个索引
|
||||
- dwd.dwd_table_fee_log_ex: 1 个索引
|
||||
- dws.cfg_area_category: 3 个索引
|
||||
- dws.cfg_assistant_level_price: 3 个索引
|
||||
- dws.cfg_bonus_rules: 4 个索引
|
||||
- dws.cfg_index_parameters: 4 个索引
|
||||
- dws.cfg_performance_tier: 3 个索引
|
||||
- dws.cfg_skill_type: 3 个索引
|
||||
- dws.dws_assistant_customer_stats: 5 个索引
|
||||
- dws.dws_assistant_daily_detail: 5 个索引
|
||||
- dws.dws_assistant_finance_analysis: 4 个索引
|
||||
- dws.dws_assistant_monthly_summary: 5 个索引
|
||||
- dws.dws_assistant_recharge_commission: 4 个索引
|
||||
- dws.dws_assistant_salary_calc: 4 个索引
|
||||
- dws.dws_finance_daily_summary: 4 个索引
|
||||
- dws.dws_finance_discount_detail: 4 个索引
|
||||
- dws.dws_finance_expense_summary: 5 个索引
|
||||
- dws.dws_finance_income_structure: 4 个索引
|
||||
- dws.dws_finance_recharge_summary: 3 个索引
|
||||
- dws.dws_goods_stock_daily_summary: 4 个索引
|
||||
- dws.dws_goods_stock_monthly_summary: 4 个索引
|
||||
- dws.dws_goods_stock_weekly_summary: 4 个索引
|
||||
- dws.dws_index_percentile_history: 3 个索引
|
||||
- dws.dws_member_assistant_intimacy: 4 个索引
|
||||
- dws.dws_member_assistant_relation_index: 5 个索引
|
||||
- dws.dws_member_consumption_summary: 5 个索引
|
||||
- dws.dws_member_newconv_index: 3 个索引
|
||||
- dws.dws_member_recall_index: 3 个索引
|
||||
- dws.dws_member_visit_detail: 5 个索引
|
||||
- dws.dws_member_winback_index: 3 个索引
|
||||
- dws.dws_ml_manual_order_alloc: 4 个索引
|
||||
- dws.dws_ml_manual_order_source: 4 个索引
|
||||
- dws.dws_order_summary: 4 个索引
|
||||
- dws.dws_platform_settlement: 5 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l1: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l2: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l3: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l4: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l1: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l2: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l3: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l4: 1 个索引
|
||||
- meta.etl_cursor: 2 个索引
|
||||
- meta.etl_run: 1 个索引
|
||||
- meta.etl_task: 2 个索引
|
||||
- ods.assistant_accounts_master: 3 个索引
|
||||
- ods.assistant_cancellation_records: 3 个索引
|
||||
- ods.assistant_service_records: 3 个索引
|
||||
- ods.goods_stock_movements: 3 个索引
|
||||
- ods.goods_stock_summary: 3 个索引
|
||||
- ods.group_buy_packages: 3 个索引
|
||||
- ods.group_buy_redemption_records: 3 个索引
|
||||
- ods.member_balance_changes: 3 个索引
|
||||
- ods.member_profiles: 3 个索引
|
||||
- ods.member_stored_value_cards: 3 个索引
|
||||
- ods.payment_transactions: 3 个索引
|
||||
- ods.platform_coupon_redemption_records: 3 个索引
|
||||
- ods.recharge_settlements: 3 个索引
|
||||
- ods.refund_transactions: 3 个索引
|
||||
- ods.settlement_records: 3 个索引
|
||||
- ods.site_tables_master: 3 个索引
|
||||
- ods.stock_goods_category_tree: 3 个索引
|
||||
- ods.store_goods_master: 3 个索引
|
||||
- ods.store_goods_sales_records: 3 个索引
|
||||
- ods.table_fee_discount_records: 3 个索引
|
||||
- ods.table_fee_transactions: 3 个索引
|
||||
- ods.tenant_goods_master: 3 个索引
|
||||
@@ -1,133 +0,0 @@
|
||||
# DDL vs 数据库一致性检查报告
|
||||
|
||||
生成时间:2026-02-21 21:26:21
|
||||
数据库:test_etl_feiqiu
|
||||
DDL 文件:ods.sql, dwd.sql, dws.sql, meta.sql
|
||||
|
||||
## 概览
|
||||
|
||||
| 指标 | 数量 |
|
||||
|------|------|
|
||||
| DDL 定义表数 | 99 |
|
||||
| DB 实际表数 | 99 |
|
||||
| 完全匹配 | 99 |
|
||||
| DDL 有但 DB 缺失 | 0 |
|
||||
| DB 有但 DDL 缺失 | 0 |
|
||||
|
||||
## 差异详情(2 项)
|
||||
|
||||
|
||||
### dwd.dim_store_goods_ex
|
||||
类型不匹配:batch_stock_quantity DDL=integer DB=numeric
|
||||
|
||||
## 索引概览
|
||||
|
||||
数据库中共 343 个索引,覆盖 107 张表。
|
||||
|
||||
- dwd.dim_assistant: 4 个索引
|
||||
- dwd.dim_assistant_ex: 6 个索引
|
||||
- dwd.dim_goods_category: 4 个索引
|
||||
- dwd.dim_groupbuy_package: 6 个索引
|
||||
- dwd.dim_groupbuy_package_ex: 4 个索引
|
||||
- dwd.dim_member: 6 个索引
|
||||
- dwd.dim_member_card_account: 4 个索引
|
||||
- dwd.dim_member_card_account_ex: 6 个索引
|
||||
- dwd.dim_member_ex: 4 个索引
|
||||
- dwd.dim_site: 4 个索引
|
||||
- dwd.dim_site_ex: 6 个索引
|
||||
- dwd.dim_store_goods: 4 个索引
|
||||
- dwd.dim_store_goods_ex: 4 个索引
|
||||
- dwd.dim_table: 4 个索引
|
||||
- dwd.dim_table_ex: 4 个索引
|
||||
- dwd.dim_tenant_goods: 6 个索引
|
||||
- dwd.dim_tenant_goods_ex: 4 个索引
|
||||
- dwd.dwd_assistant_service_log: 5 个索引
|
||||
- dwd.dwd_assistant_service_log_ex: 1 个索引
|
||||
- dwd.dwd_assistant_trash_event: 3 个索引
|
||||
- dwd.dwd_assistant_trash_event_ex: 1 个索引
|
||||
- dwd.dwd_goods_stock_movement: 1 个索引
|
||||
- dwd.dwd_goods_stock_summary: 1 个索引
|
||||
- dwd.dwd_groupbuy_redemption: 3 个索引
|
||||
- dwd.dwd_groupbuy_redemption_ex: 1 个索引
|
||||
- dwd.dwd_member_balance_change: 1 个索引
|
||||
- dwd.dwd_member_balance_change_ex: 1 个索引
|
||||
- dwd.dwd_payment: 5 个索引
|
||||
- dwd.dwd_platform_coupon_redemption: 3 个索引
|
||||
- dwd.dwd_platform_coupon_redemption_ex: 1 个索引
|
||||
- dwd.dwd_recharge_order: 5 个索引
|
||||
- dwd.dwd_recharge_order_ex: 1 个索引
|
||||
- dwd.dwd_refund: 5 个索引
|
||||
- dwd.dwd_refund_ex: 1 个索引
|
||||
- dwd.dwd_settlement_head: 5 个索引
|
||||
- dwd.dwd_settlement_head_ex: 1 个索引
|
||||
- dwd.dwd_store_goods_sale: 3 个索引
|
||||
- dwd.dwd_store_goods_sale_ex: 1 个索引
|
||||
- dwd.dwd_table_fee_adjust: 1 个索引
|
||||
- dwd.dwd_table_fee_adjust_ex: 1 个索引
|
||||
- dwd.dwd_table_fee_log: 5 个索引
|
||||
- dwd.dwd_table_fee_log_ex: 1 个索引
|
||||
- dws.cfg_area_category: 3 个索引
|
||||
- dws.cfg_assistant_level_price: 3 个索引
|
||||
- dws.cfg_bonus_rules: 4 个索引
|
||||
- dws.cfg_index_parameters: 4 个索引
|
||||
- dws.cfg_performance_tier: 3 个索引
|
||||
- dws.cfg_skill_type: 3 个索引
|
||||
- dws.dws_assistant_customer_stats: 5 个索引
|
||||
- dws.dws_assistant_daily_detail: 5 个索引
|
||||
- dws.dws_assistant_finance_analysis: 4 个索引
|
||||
- dws.dws_assistant_monthly_summary: 5 个索引
|
||||
- dws.dws_assistant_recharge_commission: 4 个索引
|
||||
- dws.dws_assistant_salary_calc: 4 个索引
|
||||
- dws.dws_finance_daily_summary: 4 个索引
|
||||
- dws.dws_finance_discount_detail: 4 个索引
|
||||
- dws.dws_finance_expense_summary: 5 个索引
|
||||
- dws.dws_finance_income_structure: 4 个索引
|
||||
- dws.dws_finance_recharge_summary: 3 个索引
|
||||
- dws.dws_goods_stock_daily_summary: 4 个索引
|
||||
- dws.dws_goods_stock_monthly_summary: 4 个索引
|
||||
- dws.dws_goods_stock_weekly_summary: 4 个索引
|
||||
- dws.dws_index_percentile_history: 3 个索引
|
||||
- dws.dws_member_assistant_intimacy: 4 个索引
|
||||
- dws.dws_member_assistant_relation_index: 5 个索引
|
||||
- dws.dws_member_consumption_summary: 5 个索引
|
||||
- dws.dws_member_newconv_index: 3 个索引
|
||||
- dws.dws_member_recall_index: 3 个索引
|
||||
- dws.dws_member_visit_detail: 5 个索引
|
||||
- dws.dws_member_winback_index: 3 个索引
|
||||
- dws.dws_ml_manual_order_alloc: 4 个索引
|
||||
- dws.dws_ml_manual_order_source: 4 个索引
|
||||
- dws.dws_order_summary: 4 个索引
|
||||
- dws.dws_platform_settlement: 5 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l1: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l2: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l3: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l4: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l1: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l2: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l3: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l4: 1 个索引
|
||||
- meta.etl_cursor: 2 个索引
|
||||
- meta.etl_run: 1 个索引
|
||||
- meta.etl_task: 2 个索引
|
||||
- ods.assistant_accounts_master: 3 个索引
|
||||
- ods.assistant_cancellation_records: 3 个索引
|
||||
- ods.assistant_service_records: 3 个索引
|
||||
- ods.goods_stock_movements: 3 个索引
|
||||
- ods.goods_stock_summary: 3 个索引
|
||||
- ods.group_buy_packages: 3 个索引
|
||||
- ods.group_buy_redemption_records: 3 个索引
|
||||
- ods.member_balance_changes: 3 个索引
|
||||
- ods.member_profiles: 3 个索引
|
||||
- ods.member_stored_value_cards: 3 个索引
|
||||
- ods.payment_transactions: 3 个索引
|
||||
- ods.platform_coupon_redemption_records: 3 个索引
|
||||
- ods.recharge_settlements: 3 个索引
|
||||
- ods.refund_transactions: 3 个索引
|
||||
- ods.settlement_records: 3 个索引
|
||||
- ods.site_tables_master: 3 个索引
|
||||
- ods.stock_goods_category_tree: 3 个索引
|
||||
- ods.store_goods_master: 3 个索引
|
||||
- ods.store_goods_sales_records: 3 个索引
|
||||
- ods.table_fee_discount_records: 3 个索引
|
||||
- ods.table_fee_transactions: 3 个索引
|
||||
- ods.tenant_goods_master: 3 个索引
|
||||
@@ -1,131 +0,0 @@
|
||||
# DDL vs 数据库一致性检查报告
|
||||
|
||||
生成时间:2026-02-21 21:27:26
|
||||
数据库:test_etl_feiqiu
|
||||
DDL 文件:ods.sql, dwd.sql, dws.sql, meta.sql
|
||||
|
||||
## 概览
|
||||
|
||||
| 指标 | 数量 |
|
||||
|------|------|
|
||||
| DDL 定义表数 | 99 |
|
||||
| DB 实际表数 | 99 |
|
||||
| 完全匹配 | 99 |
|
||||
| DDL 有但 DB 缺失 | 0 |
|
||||
| DB 有但 DDL 缺失 | 0 |
|
||||
|
||||
## 结果:✅ 完全一致
|
||||
|
||||
所有 DDL 定义与数据库实际 schema 完全匹配,无差异。
|
||||
|
||||
## 索引概览
|
||||
|
||||
数据库中共 343 个索引,覆盖 107 张表。
|
||||
|
||||
- dwd.dim_assistant: 4 个索引
|
||||
- dwd.dim_assistant_ex: 6 个索引
|
||||
- dwd.dim_goods_category: 4 个索引
|
||||
- dwd.dim_groupbuy_package: 6 个索引
|
||||
- dwd.dim_groupbuy_package_ex: 4 个索引
|
||||
- dwd.dim_member: 6 个索引
|
||||
- dwd.dim_member_card_account: 4 个索引
|
||||
- dwd.dim_member_card_account_ex: 6 个索引
|
||||
- dwd.dim_member_ex: 4 个索引
|
||||
- dwd.dim_site: 4 个索引
|
||||
- dwd.dim_site_ex: 6 个索引
|
||||
- dwd.dim_store_goods: 4 个索引
|
||||
- dwd.dim_store_goods_ex: 4 个索引
|
||||
- dwd.dim_table: 4 个索引
|
||||
- dwd.dim_table_ex: 4 个索引
|
||||
- dwd.dim_tenant_goods: 6 个索引
|
||||
- dwd.dim_tenant_goods_ex: 4 个索引
|
||||
- dwd.dwd_assistant_service_log: 5 个索引
|
||||
- dwd.dwd_assistant_service_log_ex: 1 个索引
|
||||
- dwd.dwd_assistant_trash_event: 3 个索引
|
||||
- dwd.dwd_assistant_trash_event_ex: 1 个索引
|
||||
- dwd.dwd_goods_stock_movement: 1 个索引
|
||||
- dwd.dwd_goods_stock_summary: 1 个索引
|
||||
- dwd.dwd_groupbuy_redemption: 3 个索引
|
||||
- dwd.dwd_groupbuy_redemption_ex: 1 个索引
|
||||
- dwd.dwd_member_balance_change: 1 个索引
|
||||
- dwd.dwd_member_balance_change_ex: 1 个索引
|
||||
- dwd.dwd_payment: 5 个索引
|
||||
- dwd.dwd_platform_coupon_redemption: 3 个索引
|
||||
- dwd.dwd_platform_coupon_redemption_ex: 1 个索引
|
||||
- dwd.dwd_recharge_order: 5 个索引
|
||||
- dwd.dwd_recharge_order_ex: 1 个索引
|
||||
- dwd.dwd_refund: 5 个索引
|
||||
- dwd.dwd_refund_ex: 1 个索引
|
||||
- dwd.dwd_settlement_head: 5 个索引
|
||||
- dwd.dwd_settlement_head_ex: 1 个索引
|
||||
- dwd.dwd_store_goods_sale: 3 个索引
|
||||
- dwd.dwd_store_goods_sale_ex: 1 个索引
|
||||
- dwd.dwd_table_fee_adjust: 1 个索引
|
||||
- dwd.dwd_table_fee_adjust_ex: 1 个索引
|
||||
- dwd.dwd_table_fee_log: 5 个索引
|
||||
- dwd.dwd_table_fee_log_ex: 1 个索引
|
||||
- dws.cfg_area_category: 3 个索引
|
||||
- dws.cfg_assistant_level_price: 3 个索引
|
||||
- dws.cfg_bonus_rules: 4 个索引
|
||||
- dws.cfg_index_parameters: 4 个索引
|
||||
- dws.cfg_performance_tier: 3 个索引
|
||||
- dws.cfg_skill_type: 3 个索引
|
||||
- dws.dws_assistant_customer_stats: 5 个索引
|
||||
- dws.dws_assistant_daily_detail: 5 个索引
|
||||
- dws.dws_assistant_finance_analysis: 4 个索引
|
||||
- dws.dws_assistant_monthly_summary: 5 个索引
|
||||
- dws.dws_assistant_recharge_commission: 4 个索引
|
||||
- dws.dws_assistant_salary_calc: 4 个索引
|
||||
- dws.dws_finance_daily_summary: 4 个索引
|
||||
- dws.dws_finance_discount_detail: 4 个索引
|
||||
- dws.dws_finance_expense_summary: 5 个索引
|
||||
- dws.dws_finance_income_structure: 4 个索引
|
||||
- dws.dws_finance_recharge_summary: 3 个索引
|
||||
- dws.dws_goods_stock_daily_summary: 4 个索引
|
||||
- dws.dws_goods_stock_monthly_summary: 4 个索引
|
||||
- dws.dws_goods_stock_weekly_summary: 4 个索引
|
||||
- dws.dws_index_percentile_history: 3 个索引
|
||||
- dws.dws_member_assistant_intimacy: 4 个索引
|
||||
- dws.dws_member_assistant_relation_index: 5 个索引
|
||||
- dws.dws_member_consumption_summary: 5 个索引
|
||||
- dws.dws_member_newconv_index: 3 个索引
|
||||
- dws.dws_member_recall_index: 3 个索引
|
||||
- dws.dws_member_visit_detail: 5 个索引
|
||||
- dws.dws_member_winback_index: 3 个索引
|
||||
- dws.dws_ml_manual_order_alloc: 4 个索引
|
||||
- dws.dws_ml_manual_order_source: 4 个索引
|
||||
- dws.dws_order_summary: 4 个索引
|
||||
- dws.dws_platform_settlement: 5 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l1: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l2: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l3: 1 个索引
|
||||
- dws.mv_dws_assistant_daily_detail_l4: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l1: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l2: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l3: 1 个索引
|
||||
- dws.mv_dws_finance_daily_summary_l4: 1 个索引
|
||||
- meta.etl_cursor: 2 个索引
|
||||
- meta.etl_run: 1 个索引
|
||||
- meta.etl_task: 2 个索引
|
||||
- ods.assistant_accounts_master: 3 个索引
|
||||
- ods.assistant_cancellation_records: 3 个索引
|
||||
- ods.assistant_service_records: 3 个索引
|
||||
- ods.goods_stock_movements: 3 个索引
|
||||
- ods.goods_stock_summary: 3 个索引
|
||||
- ods.group_buy_packages: 3 个索引
|
||||
- ods.group_buy_redemption_records: 3 个索引
|
||||
- ods.member_balance_changes: 3 个索引
|
||||
- ods.member_profiles: 3 个索引
|
||||
- ods.member_stored_value_cards: 3 个索引
|
||||
- ods.payment_transactions: 3 个索引
|
||||
- ods.platform_coupon_redemption_records: 3 个索引
|
||||
- ods.recharge_settlements: 3 个索引
|
||||
- ods.refund_transactions: 3 个索引
|
||||
- ods.settlement_records: 3 个索引
|
||||
- ods.site_tables_master: 3 个索引
|
||||
- ods.stock_goods_category_tree: 3 个索引
|
||||
- ods.store_goods_master: 3 个索引
|
||||
- ods.store_goods_sales_records: 3 个索引
|
||||
- ods.table_fee_discount_records: 3 个索引
|
||||
- ods.table_fee_transactions: 3 个索引
|
||||
- ods.tenant_goods_master: 3 个索引
|
||||
@@ -1,783 +0,0 @@
|
||||
{
|
||||
"generated_at": "2026-02-18T13:54:42.674118",
|
||||
"tables": [
|
||||
{
|
||||
"dwd_table": "dwd.dim_site",
|
||||
"ods_table": "ods.table_fee_transactions",
|
||||
"count": {
|
||||
"dwd": 54,
|
||||
"ods": 38585,
|
||||
"diff": -38531
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_site_ex",
|
||||
"ods_table": "ods.table_fee_transactions",
|
||||
"count": {
|
||||
"dwd": 54,
|
||||
"ods": 38585,
|
||||
"diff": -38531
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_table",
|
||||
"ods_table": "ods.site_tables_master",
|
||||
"count": {
|
||||
"dwd": 2881,
|
||||
"ods": 1074,
|
||||
"diff": 1807
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_table_ex",
|
||||
"ods_table": "ods.site_tables_master",
|
||||
"count": {
|
||||
"dwd": 3035,
|
||||
"ods": 1074,
|
||||
"diff": 1961
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_assistant",
|
||||
"ods_table": "ods.assistant_accounts_master",
|
||||
"count": {
|
||||
"dwd": 1266,
|
||||
"ods": 295,
|
||||
"diff": 971
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_assistant_ex",
|
||||
"ods_table": "ods.assistant_accounts_master",
|
||||
"count": {
|
||||
"dwd": 1251,
|
||||
"ods": 295,
|
||||
"diff": 956
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_member",
|
||||
"ods_table": "ods.member_profiles",
|
||||
"count": {
|
||||
"dwd": 10801,
|
||||
"ods": 1771,
|
||||
"diff": 9030
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "pay_money_sum",
|
||||
"dwd_sum": -44578911.7,
|
||||
"ods_sum": -12031004.21,
|
||||
"diff": -32547907.490000002
|
||||
},
|
||||
{
|
||||
"column": "recharge_money_sum",
|
||||
"dwd_sum": 51067011.97,
|
||||
"ods_sum": 13293169.41,
|
||||
"diff": 37773842.56
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_member_ex",
|
||||
"ods_table": "ods.member_profiles",
|
||||
"count": {
|
||||
"dwd": 10770,
|
||||
"ods": 1771,
|
||||
"diff": 8999
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_member_card_account",
|
||||
"ods_table": "ods.member_stored_value_cards",
|
||||
"count": {
|
||||
"dwd": 18370,
|
||||
"ods": 2973,
|
||||
"diff": 15397
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "balance",
|
||||
"dwd_sum": 7834178.2,
|
||||
"ods_sum": 1369125.58,
|
||||
"diff": 6465052.62
|
||||
},
|
||||
{
|
||||
"column": "principal_balance",
|
||||
"dwd_sum": 4659292.04,
|
||||
"ods_sum": 921317.68,
|
||||
"diff": 3737974.36
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_member_card_account_ex",
|
||||
"ods_table": "ods.member_stored_value_cards",
|
||||
"count": {
|
||||
"dwd": 18172,
|
||||
"ods": 2973,
|
||||
"diff": 15199
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "deliveryfeededuct",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_tenant_goods",
|
||||
"ods_table": "ods.tenant_goods_master",
|
||||
"count": {
|
||||
"dwd": 2018,
|
||||
"ods": 353,
|
||||
"diff": 1665
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_tenant_goods_ex",
|
||||
"ods_table": "ods.tenant_goods_master",
|
||||
"count": {
|
||||
"dwd": 2016,
|
||||
"ods": 353,
|
||||
"diff": 1663
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_store_goods",
|
||||
"ods_table": "ods.store_goods_master",
|
||||
"count": {
|
||||
"dwd": 5444,
|
||||
"ods": 1744,
|
||||
"diff": 3700
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_store_goods_ex",
|
||||
"ods_table": "ods.store_goods_master",
|
||||
"count": {
|
||||
"dwd": 5402,
|
||||
"ods": 1744,
|
||||
"diff": 3658
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_goods_category",
|
||||
"ods_table": "ods.stock_goods_category_tree",
|
||||
"count": {
|
||||
"dwd": 125,
|
||||
"ods": 18,
|
||||
"diff": 107
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_groupbuy_package",
|
||||
"ods_table": "ods.group_buy_packages",
|
||||
"count": {
|
||||
"dwd": 373,
|
||||
"ods": 70,
|
||||
"diff": 303
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dim_groupbuy_package_ex",
|
||||
"ods_table": "ods.group_buy_packages",
|
||||
"count": {
|
||||
"dwd": 373,
|
||||
"ods": 70,
|
||||
"diff": 303
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_settlement_head",
|
||||
"ods_table": "ods.settlement_records",
|
||||
"count": {
|
||||
"dwd": 26115,
|
||||
"ods": 55457,
|
||||
"diff": -29342
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_settlement_head_ex",
|
||||
"ods_table": "ods.settlement_records",
|
||||
"count": {
|
||||
"dwd": 26115,
|
||||
"ods": 55457,
|
||||
"diff": -29342
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_table_fee_log",
|
||||
"ods_table": "ods.table_fee_transactions",
|
||||
"count": {
|
||||
"dwd": 20132,
|
||||
"ods": 38585,
|
||||
"diff": -18453
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "activity_discount_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "adjust_amount",
|
||||
"dwd_sum": 360935.76,
|
||||
"ods_sum": 748219.39,
|
||||
"diff": -387283.63
|
||||
},
|
||||
{
|
||||
"column": "coupon_promotion_amount",
|
||||
"dwd_sum": 1043924.79,
|
||||
"ods_sum": 1960731.94,
|
||||
"diff": -916807.1499999999
|
||||
},
|
||||
{
|
||||
"column": "ledger_amount",
|
||||
"dwd_sum": 2329813.19,
|
||||
"ods_sum": 4552084.15,
|
||||
"diff": -2222270.9600000004
|
||||
},
|
||||
{
|
||||
"column": "member_discount_amount",
|
||||
"dwd_sum": 200164.42,
|
||||
"ods_sum": 363032.98,
|
||||
"diff": -162868.55999999997
|
||||
},
|
||||
{
|
||||
"column": "real_service_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "real_table_charge_money",
|
||||
"dwd_sum": 831450.6,
|
||||
"ods_sum": 1676836.7,
|
||||
"diff": -845386.1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_table_fee_log_ex",
|
||||
"ods_table": "ods.table_fee_transactions",
|
||||
"count": {
|
||||
"dwd": 20132,
|
||||
"ods": 38585,
|
||||
"diff": -18453
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "fee_total",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "mgmt_fee",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "service_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "used_card_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_table_fee_adjust",
|
||||
"ods_table": "ods.table_fee_discount_records",
|
||||
"count": {
|
||||
"dwd": 3124,
|
||||
"ods": 4818,
|
||||
"diff": -1694
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "ledger_amount",
|
||||
"dwd_sum": 370340.42,
|
||||
"ods_sum": 580703.61,
|
||||
"diff": -210363.19
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_table_fee_adjust_ex",
|
||||
"ods_table": "ods.table_fee_discount_records",
|
||||
"count": {
|
||||
"dwd": 3124,
|
||||
"ods": 4818,
|
||||
"diff": -1694
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_store_goods_sale",
|
||||
"ods_table": "ods.store_goods_sales_records",
|
||||
"count": {
|
||||
"dwd": 17563,
|
||||
"ods": 17563,
|
||||
"diff": 0
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "cost_money",
|
||||
"dwd_sum": 3116.75,
|
||||
"ods_sum": 3116.75,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "coupon_share_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "ledger_amount",
|
||||
"dwd_sum": 373588.1,
|
||||
"ods_sum": 373588.1,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "real_goods_money",
|
||||
"dwd_sum": 351914.9,
|
||||
"ods_sum": 351914.9,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_store_goods_sale_ex",
|
||||
"ods_table": "ods.store_goods_sales_records",
|
||||
"count": {
|
||||
"dwd": 17563,
|
||||
"ods": 17563,
|
||||
"diff": 0
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "coupon_deduct_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "discount_money",
|
||||
"dwd_sum": 21673.2,
|
||||
"ods_sum": 21673.2,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "member_discount_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "option_coupon_deduct_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "option_member_discount_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "point_discount_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "point_discount_money_cost",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "push_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_assistant_service_log",
|
||||
"ods_table": "ods.assistant_service_records",
|
||||
"count": {
|
||||
"dwd": 5281,
|
||||
"ods": 10219,
|
||||
"diff": -4938
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "coupon_deduct_money",
|
||||
"dwd_sum": 11071.07,
|
||||
"ods_sum": 21950.93,
|
||||
"diff": -10879.86
|
||||
},
|
||||
{
|
||||
"column": "ledger_amount",
|
||||
"dwd_sum": 1653011.03,
|
||||
"ods_sum": 3196243.99,
|
||||
"diff": -1543232.9600000002
|
||||
},
|
||||
{
|
||||
"column": "real_service_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_assistant_service_log_ex",
|
||||
"ods_table": "ods.assistant_service_records",
|
||||
"count": {
|
||||
"dwd": 5281,
|
||||
"ods": 10219,
|
||||
"diff": -4938
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "manual_discount_amount",
|
||||
"dwd_sum": 414.17,
|
||||
"ods_sum": 828.34,
|
||||
"diff": -414.17
|
||||
},
|
||||
{
|
||||
"column": "member_discount_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "service_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_assistant_trash_event",
|
||||
"ods_table": "ods.assistant_cancellation_records",
|
||||
"count": {
|
||||
"dwd": 100,
|
||||
"ods": 100,
|
||||
"diff": 0
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_assistant_trash_event_ex",
|
||||
"ods_table": "ods.assistant_cancellation_records",
|
||||
"count": {
|
||||
"dwd": 100,
|
||||
"ods": 100,
|
||||
"diff": 0
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_member_balance_change",
|
||||
"ods_table": "ods.member_balance_changes",
|
||||
"count": {
|
||||
"dwd": 5081,
|
||||
"ods": 9684,
|
||||
"diff": -4603
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_member_balance_change_ex",
|
||||
"ods_table": "ods.member_balance_changes",
|
||||
"count": {
|
||||
"dwd": 5081,
|
||||
"ods": 9684,
|
||||
"diff": -4603
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "refund_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_groupbuy_redemption",
|
||||
"ods_table": "ods.group_buy_redemption_records",
|
||||
"count": {
|
||||
"dwd": 12768,
|
||||
"ods": 27284,
|
||||
"diff": -14516
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "coupon_money",
|
||||
"dwd_sum": 822390.0,
|
||||
"ods_sum": 1748666.0,
|
||||
"diff": -926276.0
|
||||
},
|
||||
{
|
||||
"column": "ledger_amount",
|
||||
"dwd_sum": 788754.37,
|
||||
"ods_sum": 1675417.16,
|
||||
"diff": -886662.7899999999
|
||||
},
|
||||
{
|
||||
"column": "member_discount_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_groupbuy_redemption_ex",
|
||||
"ods_table": "ods.group_buy_redemption_records",
|
||||
"count": {
|
||||
"dwd": 12768,
|
||||
"ods": 27284,
|
||||
"diff": -14516
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "assistant_promotion_money",
|
||||
"dwd_sum": 7544.8,
|
||||
"ods_sum": 16557.98,
|
||||
"diff": -9013.18
|
||||
},
|
||||
{
|
||||
"column": "assistant_service_promotion_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "assistant_service_share_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "assistant_share_money",
|
||||
"dwd_sum": 2285.57,
|
||||
"ods_sum": 6697.18,
|
||||
"diff": -4411.610000000001
|
||||
},
|
||||
{
|
||||
"column": "good_service_share_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "goods_promotion_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "goods_share_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "recharge_promotion_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "recharge_share_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "reward_promotion_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "table_service_promotion_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "table_service_share_money",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "table_share_money",
|
||||
"dwd_sum": 382004.98,
|
||||
"ods_sum": 846145.6,
|
||||
"diff": -464140.62
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_platform_coupon_redemption",
|
||||
"ods_table": "ods.platform_coupon_redemption_records",
|
||||
"count": {
|
||||
"dwd": 18311,
|
||||
"ods": 36678,
|
||||
"diff": -18367
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "coupon_money",
|
||||
"dwd_sum": 1193916.0,
|
||||
"ods_sum": 2391858.0,
|
||||
"diff": -1197942.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_platform_coupon_redemption_ex",
|
||||
"ods_table": "ods.platform_coupon_redemption_records",
|
||||
"count": {
|
||||
"dwd": 18311,
|
||||
"ods": 36678,
|
||||
"diff": -18367
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_recharge_order",
|
||||
"ods_table": "ods.recharge_settlements",
|
||||
"count": {
|
||||
"dwd": 485,
|
||||
"ods": 3333,
|
||||
"diff": -2848
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_recharge_order_ex",
|
||||
"ods_table": "ods.recharge_settlements",
|
||||
"count": {
|
||||
"dwd": 485,
|
||||
"ods": 3333,
|
||||
"diff": -2848
|
||||
},
|
||||
"amounts": []
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_payment",
|
||||
"ods_table": "ods.payment_transactions",
|
||||
"count": {
|
||||
"dwd": 24922,
|
||||
"ods": 36006,
|
||||
"diff": -11084
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "pay_amount",
|
||||
"dwd_sum": 2424522.0,
|
||||
"ods_sum": 3652765.0,
|
||||
"diff": -1228243.0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_refund",
|
||||
"ods_table": "ods.refund_transactions",
|
||||
"count": {
|
||||
"dwd": 51,
|
||||
"ods": 83,
|
||||
"diff": -32
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "channel_fee",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "pay_amount",
|
||||
"dwd_sum": -79176.5,
|
||||
"ods_sum": -94892.0,
|
||||
"diff": 15715.5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"dwd_table": "dwd.dwd_refund_ex",
|
||||
"ods_table": "ods.refund_transactions",
|
||||
"count": {
|
||||
"dwd": 51,
|
||||
"ods": 83,
|
||||
"diff": -32
|
||||
},
|
||||
"amounts": [
|
||||
{
|
||||
"column": "balance_frozen_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "card_frozen_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "refund_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
},
|
||||
{
|
||||
"column": "round_amount",
|
||||
"dwd_sum": 0.0,
|
||||
"ods_sum": 0.0,
|
||||
"diff": 0.0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"note": "行数/金额核对,金额字段基于列名包含 amount/money/fee/balance 的数值列自动扫描。"
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-20 07:21:33.075
|
||||
- 结束时间: 2026-02-20 07:21:33.306
|
||||
- 总耗时: 230.9ms
|
||||
- 步骤数: 5
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | ODS_ASSISTANT_ACCOUNT | 07:21:33.075 | 07:21:33.131 | 55.5ms |
|
||||
| 2 | ODS_MEMBER | 07:21:33.131 | 07:21:33.165 | 34.2ms |
|
||||
| 3 | DWD_LOAD_FROM_ODS | 07:21:33.165 | 07:21:33.246 | 80.4ms |
|
||||
| 4 | DWS_COACH_PERFORMANCE | 07:21:33.246 | 07:21:33.286 | 40.4ms |
|
||||
| 5 | CONSISTENCY_CHECK | 07:21:33.286 | 07:21:33.306 | 20.2ms |
|
||||
@@ -1,16 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-20 07:21:52.613
|
||||
- 结束时间: 2026-02-20 07:21:52.839
|
||||
- 总耗时: 225.8ms
|
||||
- 步骤数: 5
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | ODS_ASSISTANT_ACCOUNT | 07:21:52.613 | 07:21:52.664 | 51.0ms |
|
||||
| 2 | ODS_MEMBER | 07:21:52.664 | 07:21:52.696 | 31.7ms |
|
||||
| 3 | DWD_LOAD_FROM_ODS | 07:21:52.696 | 07:21:52.777 | 81.1ms |
|
||||
| 4 | DWS_COACH_PERFORMANCE | 07:21:52.777 | 07:21:52.817 | 40.4ms |
|
||||
| 5 | CONSISTENCY_CHECK | 07:21:52.817 | 07:21:52.839 | 21.4ms |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-20 07:35:49.460
|
||||
- 结束时间: 2026-02-20 07:36:10.244
|
||||
- 总耗时: 20.78s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 07:35:49.460 | 07:35:49.896 | 436.1ms |
|
||||
| 2 | CONSISTENCY_CHECK | 07:35:49.899 | 07:36:10.244 | 20.35s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-20 07:48:41.194
|
||||
- 结束时间: 2026-02-20 09:14:14.761
|
||||
- 总耗时: 1h25m
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | FETCH_BEFORE_VERIFY | 07:48:41.194 | 09:13:42.279 | 1h25m |
|
||||
| 2 | CONSISTENCY_CHECK | 09:13:56.727 | 09:14:14.761 | 18.03s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 15:29:21.753
|
||||
- 结束时间: 2026-02-21 15:39:10.470
|
||||
- 总耗时: 9m48.7s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 15:29:21.754 | 15:39:08.328 | 9m46.6s |
|
||||
| 2 | CONSISTENCY_CHECK | 15:39:08.330 | 15:39:10.470 | 2.14s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 19:27:49.606
|
||||
- 结束时间: 2026-02-21 19:30:18.170
|
||||
- 总耗时: 2m28.6s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 19:27:49.606 | 19:30:15.874 | 2m26.3s |
|
||||
| 2 | CONSISTENCY_CHECK | 19:30:15.876 | 19:30:18.170 | 2.29s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 19:41:02.997
|
||||
- 结束时间: 2026-02-21 19:52:22.423
|
||||
- 总耗时: 11m19.4s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 19:41:02.997 | 19:52:20.126 | 11m17.1s |
|
||||
| 2 | CONSISTENCY_CHECK | 19:52:20.129 | 19:52:22.423 | 2.29s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 19:57:02.636
|
||||
- 结束时间: 2026-02-21 20:08:57.619
|
||||
- 总耗时: 11m55.0s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 19:57:02.636 | 20:08:55.481 | 11m52.8s |
|
||||
| 2 | CONSISTENCY_CHECK | 20:08:55.483 | 20:08:57.619 | 2.14s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 20:19:52.765
|
||||
- 结束时间: 2026-02-21 20:31:29.279
|
||||
- 总耗时: 11m36.5s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 20:19:52.765 | 20:31:27.045 | 11m34.3s |
|
||||
| 2 | CONSISTENCY_CHECK | 20:31:27.049 | 20:31:29.279 | 2.23s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 20:45:18.898
|
||||
- 结束时间: 2026-02-21 21:14:45.329
|
||||
- 总耗时: 29m26.4s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 20:45:18.898 | 21:14:42.448 | 29m23.6s |
|
||||
| 2 | CONSISTENCY_CHECK | 21:14:42.451 | 21:14:45.329 | 2.88s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 21:25:11.381
|
||||
- 结束时间: 2026-02-21 21:26:39.028
|
||||
- 总耗时: 1m27.6s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 21:25:11.381 | 21:26:36.913 | 1m25.5s |
|
||||
| 2 | CONSISTENCY_CHECK | 21:26:36.915 | 21:26:39.027 | 2.11s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 21:33:37.838
|
||||
- 结束时间: 2026-02-21 21:35:01.943
|
||||
- 总耗时: 1m24.1s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 21:33:37.838 | 21:34:59.810 | 1m22.0s |
|
||||
| 2 | CONSISTENCY_CHECK | 21:34:59.812 | 21:35:01.943 | 2.13s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 22:38:56.302
|
||||
- 结束时间: 2026-02-21 22:40:27.434
|
||||
- 总耗时: 1m31.1s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 22:38:56.302 | 22:40:07.841 | 1m11.5s |
|
||||
| 2 | CONSISTENCY_CHECK | 22:40:07.845 | 22:40:27.434 | 19.59s |
|
||||
@@ -1,13 +0,0 @@
|
||||
# ETL 执行计时报告
|
||||
|
||||
- 开始时间: 2026-02-21 22:48:43.973
|
||||
- 结束时间: 2026-02-21 22:50:13.110
|
||||
- 总耗时: 1m29.1s
|
||||
- 步骤数: 2
|
||||
|
||||
## 步骤汇总
|
||||
|
||||
| # | 步骤名称 | 开始时间 | 结束时间 | 耗时 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1 | INCREMENT_ETL | 22:48:43.973 | 22:49:54.509 | 1m10.5s |
|
||||
| 2 | CONSISTENCY_CHECK | 22:49:54.514 | 22:50:13.110 | 18.60s |
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,178 +0,0 @@
|
||||
# DWS_ASSISTANT_DAILY BUG 修复报告
|
||||
|
||||
> 生成时间:2026-02-21 19:13:11
|
||||
> 执行 run_uuid:4ba9d2d365ee4a858f1c4104b1942dc2
|
||||
> 执行开始:2026-02-21 15:29:20
|
||||
|
||||
---
|
||||
|
||||
## 1. BUG 概述
|
||||
|
||||
ETL 执行过程中 `DWS_ASSISTANT_DAILY` 任务失败,根因是 `assistant_daily_task.py` 中
|
||||
`_extract_trash_records` 方法的 SQL 引用了 `dwd.dwd_assistant_trash_event` 表中不存在的字段。
|
||||
|
||||
### 错误信息
|
||||
|
||||
```
|
||||
psycopg2.errors.UndefinedColumn: 错误: 字段 "assistant_service_id" 不存在
|
||||
LINE 3: assistant_service_id,
|
||||
^
|
||||
```
|
||||
|
||||
### 级联影响
|
||||
|
||||
`DWS_ASSISTANT_DAILY` 失败后,psycopg2 连接进入 `InFailedSqlTransaction` 状态,
|
||||
级联导致以下 8 个任务全部失败:
|
||||
|
||||
| # | 任务代码 | 失败原因 |
|
||||
|---|---------|---------|
|
||||
| 1 | DWS_ASSISTANT_DAILY | 根因:UndefinedColumn |
|
||||
| 2 | DWS_ASSISTANT_MONTHLY | InFailedSqlTransaction(级联) |
|
||||
| 3 | DWS_ASSISTANT_CUSTOMER | InFailedSqlTransaction(级联) |
|
||||
| 4 | DWS_ASSISTANT_SALARY | InFailedSqlTransaction(级联) |
|
||||
| 5 | DWS_ASSISTANT_FINANCE | InFailedSqlTransaction(级联) |
|
||||
| 6 | ODS_SETTLEMENT_RECORDS | InFailedSqlTransaction(级联) |
|
||||
| 7 | ODS_PAYMENT | InFailedSqlTransaction(级联) |
|
||||
| 8 | ODS_REFUND | InFailedSqlTransaction(级联) |
|
||||
| 9 | DWS_BUILD_ORDER_SUMMARY | InFailedSqlTransaction(级联) |
|
||||
|
||||
从 `ODS_TABLE_USE` 开始,task_executor 的连接恢复机制生效,后续任务恢复正常执行。
|
||||
|
||||
---
|
||||
|
||||
## 2. 根因分析
|
||||
|
||||
### 2.1 错误 SQL(修复前)
|
||||
|
||||
```sql
|
||||
SELECT assistant_service_id, trash_seconds, trash_reason, trash_time
|
||||
FROM dwd.dwd_assistant_trash_event
|
||||
WHERE site_id = %s AND DATE(trash_time) >= %s AND DATE(trash_time) <= %s
|
||||
```
|
||||
|
||||
### 2.2 `dwd_assistant_trash_event` 实际表结构
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| assistant_trash_event_id | BIGINT (PK) | 废除事件 ID |
|
||||
| site_id | BIGINT | 门店 ID |
|
||||
| table_id | BIGINT | 台桌 ID |
|
||||
| table_area_id | BIGINT | 区域 ID |
|
||||
| assistant_no | VARCHAR(32) | 助教编号 |
|
||||
| assistant_name | VARCHAR(64) | 助教姓名 |
|
||||
| charge_minutes_raw | INTEGER | 废除时长(分钟) |
|
||||
| abolish_amount | NUMERIC(18,2) | 废除金额 |
|
||||
| trash_reason | VARCHAR(255) | 废除原因 |
|
||||
| create_time | TIMESTAMPTZ | 废除时间 |
|
||||
| tenant_id | BIGINT | 租户 ID |
|
||||
|
||||
### 2.3 字段映射错误
|
||||
|
||||
| 错误引用 | 实际字段 | 说明 |
|
||||
|----------|---------|------|
|
||||
| `assistant_service_id` | `assistant_trash_event_id` | PK 名称不同 |
|
||||
| `trash_seconds` | `charge_minutes_raw` | 单位不同(分钟 vs 秒) |
|
||||
| `trash_time` | `create_time` | 字段名不同 |
|
||||
|
||||
### 2.4 深层设计缺陷
|
||||
|
||||
废除表 `dwd_assistant_trash_event` 没有 `assistant_service_id` 外键,
|
||||
无法与服务记录表 `dwd_assistant_service_log` 做 1:1 关联。
|
||||
|
||||
原代码的 `_build_trash_index` 用 `assistant_service_id` 做 key 构建索引,
|
||||
`_aggregate_by_assistant_date` 用 `service_id in trash_index` 判断服务是否被废除。
|
||||
即使 SQL 字段名修正后,这个匹配逻辑在设计上也是无效的——两个 ID 不同源。
|
||||
|
||||
---
|
||||
|
||||
## 3. 修复方案
|
||||
|
||||
### 3.1 文件
|
||||
|
||||
`apps/etl/connectors/feiqiu/tasks/dws/assistant_daily_task.py`
|
||||
|
||||
### 3.2 修改点(共 4 处)
|
||||
|
||||
#### (1) `_extract_trash_records` — SQL 字段名修正
|
||||
|
||||
```sql
|
||||
-- 修复后
|
||||
SELECT
|
||||
assistant_trash_event_id,
|
||||
charge_minutes_raw * 60 AS trash_seconds,
|
||||
trash_reason,
|
||||
create_time AS trash_time,
|
||||
table_id,
|
||||
assistant_name
|
||||
FROM dwd.dwd_assistant_trash_event
|
||||
WHERE site_id = %s
|
||||
AND DATE(create_time) >= %s
|
||||
AND DATE(create_time) <= %s
|
||||
```
|
||||
|
||||
#### (2) `_extract_service_records` — JOIN _ex 表取 is_trash
|
||||
|
||||
```sql
|
||||
-- 新增 LEFT JOIN 和 is_trash 字段
|
||||
SELECT
|
||||
asl.assistant_service_id,
|
||||
...
|
||||
DATE(asl.start_use_time) AS service_date,
|
||||
COALESCE(ex.is_trash, 0) AS is_trash
|
||||
FROM dwd.dwd_assistant_service_log asl
|
||||
LEFT JOIN dwd.dwd_assistant_service_log_ex ex
|
||||
ON asl.assistant_service_id = ex.assistant_service_id
|
||||
WHERE asl.site_id = %s
|
||||
AND DATE(asl.start_use_time) >= %s
|
||||
AND DATE(asl.start_use_time) <= %s
|
||||
AND asl.is_delete = 0
|
||||
```
|
||||
|
||||
#### (3) `_build_trash_index` — key 改为 assistant_trash_event_id
|
||||
|
||||
```python
|
||||
# 修复前
|
||||
service_id = record.get('assistant_service_id')
|
||||
|
||||
# 修复后
|
||||
event_id = record.get('assistant_trash_event_id')
|
||||
```
|
||||
|
||||
#### (4) `_aggregate_by_assistant_date` — 废除判断改用 is_trash
|
||||
|
||||
```python
|
||||
# 修复前
|
||||
is_trashed = service_id in trash_index
|
||||
|
||||
# 修复后
|
||||
is_trashed = bool(record.get('is_trash', 0))
|
||||
```
|
||||
|
||||
废除时长也从 `trash_index[service_id]` 改为直接用 `income_seconds`。
|
||||
|
||||
### 3.3 设计决策说明
|
||||
|
||||
`dwd_assistant_service_log_ex` 表的 `is_trash` 字段来自上游 SaaS 系统的
|
||||
`assistant_service_records` API,是服务记录级别的废除标记,比跨表匹配更可靠。
|
||||
|
||||
废除时长统计改用服务记录自身的 `income_seconds`(即该服务的计费时长),
|
||||
而非从废除表取 `charge_minutes_raw`(废除事件的计费分钟数),
|
||||
因为两者无法 1:1 关联。
|
||||
|
||||
---
|
||||
|
||||
## 4. 验证计划
|
||||
|
||||
修复将在下次 ETL 执行时生效。验证步骤:
|
||||
|
||||
1. 重新提交包含 `DWS_ASSISTANT_DAILY` 的执行
|
||||
2. 确认无 SQL 错误
|
||||
3. 检查 `dws.dws_assistant_daily` 表中 `trashed_count` / `trashed_seconds` 是否合理
|
||||
4. 对比 `dwd_assistant_service_log_ex.is_trash = 1` 的记录数与 DWS 汇总的 `trashed_count`
|
||||
|
||||
---
|
||||
|
||||
## 5. 回滚方案
|
||||
|
||||
如需回滚,恢复 `assistant_daily_task.py` 到修改前版本即可。
|
||||
DWS 表数据可通过重新执行 `DWS_ASSISTANT_DAILY` 任务覆盖。
|
||||
@@ -1,443 +0,0 @@
|
||||
# ETL 前后端联调 — BUG 修复全记录
|
||||
|
||||
> 日期: 2026-02-21
|
||||
> 执行轮次: v1 ~ v8(共 8 次)
|
||||
> 任务配置: api_full, full_window, 2025-11-01 ~ 2026-02-20, 30天窗口切分, force_full, 19个任务
|
||||
|
||||
---
|
||||
|
||||
## 总览
|
||||
|
||||
| 指标 | v1 (首次) | v6 (中期最佳) | v8 (最终) |
|
||||
|------|-----------|--------------|-----------|
|
||||
| 耗时 | 590.7s | 29m26s | 1m24s |
|
||||
| 成功任务 | 10/41 | 11/19 | 14/19 |
|
||||
| 失败任务 | 31/41 | 8/19 | 5/19 |
|
||||
| 累计修复 BUG | 0 | 7 | 11 |
|
||||
|
||||
最终 5 个失败均为 `InFailedSqlTransaction` 级联(根因是上游数据质量问题,非代码 BUG)。
|
||||
|
||||
---
|
||||
|
||||
## BUG 详情
|
||||
|
||||
### BUG 1 — DWS_ASSISTANT_DAILY SQL 字段引用错误
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v1 |
|
||||
| 验证版本 | v2 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dws/assistant_daily_task.py` |
|
||||
| 错误现象 | `UndefinedColumn: 错误: 字段 "assistant_service_id" 不存在`,DWS_ASSISTANT_DAILY 及其下游 31 个任务全部失败(InFailedSqlTransaction 级联) |
|
||||
| 根因 | `_extract_trash_records()` 方法的 SQL 引用了 `dwd.dwd_assistant_trash_event` 表中不存在的 3 个字段名,且废除判断逻辑依赖跨表 ID 匹配(两表无外键关联,设计上无效) |
|
||||
| 涉及表 | `dwd.dwd_assistant_trash_event`、`dwd.dwd_assistant_service_log`、`dwd.dwd_assistant_service_log_ex` |
|
||||
|
||||
#### 字段映射错误(3 处 SQL 字段名不匹配)
|
||||
|
||||
| # | 错误引用(修复前) | 实际 DDL 字段(修复后) | 所属表 | 说明 |
|
||||
|---|-------------------|----------------------|--------|------|
|
||||
| 1 | `assistant_service_id` | `assistant_trash_event_id` | `dwd_assistant_trash_event` | PK 名称不同,废除表没有 service_id 外键 |
|
||||
| 2 | `trash_seconds` | `charge_minutes_raw * 60 AS trash_seconds` | `dwd_assistant_trash_event` | 实际字段存储分钟数,需乘 60 转秒 |
|
||||
| 3 | `trash_time` | `create_time AS trash_time` | `dwd_assistant_trash_event` | 废除时间字段名不同 |
|
||||
|
||||
#### 逻辑修复(1 处设计缺陷修正)
|
||||
|
||||
| # | 修复点 | 修复前 | 修复后 | 说明 |
|
||||
|---|--------|--------|--------|------|
|
||||
| 4 | `_aggregate_by_assistant_date` 废除判断 | `is_trashed = service_id in trash_index`(跨表 ID 匹配) | `is_trashed = bool(record.get('is_trash', 0))`(使用 _ex 表标记) | 原逻辑依赖废除表的 event_id 与服务表的 service_id 匹配,但两者无外键关联,匹配永远为空。改为 LEFT JOIN `dwd_assistant_service_log_ex` 取 `is_trash` 字段直接判断 |
|
||||
|
||||
#### 修复后 SQL(`_extract_trash_records`)
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
assistant_trash_event_id,
|
||||
charge_minutes_raw * 60 AS trash_seconds,
|
||||
trash_reason,
|
||||
create_time AS trash_time,
|
||||
table_id,
|
||||
assistant_name
|
||||
FROM dwd.dwd_assistant_trash_event
|
||||
WHERE site_id = %s
|
||||
AND DATE(create_time) >= %s AND DATE(create_time) <= %s
|
||||
```
|
||||
|
||||
#### 修复后 SQL(`_extract_service_records` 新增 JOIN)
|
||||
|
||||
```sql
|
||||
SELECT asl.assistant_service_id, ...,
|
||||
COALESCE(ex.is_trash, 0) AS is_trash
|
||||
FROM dwd.dwd_assistant_service_log asl
|
||||
LEFT JOIN dwd.dwd_assistant_service_log_ex ex
|
||||
ON asl.assistant_service_id = ex.assistant_service_id
|
||||
WHERE asl.site_id = %s AND ...
|
||||
```
|
||||
|
||||
| 修复结果 | ✅ v2 中 DWS_ASSISTANT_DAILY 执行成功 |
|
||||
|------|------|
|
||||
| 详细修复记录 | `export/SYSTEM/LOGS/2026-02-21__dws_assistant_daily_bug_fix.md` |
|
||||
|
||||
### BUG 2 — DWS_ASSISTANT_MONTHLY GROUP BY 聚合错误
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v2 |
|
||||
| 验证版本 | v3 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dws/assistant_monthly_task.py` |
|
||||
| 错误现象 | `UniqueViolation: duplicate key value violates unique constraint "uk_dws_assistant_monthly"` |
|
||||
| 根因 | `_extract_daily_aggregates()` 的 GROUP BY 包含了 `assistant_nickname`、`assistant_level_code`、`assistant_level_name` 三个维度字段。当助教在月内改名或升级时,同一 `(assistant_id, stat_month)` 会产出多行,INSERT 时违反 `uk_dws_assistant_monthly` 唯一约束 |
|
||||
| 涉及表 | `dws.dws_assistant_daily_detail`(源)→ `dws.dws_assistant_monthly_summary`(目标) |
|
||||
|
||||
#### 业务场景
|
||||
|
||||
助教月内改名/升级是正常业务操作。例如助教 A 在 12 月 15 日从"初级"升为"中级",则 `dws_assistant_daily_detail` 中 12 月的记录会有两种 `assistant_level_code`。原 SQL 按 `(assistant_id, stat_month, assistant_level_code)` 分组,产出 2 行,但月度汇总表的唯一约束只有 `(site_id, assistant_id, stat_month)`。
|
||||
|
||||
#### 修复方式
|
||||
|
||||
将 `assistant_nickname`、`assistant_level_code`、`assistant_level_name` 从 GROUP BY 移除,改用 `MAX()` 聚合(取月内最新值):
|
||||
|
||||
```sql
|
||||
-- 修复前 GROUP BY
|
||||
GROUP BY assistant_id, assistant_nickname, assistant_level_code, assistant_level_name, DATE_TRUNC('month', stat_date)
|
||||
|
||||
-- 修复后 GROUP BY
|
||||
GROUP BY assistant_id, DATE_TRUNC('month', stat_date)
|
||||
|
||||
-- 维度字段改为 MAX() 聚合
|
||||
MAX(assistant_nickname) AS assistant_nickname,
|
||||
MAX(assistant_level_code) AS assistant_level_code,
|
||||
MAX(assistant_level_name) AS assistant_level_name,
|
||||
```
|
||||
|
||||
| 修复结果 | ✅ v3 中 DWS_ASSISTANT_MONTHLY 执行成功(删除 9 行,插入 9 行) |
|
||||
|------|------|
|
||||
|
||||
### BUG 3 — DWS_ASSISTANT_CUSTOMER 引用不存在的 site_id 列
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v2 |
|
||||
| 验证版本 | v3 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dws/assistant_customer_task.py` |
|
||||
| 错误现象 | `UndefinedColumn: column dm.site_id does not exist` |
|
||||
| 根因 | `dwd.dim_member` 表没有 `site_id` 列,实际字段为 `register_site_id` |
|
||||
| 修复方式 | `dm.site_id` → `dm.register_site_id` |
|
||||
| 修复结果 | ✅ v3 中 DWS_ASSISTANT_CUSTOMER 执行成功(285 行) |
|
||||
|
||||
### BUG 4 — 多个 DWS 任务引用 dim_member/dim_member_card_account 的 site_id
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v3 |
|
||||
| 验证版本 | v4 |
|
||||
| 文件 | `assistant_customer_task.py`、`member_consumption_task.py`、`finance_recharge_task.py`(共 4 处) |
|
||||
| 错误现象 | 多个 DWS 任务因 `UndefinedColumn: site_id` 失败 |
|
||||
| 根因 | 与 BUG 3 同源 — `dim_member` 和 `dim_member_card_account` 均无 `site_id`,需用 `register_site_id` |
|
||||
| 修复方式 | 4 处 `site_id` → `register_site_id` |
|
||||
| 修复结果 | ✅ v4 中相关任务执行成功 |
|
||||
|
||||
### BUG 5 — DWS_MEMBER_VISIT 引用不存在的 birthday 字段
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v4 |
|
||||
| 验证版本 | v6 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dws/member_visit_task.py` |
|
||||
| 错误现象 | `UndefinedColumn: column dm.birthday does not exist` |
|
||||
| 根因 | `_extract_member_info()` 的 SQL 中 SELECT 了 `birthday` 字段,但 `dwd.dim_member` 表没有该字段 |
|
||||
| 涉及表 | `dwd.dim_member` |
|
||||
|
||||
#### 业务场景
|
||||
|
||||
`dim_member` 的数据来源是上游 SaaS 的 `member_profiles` API。该 API 返回的会员信息中不包含生日字段,因此 ODS → DWD 装载时也没有 `birthday` 列。原代码假设 `dim_member` 有 `birthday`,用于在 `dws_member_visit` 中记录会员生日,但这个字段从未存在过。
|
||||
|
||||
#### DDL 确认
|
||||
|
||||
`dim_member` 实际字段:`member_id`, `system_member_id`, `tenant_id`, `register_site_id`, `mobile`, `nickname`, `member_card_grade_code`, `member_card_grade_name`, `create_time`, `update_time`, `pay_money_sum`, `recharge_money_sum` + SCD2 元数据。无 `birthday`。
|
||||
|
||||
#### 修复方式
|
||||
|
||||
1. `_extract_member_info()` SQL 中移除 `birthday`,只保留 `member_id`, `nickname`, `mobile`
|
||||
2. `transform()` 中 `member_birthday` 字段固定填 `None`(DWS 表该列保留但值为空)
|
||||
|
||||
```python
|
||||
# 修复前
|
||||
sql = "SELECT member_id, nickname, mobile, birthday FROM dwd.dim_member ..."
|
||||
|
||||
# 修复后
|
||||
sql = "SELECT member_id, nickname, mobile FROM dwd.dim_member ..."
|
||||
|
||||
# transform 中
|
||||
'member_birthday': None, # dim_member 无 birthday 字段
|
||||
```
|
||||
|
||||
| 修复结果 | ✅ v6 中 DWS_MEMBER_VISIT 执行成功(v5 被 BUG 6 遮蔽) |
|
||||
|------|------|
|
||||
|
||||
### BUG 6 — DWS_MEMBER_VISIT _extract_table_info() 字段名不匹配
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v5 |
|
||||
| 验证版本 | v6 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dws/member_visit_task.py` |
|
||||
| 错误现象 | `UndefinedColumn` — `_extract_table_info()` 方法中引用了 `dim_table` 中不存在的列名 |
|
||||
| 根因 | 代码中用 `site_table_id` 和 `site_table_name` 查询 `dim_table`,但该表的 PK 是 `table_id`,名称字段是 `table_name`。`site_table_id` 是事实表 `dwd_table_fee_log` 中的外键列名,不是维度表的列名 |
|
||||
| 涉及表 | `dwd.dim_table` |
|
||||
|
||||
#### 字段映射错误
|
||||
|
||||
| # | 错误引用(修复前) | 实际 DDL 字段(修复后) | 说明 |
|
||||
|---|-------------------|----------------------|------|
|
||||
| 1 | `site_table_id` | `table_id` | `dim_table` 的 PK 是 `table_id`,不是 `site_table_id` |
|
||||
| 2 | `site_table_name` | `table_name` | `dim_table` 的名称字段是 `table_name` |
|
||||
|
||||
#### DDL 确认
|
||||
|
||||
`dim_table` 实际字段:`table_id`(PK), `site_id`, `table_name`, `site_table_area_id`, `site_table_area_name`, `tenant_table_area_id`, `table_price`, `order_id` + SCD2 元数据。
|
||||
|
||||
#### 修复后 SQL
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
table_id AS table_id,
|
||||
table_name AS table_name,
|
||||
site_table_area_name AS area_name
|
||||
FROM dwd.dim_table
|
||||
WHERE site_id = %s AND scd2_is_current = 1
|
||||
```
|
||||
|
||||
#### 排查结论
|
||||
|
||||
修复后字段映射与 DDL 完全一致 ✅:
|
||||
- `table_id` — DDL 中存在,是 PK ✅
|
||||
- `table_name` — DDL 中存在 ✅
|
||||
- `site_table_area_name` — DDL 中存在 ✅
|
||||
- `site_id` 用于 WHERE 过滤 — DDL 中存在 ✅
|
||||
|
||||
| 修复结果 | ✅ v6 中 DWS_MEMBER_VISIT 执行成功 |
|
||||
|------|------|
|
||||
|
||||
### BUG 7 — DWS_FINANCE_INCOME_STRUCTURE JOIN 条件列名错误
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | 预防性修复(v5 代码审查发现) |
|
||||
| 验证版本 | v6 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dws/finance_income_task.py` |
|
||||
| 错误现象 | JOIN 条件中 `dt.site_table_id` 不存在(`dim_table` 无 `site_table_id` 列) |
|
||||
| 根因 | `_extract_income_by_area()` 中 `dwd_table_fee_log` 和 `dwd_assistant_service_log` 与 `dim_table` 做 LEFT JOIN 时,JOIN 条件写成了 `dt.site_table_id = tfl.site_table_id`,但 `dim_table` 的 PK 是 `table_id` 而非 `site_table_id` |
|
||||
| 涉及表 | `dwd.dim_table`(维度)、`dwd.dwd_table_fee_log`(事实)、`dwd.dwd_assistant_service_log`(事实) |
|
||||
|
||||
#### 关联关系说明
|
||||
|
||||
事实表 `dwd_table_fee_log` 和 `dwd_assistant_service_log` 中的 `site_table_id` 是外键,指向维度表 `dim_table` 的 PK `table_id`。两个 ID 值相同,但列名不同。
|
||||
|
||||
#### 修复方式
|
||||
|
||||
```sql
|
||||
-- 修复前(2 处)
|
||||
LEFT JOIN dwd.dim_table dt ON dt.site_table_id = tfl.site_table_id
|
||||
LEFT JOIN dwd.dim_table dt ON dt.site_table_id = asl.site_table_id
|
||||
|
||||
-- 修复后(2 处)
|
||||
LEFT JOIN dwd.dim_table dt ON dt.table_id = tfl.site_table_id
|
||||
LEFT JOIN dwd.dim_table dt ON dt.table_id = asl.site_table_id
|
||||
```
|
||||
|
||||
#### 排查结论
|
||||
|
||||
修复后 JOIN 条件与 DDL 一致 ✅:
|
||||
- `dim_table.table_id` — DDL 确认是 PK ✅
|
||||
- `dwd_table_fee_log.site_table_id` — DDL 确认存在,语义为"台桌 ID 外键" ✅
|
||||
- `dwd_assistant_service_log.site_table_id` — 同上 ✅
|
||||
- JOIN 方向正确:维度表 PK ← 事实表 FK ✅
|
||||
|
||||
| 修复结果 | ✅ v6 中未出现该错误(但被 BUG 8 级联遮蔽) |
|
||||
|------|------|
|
||||
|
||||
### BUG 8 — DWS_FINANCE_DAILY / DWS_FINANCE_RECHARGE 字段名错误
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v6 |
|
||||
| 验证版本 | v8 |
|
||||
| 文件 | `finance_base_task.py`、`finance_recharge_task.py` |
|
||||
| 错误现象 | `UndefinedColumn: column "pay_money" does not exist`,DWS_FINANCE_DAILY 失败并级联导致 7 个下游任务失败 |
|
||||
| 根因 | 代码中用 `pay_money` / `gift_money` 查询 `dwd.dwd_recharge_order`,但该表的实际字段是 `pay_amount`(现金充值金额)/ `point_amount`(赠送金额) |
|
||||
| 涉及表 | `dwd.dwd_recharge_order` |
|
||||
|
||||
#### 字段映射错误
|
||||
|
||||
| # | 错误引用(修复前) | 实际 DDL 字段(修复后) | 业务含义 |
|
||||
|---|-------------------|----------------------|---------|
|
||||
| 1 | `pay_money` | `pay_amount` | 现金充值金额(会员实际支付) |
|
||||
| 2 | `gift_money` | `point_amount` | 赠送金额(充值赠送的积分/赠送卡金额) |
|
||||
|
||||
#### DDL 确认
|
||||
|
||||
`dwd_recharge_order` 金额相关字段:`pay_amount` NUMERIC(18,2)、`refund_amount` NUMERIC(18,2)、`point_amount` NUMERIC(18,2)、`cash_amount` NUMERIC(18,2)。无 `pay_money` 或 `gift_money`。
|
||||
|
||||
#### 修复涉及 2 个文件
|
||||
|
||||
1. `finance_base_task.py` — `_extract_recharge_summary()` 方法(被 `FinanceDailyTask` 继承调用)
|
||||
2. `finance_recharge_task.py` — `_extract_recharge_summary()` 方法(`FinanceRechargeTask` 自身的重写版本)
|
||||
|
||||
两处修复内容相同:所有 `pay_money` → `pay_amount`,所有 `gift_money` → `point_amount`。
|
||||
|
||||
#### 排查结论
|
||||
|
||||
修复后字段映射与 DDL 完全一致 ✅:
|
||||
- `pay_amount` — DDL 确认存在,NUMERIC(18,2) ✅
|
||||
- `point_amount` — DDL 确认存在,NUMERIC(18,2) ✅
|
||||
- `is_first` — DDL 确认存在,INTEGER ✅
|
||||
- `member_id` — DDL 确认存在 ✅
|
||||
- `pay_time` — DDL 确认存在,TIMESTAMPTZ ✅
|
||||
- `site_id` — DDL 确认存在 ✅
|
||||
- 业务语义:`pay_amount + point_amount` = 充值总额(现金 + 赠送),`is_first = 1` 区分首充/续充 ✅
|
||||
|
||||
| 修复结果 | ✅ v8 中 DWS_FINANCE_DAILY 和 DWS_FINANCE_RECHARGE 均执行成功(v7 被 BUG 9 遮蔽) |
|
||||
|------|------|
|
||||
|
||||
### BUG 9 — DWD_LOAD_FROM_ODS 缺少 _pick_snapshot_order_column 方法
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v7 |
|
||||
| 验证版本 | v8 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dwd/dwd_load_task.py` |
|
||||
| 错误现象 | `AttributeError: 'DwdLoadTask' object has no attribute '_pick_snapshot_order_column'`,所有 dim 表 SCD2 装载全部失败 |
|
||||
| 根因 | `_merge_dim_scd2()` 方法内部调用了 `self._pick_snapshot_order_column(cols)`,但该方法只存在于 `quality/integrity_checker.py` 中作为模块级函数,`DwdLoadTask` 类中没有定义。这是代码重构时遗漏的问题——SCD2 装载逻辑从 integrity_checker 迁移到 DwdLoadTask 时,忘记把依赖的辅助函数一起迁移 |
|
||||
| 涉及表 | 所有 dim 表(dim_site, dim_table, dim_assistant, dim_member, dim_member_card_account, dim_tenant_goods, dim_store_goods, dim_goods_category, dim_groupbuy_package 及其 _ex 表) |
|
||||
|
||||
#### 方法功能说明
|
||||
|
||||
`_pick_snapshot_order_column(cols)` 用于从 ODS 表的列名列表中选取快照排序列,优先级为 `fetched_at` > `update_time` > `create_time`。SCD2 装载时需要按此列排序,确保同一业务主键的多条快照按时间顺序处理,最新快照覆盖旧快照。
|
||||
|
||||
#### 修复方式
|
||||
|
||||
在 `DwdLoadTask` 类中添加 `@staticmethod` 方法,逻辑与 `integrity_checker.py` 中的同名函数一致:
|
||||
|
||||
```python
|
||||
@staticmethod
|
||||
def _pick_snapshot_order_column(cols: Sequence[str]) -> str | None:
|
||||
"""从 ODS 列中选取用于快照排序的列(fetched_at > update_time > create_time)。"""
|
||||
lower = {c.lower() for c in cols}
|
||||
for candidate in ("fetched_at", "update_time", "create_time"):
|
||||
if candidate in lower:
|
||||
return candidate
|
||||
return None
|
||||
```
|
||||
|
||||
| 修复结果 | ✅ v8 中所有 15 个 dim 表 SCD2 装载成功(dim_site, dim_table, dim_assistant, dim_member, dim_member_card_account, dim_tenant_goods, dim_store_goods, dim_goods_category, dim_groupbuy_package 及其 _ex 表) |
|
||||
|------|------|
|
||||
|
||||
### BUG 10 — goods_stock 表 FACT_MAPPINGS 驼峰字段名导致 SQL 错误
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v7 |
|
||||
| 验证版本 | v8 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/tasks/dwd/dwd_load_task.py` |
|
||||
| 错误现象 | `UndefinedColumn: column "siteGoodsId" does not exist, perhaps you mean "sitegoodsid"` |
|
||||
| 根因 | `FACT_MAPPINGS` 中 `dwd_goods_stock_summary` 和 `dwd_goods_stock_movement` 的源列使用了带引号的驼峰名(如 `"siteGoodsId"`),但 ODS 表中 PostgreSQL 存储的列名是全小写的 `sitegoodsid`(ODS 入库时 `_int_col("sitegoodsid", "siteGoodsId")` 已将 JSON 驼峰键转为小写列名) |
|
||||
| 修复方式 | 将 FACT_MAPPINGS 中 2 个表共 30+ 个字段的驼峰引用全部改为小写(如 `"siteGoodsId"` → `"sitegoodsid"`) |
|
||||
| 修复结果 | ✅ v8 中 `dwd_goods_stock_summary`(716 条 INSERT)和 `dwd_goods_stock_movement`(14306 条 INSERT)装载成功 |
|
||||
|
||||
### BUG 11 — flow_runner.py sum() 类型不安全
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v7 |
|
||||
| 验证版本 | v8 |
|
||||
| 文件 | `apps/etl/connectors/feiqiu/orchestration/flow_runner.py` |
|
||||
| 错误现象 | `TypeError: unsupported operand type(s) for +: 'int' and 'list'` |
|
||||
| 根因 | Flow 执行完成后汇总各任务的 `counts.errors` 时,某些任务返回的 `errors` 是错误详情列表(`list[str]`)而非错误计数(`int`),`sum()` 无法将 `int` 与 `list` 相加 |
|
||||
| 涉及位置 | `FlowRunner.run()` 方法末尾的 `flow_logger.set_counts(...)` 调用 |
|
||||
|
||||
#### 触发场景
|
||||
|
||||
任务执行器 `task_executor` 返回的 `result["counts"]["errors"]` 类型不统一:
|
||||
- 大部分任务返回 `int`(错误计数,如 `0` 或 `3`)
|
||||
- 部分任务返回 `list`(错误详情列表,如 `["UndefinedColumn: ...", "InFailedSqlTransaction: ..."]`)
|
||||
|
||||
当 `sum()` 遍历到 `list` 类型时,Python 尝试执行 `int + list`,抛出 `TypeError`。
|
||||
|
||||
#### 修复方式
|
||||
|
||||
在 `run()` 方法内添加 `_safe_int()` 局部函数,统一类型转换:
|
||||
|
||||
```python
|
||||
def _safe_int(val) -> int:
|
||||
"""将 int/list/None 统一转为 int 计数。"""
|
||||
if isinstance(val, int):
|
||||
return val
|
||||
if isinstance(val, list):
|
||||
return len(val) # 错误列表 → 取长度作为错误计数
|
||||
return 0
|
||||
|
||||
flow_logger.set_counts(
|
||||
fetched=sum(_safe_int(r.get("counts", {}).get("fetched", 0)) for r in results),
|
||||
inserted=sum(_safe_int(r.get("counts", {}).get("inserted", 0)) for r in results),
|
||||
updated=sum(_safe_int(r.get("counts", {}).get("updated", 0)) for r in results),
|
||||
errors=sum(_safe_int(r.get("counts", {}).get("errors", 0)) for r in results),
|
||||
)
|
||||
```
|
||||
|
||||
#### 排查结论
|
||||
|
||||
修复后类型处理正确 ✅:
|
||||
- `int` → 直接返回 ✅
|
||||
- `list` → `len()` 转为计数 ✅(语义正确:错误详情列表的长度 = 错误数量)
|
||||
- `None` → 返回 0 ✅
|
||||
- `r.get("counts", {}).get(...)` 已做双层防御,`counts` 缺失时不会报错 ✅
|
||||
- 四个计数字段(`fetched`/`inserted`/`updated`/`errors`)均经过 `_safe_int` 处理 ✅
|
||||
|
||||
| 修复结果 | ✅ v8 中不再出现 TypeError,Flow 汇总正常完成 |
|
||||
|------|------|
|
||||
|
||||
---
|
||||
|
||||
## 未修复的遗留问题
|
||||
|
||||
### 数据质量问题 — dim_assistant_ex / dim_member_card_account_ex 非法日期
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 发现版本 | v8 |
|
||||
| 性质 | 上游数据质量问题,非代码 BUG |
|
||||
| 错误现象 | `ValueError: year -1 is out of range` |
|
||||
| 根因 | ODS 中某些记录的日期字段包含非法值(year=-1),Python `datetime` 无法解析 |
|
||||
| 影响 | `dim_assistant_ex` 和 `dim_member_card_account_ex` 装载失败 → 事务进入 `InFailedSqlTransaction` → 级联导致 5 个 DWS 任务失败(DWS_FINANCE_INCOME_STRUCTURE, DWS_FINANCE_DISCOUNT_DETAIL, DWS_WINBACK_INDEX, DWS_NEWCONV_INDEX, DWS_RELATION_INDEX) |
|
||||
| 建议 | 在 DWD 装载的日期类型转换中添加容错处理(捕获 ValueError,将非法日期置为 NULL 或哨兵值) |
|
||||
|
||||
---
|
||||
|
||||
## 修复文件清单
|
||||
|
||||
| 文件 | 修复的 BUG |
|
||||
|------|-----------|
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/assistant_daily_task.py` | BUG 1 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/assistant_monthly_task.py` | BUG 2 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/assistant_customer_task.py` | BUG 3, 4 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/member_consumption_task.py` | BUG 4 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/member_visit_task.py` | BUG 5, 6 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/finance_income_task.py` | BUG 7 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/finance_base_task.py` | BUG 8 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dws/finance_recharge_task.py` | BUG 4, 8 |
|
||||
| `apps/etl/connectors/feiqiu/tasks/dwd/dwd_load_task.py` | BUG 9, 10 |
|
||||
| `apps/etl/connectors/feiqiu/orchestration/flow_runner.py` | BUG 11 |
|
||||
|
||||
---
|
||||
|
||||
## 执行历史
|
||||
|
||||
| 版本 | execution_id | 耗时 | 成功 | 失败 | 修复验证 |
|
||||
|------|-------------|------|------|------|---------|
|
||||
| v1 | `dbf0c29a-...` | 590.7s | 10 | 31 | — |
|
||||
| v2 | `e21e1935-...` | 150.4s | — | — | BUG 1 ✅ |
|
||||
| v3 | `abc94b2d-...` | 681.2s | 9 | 22 | BUG 2,3 ✅ |
|
||||
| v4 | `efd4f421-...` | 11m55s | 10 | 21 | BUG 4 ✅ |
|
||||
| v5 | `fe87144a-...` | 11m37s | 10 | 21 | BUG 5 部署(被 BUG 6 遮蔽) |
|
||||
| v6 | `d9443781-...` | 29m26s | 11 | 8 | BUG 5,6,7 ✅ |
|
||||
| v7 | `0929ab3a-...` | 89.3s | — | 全部 | BUG 8 部署(被 BUG 9 遮蔽) |
|
||||
| v8 | `f943bac6-...` | 1m24s | 14 | 5 | BUG 8,9,10,11 ✅ |
|
||||
@@ -1,428 +0,0 @@
|
||||
{
|
||||
"execution": {
|
||||
"id": "dbf0c29a-253a-4705-a1ef-35cd71243d48",
|
||||
"site_id": 2790685415443269,
|
||||
"task_codes": [
|
||||
"ODS_ASSISTANT_ACCOUNT",
|
||||
"ODS_ASSISTANT_LEDGER",
|
||||
"ODS_ASSISTANT_ABOLISH",
|
||||
"DWS_ASSISTANT_DAILY",
|
||||
"DWS_ASSISTANT_MONTHLY",
|
||||
"DWS_ASSISTANT_CUSTOMER",
|
||||
"DWS_ASSISTANT_SALARY",
|
||||
"DWS_ASSISTANT_FINANCE",
|
||||
"ODS_SETTLEMENT_RECORDS",
|
||||
"ODS_PAYMENT",
|
||||
"ODS_REFUND",
|
||||
"DWS_BUILD_ORDER_SUMMARY",
|
||||
"ODS_TABLE_USE",
|
||||
"ODS_TABLE_FEE_DISCOUNT",
|
||||
"ODS_TABLES",
|
||||
"ODS_MEMBER",
|
||||
"ODS_MEMBER_CARD",
|
||||
"ODS_MEMBER_BALANCE",
|
||||
"ODS_RECHARGE_SETTLE",
|
||||
"DWS_MEMBER_CONSUMPTION",
|
||||
"DWS_MEMBER_VISIT",
|
||||
"ODS_GOODS_CATEGORY",
|
||||
"ODS_STORE_GOODS",
|
||||
"ODS_STORE_GOODS_SALES",
|
||||
"ODS_TENANT_GOODS",
|
||||
"ODS_PLATFORM_COUPON",
|
||||
"ODS_GROUP_PACKAGE",
|
||||
"ODS_GROUP_BUY_REDEMPTION",
|
||||
"ODS_INVENTORY_STOCK",
|
||||
"ODS_INVENTORY_CHANGE",
|
||||
"DWS_GOODS_STOCK_DAILY",
|
||||
"DWS_GOODS_STOCK_WEEKLY",
|
||||
"DWS_GOODS_STOCK_MONTHLY",
|
||||
"DWS_FINANCE_DAILY",
|
||||
"DWS_FINANCE_RECHARGE",
|
||||
"DWS_FINANCE_INCOME_STRUCTURE",
|
||||
"DWS_FINANCE_DISCOUNT_DETAIL",
|
||||
"DWS_WINBACK_INDEX",
|
||||
"DWS_NEWCONV_INDEX",
|
||||
"DWS_RELATION_INDEX",
|
||||
"DWD_LOAD_FROM_ODS"
|
||||
],
|
||||
"status": "success",
|
||||
"started_at": "2026-02-21T15:29:20.233302+08:00",
|
||||
"finished_at": "2026-02-21T15:39:10.909320+08:00",
|
||||
"exit_code": 0,
|
||||
"duration_ms": 590676,
|
||||
"command": "C:\\NeoZQYY\\.venv\\Scripts\\python.exe -m cli.main --flow api_full --processing-mode full_window --tasks ODS_ASSISTANT_ACCOUNT,ODS_ASSISTANT_LEDGER,ODS_ASSISTANT_ABOLISH,DWS_ASSISTANT_DAILY,DWS_ASSISTANT_MONTHLY,DWS_ASSISTANT_CUSTOMER,DWS_ASSISTANT_SALARY,DWS_ASSISTANT_FINANCE,ODS_SETTLEMENT_RECORDS,ODS_PAYMENT,ODS_REFUND,DWS_BUILD_ORDER_SUMMARY,ODS_TABLE_USE,ODS_TABLE_FEE_DISCOUNT,ODS_TABLES,ODS_MEMBER,ODS_MEMBER_CARD,ODS_MEMBER_BALANCE,ODS_RECHARGE_SETTLE,DWS_MEMBER_CONSUMPTION,DWS_MEMBER_VISIT,ODS_GOODS_CATEGORY,ODS_STORE_GOODS,ODS_STORE_GOODS_SALES,ODS_TENANT_GOODS,ODS_PLATFORM_COUPON,ODS_GROUP_PACKAGE,ODS_GROUP_BUY_REDEMPTION,ODS_INVENTORY_STOCK,ODS_INVENTORY_CHANGE,DWS_GOODS_STOCK_DAILY,DWS_GOODS_STOCK_WEEKLY,DWS_GOODS_STOCK_MONTHLY,DWS_FINANCE_DAILY,DWS_FINANCE_RECHARGE,DWS_FINANCE_INCOME_STRUCTURE,DWS_FINANCE_DISCOUNT_DETAIL,DWS_WINBACK_INDEX,DWS_NEWCONV_INDEX,DWS_RELATION_INDEX,DWD_LOAD_FROM_ODS --window-start 2025-11-01 --window-end 2026-02-20 --window-split day --window-split-days 30 --force-full --store-id 2790685415443269",
|
||||
"summary": null
|
||||
},
|
||||
"error_log_length": 66800,
|
||||
"task_results_parsed": [
|
||||
{
|
||||
"task": "ODS_ASSISTANT_ACCOUNT",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:29:21",
|
||||
"end": "2026-02-21 15:29:31",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 276, 'inserted': 0, 'updated': 276, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_ASSISTANT_LEDGER",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:29:32",
|
||||
"end": "2026-02-21 15:30:08",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 2277, 'inserted': 342, 'updated': 2277, 'skipped': 0, 'errors': 0, 'deleted': 342}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_ASSISTANT_ABOLISH",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:30:08",
|
||||
"end": "2026-02-21 15:30:11",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 78, 'inserted': 0, 'updated': 78, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "DWS_ASSISTANT_DAILY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "2026-02-21 15:30:13",
|
||||
"end": "2026-02-21 15:30:14",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_ASSISTANT_MONTHLY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:14",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_ASSISTANT_CUSTOMER",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:14",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_ASSISTANT_SALARY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:14",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_ASSISTANT_FINANCE",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:14",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_SETTLEMENT_RECORDS",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:14",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_PAYMENT",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:15",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_REFUND",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:30:15",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_BUILD_ORDER_SUMMARY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "2026-02-21 15:30:15",
|
||||
"end": "2026-02-21 15:30:15",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_TABLE_USE",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:30:15",
|
||||
"end": "2026-02-21 15:35:01",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 36412, 'inserted': 0, 'updated': 36412, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_TABLE_FEE_DISCOUNT",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:35:02",
|
||||
"end": "2026-02-21 15:36:04",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 6464, 'inserted': 0, 'updated': 6464, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_TABLES",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:36:05",
|
||||
"end": "2026-02-21 15:36:10",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 296, 'inserted': 0, 'updated': 296, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_MEMBER",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:36:11",
|
||||
"end": "2026-02-21 15:36:28",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 2228, 'inserted': 0, 'updated': 2228, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_MEMBER_CARD",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:36:29",
|
||||
"end": "2026-02-21 15:37:05",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 3784, 'inserted': 0, 'updated': 3784, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_MEMBER_BALANCE",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:37:06",
|
||||
"end": "2026-02-21 15:38:59",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 8740, 'inserted': 0, 'updated': 8740, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "ODS_RECHARGE_SETTLE",
|
||||
"layer": "ODS",
|
||||
"status": "success",
|
||||
"start": "2026-02-21 15:39:01",
|
||||
"end": "2026-02-21 15:39:06",
|
||||
"windows": 4,
|
||||
"stats": "{'fetched': 191, 'inserted': 0, 'updated': 191, 'skipped': 0, 'errors': 0, 'deleted': 0}"
|
||||
},
|
||||
{
|
||||
"task": "DWS_MEMBER_CONSUMPTION",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "2026-02-21 15:39:06",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_MEMBER_VISIT",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_GOODS_CATEGORY",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_STORE_GOODS",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_STORE_GOODS_SALES",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_TENANT_GOODS",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_PLATFORM_COUPON",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_GROUP_PACKAGE",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_GROUP_BUY_REDEMPTION",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_INVENTORY_STOCK",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "ODS_INVENTORY_CHANGE",
|
||||
"layer": "ODS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_GOODS_STOCK_DAILY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_GOODS_STOCK_WEEKLY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_GOODS_STOCK_MONTHLY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_FINANCE_DAILY",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_FINANCE_RECHARGE",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:07",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_FINANCE_INCOME_STRUCTURE",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:08",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_FINANCE_DISCOUNT_DETAIL",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:08",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_WINBACK_INDEX",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "2026-02-21 15:39:08",
|
||||
"end": "2026-02-21 15:39:08",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_NEWCONV_INDEX",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "2026-02-21 15:39:08",
|
||||
"end": "2026-02-21 15:39:08",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWS_RELATION_INDEX",
|
||||
"layer": "DWS",
|
||||
"status": "failed",
|
||||
"start": "2026-02-21 15:39:08",
|
||||
"end": "2026-02-21 15:39:08",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
},
|
||||
{
|
||||
"task": "DWD_LOAD_FROM_ODS",
|
||||
"layer": "DWD",
|
||||
"status": "failed",
|
||||
"start": "",
|
||||
"end": "2026-02-21 15:39:08",
|
||||
"windows": 0,
|
||||
"error": "错误: 当前事务被终止, 事务块结束之前的查询被忽略"
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,124 +0,0 @@
|
||||
# ETL 执行结果报告
|
||||
|
||||
> 生成时间:2026-02-21 19:18:58
|
||||
> execution_id:dbf0c29a-253a-4705-a1ef-35cd71243d48
|
||||
> run_uuid:4ba9d2d365ee4a858f1c4104b1942dc2
|
||||
|
||||
---
|
||||
|
||||
## 执行概览
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 状态 | success |
|
||||
| 开始时间 | 2026-02-21T15:29:20.233302+08:00 |
|
||||
| 结束时间 | 2026-02-21T15:39:10.909320+08:00 |
|
||||
| 总时长 | 590.7s (9.8m) |
|
||||
| 退出码 | 0 |
|
||||
| 任务总数 | 41 |
|
||||
| 成功 | 10 |
|
||||
| 失败 | 31 |
|
||||
|
||||
---
|
||||
|
||||
## 任务级结果
|
||||
|
||||
| # | 任务 | 层 | 状态 | 开始 | 结束 | 耗时 | 窗口数 | 备注 |
|
||||
|---|------|-----|------|------|------|------|--------|------|
|
||||
| 1 | ODS_ASSISTANT_ACCOUNT | ODS | ✅ success | 15:29:21 | 15:29:31 | 10.0s | 4 | {'fetched': 276, 'inserted': 0, 'updated': 276, 'skipped'... |
|
||||
| 2 | ODS_ASSISTANT_LEDGER | ODS | ✅ success | 15:29:32 | 15:30:08 | 36.0s | 4 | {'fetched': 2277, 'inserted': 342, 'updated': 2277, 'skip... |
|
||||
| 3 | ODS_ASSISTANT_ABOLISH | ODS | ✅ success | 15:30:08 | 15:30:11 | 3.0s | 4 | {'fetched': 78, 'inserted': 0, 'updated': 78, 'skipped': ... |
|
||||
| 4 | DWS_ASSISTANT_DAILY | DWS | ❌ failed | 15:30:13 | 15:30:14 | 1.0s | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 5 | DWS_ASSISTANT_MONTHLY | DWS | ❌ failed | | 15:30:14 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 6 | DWS_ASSISTANT_CUSTOMER | DWS | ❌ failed | | 15:30:14 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 7 | DWS_ASSISTANT_SALARY | DWS | ❌ failed | | 15:30:14 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 8 | DWS_ASSISTANT_FINANCE | DWS | ❌ failed | | 15:30:14 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 9 | ODS_SETTLEMENT_RECORDS | ODS | ❌ failed | | 15:30:14 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 10 | ODS_PAYMENT | ODS | ❌ failed | | 15:30:15 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 11 | ODS_REFUND | ODS | ❌ failed | | 15:30:15 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 12 | DWS_BUILD_ORDER_SUMMARY | DWS | ❌ failed | 15:30:15 | 15:30:15 | 0.0s | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 13 | ODS_TABLE_USE | ODS | ✅ success | 15:30:15 | 15:35:01 | 4.8m | 4 | {'fetched': 36412, 'inserted': 0, 'updated': 36412, 'skip... |
|
||||
| 14 | ODS_TABLE_FEE_DISCOUNT | ODS | ✅ success | 15:35:02 | 15:36:04 | 1.0m | 4 | {'fetched': 6464, 'inserted': 0, 'updated': 6464, 'skippe... |
|
||||
| 15 | ODS_TABLES | ODS | ✅ success | 15:36:05 | 15:36:10 | 5.0s | 4 | {'fetched': 296, 'inserted': 0, 'updated': 296, 'skipped'... |
|
||||
| 16 | ODS_MEMBER | ODS | ✅ success | 15:36:11 | 15:36:28 | 17.0s | 4 | {'fetched': 2228, 'inserted': 0, 'updated': 2228, 'skippe... |
|
||||
| 17 | ODS_MEMBER_CARD | ODS | ✅ success | 15:36:29 | 15:37:05 | 36.0s | 4 | {'fetched': 3784, 'inserted': 0, 'updated': 3784, 'skippe... |
|
||||
| 18 | ODS_MEMBER_BALANCE | ODS | ✅ success | 15:37:06 | 15:38:59 | 1.9m | 4 | {'fetched': 8740, 'inserted': 0, 'updated': 8740, 'skippe... |
|
||||
| 19 | ODS_RECHARGE_SETTLE | ODS | ✅ success | 15:39:01 | 15:39:06 | 5.0s | 4 | {'fetched': 191, 'inserted': 0, 'updated': 191, 'skipped'... |
|
||||
| 20 | DWS_MEMBER_CONSUMPTION | DWS | ❌ failed | 15:39:06 | 15:39:07 | 1.0s | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 21 | DWS_MEMBER_VISIT | DWS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 22 | ODS_GOODS_CATEGORY | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 23 | ODS_STORE_GOODS | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 24 | ODS_STORE_GOODS_SALES | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 25 | ODS_TENANT_GOODS | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 26 | ODS_PLATFORM_COUPON | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 27 | ODS_GROUP_PACKAGE | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 28 | ODS_GROUP_BUY_REDEMPTION | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 29 | ODS_INVENTORY_STOCK | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 30 | ODS_INVENTORY_CHANGE | ODS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 31 | DWS_GOODS_STOCK_DAILY | DWS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 32 | DWS_GOODS_STOCK_WEEKLY | DWS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 33 | DWS_GOODS_STOCK_MONTHLY | DWS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 34 | DWS_FINANCE_DAILY | DWS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 35 | DWS_FINANCE_RECHARGE | DWS | ❌ failed | | 15:39:07 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 36 | DWS_FINANCE_INCOME_STRUCTURE | DWS | ❌ failed | | 15:39:08 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 37 | DWS_FINANCE_DISCOUNT_DETAIL | DWS | ❌ failed | | 15:39:08 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 38 | DWS_WINBACK_INDEX | DWS | ❌ failed | 15:39:08 | 15:39:08 | 0.0s | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 39 | DWS_NEWCONV_INDEX | DWS | ❌ failed | 15:39:08 | 15:39:08 | 0.0s | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 40 | DWS_RELATION_INDEX | DWS | ❌ failed | 15:39:08 | 15:39:08 | 0.0s | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 41 | DWD_LOAD_FROM_ODS | DWD | ❌ failed | | 15:39:08 | — | — | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
|
||||
---
|
||||
|
||||
## 失败任务分析
|
||||
|
||||
### 根因:DWS_ASSISTANT_DAILY
|
||||
|
||||
错误:`错误: 当前事务被终止, 事务块结束之前的查询被忽略`
|
||||
|
||||
原因:`_extract_trash_records` SQL 引用了 `dwd_assistant_trash_event` 中不存在的字段 `assistant_service_id`。
|
||||
|
||||
### 级联失败
|
||||
|
||||
- DWS_ASSISTANT_MONTHLY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_ASSISTANT_CUSTOMER:InFailedSqlTransaction(事务污染)
|
||||
- DWS_ASSISTANT_SALARY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_ASSISTANT_FINANCE:InFailedSqlTransaction(事务污染)
|
||||
- ODS_SETTLEMENT_RECORDS:InFailedSqlTransaction(事务污染)
|
||||
- ODS_PAYMENT:InFailedSqlTransaction(事务污染)
|
||||
- ODS_REFUND:InFailedSqlTransaction(事务污染)
|
||||
- DWS_BUILD_ORDER_SUMMARY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_MEMBER_CONSUMPTION:InFailedSqlTransaction(事务污染)
|
||||
- DWS_MEMBER_VISIT:InFailedSqlTransaction(事务污染)
|
||||
- ODS_GOODS_CATEGORY:InFailedSqlTransaction(事务污染)
|
||||
- ODS_STORE_GOODS:InFailedSqlTransaction(事务污染)
|
||||
- ODS_STORE_GOODS_SALES:InFailedSqlTransaction(事务污染)
|
||||
- ODS_TENANT_GOODS:InFailedSqlTransaction(事务污染)
|
||||
- ODS_PLATFORM_COUPON:InFailedSqlTransaction(事务污染)
|
||||
- ODS_GROUP_PACKAGE:InFailedSqlTransaction(事务污染)
|
||||
- ODS_GROUP_BUY_REDEMPTION:InFailedSqlTransaction(事务污染)
|
||||
- ODS_INVENTORY_STOCK:InFailedSqlTransaction(事务污染)
|
||||
- ODS_INVENTORY_CHANGE:InFailedSqlTransaction(事务污染)
|
||||
- DWS_GOODS_STOCK_DAILY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_GOODS_STOCK_WEEKLY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_GOODS_STOCK_MONTHLY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_FINANCE_DAILY:InFailedSqlTransaction(事务污染)
|
||||
- DWS_FINANCE_RECHARGE:InFailedSqlTransaction(事务污染)
|
||||
- DWS_FINANCE_INCOME_STRUCTURE:InFailedSqlTransaction(事务污染)
|
||||
- DWS_FINANCE_DISCOUNT_DETAIL:InFailedSqlTransaction(事务污染)
|
||||
- DWS_WINBACK_INDEX:InFailedSqlTransaction(事务污染)
|
||||
- DWS_NEWCONV_INDEX:InFailedSqlTransaction(事务污染)
|
||||
- DWS_RELATION_INDEX:InFailedSqlTransaction(事务污染)
|
||||
- DWD_LOAD_FROM_ODS:InFailedSqlTransaction(事务污染)
|
||||
|
||||
### 修复状态
|
||||
|
||||
代码已修复(4 处改动),待下次执行验证。
|
||||
详见:`export/SYSTEM/LOGS/2026-02-21__dws_assistant_daily_bug_fix.md`
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
|
||||
1. 重新提交包含 9 个失败任务的执行,验证修复
|
||||
2. 运行 ETL Data Consistency Check
|
||||
3. 运行 /audit 审计
|
||||
@@ -1,136 +0,0 @@
|
||||
# ETL 回归执行结果报告(第二次)
|
||||
|
||||
> 生成时间:2026-02-21 19:33:28
|
||||
> execution_id:e21e1935-5abf-434f-9984-69c492402db7
|
||||
> 目的:验证 DWS_ASSISTANT_DAILY 修复 + 补跑上次失败的 31 个任务
|
||||
|
||||
---
|
||||
|
||||
## 执行概览
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 状态 | success |
|
||||
| 开始时间 | 2026-02-21T19:27:47.937140+08:00 |
|
||||
| 结束时间 | 2026-02-21T19:30:18.341157+08:00 |
|
||||
| 总时长 | 150.4s (2.5m) |
|
||||
| 退出码 | 0 |
|
||||
| 任务总数 | 31 |
|
||||
|
||||
## 执行日志(error_log 末尾 100 行)
|
||||
|
||||
```
|
||||
Traceback (most recent call last):
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 403, in _run_utility_task
|
||||
result = task.execute(None)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\dws\index\relation_index_task.py", line 145, in execute
|
||||
tenant_id = self._get_tenant_id()
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\dws\index\relation_index_task.py", line 688, in _get_tenant_id
|
||||
rows = self.db.query(sql)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\database\operations.py", line 99, in query
|
||||
return self._connection.query(sql, args)
|
||||
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\database\connection.py", line 50, in query
|
||||
c.execute(sql, args)
|
||||
~~~~~~~~~^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\.venv\Lib\site-packages\psycopg2\extras.py", line 236, in execute
|
||||
return super().execute(query, vars)
|
||||
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
psycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
||||
[2026-02-21 19:30:15] ERROR | etl_billiards | 任务 DWS_RELATION_INDEX 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
Traceback (most recent call last):
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 94, in run_tasks
|
||||
task_result = self.run_single_task(
|
||||
task_code, run_uuid, store_id, data_source=data_source,
|
||||
)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 150, in run_single_task
|
||||
return self._run_utility_task(task_code_upper, store_id)
|
||||
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 403, in _run_utility_task
|
||||
result = task.execute(None)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\dws\index\relation_index_task.py", line 145, in execute
|
||||
tenant_id = self._get_tenant_id()
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\tasks\dws\index\relation_index_task.py", line 688, in _get_tenant_id
|
||||
rows = self.db.query(sql)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\database\operations.py", line 99, in query
|
||||
return self._connection.query(sql, args)
|
||||
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\database\connection.py", line 50, in query
|
||||
c.execute(sql, args)
|
||||
~~~~~~~~~^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\.venv\Lib\site-packages\psycopg2\extras.py", line 236, in execute
|
||||
return super().execute(query, vars)
|
||||
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
psycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
||||
[2026-02-21 19:30:15] ERROR | etl_billiards | 任务 DWD_LOAD_FROM_ODS 失败: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
Traceback (most recent call last):
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 94, in run_tasks
|
||||
task_result = self.run_single_task(
|
||||
task_code, run_uuid, store_id, data_source=data_source,
|
||||
)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 152, in run_single_task
|
||||
task_cfg = self._load_task_config(task_code, store_id)
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\orchestration\task_executor.py", line 429, in _load_task_config
|
||||
rows = self.db_ops.query(sql, (store_id, task_code))
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\database\operations.py", line 99, in query
|
||||
return self._connection.query(sql, args)
|
||||
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\apps\etl\connectors\feiqiu\database\connection.py", line 50, in query
|
||||
c.execute(sql, args)
|
||||
~~~~~~~~~^^^^^^^^^^^
|
||||
File "C:\NeoZQYY\.venv\Lib\site-packages\psycopg2\extras.py", line 236, in execute
|
||||
return super().execute(query, vars)
|
||||
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||
psycopg2.errors.InFailedSqlTransaction: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
||||
[2026-02-21 19:30:15] INFO | etl_billiards | 所有任务执行完成
|
||||
[2026-02-21 19:30:18] INFO | etl_billiards | 一致性检查报告已生成: C:\NeoZQYY\export\ETL-Connectors\feiqiu\REPORTS\consistency_report_20260221_193018.md
|
||||
[2026-02-21 19:30:18] INFO | etl_billiards | 计时报告已生成
|
||||
[2026-02-21 19:30:18] INFO | etl_billiards |
|
||||
╔══════════════════════════════════════════════════════════════╗
|
||||
║ 任务执行总结 ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ 任务代码: FLOW_API_FULL ║
|
||||
║ 执行状态: 成功 ║
|
||||
║ 执行时间: 2026-02-21 19:27:49 ~ 19:30:18 (2分29秒) ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ 数据统计 ║
|
||||
║ - 获取记录: 0 ║
|
||||
║ - 新增记录: 0 ║
|
||||
║ - 更新记录: 0 ║
|
||||
║ - 跳过记录: 0 ║
|
||||
║ - 错误记录: 0 ║
|
||||
╚══════════════════════════════════════════════════════════════╝
|
||||
[2026-02-21 19:30:18] INFO | etl_billiards |
|
||||
╔══════════════════════════════════════════════════════════════╗
|
||||
║ 任务执行总结 ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ 任务代码: FLOW_API_FULL ║
|
||||
║ 执行状态: 成功 ║
|
||||
║ 执行时间: 2026-02-21 19:27:49 ~ 19:30:18 (2分29秒) ║
|
||||
╠══════════════════════════════════════════════════════════════╣
|
||||
║ 数据统计 ║
|
||||
║ - 获取记录: 0 ║
|
||||
║ - 新增记录: 0 ║
|
||||
║ - 更新记录: 0 ║
|
||||
║ - 跳过记录: 0 ║
|
||||
║ - 错误记录: 0 ║
|
||||
╚══════════════════════════════════════════════════════════════╝
|
||||
[2026-02-21 19:30:18] INFO | etl_billiards | Flow 执行完成: SUCCESS
|
||||
[2026-02-21 19:30:18] INFO | etl_billiards | ETL运行完成
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 与第一次执行的对比
|
||||
|
||||
| 项目 | 第一次 | 第二次(本次) |
|
||||
|------|--------|---------------|
|
||||
| 任务数 | 41 | 31 |
|
||||
| 状态 | success (exit_code=0) | success (exit_code=0) |
|
||||
| 耗时 | 590.7s (9.8m) | 150.4s (2.5m) |
|
||||
| 成功 | 10/41 | 待分析 |
|
||||
| 失败 | 31/41 | 待分析 |
|
||||
| 根因 | DWS_ASSISTANT_DAILY SQL 字段错误 | — |
|
||||
@@ -1,85 +0,0 @@
|
||||
# ETL 回归执行结果报告(第三次)
|
||||
|
||||
> 生成时间:2026-02-21 19:54:12
|
||||
> execution_id:abc94b2d-615f-42ea-83cc-ce687524a6ea
|
||||
> 目的:验证 BUG 2(DWS_ASSISTANT_MONTHLY UniqueViolation)和 BUG 3(DWS_ASSISTANT_CUSTOMER UndefinedColumn)修复
|
||||
|
||||
---
|
||||
|
||||
## 执行概览
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 状态 | success |
|
||||
| 开始时间 | 2026-02-21 19:41:02 |
|
||||
| 结束时间 | 2026-02-21 19:52:22 |
|
||||
| 总时长 | 681.2s (11m19s) |
|
||||
| 退出码 | 0 |
|
||||
| 任务总数 | 31 |
|
||||
| 成功 | 9 |
|
||||
| 失败 | 22 |
|
||||
| 未知 | 0 |
|
||||
| 数据统计 | 获取 52,982 / 新增 13,296 / 更新 52,982 |
|
||||
|
||||
## BUG 修复验证
|
||||
|
||||
| BUG | 任务 | 第二次结果 | 第三次结果 | 验证 |
|
||||
|-----|------|-----------|-----------|------|
|
||||
| BUG 1 | DWS_ASSISTANT_DAILY | ✅ 已修复 | ✅ 成功 | ✅ 持续通过 |
|
||||
| BUG 2 | DWS_ASSISTANT_MONTHLY | ❌ UniqueViolation | ✅ 成功 | ✅ 修复验证通过 |
|
||||
| BUG 3 | DWS_ASSISTANT_CUSTOMER | ❌ UndefinedColumn | ✅ 成功 | ✅ 修复验证通过 |
|
||||
|
||||
## 逐任务结果
|
||||
|
||||
| # | 任务 | 状态 | 统计/错误 |
|
||||
|---|------|------|----------|
|
||||
| 1 | DWS_ASSISTANT_DAILY | ✅ 成功 | {'counts': {'fetched': 367, 'inserted': 367, 'updated': 0, 'skipped': 0, 'errors |
|
||||
| 2 | DWS_ASSISTANT_MONTHLY | ✅ 成功 | {'counts': {'fetched': 25, 'inserted': 25, 'updated': 0, 'skipped': 0, 'errors': |
|
||||
| 3 | DWS_ASSISTANT_CUSTOMER | ✅ 成功 | {'counts': {'fetched': 486, 'inserted': 486, 'updated': 0, 'skipped': 0, 'errors |
|
||||
| 4 | DWS_ASSISTANT_SALARY | ✅ 成功 | {'counts': {'fetched': 0, 'inserted': 0, 'updated': 0, 'skipped': 0, 'errors': 0 |
|
||||
| 5 | DWS_ASSISTANT_FINANCE | ✅ 成功 | {'counts': {'fetched': 367, 'inserted': 367, 'updated': 0, 'skipped': 0, 'errors |
|
||||
| 6 | ODS_SETTLEMENT_RECORDS | ✅ 成功 | fetched=10366, updated=10366 |
|
||||
| 7 | ODS_PAYMENT | ✅ 成功 | fetched=42500, updated=42500 |
|
||||
| 8 | ODS_REFUND | ✅ 成功 | fetched=116, updated=116 |
|
||||
| 9 | DWS_BUILD_ORDER_SUMMARY | ✅ 成功 | {'fetched': 0, 'inserted': 13296, 'updated': 0, 'skipped': 0, 'errors': 0} |
|
||||
| 10 | DWS_MEMBER_CONSUMPTION | ❌ 字段错误 | UndefinedColumn: dim_member.site_id 不存在(同 BUG 3 同类) |
|
||||
| 11 | DWS_MEMBER_VISIT | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 12 | ODS_GOODS_CATEGORY | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 13 | ODS_STORE_GOODS | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 14 | ODS_STORE_GOODS_SALES | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 15 | ODS_TENANT_GOODS | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 16 | ODS_PLATFORM_COUPON | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 17 | ODS_GROUP_PACKAGE | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 18 | ODS_GROUP_BUY_REDEMPTION | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 19 | ODS_INVENTORY_STOCK | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 20 | ODS_INVENTORY_CHANGE | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 21 | DWS_GOODS_STOCK_DAILY | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 22 | DWS_GOODS_STOCK_WEEKLY | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 23 | DWS_GOODS_STOCK_MONTHLY | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 24 | DWS_FINANCE_DAILY | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 25 | DWS_FINANCE_RECHARGE | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 26 | DWS_FINANCE_INCOME_STRUCTURE | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 27 | DWS_FINANCE_DISCOUNT_DETAIL | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 28 | DWS_WINBACK_INDEX | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 29 | DWS_NEWCONV_INDEX | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 30 | DWS_RELATION_INDEX | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 31 | DWD_LOAD_FROM_ODS | ❌ 失败 | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
|
||||
## 根因分析
|
||||
|
||||
本次新发现的根因错误:
|
||||
|
||||
- 任务:`DWS_MEMBER_CONSUMPTION`
|
||||
- 错误:错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- 影响:后续所有任务因 `InFailedSqlTransaction` 级联失败
|
||||
|
||||
|
||||
## 三次执行对比
|
||||
|
||||
| 项目 | 第一次 | 第二次 | 第三次(本次) |
|
||||
|------|--------|--------|---------------|
|
||||
| 任务数 | 41 | 31 | 31 |
|
||||
| 耗时 | 590.7s | 150.4s | 681.2s |
|
||||
| 成功 | 10/41 | 3/31 | 6/31 |
|
||||
| 失败 | 31/41 | 28/31 | 22/31 |
|
||||
| 根因 | DWS_ASSISTANT_DAILY SQL 字段 | DWS_ASSISTANT_MONTHLY UK + DWS_ASSISTANT_CUSTOMER site_id | DWS_MEMBER_CONSUMPTION site_id |
|
||||
@@ -1,70 +0,0 @@
|
||||
# 第四次 ETL 执行结果报告
|
||||
|
||||
- execution_id: `efd4f421-ee10-4244-833f-7b2d68c3c05b`
|
||||
- 时间: 2026-02-21 19:57:02 ~ 20:08:57
|
||||
- 耗时: 11 分 55 秒 (715s)
|
||||
- 整体状态: success (exit_code=0)
|
||||
- 任务总数: 31
|
||||
|
||||
## 成功任务 (10 个)
|
||||
|
||||
| # | 任务 | 耗时 | 统计 |
|
||||
|---|------|------|------|
|
||||
| 1 | DWS_ASSISTANT_DAILY | ~2m28s | fetched=367, inserted=367, deleted=367 |
|
||||
| 2 | DWS_ASSISTANT_MONTHLY | ~12s | fetched=25, inserted=25, deleted=25 |
|
||||
| 3 | DWS_ASSISTANT_CUSTOMER | ~1m22s | fetched=486, inserted=486 |
|
||||
| 4 | DWS_ASSISTANT_SALARY | <1s | 非工资结算期,跳过 |
|
||||
| 5 | DWS_ASSISTANT_FINANCE | ~1m10s | fetched=367, inserted=367, deleted=367 |
|
||||
| 6 | ODS_SETTLEMENT_RECORDS | ~1m46s | fetched=10366, updated=10366 |
|
||||
| 7 | ODS_PAYMENT | ~4m0s | fetched=42500, updated=42500 |
|
||||
| 8 | ODS_REFUND | ~3s | fetched=116, updated=116 |
|
||||
| 9 | DWS_BUILD_ORDER_SUMMARY | ~1s | inserted=13296 |
|
||||
| 10 | DWS_MEMBER_CONSUMPTION | ~43s | fetched=198, inserted=198 |
|
||||
|
||||
## BUG 4 修复验证
|
||||
|
||||
- DWS_MEMBER_CONSUMPTION ✅ 不再报 UndefinedColumn site_id
|
||||
- DWS_MEMBER_VISIT ❌ 新错误(BUG 5)
|
||||
- DWS_FINANCE_RECHARGE ❌ 级联失败(未能独立验证)
|
||||
|
||||
## 新发现 BUG 5
|
||||
|
||||
- 任务: `DWS_MEMBER_VISIT`
|
||||
- 错误: `UndefinedColumn: 字段 "birthday" 不存在`
|
||||
- 位置: `member_visit_task.py` → `_extract_member_info()` line ~312
|
||||
- 根因: SQL 查询 `dwd.dim_member` 时引用了 `birthday` 字段,但该表没有此字段
|
||||
- DWS 表 `dws_member_visit_detail` 设计了 `member_birthday DATE` 列,但上游 dim_member 未提供此数据
|
||||
- 级联影响: 后续 20 个任务全部 InFailedSqlTransaction
|
||||
|
||||
## 失败任务 (21 个)
|
||||
|
||||
| 类型 | 任务 | 错误 |
|
||||
|------|------|------|
|
||||
| 🔴 根因 | DWS_MEMBER_VISIT | UndefinedColumn: birthday |
|
||||
| 级联 | ODS_GOODS_CATEGORY | InFailedSqlTransaction |
|
||||
| 级联 | ODS_STORE_GOODS | InFailedSqlTransaction |
|
||||
| 级联 | ODS_STORE_GOODS_SALES | InFailedSqlTransaction |
|
||||
| 级联 | ODS_TENANT_GOODS | InFailedSqlTransaction |
|
||||
| 级联 | ODS_PLATFORM_COUPON | InFailedSqlTransaction |
|
||||
| 级联 | ODS_GROUP_PACKAGE | InFailedSqlTransaction |
|
||||
| 级联 | ODS_GROUP_BUY_REDEMPTION | InFailedSqlTransaction |
|
||||
| 级联 | ODS_INVENTORY_STOCK | InFailedSqlTransaction |
|
||||
| 级联 | ODS_INVENTORY_CHANGE | InFailedSqlTransaction |
|
||||
| 级联 | DWS_GOODS_STOCK_DAILY | InFailedSqlTransaction |
|
||||
| 级联 | DWS_GOODS_STOCK_WEEKLY | InFailedSqlTransaction |
|
||||
| 级联 | DWS_GOODS_STOCK_MONTHLY | InFailedSqlTransaction |
|
||||
| 级联 | DWS_FINANCE_DAILY | InFailedSqlTransaction |
|
||||
| 级联 | DWS_FINANCE_RECHARGE | InFailedSqlTransaction |
|
||||
| 级联 | DWS_FINANCE_INCOME_STRUCTURE | InFailedSqlTransaction |
|
||||
| 级联 | DWS_FINANCE_DISCOUNT_DETAIL | InFailedSqlTransaction |
|
||||
| 级联 | DWS_WINBACK_INDEX | InFailedSqlTransaction |
|
||||
| 级联 | DWS_NEWCONV_INDEX | InFailedSqlTransaction |
|
||||
| 级联 | DWS_RELATION_INDEX | InFailedSqlTransaction |
|
||||
| 级联 | DWD_LOAD_FROM_ODS | InFailedSqlTransaction |
|
||||
|
||||
## BUG 5 修复
|
||||
|
||||
- 文件: `member_visit_task.py`
|
||||
- 改动 1: `_extract_member_info` SQL 移除 `birthday` 字段
|
||||
- 改动 2: transform 中 `member_birthday` 改为 `None`
|
||||
- 已添加 CHANGE 注释
|
||||
@@ -1,69 +0,0 @@
|
||||
# 第五次 ETL 执行结果报告
|
||||
|
||||
- execution_id: `fe87144a-687d-4ce0-9b79-6bd0186b2be3`
|
||||
- 执行时间: 2026-02-21 20:19:52 ~ 20:31:29(约 11m37s)
|
||||
- exit_code: 0
|
||||
- 总任务数: 31
|
||||
|
||||
## 成功任务(10 个)
|
||||
|
||||
| # | 任务 |
|
||||
|---|------|
|
||||
| 1 | DWS_ASSISTANT_DAILY |
|
||||
| 2 | DWS_ASSISTANT_MONTHLY |
|
||||
| 3 | DWS_ASSISTANT_CUSTOMER |
|
||||
| 4 | DWS_ASSISTANT_SALARY |
|
||||
| 5 | DWS_ASSISTANT_FINANCE |
|
||||
| 6 | ODS_SETTLEMENT_RECORDS ODS 任务完成 |
|
||||
| 7 | ODS_PAYMENT ODS 任务完成 |
|
||||
| 8 | ODS_REFUND ODS 任务完成 |
|
||||
| 9 | DWS_BUILD_ORDER_SUMMARY |
|
||||
| 10 | DWS_MEMBER_CONSUMPTION |
|
||||
|
||||
## 失败任务(21 个)
|
||||
|
||||
| # | 任务 | 错误类型 |
|
||||
|---|------|----------|
|
||||
| 1 | DWS_MEMBER_VISIT | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 2 | ODS_GOODS_CATEGORY | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 3 | ODS_STORE_GOODS | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 4 | ODS_STORE_GOODS_SALES | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 5 | ODS_TENANT_GOODS | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 6 | ODS_PLATFORM_COUPON | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 7 | ODS_GROUP_PACKAGE | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 8 | ODS_GROUP_BUY_REDEMPTION | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 9 | ODS_INVENTORY_STOCK | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 10 | ODS_INVENTORY_CHANGE | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 11 | DWS_GOODS_STOCK_DAILY | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 12 | DWS_GOODS_STOCK_WEEKLY | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 13 | DWS_GOODS_STOCK_MONTHLY | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 14 | DWS_FINANCE_DAILY | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 15 | DWS_FINANCE_RECHARGE | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 16 | DWS_FINANCE_INCOME_STRUCTURE | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 17 | DWS_FINANCE_DISCOUNT_DETAIL | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 18 | DWS_WINBACK_INDEX | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 19 | DWS_NEWCONV_INDEX | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 20 | DWS_RELATION_INDEX | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 21 | DWD_LOAD_FROM_ODS | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
|
||||
## 根因分析
|
||||
|
||||
BUG 6: `DWS_MEMBER_VISIT` → `_extract_table_info()` 方法中 SQL 引用了 `dwd.dim_table.site_table_id`,
|
||||
但该表的主键字段实际为 `table_id`(参考 `db/etl_feiqiu/schemas/dwd.sql`)。
|
||||
|
||||
错误发生后,psycopg2 连接进入 InFailedSqlTransaction 状态,导致后续所有任务级联失败。
|
||||
|
||||
## 修复措施
|
||||
|
||||
1. `member_visit_task.py` → `_extract_table_info()`:
|
||||
- `site_table_id AS table_id` → `table_id AS table_id`
|
||||
- `site_table_name AS table_name` → `table_name AS table_name`
|
||||
|
||||
2. `finance_income_task.py` → `_extract_income_by_area()`:
|
||||
- JOIN 条件 `dt.site_table_id = tfl.site_table_id` → `dt.table_id = tfl.site_table_id`
|
||||
- JOIN 条件 `dt.site_table_id = asl.site_table_id` → `dt.table_id = asl.site_table_id`
|
||||
|
||||
## BUG 5 验证
|
||||
|
||||
BUG 5(birthday 字段)的修复已部署,但被 BUG 6 遮蔽,无法在本次执行中验证。
|
||||
需要第六次执行来同时验证 BUG 5 + BUG 6 + BUG 7。
|
||||
@@ -1,59 +0,0 @@
|
||||
# 第六次 ETL 执行结果报告
|
||||
|
||||
- execution_id: `d9443781-e4ac-4df6-9f87-11c45d72e5ba`
|
||||
- 执行时间: 2026-02-21 20:45:18 ~ 21:14:45(29 分 26 秒)
|
||||
- exit_code: 0
|
||||
- status: success
|
||||
- 总任务数: 31
|
||||
- 数据统计: 获取 171,961 / 新增 13,662 / 更新 171,595 / 跳过 0 / 错误 0
|
||||
|
||||
## 成功任务(11 个)
|
||||
|
||||
| # | 任务 |
|
||||
|---|------|
|
||||
| 1 | DWS_ASSISTANT_DAILY: |
|
||||
| 2 | DWS_ASSISTANT_MONTHLY: |
|
||||
| 3 | DWS_ASSISTANT_CUSTOMER: |
|
||||
| 4 | DWS_ASSISTANT_SALARY: |
|
||||
| 5 | DWS_ASSISTANT_FINANCE: |
|
||||
| 6 | {'fetched': |
|
||||
| 7 | DWS_MEMBER_CONSUMPTION: |
|
||||
| 8 | DWS_MEMBER_VISIT: |
|
||||
| 9 | DWS_GOODS_STOCK_DAILY: |
|
||||
| 10 | DWS_GOODS_STOCK_WEEKLY: |
|
||||
| 11 | DWS_GOODS_STOCK_MONTHLY: |
|
||||
|
||||
## 失败任务(8 个)
|
||||
|
||||
| # | 任务 | 错误类型 |
|
||||
|---|------|----------|
|
||||
| 1 | DWS_FINANCE_DAILY | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 2 | DWS_FINANCE_RECHARGE | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 3 | DWS_FINANCE_INCOME_STRUCTURE | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 4 | DWS_FINANCE_DISCOUNT_DETAIL | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 5 | DWS_WINBACK_INDEX | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 6 | DWS_NEWCONV_INDEX | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 7 | DWS_RELATION_INDEX | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
| 8 | DWD_LOAD_FROM_ODS | 错误: 当前事务被终止, 事务块结束之前的查询被忽略 |
|
||||
|
||||
## 根因分析(8 个非级联失败)
|
||||
|
||||
- `DWS_FINANCE_DAILY`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWS_FINANCE_RECHARGE`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWS_FINANCE_INCOME_STRUCTURE`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWS_FINANCE_DISCOUNT_DETAIL`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWS_WINBACK_INDEX`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWS_NEWCONV_INDEX`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWS_RELATION_INDEX`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
- `DWD_LOAD_FROM_ODS`: 错误: 当前事务被终止, 事务块结束之前的查询被忽略
|
||||
|
||||
## 与前次对比
|
||||
|
||||
| 轮次 | 成功 | 失败 | 耗时 | 修复的 BUG |
|
||||
|------|------|------|------|-----------|
|
||||
| v1 | 10 | 31 | 9m51s | — |
|
||||
| v2 | — | — | 2m30s | BUG 1 |
|
||||
| v3 | 9 | 22 | 11m21s | BUG 2+3 |
|
||||
| v4 | 10 | 21 | 11m55s | BUG 4 |
|
||||
| v5 | 10 | 21 | 11m37s | BUG 5 |
|
||||
| v6 | 11 | 8 | 29m26s | BUG 5+6+7 |
|
||||
@@ -1,109 +0,0 @@
|
||||
# ETL 第八次执行报告 (v8)
|
||||
|
||||
- execution_id: `f943bac6-23be-45c5-8b8c-a864e85a1916`
|
||||
- 时间: 2026-02-21 21:33:37 ~ 21:35:01 (1分24秒)
|
||||
- 整体状态: success, exit_code=0
|
||||
|
||||
## 本次修复验证
|
||||
|
||||
| BUG | 修复内容 | 验证结果 |
|
||||
|-----|---------|---------|
|
||||
| BUG 8 | `finance_base_task.py` + `finance_recharge_task.py`: pay_money→pay_amount, gift_money→point_amount | ✅ DWS_FINANCE_DAILY + DWS_FINANCE_RECHARGE 均完成 |
|
||||
| BUG 9 | `dwd_load_task.py`: 添加 `_pick_snapshot_order_column` 方法 | ✅ 所有 dim 表 SCD2 装载成功 |
|
||||
| BUG 10 | `dwd_load_task.py`: FACT_MAPPINGS 驼峰字段名→小写 | ✅ dwd_goods_stock_summary(716条) + dwd_goods_stock_movement(14306条) 装载成功 |
|
||||
| BUG 11 | `flow_runner.py`: sum() 类型安全处理 | ✅ 不再出现 TypeError |
|
||||
|
||||
## DWD_LOAD_FROM_ODS 详情
|
||||
|
||||
### 维度表 (SCD2) — 全部成功
|
||||
| 表 | processed | inserted | updated |
|
||||
|----|-----------|----------|---------|
|
||||
| dim_site | 1 | 0 | 1 |
|
||||
| dim_site_ex | 1 | 0 | 1 |
|
||||
| dim_table | 74 | 0 | 74 |
|
||||
| dim_table_ex | 74 | 0 | 74 |
|
||||
| dim_assistant | 69 | 0 | 69 |
|
||||
| dim_member | 557 | 0 | 557 |
|
||||
| dim_member_ex | 557 | 0 | 557 |
|
||||
| dim_member_card_account | 946 | 0 | 946 |
|
||||
| dim_tenant_goods | 174 | 1 | 173 |
|
||||
| dim_tenant_goods_ex | 174 | 1 | 173 |
|
||||
| dim_store_goods | 173 | 1 | 172 |
|
||||
| dim_store_goods_ex | 173 | 1 | 172 |
|
||||
| dim_goods_category | 26 | 0 | 26 |
|
||||
| dim_groupbuy_package | 34 | 0 | 34 |
|
||||
| dim_groupbuy_package_ex | 34 | 0 | 34 |
|
||||
|
||||
### 事实表 (INCREMENT) — 全部成功
|
||||
| 表 | processed | inserted | updated |
|
||||
|----|-----------|----------|---------|
|
||||
| dwd_settlement_head | 10366 | 0 | 10366 |
|
||||
| dwd_settlement_head_ex | 10366 | 0 | 10366 |
|
||||
| dwd_table_fee_log | 9103 | 0 | 9103 |
|
||||
| dwd_table_fee_log_ex | 9103 | 0 | 9103 |
|
||||
| dwd_table_fee_adjust | 1616 | 0 | 1616 |
|
||||
| dwd_table_fee_adjust_ex | 1616 | 0 | 1616 |
|
||||
| dwd_assistant_service_log | 2619 | 0 | 2619 |
|
||||
| dwd_assistant_service_log_ex | 2619 | 0 | 2619 |
|
||||
| dwd_assistant_trash_event | 78 | 0 | 78 |
|
||||
| dwd_assistant_trash_event_ex | 78 | 0 | 78 |
|
||||
| dwd_member_balance_change | 2185 | 0 | 2185 |
|
||||
| dwd_member_balance_change_ex | 2185 | 0 | 2185 |
|
||||
| dwd_groupbuy_redemption | 7267 | 0 | 7267 |
|
||||
| dwd_groupbuy_redemption_ex | 7267 | 0 | 7267 |
|
||||
| dwd_platform_coupon_redemption | 18311 | 0 | 18311 |
|
||||
| dwd_platform_coupon_redemption_ex | 18311 | 0 | 18311 |
|
||||
| dwd_recharge_order | 191 | 0 | 191 |
|
||||
| dwd_recharge_order_ex | 191 | 0 | 191 |
|
||||
| dwd_payment | 10625 | 0 | 10625 |
|
||||
| dwd_refund | 29 | 0 | 29 |
|
||||
| dwd_refund_ex | 29 | 0 | 29 |
|
||||
| dwd_goods_stock_summary | 716 | 716 | 0 |
|
||||
| dwd_goods_stock_movement | 14306 | 14306 | 0 |
|
||||
|
||||
### DWD 装载错误 (2个,数据质量问题,非代码 BUG)
|
||||
| 表 | 错误 |
|
||||
|----|------|
|
||||
| dim_assistant_ex | year -1 is out of range |
|
||||
| dim_member_card_account_ex | year -1 is out of range |
|
||||
|
||||
## DWS 任务状态
|
||||
|
||||
| 任务 | 状态 | 备注 |
|
||||
|------|------|------|
|
||||
| ODS_FETCH | ✅ 完成 | |
|
||||
| DWD_LOAD_FROM_ODS | ✅ 完成 | 39表成功,2表数据质量错误 |
|
||||
| DWS_ASSISTANT_DAILY | ✅ 完成 | |
|
||||
| DWS_ASSISTANT_MONTHLY | ✅ 完成 | 删除9行,插入9行 |
|
||||
| DWS_ASSISTANT_CUSTOMER | ✅ 完成 | 删除285行,插入285行 |
|
||||
| DWS_ASSISTANT_SALARY | ✅ 完成 | |
|
||||
| DWS_ASSISTANT_FINANCE | ✅ 完成 | |
|
||||
| DWS_MEMBER_CONSUMPTION | ✅ 完成 | 删除198行,插入198行 |
|
||||
| DWS_MEMBER_VISIT | ✅ 完成 | |
|
||||
| DWS_GOODS_STOCK_DAILY | ✅ 完成 | |
|
||||
| DWS_GOODS_STOCK_WEEKLY | ✅ 完成 | |
|
||||
| DWS_GOODS_STOCK_MONTHLY | ✅ 完成 | |
|
||||
| DWS_FINANCE_DAILY | ✅ 完成 | |
|
||||
| DWS_FINANCE_RECHARGE | ✅ 完成 | |
|
||||
| DWS_FINANCE_INCOME_STRUCTURE | ❌ 级联失败 | InFailedSqlTransaction |
|
||||
| DWS_FINANCE_DISCOUNT_DETAIL | ❌ 级联失败 | InFailedSqlTransaction |
|
||||
| DWS_WINBACK_INDEX | ❌ 级联失败 | InFailedSqlTransaction |
|
||||
| DWS_NEWCONV_INDEX | ❌ 级联失败 | InFailedSqlTransaction |
|
||||
| DWS_RELATION_INDEX | ❌ 级联失败 | InFailedSqlTransaction |
|
||||
|
||||
## 总结
|
||||
|
||||
- 14/19 任务成功完成
|
||||
- 5/19 任务因 InFailedSqlTransaction 级联失败
|
||||
- 级联失败根因: `dim_assistant_ex` 和 `dim_member_card_account_ex` 中存在非法日期值 (year=-1),导致事务进入失败状态
|
||||
- 这是数据质量问题,不是代码 BUG — 需要在 DWD 装载时对日期字段做容错处理
|
||||
|
||||
## 与 v6(上次最好成绩)对比
|
||||
|
||||
| 指标 | v6 | v8 |
|
||||
|------|----|----|
|
||||
| 耗时 | 29m26s | 1m24s |
|
||||
| 成功任务 | 11/19 | 14/19 |
|
||||
| 失败任务 | 8/19 | 5/19 |
|
||||
| DWD 装载 | 部分 dim 失败 | 39/41 表成功 |
|
||||
| 新增成功 | — | DWS_FINANCE_DAILY, DWS_FINANCE_RECHARGE, DWS_GOODS_STOCK_* |
|
||||
Reference in New Issue
Block a user